各位读者,今天咱们把茶泡浓一点,专讲一篇几乎重写了当代序列建模工具箱的论文:Google 团队 2017 年的《Attention Is All You Need》。它提出完全基于注意力机制的 Transformer 架构,不再把循环神经网络或卷积当作主骨架。后头的大规模预训练语言模型,很多都站在这篇工作的肩膀上;但越是影响巨大,越要把论文真正主张过的边界讲清楚,免得把后来的工程习惯倒灌成 2017 年的原文结论。
一、旧世界的瓶颈:循环很强,却不好“摊开算”
在 Transformer 之前,机器翻译等序列到序列任务的主流路线,是编码器—解码器结构:编码器把源语言句子压成隐表示,解码器逐步生成目标语言,中间常常再加一层注意力,让解码器在每一步去“看”源端不同位置。骨干则大量使用 LSTM、GRU 一类循环网络。
循环模型擅长维护随时间更新的状态,但也带来两个工程与优化上的硬约束。第一,时间步之间存在串行依赖:算第 $t$ 步通常要先有第 $t-1$ 步,训练时沿序列长度方向的并行度受限,数据再多、卡再多,也难把“逐步递推”完全摊平。第二,相隔很远的词元之间,信息往往要经过一长串逐步传递;虽然门控机制改善了梯度流,长距离依赖仍然可能吃力。卷积路线能提高局部并行,但要覆盖很长依赖,往往需要很深的堆叠或很大的感受野。
于是问题变得很具体:能不能保留“任意位置互相看见”的能力,同时去掉逐步递推?注意力机制其实已经在编码器—解码器里证明过价值;Transformer 的跳跃在于——把注意力升级成主架构。
二、缩放点积注意力与多头
设查询、键、值矩阵为 $Q,K,V$,键的维度为 $d_k$。缩放点积注意力写为:
$$\mathrm{Attention}(Q,K,V)=\mathrm{softmax}\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V$$
除以 $\sqrt{d_k}$,是为了在维度升高时抑制点积幅度,降低 softmax 过早饱和的风险。单头之外,论文把表示投影到多个子空间分别做注意力,再拼接并线性变换回去,称为多头注意力。直观教学里常说“几双眼睛看不同关系”,这只是比喻:每头具体编码了句法、指代还是别的模式,要用分析实验说话,不能当作定理。
自注意力使任意两个位置之间的交互路径变短,这是它捕捉长距离依赖的重要原因之一。代价同样直白:对长度 $n$ 的序列,朴素实现里注意力权重常具有 $O(n^2)$ 量级的存储与计算(相对特征维度另计)。因此“能看见全序列”与“长上下文很贵”是一枚硬币的两面,也是后来稀疏注意力、线性注意力、分块与缓存优化等研究的动机。
三、没有循环以后,位置信息从哪里来?
循环网络的状态推进本身携带顺序;纯自注意力(在无额外位置信号、且无因果掩码的设定下)对置换更不敏感。Transformer 因此把位置编码加到词嵌入上。原论文采用正弦与余弦形式的固定位置编码,并讨论了可学习位置嵌入等替代。关键点不在于背公式,而在于:顺序必须被显式注入;不同位置方案会影响模型外推到训练时未见过的长度——这是后续长上下文研究反复面对的问题,不是 2017 论文已经一次性解决的终点。
四、编码器、解码器与并行训练
原论文配置里,编码器与解码器各堆叠 $N=6$ 层。编码器每层主要是:多头自注意力、位置相关的前馈网络,并配合残差连接与层归一化。解码器类似,但多了两类机制:其一,掩码自注意力,保证生成第 $i$ 个词时看不到未来位置;其二,编码器—解码器注意力,用解码器状态去查询编码器输出,完成对齐。
相对逐步 RNN,编码器侧自注意力可以在序列位置维度上更好并行,这显著改变了“同样算力一天能跑多少 token”的账本。论文在 WMT 2014 英德与英法翻译上报告了具有竞争力的 BLEU,并强调训练更可并行、墙钟时间更有优势。读结果时请记住:那是特定数据、特定训练预算与对照基线下的证据,不是对一切序列任务的无条件排名。
五、局限:它证明了什么,又没证明什么?
Transformer 证明了“只靠注意力与前馈”可以构成强大的序列转换模型,并打开了大规模并行训练的空间。它没有证明:注意力可以无条件取代一切归纳偏置;二次复杂度在任意长上下文都可忽略;或者 2017 年的 encoder–decoder 机器翻译架构已经等于后来所有 GPT 式只解码器模型。只解码器的自回归预训练是后续路线选择;把 ChatGPT 时代的全部习惯写成 Vaswani 等人的原话,是时间线错位。
另外,残差与层归一化在 Transformer 里同样关键——这与 ResNet 的工程直觉相通,但注意力机制本身回答的是另一类问题。三章合读时,建议把“深度可训练性”“序列并行交互”“连续时间建模”分成三条线索,而不是争一个武林盟主。
七、把公式放到翻译流水线里看一眼
训练时,编码器一次吃进整句源语言词元(含位置编码),多层自注意力让每个位置聚合全局上下文;解码器则在已生成前缀上做掩码自注意力,并用交叉注意力读取编码器。推理阶段通常自回归:每步把新词并入前缀再算下一词。教学演示里常画“词与词之间的连线”,那是注意力权重的可视化直觉,不代表模型内部一定存了一张人类可读的句法树。
原论文还报告了将 Transformer 用于英语成分句法分析等任务的迁移实验,用以支持“该架构不止翻译”这一主张。迁移成功不等于万能:不同任务的数据规模、输出结构约束与评估指标都会改变结论。读者若只记住 BLEU 数字而忽略设定,容易产生“注意力一出,旧模型全废”的错觉。
八、常见误解清单(建议对照原文自查)
- 误解:Transformer 发明了注意力。更正:注意力在此前编码器—解码器中已广泛使用;贡献是以注意力为主干并去掉循环/卷积依赖。
- 误解:多头一定分别学到可解释的语言学角色。更正:可能出现可解释模式,但需要分析,不是定义保证。
- 误解:二次复杂度无关紧要。更正:长上下文下计算与显存压力是真实瓶颈,也是后续大量工作的出发点。
- 误解:2017 架构已经等于今天的对话大模型。更正:预训练目标、只解码器结构、对齐与工具使用等是后继系统工程。
九、给下一章读者的衔接
若你刚读完 ResNet,会注意到 Transformer 层同样依赖残差与归一化来稳定深层堆叠;若你接着读 Neural ODE,会看到另一种“层”的想象——连续时间。若你读 Hinton 时间线,会明白:没有长期的表征学习与大规模监督数据传统,单靠一个架构跳跃也撑不起后来的生态。架构是工具,生态是条件。
最后用一句可核对的话收束:Transformer 用自注意力与位置编码构造了可高度并行的序列转换器,并在机器翻译基准上给出强证据;它的代价与边界(二次注意力、位置外推、任务设定)同样写在后续研究的问题清单上。想核对细节,请直接打开文末 arXiv 链接,对照第 3 节公式与第 4–6 节实验表,而不是只依赖任何二手复述——包括本站。
十、缩放为什么出现在分母:一个不算证明但好用的直觉
若 $Q,K$ 的分量近似独立且方差为常数,则点积 $q\cdot k$ 的方差会随 $d_k$ 增大。方差过大时,softmax 更容易接近 one-hot,梯度变小,学习变钝。除以 $\sqrt{d_k}$ 是把尺度拉回更温和的区域。这是论文给出的动机说明;真正训练中还有初始化、学习率与层归一化共同作用,不要把单一因子神化。
多头则把 $d_{\mathrm{model}}$ 切开成若干子空间。总计算量与单头大矩阵乘法可设计得同阶,同时允许不同头关注不同位置模式。实现上,训练框架常把多头变成一次批量矩阵乘,这是工程优化,不改变数学定义。
若你只做翻译课设,可以从“单头 + 正弦位置编码 + 小 $N$”起步,先跑通损失下降,再加多头与标签平滑等原论文技巧。若目标是理解现代大模型,请额外阅读只解码器语言模型目标(下一预测词)与上下文长度外推文献——那是另一张地图,本站后续批次再写。
十一、小结
Transformer 用缩放点积注意力、多头机制、位置编码与编码器—解码器堆叠,证明可以去掉循环主骨干仍获得强翻译性能,并显著改善训练并行。记住它的二次代价与位置外推问题,才不会在长上下文时代重复踩坑。下一章我们转换视角,看更长尺度上的人物与范式变迁。