Loading
句中每一行 rollout 的归一化熵都在 0.935 到 0.971 之间。那是一个披着排名外衣的均匀分布,而它曾是默认视图。
打开仪器如果一个模型有十六个注意力头,那么只展示其中一个,就是一个需要辩护的选择。于是人们自然会想把它们合起来——而且确实有一种已发表的方法可以正经地做到。
注意力 rollout 会把注意力在网络中层层传播:对每一层的头取平均,加上单位矩阵以体现残差连接,重新归一化,然后把各层相乘。结果是一个矩阵,描述信息如何在整个模型中从输入词元流向输出位置。
它有原则、被广泛引用,而且曾是这个项目的默认视图。
在这个模型上,它也在统计意义上与"什么都不展示"无法区分。
关键结论: 从一个近乎均匀的分布算出的排名,仍然是一个排名。它会自信地为你把词排好序,而这个顺序接近任意。
工具是归一化熵。取一行,把它当作概率分布,算出香农熵,再除以 ln(n)。完全均匀的行结果为 1.0,质量越集中越接近 0。
对句子 "Enter an English sentence to inspect how attention differs across heads",每一行 rollout 测得的值都在 0.935 到 0.971 之间。
归一化熵为 1.0 意味着均匀行——什么也没说。Rollout 把所有层与所有头混在一起;在四层模型上,句子里每个词的结果都贴近这个上限。
在同一个词的 rollout 与选中头之间切换。rollout 那一行几乎是平的——各柱之间差别极小。而头的那一行,不用测量你就能看出结构。
上面那张图用的是另一个句子,表现完全一样。在它的九个词上,rollout 的熵始终在 0.952 到 0.973 之间,而 rollout 行的峰值从未超过 1.76 倍均匀。仪器为同样这些词选中的头,则在 3.52 到 6.49 倍均匀之间,熵为 0.443 到 0.799。
以 are 为例,两相对照:
| 视图 | 峰值 | × 均匀 | 熵 |
|---|---|---|---|
| Rollout | 0.141 | 1.27× | 0.963 |
| 头 L1H4 | 0.499 | 4.49× | 0.734 |
1.27 倍均匀的峰值不是一个发现。它意味着在一行九个词里,胜者只比平分多出四分之一,而任何地方的微小变化都会把前三名重新洗牌。
这不是 rollout 的 bug,也不是前向传播的缺陷。这是该方法与浅层模型相遇时一个有据可查的性质。
Rollout 在每一层加上单位矩阵来建模残差流,然后相乘。每一次相乘都会让每个位置与其他所有位置多混合一点。层数足够多之后,乘积趋向于接近均匀——那是随机游走丢失起点的数学特征。
在十二层的模型上,rollout 有足够的深度让结构在混合中存活。在四层上,涂抹的速度超过了信号。方法没有错,只是它被要求去总结一个太短、没什么可总结的过程。
缺陷不在于使用 rollout,而在于默认展示 rollout,并让访客从中读出一个排名。
界面呈现的是一个带三位小数权重的有序列表。这种呈现的一切都在说:"这些词按重要性排好了序。" 读者无从知道这个顺序只比噪声高出一点点。数字是真的——那一行 rollout 确实是这些值——而它们造成的印象是假的。
与上一篇同样的失效模式,只是换了地方:算术正确,呈现误导。
修复方式是去测量一行究竟有多尖锐,并让它决定展示什么。行现在按比值分类:低于 1.6 是平坦,1.6 到 3 是弥散,高于 3 是有选择性。选择会优先挑出对聚焦词给出选择性行的头,并把形状判定一并显示——这样读者就能看到工具在什么时候告诉他们"这一行说得不多"。
Rollout 仍然可用、仍有标注、仍然完全正确。它只是不再默认打开,也不再假装自己是一个排名。
对于开场的那个录制结果,它仍然是诚实的选择,因为那份导出只包含按头平均的 rollout——单个头没有被保存。在那里展示按头视图,等于凭空发明文件里不存在的头。
而且,它仍然是某个没人真正在问的问题的正确答案:在整个网络中(包括残差路径),信息如何从这个输入流向那个输出? 这是一个真问题,也有一套真方法。但它不是点击一个词的访客所问的问题——他们问的是:这个词和什么相连?
让统计量匹配问题,就是可解释性的大部分工作。剩下的部分,是在你手上的统计量回答不了别人问的问题时,承认这一点。
下一篇:当你无法看着答案判断它对不对时,你要怎么测试一个模型?