01背景问题
读懂一句话,为什么一定要排队?
想象你和同学一起翻译一句话。读到“它”时,你可能需要回头看前面的名词;理解一个动作时,也可能需要参考句末的信息。词的含义常常依赖上下文,而不只是它旁边的词。
论文关注的一个瓶颈是:循环神经网络通常沿序列逐步计算,后一个位置依赖前一个位置的状态,因此单个样本内的计算不容易完全并行。距离很远的信息,也要经过多次传递。
把“依次传话”换成“直接交流”
Transformer 用自注意力让一个位置直接参考其他位置。可以把它想成同学们同时摊开整句话:每个人根据自己的问题,挑选值得参考的信息。这个比喻帮助理解信息流;模型实际处理的是向量,不是人的阅读策略。
这篇论文的突破,是用注意力替代序列建模中的循环和卷积结构;注意力机制本身在此之前已经存在。
依据:原论文 §1–2:研究动机与背景。
02核心机制
注意力,就是有选择地汇总信息
选一个词,观察它如何给其他位置分配权重;再试试遮住右侧位置。
先选择一个词,把它作为当前查询 Q。
“小猫”把多少注意力分给每个位置?
这些权重之和为 100%(显示值有四舍五入)。接下来,模型按这些比例混合各位置的 V 向量,得到当前位置的新表示。
Q、K、V 各自做什么?
- Q · Query:当前位置用于发起查询的向量,可以类比“我需要什么信息”。
- K · Key:每个位置用于匹配查询的向量,可以类比“我有哪些可供匹配的特征”。
- V · Value:最终被汇总的信息向量。匹配程度决定取多少,内容来自 V。
自注意力中的 Q、K、V 都由同一序列的表示分别投影得到。先计算 Q 与 K 的点积,再按维度缩放、经 softmax 转成权重,最后对 V 加权求和。
为什么还要“多头”?
只做一次汇总,可能把不同关系混在一起。多头注意力使用多组学到的投影,分别计算,再把结果拼接并投影。不同头可以捕捉不同关系,但并不是预先指定某个头只能看语法、另一个只能看指代。
03模型结构
一边理解输入,一边生成输出
原论文提出的是编码器—解码器结构,主要用于机器翻译。下面按信息流方向简化展示。
编码器
每个子层都有残差连接与层归一化。
解码器
两个容易漏掉的细节
位置信息需要补进去。自注意力本身没有循环带来的先后顺序,论文把位置编码加到词向量上,让模型利用序列顺序。
训练并行,不等于生成时同时输出整句。训练时,右移的目标序列配合因果遮罩,可以同时计算多个位置的预测;推理时,这个自回归解码器仍然逐步生成后续词。
04实验与边界
更好的翻译结果,更容易并行的训练
论文在 WMT 2014 机器翻译任务上验证这套结构。下面展示英语到德语任务的测试结果,分数来自原论文表 2;BLEU 衡量译文与参考译文的匹配程度,不能当作通用智能分数。
8 张 P100 GPU
训练约 12 小时
8 张 P100 GPU
训练约 3.5 天
训练时长依据 §5.2,属于论文当时的硬件与实验设置。查看原论文 §6.1 与表 2。
读完后,记住这三个边界
- 标题不表示网络里只有注意力。模型仍包含前馈网络、词嵌入、位置编码、残差连接和归一化。
- 直接交流也有代价。标准全局自注意力需要考虑位置两两之间的关系,注意力矩阵大小随序列长度平方增长。长输入的成本依然是问题。
- 论文验证的是具体任务。翻译成绩支持这种架构的有效性,并不直接证明它具有人类式理解,也不证明注意力权重就是完整的推理解释。
最值得带走的思路:先让相关信息高效地相遇,再学习怎样组合它们。