Transformer 架构详解:从 Attention 机制到行业范式
本文全面解析Transformer:首个完全基于注意力机制的序列转换模型。文章先对比RNN/CNN的不足,再介绍编码器-解码器架构、多头自注意力、Scaled Dot-Product Attention、位置编码与训练细节,最后给出WMT机器翻译实验结果,说明其训练效率与翻译质量优势。
Transformer:完全基于注意力机制的序列转换模型
文章分类:大模型与架构
1. 研究背景与问题动机
在 Transformer 提出之前,主流的序列转换(sequence transduction)模型主要基于复杂的循环神经网络(RNN)或卷积神经网络(CNN),并普遍采用编码器-解码器(encoder-decoder)结构。其中,性能领先的模型还会通过注意力机制(attention mechanism)连接编码器与解码器。
然而,这类模型存在几个根本性问题:
- RNN、LSTM、GRU 等序列模型按时间步串行计算。它们将输入/输出序列的位置与计算时间步对齐,生成隐藏状态 $h_t$ 时必须依赖前一个隐藏状态 $h_{t-1}$。这种固有的顺序性导致训练样本内部难以并行化;当序列变长时,内存限制还会进一步限制 batch 大小,从而影响训练效率。
- CNN 类模型虽可并行计算,但关联两个任意位置信号所需的操作数随距离增长:ConvS2S 中线性增长,ByteNet 中对数增长,这使得学习长距离依赖变得困难。
- 注意力机制此前多与循环/卷积网络结合使用。Transformer 则首次完全抛弃了 RNN 和 CNN,仅依赖自注意力(self-attention)来建模输入与输出之间的全局依赖关系。
实验表明,Transformer 在机器翻译任务上不仅取得了更优的翻译质量,而且更易于并行化、训练时间显著更短。下面将详细介绍其架构设计与核心机制。
2. Transformer 整体架构
图 1:Transformer 模型架构(来源:arXiv 1706.03762)
Transformer 沿用了编码器-解码器框架:
- 编码器(Encoder):将输入符号序列 $(x_1, \dots, x_n)$ 映射为连续表示 $\mathbf{z} = (z_1, \dots, z_n)$。
- 解码器(Decoder):给定 $\mathbf{z}$,以自回归(auto-regressive)方式逐个生成输出符号 $(y_1, \dots, y_m)$,即生成下一步时会利用已生成的符号作为额外输入。
2.1 编码器
编码器由 $N=6$ 层相同的层堆叠而成。每层包含两个子层:
- Multi-Head Self-Attention 子层;
- Position-wise Feed-Forward Network 子层。
每个子层均采用残差连接(residual connection)和层归一化(layer normalization):
$$ \text{LayerNorm}(x + \text{Sublayer}(x)) $$
为了方便残差连接,模型中所有子层以及嵌入层的输出维度统一为 $d_{\text{model}} = 512$。
2.2 解码器
解码器同样由 $N=6$ 层相同的层组成。除了编码器中的两个子层外,解码器还增加了第三个子层:
- Encoder-Decoder Cross Attention:对编码器输出执行多头注意力计算。
此外,解码器中的自注意力子层被修改为掩码自注意力(masked self-attention),以防止当前位置关注到后续位置。结合输出嵌入偏移一个位置的设计,保证位置 $i$ 的预测只能依赖于位置小于 $i$ 的已知输出。
2.3 逐位置前馈网络
每个编码器/解码器层还包含一个逐位置(position-wise)全连接前馈网络:
$$ \text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2 $$
其输入/输出维度为 $d_{\text{model}} = 512$,中间隐藏层维度为 $d_{\text{ff}} = 2048$。
3. 注意力机制:从 Query-Key-Value 到 Scaled Dot-Product
图 2:Scaled Dot-Product Attention(左)与 Multi-Head Attention(右)(来源:arXiv 1706.03762)
注意力函数可以描述为:将 Query 与一组 Key-Value 对映射为输出。输出是 Value 的加权和,权重由 Query 与对应 Key 的兼容性函数决定。在 Transformer 中,这一机制被进一步发展为 Scaled Dot-Product Attention 与 Multi-Head Attention。
3.1 Scaled Dot-Product Attention
Transformer 采用的注意力称为 Scaled Dot-Product Attention。输入包括维度为 $d_k$ 的 Query 和 Key,以及维度为 $d_v$ 的 Value。计算 Query 与所有 Key 的点积,除以 $\sqrt{d_k}$,再经过 softmax 得到 Value 的权重:
$$ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V $$
为什么需要缩放? 当 $d_k$ 较大时,点积的绝对值会变得很大,导致 softmax 进入梯度极小的饱和区域。除以 $\sqrt{d_k}$ 可以有效缓解这一问题。
与加性注意力(additive attention)相比,点积注意力能够借助高度优化的矩阵乘法实现,速度更快、空间效率更高。
3.2 Multi-Head Attention
多头注意力不直接对 $d_{\text{model}}$ 维的 Q、K、V 执行一次注意力,而是将它们通过 $h$ 组不同的可学习线性投影分别映射到 $d_k$、$d_k$、$d_v$ 维,并行执行 $h$ 次注意力计算,最后将结果拼接并再做一次线性投影:
$$ \begin{aligned} \text{MultiHead}(Q, K, V) &= \text{Concat}(\text{head}_1, \dots, \text{head}_h) W^O \ \text{where} \quad \text{head}_i &= \text{Attention}(Q W_i^Q, K W_i^K, V W_i^V) \end{aligned} $$
其中投影矩阵为 $W_i^Q, W_i^K \in \mathbb{R}^{d_{\text{model}} \times d_k}$,$W_i^V \in \mathbb{R}^{d_{\text{model}} \times d_v}$,$W^O \in \mathbb{R}^{h d_v \times d_{\text{model}}}$。
图 3:注意力机制捕捉长距离依赖的示例(来源:arXiv 1706.03762)
原文中采用的超参数为:
$$ h = 8, \quad d_k = d_v = \frac{d_{\text{model}}}{h} = 64 $$
由于每个头的维度降低,多头注意力的总计算成本与单头全维注意力相当。多头机制使模型能够在不同表示子空间中联合关注不同位置的信息,缓解了单头平均化带来的信息损失。
4. 注意力在 Transformer 中的三种应用
基于上述注意力机制,Transformer 在不同位置使用了三种变体。
4.1 编码器自注意力(Encoder Self-Attention)
编码器中的 Q、K、V 都来自上一层编码器的输出。每个位置都能关注输入序列的所有位置,从而直接建模全局依赖。
4.2 解码器掩码自注意力(Decoder Masked Self-Attention)
解码器中的自注意力允许每个位置关注该位置及之前的所有位置。通过在 softmax 输入中将非法连接设为 $-\infty$ 进行掩码,保证生成第 $i$ 个词时只能依赖已生成的左侧输出,维护自回归特性。
4.3 编码器-解码器交叉注意力(Encoder-Decoder Cross Attention)
在此层中,Query 来自解码器上一层的输出,Key 和 Value 来自编码器输出。这使得解码器每个位置都能关注输入序列的所有位置,完成源序列与目标序列之间的对齐。
5. 位置编码、嵌入与训练细节
5.1 嵌入与位置编码
模型使用可学习的嵌入将输入/输出 token 映射为 $d_{\text{model}}$ 维向量,并通过线性变换和 softmax 将解码器输出转换为下一 token 的概率分布。输入嵌入、输出嵌入以及 softmax 前的线性变换共享权重矩阵,嵌入权重乘以 $\sqrt{d_{\text{model}}}$。
由于模型不含循环和卷积,必须显式注入位置信息。Transformer 使用正弦/余弦位置编码:
$$ \begin{aligned} PE_{(pos, 2i)} &= \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) \ PE_{(pos, 2i+1)} &= \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) \end{aligned} $$
作者也尝试了可学习的位置嵌入,发现两者效果几乎相同,但正弦版本更便于外推到训练时未见的更长序列。
5.2 训练配置
- 优化器:Adam,$\beta_1 = 0.9$,$\beta_2 = 0.98$,$\epsilon = 10^{-9}$。
- 学习率调度:
$$ \text{lrate} = d_{\text{model}}^{-0.5} \cdot \min\left(\text{step_num}^{-0.5}, \text{step_num} \cdot \text{warmup_steps}^{-1.5}\right) $$
其中 $\text{warmup_steps} = 4000$。
- 正则化:
- Residual Dropout:$P_{\text{drop}} = 0.1$;
- Label Smoothing:$\epsilon_{\text{ls}} = 0.1$。
5.3 实验结果
下表总结了 Transformer 在 WMT 2014 翻译任务上的主要结果:
| 模型 | EN→DE BLEU | EN→FR BLEU | 训练配置 |
|---|---|---|---|
| Transformer(base) | — | — | 8 张 P100,约 12 小时 |
| Transformer(big) | 28.4 | 41.8 | 8 张 P100,3.5 天 |
| 此前最优单模型 | 26.1 | 38.9 | — |
| 此前最优集成模型 | 26.36 | 41.0 | — |
注:数据来自 arXiv:1706.03762 原文 Table 2。
在 WMT 2014 英德翻译任务上,Transformer 大模型取得了 28.4 BLEU,超越此前所有模型(包括集成模型)超过 2 BLEU。在 WMT 2014 英法翻译任务上,大模型在 8 块 P100 GPU 训练 3.5 天后取得 41.8 BLEU 的单模型最优结果。基础模型在 8 块 P100 GPU 上训练约 12 小时即可收敛。
此外,Transformer 也被成功应用于英语成分句法分析任务,显示出良好的泛化能力。
6. 总结
Transformer 是首个完全基于注意力机制的序列转换模型,它用多头自注意力取代了传统 encoder-decoder 架构中的循环层。该架构具有高度并行性,训练速度显著快于基于 RNN/CNN 的模型,同时在翻译质量上达到了新的 state-of-the-art。其提出的 Scaled Dot-Product Attention、Multi-Head Attention、残差连接与层归一化、位置编码等设计,奠定了后续大语言模型架构的基础。
原文来源
Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, Ł., & Polosukhin, I. (2017). Attention Is All You Need. arXiv:1706.03762. https://arxiv.org/abs/1706.03762
相关文章
dair-ai 提示工程指南平台介绍
本文介绍 GitHub 开源项目 dair-ai/Prompt-Engineering-Guide,系统梳理提示工程基础、CoT/ReAct/RAG/AI Agents 等进阶技术、应用场景与模型适配,并总结对抗性提示、事实性与偏见等风险及配套资源,帮助开发者构建从理论到实践的完整学习路径。
阅读更多