《Attention Is All You Need》技术精读:Transformer 架构、缩放点积注意力与多头机制详解(基于 ppt-master 论文精读示例工程)
本文整理自 ppt-master 开源仓库中
ppt169_attention_is_all_you_need示例工程的主讲解稿 notes/total.md。该示例是一套 16 页、16:9 原生幻灯片的论文精读(paper deep-read),把 Vaswani 等人 2017 年发表于 NeurIPS 的《Attention Is All You Need》按“动机 → 架构 → 注意力机制 → 训练与实验 → 影响”拆成 16 个可独立讲述的技术主题。读完本文,你将完整掌握 Transformer 中每一个组件的设计逻辑与数学形式:缩放点积注意力、多头注意力、位置编码、复杂度与路径长度权衡,以及论文表 1~表 3 背后的训练设置、结果与消融结论;同时你还会知道这些内容在仓库中分别对应哪些讲解稿、最终 SVG 与可导出的 PPTX 文件,方便按图索骥式地继续深挖。
为什么要精读这篇论文:一个“更简单、更强、更省”的模型
《Attention Is All You Need》是过去十年机器学习领域影响力最大的单篇论文之一。作者团队(Vaswani 与七位合著者,来自 Google Brain、Google Research 与多伦多大学)的论点本身就是论文标题:放弃循环(recurrence)与卷积(convolution),只使用注意力(attention),就能得到一个比此前一切模型都更容易并行、训练成本更低、在机器翻译上效果更好的模型。
为什么“注意力就是一切”的主张能够在 2017 年站稳脚跟?讲解稿 02_why_it_matters(对应 notes/02_why_it_matters.md 与 svg_final/02_why_it_matters.svg,页面采用 KPI 卡片布局)给出了四组核心数字:
| 指标 | 数值 | 含义 |
|---|---|---|
| WMT 2014 英→德 BLEU | 28.4(big 模型,单模型) | 超过此前最佳集成模型(ensemble)2 个整 BLEU 点 |
| WMT 2014 英→法 BLEU | 41.8(单模型) | 刷新当时单模型 SOTA |
| 训练成本 | 8 张 P100 GPU、约 3.5 天 | 只是强基线模型训练成本的零头 |
| 结构依赖 | 0 循环、0 卷积 | 完全由注意力与前馈层构成 |
在当时的机器翻译榜单上,“单模型超过此前的最优集成”和“训练更快”几乎不可能同时出现,而这篇论文两者都做到了。理解这一点,是进入架构细节之前最重要的“心理预设”:论文想要证明的不是某个 trick,而是注意力本身可以作为序列建模的完整骨干(backbone)。仓库中该页的最终幻灯片将这四个数字做成一张“结果总览”看板,正文取意“Quality up, cost down, parallelization unlocked”,正是对论文主张最凝练的概括。
2017 年的序列建模处境:从链式 RNN,到卷积局部场,再到注意力网格
要理解论文的设计动机,需要先回到 2017 年序列建模的默认技术栈。
当时的主力是循环网络(RNN、LSTM、GRU)。它们按时间步逐步计算,表达能力足够强,但天生串行——每个时刻的隐状态依赖上一个时刻,导致单个训练样本内部无法并行。卷积类替代方案(如 ByteNet、ConvS2S)可以并行计算,代价是相距较远的位置之间的信息必须“逐层穿越”,路径长度随距离线性或对数增长,远距离依赖仍然难学。
自注意力(self-attention)则完全不同:任意两个位置之间只需要一次“跳跃”,计算复杂度是常数级别。讲解稿用一个直观的画面描述这种演化:从一条首尾相接的“链”(chain),到一块局部感受野式的“场”(local field),再到任意两点直连的“全连接网格”(fully connected mesh)——Transformer 押注的正是最后这种网格结构。该主题对应的页面是 03_sequence_evolution,成品见 svg_final/03_sequence_evolution.svg。
论文想移除的三个具体约束
讲解稿 04_rnn_cnn_limits 把作者试图撬动的约束归纳为三条(对应 notes/04_rnn_cnn_limits.md 与 svg_final/04_rnn_cnn_limits.svg,页面采用三根纵向 pillar 并列布局):
- 顺序瓶颈(sequential bottleneck):RNN 中
h_t依赖h_{t-1},因此单个样本内部无法并行化; - 长距离路径长度(long-range path length):相隔很远的 token 需要经过大量中间运算才能建立关联,学习长程依赖变得困难;
- 内存天花板(memory ceiling):长序列会迅速吃光 GPU 显存,进而压住 batch size 与吞吐。
Transformer 的对策是一次性移除整个循环/卷积骨干,改用注意力。这三条约束在后续“复杂度对照”一节会有对应的量化表达(表 1),届时可以回看:作者针对的不只是速度,而是“可并行性”“信息通路长度”与“算力利用率”三个结构性指标。
Transformer 整体架构:Encoder–Decoder 栈
论文 Figure 1(即讲解稿第 5 页的主图)给出了完整的架构蓝图。下图正是仓库中该页使用的论文原图(images/attention_p3_0.png):
读图应从下往上:
- 输入端:源序列与目标序列都以词嵌入(embedding)进入模型,并各自叠加一个正弦式位置编码(sinusoidal positional encoding);
- Encoder(左侧):由 6 层完全相同(identical)的结构堆叠而成,每层包含两个子层——多头自注意力 + 逐位置前馈网络,每个子层外面都包裹一层 “Add & Norm”(残差 + 层归一化);
- Decoder(右侧):同样是 6 层,但插入了第三个子层——回头“读取”编码器输出的 Encoder–Decoder 注意力;同时它的自注意力被掩码(masked)遮住,确保解码时不会偷看未来的 token;
- 输出端:最后一层 Linear + Softmax,把特征投影为下一个 token 的概率分布。
讲解稿特别点明:这个骨架与传统的 seq2seq 模型并无本质差异——真正新颖的是填进这些框里的东西。整体架构总览对应页面 05_architecture_overview(notes/05_architecture_overview.md、svg_final/05_architecture_overview.svg)。仓库的 design_spec.md 显示该页采用“原图浮于留白 + 右侧编号热点图例”的版式,五条图例自上而下分别是:输入嵌入与位置编码、N× Encoder 块、N× Decoder 块、Add & Norm 包裹、末端的 Linear + Softmax。
Encoder 与 Decoder:同一骨架上的三处不对称
把 Encoder 和 Decoder 并排对比(对应页面 06_encoder_decoder,成品 svg_final/06_encoder_decoder.svg 采用左右对照两栏):
- Encoder 每层两个子层:多头自注意力 → 逐位置前馈网络;
- Decoder 每层三个子层:掩码多头自注意力 → Encoder–Decoder 注意力 → 前馈网络;
- 每个子层的公共“包装”:输出 =
LayerNorm( x + Sublayer(x) ),即经典的残差连接 + 层归一化; - 维度约定:所有子层与嵌入都输出 512 维向量(
d_model = 512),残差相加才有良好定义。
Decododer 一侧存在三处不对称,理解它们就理解了 seq2seq 的条件生成本质:
- 多出的第三个子层——它专门负责让解码端“看到”编码端信息;
- 因果掩码(causal mask)——自注意力被限制成只允许位置
i关注位置≤ i,从而保住自回归(auto-regressive)性质; - 输出嵌入右移一位(output embedding shifted right by one position)——保证每一步解码预测的都是“下一个” token。
这三处不对称与编码器的对称结构合在一起,构成了标准的 encoder–decoder 条件语言模型范式。
缩放点积注意力:注意力的本质是加权平均
注意力是整篇论文的心脏,讲解稿 07_scaled_dot_product(notes/07_scaled_dot_product.md)用最朴素的语言把它讲透:注意力无非是一次“加权平均”。输入是三张矩阵——查询 Q、键 K、值 V,计算过程四步:
- 用每个 query 与每个 key 做点积,得到“相关性分数”;
- 除以键维度
d_k的平方根进行缩放; - 按行做 softmax,归一化成注意力权重;
- 用权重去加权求和 V,得到输出。
公式形式(论文 §3.2.1 式 (1),该页以公式图形式呈现,manifest 见 images/formula_manifest.json):
Attention(Q, K, V) = softmax( QKᵀ / √d_k ) · V
为什么必须除以 √d_k 缩放? 讲解稿给出了精确解释:当键维度较大时,点积的数值会随维度增大而“放大”,把 softmax 推入梯度极小(几乎饱和)的区域,导致训练信号消失。除以 √d_k 正是为了抵消这种放大。一旦拿到权重,输出就是值向量的加权平均——注意力机制的全部含义到此结束,没有更多玄机。
多头注意力:并行子空间,代价几乎不变
单次注意力只能在一个表示空间内建模相关性,多头注意力(对应页面 08_multi_head_attention)则是下一步升级:不把注意力作用在完整 512 维向量上,而是把 Q、K、V 投影到 h = 8 个相互独立的头,每个头只在 64 维子空间上做缩放点积注意力(d_k = d_v = d_model / h = 64)。这些投影是可学习的,因此每个头可以专门建模一种关系类型;八个头并行运行后,把输出拼接起来,再用最后一个线性层 W^O 投影回 512 维。
MultiHead(Q, K, V) = Concat(head₁, …, head_h) · W^O head_i = Attention( Q·Wᵢᑫ, K·Wᵢᴷ, V·Wᵢⱽ )
从论文 Figure 2 可以直观看到这种“多头 → 各自缩放点积注意力 → 拼接 → 输出线性层”的流程,下图是仓库 images/attention_p4_1.png 保存的论文原图:
多头设计的精妙之处在于算力开销几乎与单一全维度注意力相当,却让模型获得了“在不同表示子空间、不同位置之间同时建立多种关系”的能力。这正是后来的 Transformer 系模型能同时捕捉语法、指代、长程语义等多种关系的起点。
一个机制、三种角色
同一套注意力函数在 Transformer 中出现三次(讲解稿 09_three_uses,见 svg_final/09_three_uses.svg,三根并列 pillar 分别对应三处用途):
| 角色 | Q 的来源 | K、V 的来源 | 作用 |
|---|---|---|---|
| Encoder 自注意力 | 上一层 Encoder 输出 | 上一层 Encoder 输出 | 源序列每个位置彼此任意交互 |
| Decoder 掩码自注意力 | 上一层 Decoder 输出 | 上一层 Decoder 输出 | 在 softmax 前把非法未来位置置为 −∞,使位置 i 只能关注 ≤ i,保住自回归 |
| Encoder–Decoder 注意力 | Decoder | Encoder 输出 | 每个解码位置从整条源序列检索相关信息(即经典 seq2seq attention 角色) |
三点之间只有“注意力掩码要不要开”与“K、V 取自哪一侧”的差别,机制本身完全复用——这就是论文标题“Attention Is All You Need”在结构层面的直接体现:一个机制,三种角色(one mechanism, three roles)。
层内支撑组件:FFN、残差与层归一化
每一层里的“配角”(讲解稿 10_ffn_residual_layernorm)其实是三个朴素小思想:
- 逐位置前馈网络(position-wise FFN):两个线性层中间夹一个 ReLU,内层维度 2048;逐位置、完全相同地应用,等价于一个 1×1 卷积式的共享变换;
- 残差连接(residual):把子层输入加回输出(
x + Sublayer(x)),保证梯度在深层堆叠中仍能顺畅回流; - 层归一化(LayerNorm):沿特征维做标准化,稳定深层训练。
三者组合起来,每个子层的输出都满足统一模式 LayerNorm( x + Sublayer(x) )。讲解稿特别强调:这三样东西单独拿出来都算不上新发明,但把它们按“围绕注意力组合”的方式拼装起来,才是架构能在深度下保持可训练的原因。该页布局图见 svg_final/10_ffn_residual_layernorm.svg,采用“子层包装容器 + 组件卡片”的模块组合式表达。
位置编码:把顺序“注入”而非“学习”
因为没有循环也没有卷积,模型自身不具备任何内置的 token 顺序概念。讲解稿 11_positional_encoding(svg_final/11_positional_encoding.svg)介绍了论文恢复顺序的做法:向每个输入嵌入上叠加一个确定性的正弦式位置编码。偶数维用正弦,奇数维用余弦,波长从 2π 到 10000 × 2π 构成几何级数:
PE(pos, 2i) = sin( pos / 10000^(2i/d_model) ) PE(pos, 2i+1) = cos( pos / 10000^(2i/d_model) )
这个设计有一个很漂亮的性质:对任意固定偏移 k,位置 pos + k 的编码可以写成位置 pos 编码的线性函数——因此模型可以借由简单的线性组合,轻松学会“按相对位置”做注意力。换言之,顺序是被“注入”进去的,而不是被“学习”出来的,这既省去了学习顺序表示的参数,也让位置信息对训练中未见过的序列长度具备一定的外推能力。
复杂度对照(论文表 1):自注意力的最有力论据
讲解稿 12_complexity_table(svg_final/12_complexity_table.svg)指出,论文表 1 是全篇对自注意力最有力的论证。下表按行复现其核心对比:
| 层类型 | 每层计算复杂度 | 顺序操作数 | 两点间最大路径长度 |
|---|---|---|---|
| 自注意力(Self-Attention) | O(n²·d) | O(1) | O(1) |
| 循环网络(Recurrent) | O(n·d²) | O(n) | O(n) |
| 卷积(Convolutional) | O(k·n·d²) | O(1) | O(log_k n) |
| 受限自注意力(restricted, 窗口 r) | O(r·n·d) | O(1) | O(n/r) |
读这张表有两个要点:
- 自注意力多花的是一次性代价,买到的是“任意两位置距离恒为 1”。它付出的每层复杂度是 O(n²·d),但换来任意两个位置之间恰好相隔一次运算——长程依赖从“需要跨越 O(n) 个中间状态”变成“一步直达”;
- 对典型的 NLP 工作负载(序列长度 n 小于表示维度 d)而言,自注意力实际比循环更快。这一点常被误解——O(n²·d) 听起来吓人,但只有当序列长到超过向量维度时,平方项才会真正成为瓶颈,而当时 NLP 的典型设置远未到达这一区间。
常数级路径长度让长程依赖“更易学”,这是后面几乎所有 Transformer 应用(长文档、多模态、代码、图像序列化)受益的基础属性。
训练设置:8 张 P100 如何跑出 12 小时 / 3.5 天
讲解稿 13_training_setup 给出了可复现的训练配方(该页以 KPI 卡片展示,见 svg_final/13_training_setup.svg)。其中 “base 12 小时、big 3.5 天、同一台 8×P100 机器” 与“约 25,000 源 token + 25,000 目标 token 每批”等关键超参在仓库 design_spec.md 的第 13 页内容大纲中也有记录:
| 配置项 | 取值 | 说明 |
|---|---|---|
| 硬件 | 8× NVIDIA P100(单机) | base 模型约 12 小时 / 100k 步;big 模型约 3.5 天 / 300k 步 |
| 批处理 | 每批约 25k 源 token + 25k 目标 token | 按相近序列长度分组(batching by sequence length)以减小填充浪费 |
| 优化器 | Adam(β₁=0.9,β₂=0.98,ε=1e-9) | 注意 β₂ 被特意提到 0.98 |
| 学习率 | 前 4000 步线性 warmup,之后按 1/√step 衰减 | 自定义调度,与“大 β₂”配合稳定训练 |
| Dropout | 0.1 | 施加于每个子层输出、以及“嵌入 + 位置编码”之和 |
| Label smoothing | 0.1 | 软标签正则化 |
一个值得留意的细节是:论文对 batch 做了按序列长度分组的处理,这在当时是提升吞吐的常见工程技巧,其背后逻辑正是第 4 页提到的“内存天花板”——同一批内序列长短差异越少,GPU 显存与算力的浪费就越少。
实验结果(论文表 2)与消融结论(论文表 3)
讲解稿 14_results 给出的头条结果(svg_final/14_results.svg):
- Transformer big:英→德 28.4 BLEU,作为单模型超过此前最优集成模型 2 个整 BLEU 点;
- 英→法 41.8 BLEU,新的单模型 SOTA;
- 全程训练浮点运算量约 2.3 × 10¹⁹ FLOPs,明显低于多数强基线;
- 更值得注意的是:仅训练 12 小时的 base 模型,就已经超过当时几乎所有已发表模型。
“质量更高 + 训练成本更低”的组合,才是这篇论文当年如此掷地有声的原因。这一页对应 15_ablations(svg_final/15_ablations.svg)的消融变体研究(论文表 3)则给出五条值得记住的工程结论:
- 头数存在甜点区:单头(1 head)相比 8 头约损失 0.9 BLEU;但盲目加到 32 头同样会退化——不是越多越好;
- 键维度 d_k 比值维度 d_v 更关键:d_k 直接决定“谁和谁兼容”的打分难度,削减 d_k 比削减 d_v 更伤质量;
- 更大更深单调提升:扩大
d_model与层深都能一致地改进 BLEU,说明该架构对容量具备良好的单调扩展性; - Dropout 不可或缺:即使只有 0.1,移除它也会损失约 0.5~1.0 个整 BLEU 点;
- Label smoothing 轻微伤害困惑度(perplexity)却提升 BLEU:这提醒工程实践者——要面向最终上线的评测指标做优化,而不是中间指标。
结语:从一篇论文到一整代模型
讲解稿 16_conclusion(svg_final/16_conclusion.svg)把这篇文章的历史坐标讲得很清楚:这篇 2017 年的论文后来成为现代机器学习中最具后果的架构思想之一——Transformer 变成了 BERT、GPT、T5、Vision Transformer、AlphaFold、CLIP 乃至今天几乎所有大语言模型的底层基座。“只用注意力、去掉循环与卷积”这一核心洞见,被证明是比作者们最初预想更普适的归纳偏置,其适用范围远超机器翻译,覆盖了文本、视觉、蛋白质序列等几乎每一个我们处理信号的模态。一句话总结:一篇论文,开启了一整代模型。
附录:这套精读内容在仓库中的落地形态与文件索引
本文整理自的关联文档 notes/total.md 本身是该示例工程在 README.md 中所定义的 16 页(16:9)论文精读幻灯片的讲解稿总稿。按仓库约定,notes/ 下每个分页一个 md 文件、svg_output/ 存原始 SVG 输出、svg_final/ 存定稿 SVG、exports/ 存导出的 PPTX;内容规格与设计令牌分别锁定在 design_spec.md 与 spec_lock.md 中。本文每一节都可以沿下表继续溯源到对应讲解稿与最终 SVG:
| 页 | 主题(对应本文章节) | 分页讲解稿 | 最终 SVG(svg_final/) | | -- | -------------------- | ---------- | ---------------------- | | 01 | 封面(论文信息与论点) | notes/01_cover.md | 01_cover.svg | | 02 | 为什么重要(四组 KPI) | notes/02_why_it_matters.md | 02_why_it_matters.svg | | 03 | 序列建模演化:RNN → CNN → 自注意力 | notes/03_sequence_evolution.md | 03_sequence_evolution.svg | | 04 | RNN/CNN 的三个约束 | notes/04_rnn_cnn_limits.md | 04_rnn_cnn_limits.svg | | 05 | 架构总览(论文 Figure 1) | notes/05_architecture_overview.md | 05_architecture_overview.svg | | 06 | Encoder vs Decoder | notes/06_encoder_decoder.md | 06_encoder_decoder.svg | | 07 | 缩放点积注意力(式 (1)) | notes/07_scaled_dot_product.md | 07_scaled_dot_product.svg | | 08 | 多头注意力(论文 Figure 2) | notes/08_multi_head_attention.md | 08_multi_head_attention.svg | | 09 | 注意力的三种用途 | notes/09_three_uses.md | 09_three_uses.svg | | 10 | FFN / 残差 / 层归一化 | notes/10_ffn_residual_layernorm.md | 10_ffn_residual_layernorm.svg | | 11 | 位置编码(式 (3)) | notes/11_positional_encoding.md | 11_positional_encoding.svg | | 12 | 复杂度对照(论文表 1) | notes/12_complexity_table.md | 12_complexity_table.svg | | 13 | 训练设置 | notes/13_training_setup.md | 13_training_setup.svg | | 14 | 结果(论文表 2) | notes/14_results.md | 14_results.svg | | 15 | 消融结论(论文表 3) | notes/15_ablations.md | 15_ablations.svg | | 16 | 结语与影响 | notes/16_conclusion.md | 16_conclusion.svg |
如果你希望以真实可演示的 PowerPoint 形式审阅这套内容,示例工程的导出目录中已经包含一份 attention_is_all_you_need_narrated.pptx。三张关键公式(缩放点积注意力、多头注意力、位置编码)在 images/formula_manifest.json 中有渲染清单;而页面视觉规范(1280×720 画布、#1A365D/#3182CE 主色、正文 20px、Georgia/微软雅黑字体栈等)统一记录在 spec_lock.md 中,可作为想要以同样“学术极简 + blueprint”风格复刻该主题时的直接参照。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





