Attention——从时序链到全连接邻接图

RNN 的悲剧不是 hash 桶不够大——是 50 个词共用一条链。

RNN 的问题:单边关系

50 个德语词依次进入 hidden₅₁₂:

词₁ → h₁ → 词₂ → h₂ → 词₃ → h₃ → ... → 词₅₀ → h₅₀ → Decoder

这是单边时序链。词₅₀ 和词₁ 的关系穿过 48 步 tanh 连乘,碾成粉末。RNN 的"关系"只有一条方向:从前到后,衰减殆尽。

在你的 hash 碰撞语言里:RNN 把 50 个词挤进同一个桶——第 1 个词的信息在第 50 个词进入时已被覆盖。Decoder 看到的只有最后一个词的 hash 值。

Attention 的解法:分桶 + 邻接矩阵

Attention 做三件事:

第一步:分桶。 每个词放进自己独立的桶——50 个词 = 50 个独立 hash 桶,互不覆盖。

第二步:建邻接矩阵。 每对词之间计算"关系强度":

       词₁  词₂  词₃  ...  词₅₀
词₁   [ .    .    .        .  ]
词₂   [ .    .    .        .  ]     ← 这就是 QK^T
词₃   [ .    .    .        .  ]     ← 每对词之间的匹配度
...
词₅₀  [ .    .    .        .  ]

QK^T 不是"词与词的连接存在与否",是边权重——每对词的关系有多强。这是全连接的带权图。

第三步:按需查询。 Decoder 每生成一个英文词,就去这个图上问:“谁和我最相关?“邻接矩阵告诉它权重,它按权重把相关德语词的 hash 值拉进来。

多头 = 多重关系网

单头注意力只有一套邻接矩阵——所有关系混在一起。多头并行计算多套独立的邻接矩阵:

头 1:  冠词-名词关系
头 2:  主语-谓语关系
头 3:  介词短语关系
头 4:  时态一致关系
...
头 8:  语义相似性

每个头在自己的子空间(d_k = d_model / num_heads)里独立计算。8 个头 = 8 张并行的邻接矩阵 = 图上的 8 重关系网同时运作

RNN vs Attention:hash 碰撞的根本差异

RNN Attention
桶数 1 个 shared hidden 每个词独立桶
关系类型 单边时序链 全连接邻接矩阵
关系保留 被 tanh 衰减 永远 1.0(残差直通)
多头 多套并行邻接矩阵
碰撞方式 挤——后面的覆盖前面的 查询——Decoder 按需拉取
信息丢失 前部词被时序擦除(BLEU 3.0) 前部词永远可达(预期 BLEU 15+)

Attention 为什么能解放 BLEU

RNN 用了一个桶装 50 个词——前面的被后面的覆盖,BLEU 天花板 3.0。这不是 hash 桶太小——再大的桶也会被时序覆盖破坏。

Attention 给了每个词一个独立的桶。50 个词互不覆盖。Decoder 通过邻接矩阵按需查询——需要哪个词的信息,就用 QK^T 算匹配度,按权重拉取。

信息不再被擦除。BLEU 从 3 跳到 15,不是因为换了更好的 hash 函数,是因为不再需要时序压缩了。

在你的 hash 碰撞框架里的精确位置

RNN 的困境:词之间需要保留关系(图),但只有一个桶(时序链)。图和链不兼容——链上的碰撞破坏图结构。

Attention 的解:把每个词放进独立桶,用邻接矩阵代替链。图结构直接存在邻接矩阵里,不与桶内 hash 碰撞冲突。

翻译 = 图搜索 + hash 碰撞。RNN 碰在图上——链结构破坏关系。Attention 碰在桶里——图结构完好。


Phase 2 CE 基线结果

H=256, E=256, epochs=5, pure Attention decoder(无 pack_padded 加速):

epoch loss BLEU
0 5.73 2.80
1 4.67 3.02
2 4.19 3.27
3 3.86 3.45
4 3.59 3.57

与 Phase 1 纯 RNN 的关键差异

Phase 1 RNN Phase 2 Attention
最佳 BLEU 3.06 (epoch 2) 3.57 (epoch 4)
学习趋势 倒 U——epoch 2 后衰退 持续上升——epoch 4 还在涨
过拟合信号 强(BLEU↓ 同时 loss↓) 弱(BLEU↑ 同时 loss↓)

Attention 改变了学习曲线的形状——RNN 的 teacher forcing 过拟合在 Attention 上被大幅缓解。但 BLEU 绝对值仍远低于预期(10-15),需要更大 H、更多 epoch 或更仔细的模型 debug。

SoftBLEU 对照实验运行中。


Phase 2 Attention 实验运行中。CE baseline 和 SoftBLEU 的 BLEU 数据待补入。


May the Code be with us.


License: GPLv3
本文《SameTime》系列采用 GNU 通用公共许可证第三版 (GNU General Public License v3.0) 协议进行开源发布与分发。允许任何形式的复制、修改和分发,但必须继承相同的开源协议,承认在算力宇宙中所有的迭代与变异。