Transformer 是 2017 年《Attention Is All You Need》论文提出的完全基于自注意力机制的序列建模架构,彻底摒弃了 RNN 类的循环结构与 CNN 的局部卷积结构,解决了传统序列模型并行能力差、长距离依赖建模弱的核心痛点,现已成为 NLP、CV、语音、多模态等几乎所有 AI 领域的基础底座。
一、核心设计初衷
传统序列建模方案存在致命缺陷:
- RNN/LSTM/GRU:串行计算,必须按顺序处理 token,无法并行训练,效率极低;长距离 token 之间的依赖路径过长,极易出现梯度消失,难以建模全局语义。
- CNN:虽支持并行,但感受野有限,需多层堆叠才能覆盖长距离序列,全局依赖建模能力弱。
Transformer 的核心突破:用自注意力机制一步到位建模序列中任意两个 token 的关联,实现全序列并行计算,同时让任意位置 token 的依赖路径长度恒为 1,彻底解决长距离建模难题。
二、整体架构总览
标准 Transformer 采用Encoder-Decoder(编码器 - 解码器) 架构,核心结构如下:
-
主体:6 层 Encoder 堆叠 + 6 层 Decoder 堆叠
-
基础单元:每层 Encoder/Decoder 均由注意力子层 + 前馈网络子层 构成,搭配残差连接 + 层归一化保证深度网络的训练稳定性
-
分工:
- Encoder:对输入序列进行编码,输出包含全局上下文语义的特征表示
- Decoder:基于 Encoder 的编码结果,自回归地逐 token 生成输出序列
三、输入层:词嵌入 + 位置编码
Transformer 无循环 / 卷积的时序归纳偏置,无法感知 token 的位置顺序,而序列顺序是语义的核心,因此输入层需同时注入语义信息与位置信息。
1. Token Embedding(词嵌入)
将离散的 token(词 / 字 / 子词)映射为固定维度的稠密向量,维度为d_model(原文默认 512 维)。
- 核心作用:把不可计算的离散符号转为可计算的向量,同时编码 token 的基础语义
- 优化设计:Embedding 层权重与最终输出层的线性层权重共享,大幅减少参数量,同时提升泛化能力
2. Positional Encoding(位置编码)
为序列中每个位置注入唯一的位置信息,让模型能区分不同位置的 token。原文采用正余弦固定位置编码,公式如下:
位置编码的偶数维度(2i): PE(pos,2i)=sin(pos100002i/d∗∗∗∗model)\text{PE}{(\text{pos}, 2i)} = \sin\left(\frac{\text{pos}}{10000^{2i/d**_**{\text{model}}}}\right)PE(pos,2i)=sin(100002i/d∗∗∗∗modelpos)
位置编码的奇数维度(2i+1): PE(pos,2i+1)=cos(pos100002i/d∗∗∗∗model)\text{PE}{(\text{pos}, 2i+1)} = \cos\left(\frac{\text{pos}}{10000^{2i/d**_**{\text{model}}}}\right)PE(pos,2i+1)=cos(100002i/d∗∗∗∗modelpos)
- 符号说明:
pos为 token 的位置索引,i为向量的维度索引 - 核心优势:可泛化到训练时未见过的更长序列,同时天然建模 token 之间的相对位置关系
最终输入向量 = Token Embedding + Positional Encoding,完成后送入 Encoder/Decoder。
四、核心基石:注意力机制
注意力机制的本质:为目标 token 计算它与所有关联 token 的相似度权重,再用权重对所有 token 的特征加权求和,得到融合全局上下文的目标特征。
1. 基础单元:缩放点积注意力
这是 Transformer 注意力的最小计算单元,输入为三个矩阵:
- Q (Query):查询向量,代表「当前 token 想要找什么信息」
- K (Key):键向量,代表「每个 token 拥有什么信息」
- V (Value):值向量,代表「每个 token 实际的语义内容」
维度约定:Q: [batch, seq_len_q, d_k]、K: [batch, seq_len_k, d_k]、V: [batch, seq_len_k, d_v],原文中d_k=d_v=d_model/h(h 为注意力头数)。
核心计算公式:
Attention(Q,K,V)=softmax(dkQKT)V Attention(Q,K,V)=softmax(dkQKT)V Attention(Q,K,V)=softmax(dkQKT)V
计算步骤拆解:
- 相似度计算 :QKT 得到维度为
[batch, seq_len_q, seq_len_k]的相似度矩阵,每个元素代表第 i 个 query token 与第 j 个 key token 的语义关联度。 - 缩放修正:除以dk,解决 d_k 过大时内积值过高、softmax 后梯度消失的问题(内积过大会让 softmax 输出接近 one-hot 分布,梯度趋近于 0)。
- 掩码屏蔽(可选):将不需要关注的位置的得分设为−∞,softmax 后权重趋近于 0,实现信息屏蔽(如 Decoder 的因果掩码)。
- 权重归一化:对相似度矩阵的每一行做 softmax,将得分转为 0-1 之间、和为 1 的权重分布。
- 加权求和:权重矩阵与 V 相乘,得到融合全局上下文的注意力输出。
2. 自注意力(Self-Attention)
当 Q、K、V全部来自同一个输入序列时,即为自注意力。
- 核心作用:让序列中的每个 token,都能与序列中所有其他 token 计算关联度,建模序列内部的全局依赖关系。
- 直观例子:句子 "我把猫抱起来,它很乖" 中,自注意力可以让 "它" 直接和 "猫" 建立强关联,无论两个 token 间隔多远。
3. 多头注意力(Multi-Head Attention, MHA)
将 Q、K、V 通过线性投影拆分为 h 个并行的头,每个头独立执行缩放点积注意力,再将所有头的输出拼接,最后通过线性投影得到最终结果。
核心公式:
MultiHead(Q,K,V)headi=Concat(head1,head2,...,headh)Wo=Attention(QWqi,KWki,VWvi) MultiHead(Q,K,V)headi=Concat(head1,head2,...,headh)Wo=Attention(QWqi,KWki,VWvi) MultiHead(Q,K,V)headi=Concat(head1,head2,...,headh)Wo=Attention(QWqi,KWki,VWvi)
原文默认配置:h=8,d_model=512,因此每个头的维度 d_k=512/8=64。
- 设计目的:单头注意力只能捕捉单一类型的依赖关系,多头注意力可让不同的头学习到不同维度的语义关联(如句法依赖、指代关系、局部短语关联、长距离语义关联),极大提升模型的特征表达能力。
五、编码器(Encoder)完整结构
每层 Encoder 包含 2 个核心子层,每个子层均遵循 「层归一化→子层计算→残差连接」 的 Pre-LN 结构(训练更稳定,为当前主流方案),结构如下:
子层 1:多头自注意力
- Q/K/V 全部来自上一层 Encoder 的输出
- 无掩码约束,可看到输入序列的所有位置,建模全局上下文
- 输出后执行残差连接 + 层归一化
子层 2:前馈神经网络(FFN)
对每个 token 的特征独立进行非线性变换,不改变序列长度,公式如下:
FFN(x)=max(0,xW1+b1)W2+b2 FFN(x)=max(0,xW1+b1)W2+b2 FFN(x)=max(0,xW1+b1)W2+b2
- 原文中,FFN 的中间层维度为 2048,是 d_model 的 4 倍
- 输出后执行残差连接 + 层归一化
6 层 Encoder 堆叠完成后,输出维度为[batch, seq_len_input, d_model]的上下文编码矩阵,包含输入序列的完整全局语义,将送入 Decoder 的交叉注意力层。
六、解码器(Decoder)完整结构
每层 Decoder 包含 3 个核心子层,同样遵循 Pre-LN + 残差连接的结构,核心是适配自回归生成的逻辑,防止未来信息泄露。
子层 1:带掩码的多头自注意力(Masked MHA)
- Q/K/V 全部来自上一层 Decoder 的输出
- 核心约束:加入因果掩码(Causal Mask),让每个 token 只能关注自身和之前的位置,完全屏蔽未来的 token(生成第 i 个 token 时,i+1 及以后的 token 尚未生成,必须防止信息泄露)
- 输出后执行残差连接 + 层归一化
子层 2:交叉注意力(Encoder-Decoder Attention)
- 核心设计:Q 来自上一个掩码注意力子层的输出,K 和 V 全部来自 Encoder 的最终输出
- 核心作用:让 Decoder 在生成每个 token 时,动态关注输入序列中语义相关的部分(如机器翻译中,生成英文单词时,精准匹配对应的中文原词)
- 输出后执行残差连接 + 层归一化
子层 3:前馈神经网络(FFN)
与 Encoder 中的 FFN 完全一致,对每个 token 独立做非线性变换,输出后执行残差连接 + 层归一化。
6 层 Decoder 堆叠完成后,输出维度为[batch, seq_len_output, d_model]的生成特征矩阵。
七、输出层与生成逻辑
- 线性映射:Decoder 的输出特征通过线性层,将 d_model 维度映射为词表大小的维度
- 概率归一化:通过 Softmax 函数,得到词表中每个 token 的生成概率
- 自回归解码:通过贪心搜索 / 束搜索等策略,选择概率最高的 token 作为当前步的输出,将其加入 Decoder 的输入序列,重复上述流程,直到生成结束符
<EOS>,完成整个序列的生成。
八、完整前向传播流程(以机器翻译为例)
输入中文:「我爱中国」,目标输出英文:「I love China」
-
输入预处理:将「我爱中国」分词为 token 并转为 id,经过 Token Embedding + 位置编码,得到输入矩阵
X: [1,4,512] -
Encoder 编码:X 送入 6 层 Encoder,逐层完成多头自注意力→残差 + LN→FFN→残差 + LN,最终输出编码矩阵
Enc_out: [1,4,512] -
Decoder 自回归生成:
- 初始输入为起始符
<sos>,经过 Embedding + 位置编码送入 Decoder - 经过 6 层 Decoder 的掩码自注意力→交叉注意力→FFN,输出特征映射为词表概率,选择最高概率 token「I」
- 将「I」加入 Decoder 输入,变为
<sos> I,重复解码流程,依次生成「love」「China」 - 生成结束符
<EOS>,解码终止,得到最终翻译结果
- 初始输入为起始符
九、核心优势与主流变体
核心设计优势
- 全并行计算:Encoder 对输入序列的所有 token 可同时处理,无需 RNN 的串行计算,训练效率实现数量级提升
- 长距离依赖建模极强:任意两个 token 的依赖路径恒为 1,彻底解决 RNN 长距离梯度消失的问题
- 超强可扩展性:可通过堆叠层数、增加维度、扩充头数灵活提升模型容量,当前千亿 / 万亿参数大模型均基于 Transformer 架构扩展
- 高适配性:可通过调整架构适配不同任务,无需修改核心注意力机制
主流变体
- Encoder-only:代表模型 BERT,仅用编码器,擅长文本分类、命名实体识别等理解类任务
- Decoder-only:代表模型 GPT 系列、LLaMA,仅用解码器,擅长文本生成、对话等生成类任务,也是当前大语言模型的主流架构
- Encoder-Decoder:代表模型 T5、BART,完整的编解码架构,擅长机器翻译、文本摘要等 seq2seq 任务