Transformer 论文解读:不要循环和卷积,注意力一个就够了
论文:Attention Is All You Need(NeurIPS 2017,arXiv<1706>1706>.03762) 作者:Ashish Vaswani、Noam Shazeer、Niki Parmar、Jakob Uszkoreit、Llion Jones、Aidan N. Gomez、Łukasz Kaiser、Illia Polosukhin(Google Brain / Google Research / 多伦多大学) 一句话定位:2017 年那篇”把循环和卷积全扔掉、只留注意力”的论文,是所有现代大语言模型——从 BERT、GPT 到 PaLM,再到 Gemini——共同的”创世纪”。要读 Gemini 的家谱,必须先回到这一页。
一、引言:串行,是那时所有模型的紧箍咒
2017 年之前,机器翻译的主流是 Seq2Seq(序列到序列)模型,骨架是 RNN(循环神经网络)和它的升级版 LSTM(长短期记忆网络)。LSTM 解决了梯度消失问题,让”记住长句子”成为可能,但有一个绕不过去的死结:
RNN 计算第 t 个位置的隐状态 h_t 时,必须依赖前一个位置的 h_{t-1}。这意味着无论你的 GPU 多强,一个句子有 50 个词,就得老老实实串行算 50 步——序列长度直接等于计算深度,训练样本之间无法并行。
当时的注意力机制(Bahdanau 等人 2015 年提出)已经很成熟,但它只是 RNN 的”外挂”:帮助解码器在源句里挑重点词,骨架还是 RNN。也有人尝试用卷积网络(CNN,如 ByteNet、ConvS2S)替换 RNN 来换取并行,但卷积的”感受野”受限,关联两个相距很远的词需要 O(n) 甚至 O(log n) 步才能把信息传过去。
Transformer 的赌注非常激进:干脆不用循环、不用卷积,整个模型只靠注意力(Attention)机制。注意力让每个位置一次性”看到”序列里的所有其他位置,一步到位,而且天然可以并行计算。
二、核心架构:缩放点积注意力与多头注意力
Scaled Dot-Product Attention(缩放点积注意力)。每个输入 token 被映射成三个向量:Q(Query,查询)、K(Key,键)、V(Value,值)。打个比方:Q 是读者的需求,K 是书脊上的书名标签,V 是书的内容。注意力要做的是拿”需求”去和所有”书名标签”匹配,得到权重,再按权重取”内容”。
公式就一行:Attention(Q, K, V) = softmax(QK^T / √d_k) V。Q 和 K 做点积衡量匹配度,除以 √d_k(d_k 是键向量的维度)做缩放——因为维度一大,点积的数值就变大,把 softmax 推进梯度几乎为 0 的饱和区,缩放一下让梯度活着;再 softmax 归一化成权重,最后加权求和 V。
Multi-Head Attention(多头注意力)。一个注意力不够用,就把 Q/K/V 切成 h 份,每个头在低维子空间里独立算一遍注意力,最后拼接起来再线性投影。动机很朴素:单头注意力会把所有信息”平均化”,稀释掉重点;而多个头可以各看各的——有的头盯指代关系,有的头盯句法结构,有的头盯位置邻近性,互不干扰又互相补充。
Transformer 里一共有三种注意力:
- Encoder 自注意力:编码器里每个词看整句所有词,负责理解”这词在句子里的上下文身份”。
- Decoder 掩码自注意力:解码器里每个词只能看自己左边的词(Masked,掩码操作把未来位置置为 −∞),保证预测下一个词时”看不见答案”,不泄漏未来信息。
- 交叉注意力(Cross-Attention):解码器的 Q 去匹配编码器输出的 K/V,让”生成侧”随时查阅”理解侧”。
每个注意力子层和每个前馈子层外面都套一层 Add & Norm(残差连接 + Layer Normalization,层归一化)。残差连接让梯度有”高速通道”直通,层归一化稳定训练。前馈网络(FFN)则是两个线性变换夹一个 ReLU 激活函数,给模型补充非线性表达力。
三、位置编码与完整架构
注意力有个先天的”盲区”:它对位置完全无感——把句子的词序打乱,注意力计算的结果一模一样。所以必须手动注入位置信息,这就是 Positional Encoding(位置编码)。
Transformer 用的是固定公式:偶数维度用 sin、奇数维度用 cos,不同维度频率不同。周期性的编码自带数学结构,让模型不仅能知道”绝对位置”,还能隐式捕捉”相对位置”(比如”往左第 3 个”)。它不需要训练参数,这也是当年一个巧妙的简化。
整个架构一张图:
输出序列(softmax) ▲ Linear ▲ ┌─────────────────────────┐ │ Add & Norm │ │ ▲ │ │ Feed-Forward (FFN) │ │ ▲ │ │ Add & Norm │ │ ▲ │ │ 多头交叉注意力 ◀──── Encoder 的 K、V │ ▲ │ │ 掩码多头自注意力 │ └─────────────────────────┘ ▲ ▲ 位置编码+输入嵌入 位置编码+输出嵌入 (Encoder 堆栈) (Decoder 堆栈)左右各堆 N 层(base 用 6 层)。Encoder 负责理解整句,Decoder 自回归地一个词一个词往外吐。关键收益是彻底并行化:Encoder 整句同时算;Decoder 训练时靠掩码自注意力,用”教师强制”(teacher forcing)一次性算出所有位置的预测,不用等前一个 token 出来再算下一个。这套并行能力正是当年 RNN 给不了的。
四、训练细节:一套被抄了十年的配方
- 数据:WMT 2014 英德(约 4.5M 句对)和英法(约 36M 句对)机器翻译基准。英德用 BPE(字节对编码)词汇表 37K,英法用 word-piece 词汇表 32K。
- 硬件:一台机器、8 张 NVIDIA P100 GPU。base 模型每步 0.4 秒、共 10 万步、约 12 小时;big 模型每步 1.0 秒、共 30 万步、约 3.5 天。
- batch:每个 batch 约 2.5 万个源 token + 2.5 万个目标 token,按近似序列长度分桶打包。
- 优化器:Adam,β1=0.9、β2=0.98、ε=1e-9。
- 学习率:warmup(预热)4000 步——前 4000 步学习率线性上升,之后按步数平方根倒数衰减,即
lr = d_model^(-0.5) · min(step^(-0.5), step·warmup^(-1.5))。 - 正则化:label smoothing(标签平滑)0.1——把 one-hot 硬标签摊成软标签,不让模型对答案过度自信,实测提升 BLEU;dropout 0.1(big 模型用 0.3)。
- 推理:beam search(束搜索),beam=4,长度惩罚 α=0.6。
这套”Adam + warmup + 标签平滑 + 残差 dropout”的配方,之后被 GPT、LLaMA 等一代代大模型几乎原样沿用——这是 2017 年论文里容易被忽视的另一份遗产。
五、评估成绩:28.4 与 41.8 的冲击
两个数字当年足以让全领域改道:
- 英德翻译 28.4 BLEU。超过当时最好的结果(包括集成模型 ensemble)2 分以上;此前 SOTA 是 Google 自家 GNMT+RL 集成模型的 26.30。BLEU 是机器翻译的自动评分指标,分数越高越好,差 1 分都是实打实的质量差距。
- 英法翻译 41.8 BLEU(论文摘要一处写作 41.0,正文表格为 41.8),单模型新纪录,且只用了 3.5 天、8 张 P100。
更有冲击力的是训练成本:base 模型约 3.3×10¹⁸ FLOPs、big 模型约 2.3×10¹⁹ FLOPs,比当时最好的 LSTM 系统小了约一个数量级。又准、又快、又便宜,三个维度同时赢。
论文还顺手验证了泛化能力:把 Transformer 用到英语成分句法分析(constituency parsing)任务,无论数据规模大小都有竞争力——说明它不只是”翻译机”,而是通用序列模型。
六、深远影响:Gemini 家谱的始祖
2018 年是分岔口。BERT 拿走 encoder 半边,做双向理解;GPT 拿走 decoder 半边,做单向生成。预训练 + 微调的范式从此确立,NLP 进入”大模型”时代。
这条血脉一路延伸:GPT-3 把 decoder-only 和”规模出奇迹”推向极致,GLaM、Chinchilla、LLaMA 群雄并起,2022 年 Google 的 PaLM 把密集 Transformer 推到 540B,再到多模态的 Gemini——Gemini 论文里那套 decoder-only 骨架、TPU 上跑的 attention 内核、甚至训练配方的影子,全都出自 2017 年这篇。说 Transformer 是 Gemini 家谱的”始祖”,毫不夸张。
注意力机制本身也成了显学:FlashAttention 让它跑得更快,稀疏注意力、线性注意力降低长序列成本,RoPE、ALiBi 等新式位置编码解决外推问题——全都是在这篇地基上的翻修与加建。
七、结论与局限
结论一句话:注意力机制可以完全独立承担序列建模,RNN 和 CNN 不是必需品。
局限也坦诚:注意力复杂度是 O(n²),序列越长开销越平方级爆炸,长文档当时根本算不动;正弦位置编码的外推性一般,长度超出训练范围后表现掉得明显(这个问题一直到 RoPE 时代才被较好解决);而且 2017 年的范式还是”训练 + 测试”,“预训练”这个关键拼图是 BERT/GPT 补上的——这也是为什么 Transformer 论文当年被视为”更快的翻译机”,而它真正的统治力几年后才被看见。
收尾:我的一点看法
这篇论文在 Gemini 家谱里的地位是”创世纪”。写它的时候,作者们只是想把机器翻译做得更快更好,没人预料到它会统治 NLP 之后整整十年——乃至成为整个生成式 AI 浪潮的地基。
三个细节我每次重读都觉得漂亮。一是 √d_k 缩放:一个看似微不足道的归一化操作,救活了高维下的梯度,这是数学直觉的胜利;二是多头:“一个注意力不够就开八个”,把”平均化”的坏毛病治成了”分工化”的好制度;三是位置编码:一个”模型本来没有顺序感,怎么给它补顺序感”的哲学问题,用一组正弦函数干净利落地解决了。
还有一点很妙:论文标题就是一句宣言——“Attention Is All You Need”。当时听起来像口号,后来被证明是真的:注意力就是全部机制,残差、归一化、FFN、位置编码全是”配件”。后来的事实也证明,最大的革命往往藏在一篇标题狂傲的翻译论文里。
回看 Gemini:从 Transformer 到 Gemini 只隔了六年多,家谱上的每一支——BERT、T5、PaLM——都能追溯回这一页。如果你只读一篇”前传”,读这篇就对了。
附:核心数据速查
模型配置(base / big)
| 项目 | base | big |
|---|---|---|
| 层数 N | 6 | 6 |
| d_model(隐层维度) | 512 | 1024 |
| 注意力头数 h | 8 | 16 |
| d_k / d_v | 64 / 64 | 64 / 64 |
| FFN 隐层 | 2048 | 4096 |
| 参数量 | 6500 万 | 2.13 亿 |
| 训练步数 | 10 万(约 12 小时) | 30 万(约 3.5 天) |
训练配方
- 硬件:8×NVIDIA P100
- batch:约 2.5 万源 token + 2.5 万目标 token / 步
- 优化器:Adam(β1=0.9,β2=0.98,ε=1e-9),warmup 4000 步
- 正则化:label smoothing 0.1;dropout 0.1(base)/ 0.3(big)
- 推理:beam search,beam=4,length penalty α=0.6
- 英德:BPE 词表 37K;英法:word-piece 词表 32K
关键 benchmark
| 任务 | Transformer | 对比 |
|---|---|---|
| WMT14 英德 BLEU | 28.4 | 前 SOTA(GNMT+RL 集成)26.30 |
| WMT14 英法 BLEU | 41.8 | 单模型 SOTA |
| 训练成本(big) | 约 2.3×10¹⁹ FLOPs | 比最佳 LSTM 系统小约一个量级 |
关键概念清单
- attention = 注意力机制(让模型按相关性加权”看”序列各位置)
- Scaled Dot-Product Attention = 缩放点积注意力(核心公式 softmax(QK^T/√d_k)V)
- Multi-Head Attention = 多头注意力(h 个子空间并行,拼接后投影)
- masked attention = 掩码注意力(decoder 防未来信息泄漏)
- cross-attention = 交叉注意力(decoder 查阅 encoder 表示)
- Positional Encoding = 位置编码(正弦函数注入位置信息)
- residual connection = 残差连接(Add & Norm 的 Add)
- Layer Normalization = 层归一化(稳定训练)
- label smoothing = 标签平滑(one-hot 摊成软标签)
- warmup = 学习率预热(前 4000 步线性升温)
- teacher forcing = 教师强制(训练时一次给出所有目标位置)
- BLEU = 机器翻译自动评分指标(越高越好)
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时





