Loading
它把问题减半,却没有消解它。[CLS] 携带的值范数是内容词元的 0.63 倍——不是论文里那个接近零的数。四层不是十二层。
打开仪器第 6 篇描述了一个问题:在你看到之前,每一行显示的注意力中位数已有 24% 消失进了 [CLS] 与 [SEP],最坏情况 95%。界面对此做了披露。披露是诚实的,但那是道歉,不是修复。
确实存在一个已发表的修复方案。这篇文章讲的是对它的测试,以及答案是否。
关键结论: 从一个词元流向另一个词元的,不是注意力权重,而是权重乘以它所携带的向量——一个吸走巨量权重却几乎什么都不携带的词元,实际上已经把自己关掉了。
Kobayashi 等人,EMNLP 2020,Attention is Not Only a Weight。论点是:一个头的输出是对 j 求和的 α·v——注意力权重乘以 value 向量。只看 α,就忽略了被携带之物的大小。
改为测量 ‖α·v‖,他们的主要发现是:BERT 对特殊词元其实并不重视。 分隔符吸走很大的权重,却携带很小的值范数,因此它们的真实贡献远低于 α 所暗示的。
如果这在这里成立,汇聚就会蒸发,披露标签就可以撤掉,界面也不必再道歉。
项目自己的规则让下一步显而易见:先测量,再动工。并且事先设定放弃条件,好让结果无法在事后被合理化——如果汇聚份额没有坍缩,就放弃这个想法,并把它说出来。
超过 90% 的那一档清空了,中位数减半。最差的一行从 97.7% 降到 83.4%——更好,但仍然不是一张可以不加警示就展示的图。
在仪器真正展示的 110 行上,注意力权重与范数加权度量下的汇聚份额。完整方法见 evidence/ex3-norm-weighted-attention.md。
在仪器真正展示的 110 行上——每个词一行,用它会打开的那个头,并按它实际的方式聚合:
| 注意力 α | 范数加权 ‖α·v‖ | |
|---|---|---|
| 汇聚份额中位数 | 19.9% | 10.0% |
| 最差行 | 97.7% | 83.4% |
| 超过 50% 的行 | 25 | 12 |
| 超过 90% 的行 | 8 | 0 |
中位数减半。超过 90% 的那一档彻底清空。
而最差的一行,从 97.7% 变成 83.4%。
正是这个数字定下了结论。当初的卖点是"切换镜头时,汇聚会肉眼可见地蒸发"。它没有蒸发,只是从灾难性变成了糟糕。仍有十二行损失超过一半质量,所以披露要留、警告要留、汇聚标记要留——而现在还多了一个需要解释的切换开关。
还有一点值得说明,因为它对这个想法不利:110 行中有 31 行变得更差,相对幅度最高达 26%。
前提在方向上成立,在数量上失败,而一次测量解释了一切。
在 14 个句子 × 16 个头上,特殊词元的值范数相对于平均内容词元:
| 词元 | 中位数 | 低于 1.0 |
|---|---|---|
[CLS] | 0.63× | 224 中的 196 |
[SEP] | 0.70× | 224 中的 147 |
特殊词元确实携带更小的值。但只小约 0.6 倍——不是 Kobayashi 在 BERT-base 上报告的那个接近零的数。
0.6 倍的降权救不了一行 95%。 它只能把它降到 73%。这一个比值就是全部结果。
他们的测量是在十二层、768 隐藏维上做的。这里是四层、256 维。这个效应是深度的函数,在这个规模上不迁移。论文没有错,它描述的是一个更大的模型。
两个附带发现。把输出投影也算进来——即 Kobayashi 真正的 f(x),而不只是 ‖v‖——毫无收益:中位数 10.3% 对 10.0%。而且头的选择很稳定,110 行中有 98 行选中同一个头,所以改进来自度量本身,而不是来自躲开那些汇聚严重的头。
否定性结果恰恰是最该被怀疑的那类结论,因为它为"不做事"提供了理由。
先把神谕对 PyTorch 参考重新验证:1.324e-6。然后临时给运行时加装了返回每个头 ‖v‖ 的代码,两个实现在全部 14 个句子上比较——注意力一致到 1.204e-4,‖v‖ 一致到 7.272e-5 相对误差。随后这段加装代码被撤回,没有任何东西进入发布。
在被用于任何新结论之前,这个移植先做了行为验证:复现仓库中已记录的三个数字——the → scissors 0.431 对应 95.2% 汇聚、for → scissors 0.617 占该行的 0.0426、doctor → nurse 0.607。
它还做了变异测试。把所有值范数强制设为 1.0,会逐位复现 α 的数字;把 [CLS] 的范数置零,数字会移动。这说明该度量确实在响应 v,而不是在悄悄重报 α。
第二个镜头依然需要披露标签、依然需要超过 50% 的警告、依然需要汇聚标记——并且会在一个已经承载四条限定说明的面板上,再加一个切换开关和一次协议变更。中位数上的改进是真实的,但对只读一行的人是不可见的。
所以它没有被构建,而这个发现本身就是交付物。"我们拿标准的已发表修复方案在自己的模型上试过,并测量了它值多少"——这句话比一个切换开关更罕见,也更有用。
如果模型将来变大,可以重新打开这个问题。这个效应取决于深度,而现在重做这次测量的成本很低。
下一篇,也是最后一篇:注意力能告诉你什么,又不能告诉你什么。