摘要
Transformer 是 2017 年由 Google 团队在《Attention Is All You Need》中提出的序列转导模型,其革命性创新在于彻底摒弃循环神经网络(RNN)与卷积神经网络(CNN)的链式 / 局部结构,完全基于自注意力机制实现全局依赖建模。该模型在并行计算效率、长距离依赖捕捉能力及训练稳定性上实现三重突破,不仅在机器翻译任务中刷新 BLEU 分数纪录(WMT 2014 英德翻译达 28.4,英法翻译达 41.8),更成为后续大语言模型(如 BERT、GPT、LLaMA)、多模态模型(如 ViT、Whisper)的核心骨架。
本报告采用 “阶梯式” 内容设计,兼顾初学者与深入研究者需求:
对初学者:从 “序列建模基础” 切入,用通俗案例解释 RNN/LSTM 的局限、注意力机制的本质,再逐步拆解 Transformer 的编码器 / 解码器结构,配合数值实例演示每一步运算;
对深入研究者:提供完整数学推导(含梯度反向传播、注意力权重分布分析)、 ablation 实验细节、超参优化的统计验证方法,以及 Transformer 与其他模型的定量对比,同时补充后续变体(如 BERT、GPT)的核心改进逻辑。
全文共 12 章,约 5 万字,涵盖 Transformer 的背景、基础组件、架构细节、数学原理、训练机制、端到端实例、性能归因及未来方向,力求成为 “从入门到精通” 的一站式参考资料。
1 引言:序列建模的技术困境与 Transformer 的诞生
1.1 初学者视角:什么是 “序列建模”?为什么重要?
在自然语言处理(NLP)、语音识别、时间序列预测等领域,数据常以 “序列” 形式存在 —— 即元素的顺序携带关键信息。例如:
句子 “猫追狗” 与 “狗追猫”,仅词序不同,语义完全相反;
语音信号中,“啊 – 哦” 与 “哦 – 啊” 的声调顺序不同,表达的情绪差异显著。
“序列建模” 的核心目标是:让模型理解序列中元素的顺序依赖关系,并基于这种依赖完成特定任务(如翻译、生成、分类)。
在 Transformer 出现前,主流序列建模工具是循环神经网络(RNN) 及其变体(LSTM、GRU),但它们存在难以克服的缺陷,这为 Transformer 的诞生埋下伏笔。
1.2 深入研究:传统序列模型的技术瓶颈
1.2.1 RNN 的固有缺陷:梯度消失与并行性差
RNN 的基本结构是 “链式传递”,第
t
t
t 时间步的隐藏状态
h
t
h_t
ht由前一时间步
h
t
−
1
h_{t-1}
ht−1与当前输入
x
t
x_t
xt决定:
h
t
=
tanh
(
W
h
h
t
−
1
+
W
x
x
t
+
b
)
h_t = anh(W_h h_{t-1} + W_x x_t + b)
ht=tanh(Whht−1+Wxxt+b)
其中
W
h
W_h
Wh是隐藏层权重矩阵,
W
x
W_x
Wx是输入层权重矩阵,
b
b
b是偏置。
问题 1:梯度消失 / 爆炸
训练 RNN 时,反向传播需计算损失对
W
h
W_h
Wh的梯度:
∂
L
∂
W
h
=
∑
t
=
1
T
∂
L
∂
h
t
⋅
∂
h
t
∂
W
h
frac{partial mathcal{L}}{partial W_h} = sum_{t=1}^T frac{partial mathcal{L}}{partial h_t} cdot frac{partial h_t}{partial W_h}
∂Wh∂L=∑t=1T∂ht∂L⋅∂Wh∂ht
而
∂
h
t
∂
h
t
−
1
=
W
h
T
⋅
diag
(
1
−
tanh
2
(
W
h
h
t
−
1
+
W
x
x
t
+
b
)
)
frac{partial h_t}{partial h_{t-1}} = W_h^T cdot ext{diag}(1- anh^2(W_h h_{t-1} + W_x x_t + b))
∂ht−1∂ht=WhT⋅diag(1−tanh2(Whht−1+Wxxt+b)),其绝对值小于
∥
W
h
T
∥
|W_h^T|
∥WhT∥。若
∥
W
h
T
∥
<
1
|W_h^T| < 1
∥WhT∥<1,多次乘法后梯度会趋近于 0(梯度消失);若
∥
W
h
T
∥
>
1
|W_h^T| > 1
∥WhT∥>1,梯度会趋近于无穷大(梯度爆炸)。
例如,当序列长度
T
=
100
T=100
T=100时,即使
∥
W
h
T
∥
=
0.9
|W_h^T|=0.9
∥WhT∥=0.9,梯度也会衰减至
0.9
100
≈
2.65
×
10
−
5
0.9^{100} approx 2.65 imes 10^{-5}
0.9100≈2.65×10−5,模型几乎无法更新浅层参数,自然无法捕捉长距离依赖(如句子开头 “小明” 与结尾 “他” 的指代关系)。
问题 2:并行性差
RNN 的计算需严格按时间步顺序执行 —— 必须先计算
h
1
h_1
h1,才能计算
h
2
h_2
h2,以此类推。这种 “串行计算” 导致训练效率极低,当序列长度
T
=
512
T=512
T=512时,单条样本的计算时间是
T
=
1
T=1
T=1时的 512 倍,难以处理大规模数据。
1.2.2 LSTM/GRU 的改进与局限
为缓解梯度消失,研究者提出 LSTM(长短期记忆网络)与 GRU(门控循环神经网络),核心是通过 “门控机制” 控制信息流动,但仍未突破根本瓶颈。
LSTM 的改进:引入 “细胞状态
c
t
c_t
ct” 作为 “信息传送带”,通过遗忘门
f
t
f_t
ft、输入门
i
t
i_t
it、输出门
o
t
o_t
ot控制信息的保留、更新与输出。细胞状态的更新公式为:
c
t
=
f
t
⊙
c
t
−
1
+
i
t
⊙
c
~
t
c_t = f_t odot c_{t-1} + i_t odot ilde{c}_t
ct=ft⊙ct−1+it⊙c~t
由于细胞状态仅通过 “元素 – wise 乘法” 和 “加法” 更新(无矩阵乘法),梯度可直接沿细胞状态回传,大幅缓解梯度消失。但 LSTM 的参数数量是普通 RNN 的 4 倍,计算复杂度更高,且仍需串行执行,并行性无本质提升。
GRU 的改进:合并 LSTM 的遗忘门与输入门为 “更新门
z
t
z_t
zt”,取消独立细胞状态,参数数量减少至 LSTM 的 1/2,但门控简化导致信息筛选能力减弱,在复杂长序列任务(如机器翻译)中性能略逊于 LSTM。
1.2.3 CNN-based 模型的局限
为提升并行性,研究者尝试用 CNN(卷积神经网络)建模序列(如 ConvS2S、ByteNet),通过卷积核并行处理多个位置。但 CNN 的核心缺陷是长距离依赖建模成本高:
ConvS2S 使用普通卷积,若要关联序列中距离为
k
k
k的两个位置,需堆叠
k
k
k层卷积(如关联第 1 个与第 100 个位置,需 100 层);
ByteNet 使用扩张卷积(Dilated Convolution),通过扩大卷积核感受野减少层数,但仍需
log
k
T
log_k T
logkT层(如
T
=
1024
T=1024
T=1024,
k
=
2
k=2
k=2时需 10 层)。
层数堆叠不仅增加计算复杂度,还会导致 “梯度稀释”—— 长距离信息需经多层传递,细节易丢失,最终影响建模精度。
1.3 Transformer 的核心突破
面对传统模型的困境,《Attention Is All You Need》提出完全基于注意力机制的 Transformer 模型,实现三大突破:
全局依赖建模:通过自注意力机制,任意两个位置的依赖建模仅需 1 次矩阵乘法,路径长度为
O
(
1
)
O(1)
O(1),彻底解决长距离依赖问题;
极致并行性:所有位置的计算可批量执行(无时间步依赖),训练效率是 LSTM 的 10 倍以上;
简洁高效:无循环 / 卷积结构,参数数量少于 LSTM,且通过多头注意力、残差连接等设计,在性能与效率间取得平衡。
Transformer 的出现,标志着序列建模从 “链式依赖” 向 “全局依赖” 的范式转移,为后续大模型的发展奠定基础。
2 基础预备知识:注意力机制的本质
在理解 Transformer 前,需先掌握 “注意力机制” 的基础 —— 这是 Transformer 的核心积木。本节从 “直观理解” 到 “数学推导”,逐步拆解注意力机制。
2.1 初学者视角:注意力机制是什么?
注意力机制的灵感来源于人类的 “选择性关注”—— 当我们阅读句子 “猫追狗,它跑得很快” 时,会自然将 “它” 与 “猫” 或 “狗” 关联,这种 “主动聚焦关键信息” 的能力,就是注意力机制的核心。
在模型中,注意力机制的本质是:通过计算 “查询(Query)” 与 “键(Key)” 的相似度,为 “值(Value)” 分配权重,最终输出加权和。简单来说:
Query:当前需要关注的 “目标”(如 “它”);
Key:所有可能被关注的 “候选”(如 “猫”“追”“狗”“跑”);
Value:候选对应的 “信息”(如 “猫” 的语义向量);
权重:Query 与 Key 的相似度(如 “它” 与 “猫” 的相似度高,权重就大);
输出:Value 的加权和(重点融合 “猫” 的信息,弱化其他词的信息)。
例如,当 Query 是 “它” 的向量,Key 是 “猫”“追”“狗”“跑” 的向量时,注意力权重可能为
[
0.6
,
0.1
,
0.2
,
0.1
]
[0.6, 0.1, 0.2, 0.1]
[0.6,0.1,0.2,0.1],输出就是 “猫” 的向量 ×0.6 + “追” 的向量 ×0.1 + “狗” 的向量 ×0.2 + “跑” 的向量 ×0.1,从而让 “它” 的表示关联到 “猫”。
2.2 深入研究:注意力机制的数学形式
注意力机制有多种实现方式,Transformer 采用 “缩放点积注意力”,其数学定义如下:
2.2.1 基本形式
给定 Query 矩阵
Q
∈
R
L
q
×
d
k
Q in mathbb{R}^{L_q imes d_k}
Q∈RLq×dk(
L
q
L_q
Lq为 Query 序列长度,
d
k
d_k
dk为 Query/Key 维度)、Key 矩阵
K
∈
R
L
k
×
d
k
K in mathbb{R}^{L_k imes d_k}
K∈RLk×dk(
L
k
L_k
Lk为 Key/Value 序列长度)、Value 矩阵
V
∈
R
L
k
×
d
v
V in mathbb{R}^{L_k imes d_v}
V∈RLk×dv(
d
v
d_v
dv为 Value 维度),注意力输出为:
Attention
(
Q
,
K
,
V
)
=
softmax
(
Q
K
T
d
k
)
V
ext{Attention}(Q, K, V) = ext{softmax}left( frac{Q K^T}{sqrt{d_k}}
ight) V
Attention(Q,K,V)=softmax(dk
QKT)V
该公式可拆分为 4 步:
计算相似度(点积):
Q
K
T
Q K^T
QKT,得到
L
q
×
L
k
L_q imes L_k
Lq×Lk的相似度矩阵,每个元素
(
Q
K
T
)
i
,
j
(Q K^T)_{i,j}
(QKT)i,j表示第
i
i
i个 Query 与第
j
j
j个 Key 的相似度;
缩放(除以
d
k
sqrt{d_k}
dk
):避免
d
k
d_k
dk过大导致点积数值过大,Softmax 进入梯度饱和区;
Softmax 归一化:将相似度转换为和为 1 的权重,确保权重的概率语义;
加权求和(与 V 相乘):用权重对 Value 进行加权,得到最终注意力输出。
2.2.2 缩放因子
d
k
sqrt{d_k}
dk
的数学证明
为什么需要除以
d
k
sqrt{d_k}
dk
?我们通过 “方差分析” 证明其必要性:
假设 Query 与 Key 的元素满足零均值、单位方差(深度学习中参数初始化通常满足此条件,如 Xavier 初始化),即:
E
[
Q
i
,
m
]
=
0
,
V
[
Q
i
,
m
]
=
1
(
∀
i
,
m
)
mathbb{E}[Q_{i,m}] = 0, quad mathbb{V}[Q_{i,m}] = 1 quad (forall i,m)
E[Qi,m]=0,V[Qi,m]=1(∀i,m)
E
[
K
j
,
m
]
=
0
,
V
[
K
j
,
m
]
=
1
(
∀
j
,
m
)
mathbb{E}[K_{j,m}] = 0, quad mathbb{V}[K_{j,m}] = 1 quad (forall j,m)
E[Kj,m]=0,V[Kj,m]=1(∀j,m)
且
Q
Q
Q与
K
K
K的元素相互独立。
计算第
i
i
i个 Query 与第
j
j
j个 Key 的点积方差:
V
[
(
Q
K
T
)
i
,
j
]
=
V
(
∑
m
=
1
d
k
Q
i
,
m
K
j
,
m
)
mathbb{V}[ (Q K^T)_{i,j} ] = mathbb{V}left( sum_{m=1}^{d_k} Q_{i,m} K_{j,m}
ight)
V[(QKT)i,j]=V(∑m=1dkQi,mKj,m)
由于独立变量的方差可叠加,且
Q
i
,
m
Q_{i,m}
Qi,m与
K
j
,
m
K_{j,m}
Kj,m独立:
V
[
Q
i
,
m
K
j
,
m
]
=
E
[
(
Q
i
,
m
K
j
,
m
)
2
]
−
(
E
[
Q
i
,
m
K
j
,
m
]
)
2
=
E
[
Q
i
,
m
2
]
E
[
K
j
,
m
2
]
−
0
mathbb{V}[Q_{i,m} K_{j,m}] = mathbb{E}[(Q_{i,m} K_{j,m})^2] – (mathbb{E}[Q_{i,m} K_{j,m}])^2 = mathbb{E}[Q_{i,m}^2] mathbb{E}[K_{j,m}^2] – 0
V[Qi,mKj,m]=E[(Qi,mKj,m)2]−(E[Qi,mKj,m])2=E[Qi,m2]E[Kj,m2]−0
又因
E
[
Q
i
,
m
2
]
=
V
[
Q
i
,
m
]
+
(
E
[
Q
i
,
m
]
)
2
=
1
mathbb{E}[Q_{i,m}^2] = mathbb{V}[Q_{i,m}] + (mathbb{E}[Q_{i,m}])^2 = 1
E[Qi,m2]=V[Qi,m]+(E[Qi,m])2=1,同理
E
[
K
j
,
m
2
]
=
1
mathbb{E}[K_{j,m}^2] = 1
E[Kj,m2]=1,因此:
V
[
(
Q
K
T
)
i
,
j
]
=
∑
m
=
1
d
k
1
=
d
k
mathbb{V}[ (Q K^T)_{i,j} ] = sum_{m=1}^{d_k} 1 = d_k
V[(QKT)i,j]=∑m=1dk1=dk
当
d
k
d_k
dk增大时(如
d
k
=
512
d_k=512
dk=512),点积的方差会增至 512,数值范围可能达到
[
−
100
,
100
]
[-100, 100]
[−100,100]。此时 Softmax 函数会出现 “两极分化”:
数值极大的元素(如 100)对应的指数
e
100
≈
2.68
×
10
43
e^{100} approx 2.68 imes 10^{43}
e100≈2.68×1043,权重趋近于 1;
数值极小的元素(如 – 100)对应的指数
e
−
100
≈
3.72
×
10
−
44
e^{-100} approx 3.72 imes 10^{-44}
e−100≈3.72×10−44,权重趋近于 0;
最终权重矩阵几乎只有 1 个非零元素,注意力机制退化为 “单一点选择”,无法捕捉多元素依赖。
除以
d
k
sqrt{d_k}
dk
后,点积的方差变为:
V
(
(
Q
K
T
)
i
,
j
d
k
)
=
1
d
k
×
d
k
=
1
mathbb{V}left( frac{(Q K^T)_{i,j}}{sqrt{d_k}}
ight) = frac{1}{d_k} imes d_k = 1
V(dk
(QKT)i,j)=dk1×dk=1
数值范围被控制在
[
−
2
,
2
]
[-2, 2]
[−2,2]左右,Softmax 能输出有区分度的权重(如
[
0.4
,
0.3
,
0.2
,
0.1
]
[0.4, 0.3, 0.2, 0.1]
[0.4,0.3,0.2,0.1]),确保注意力机制有效。
2.2.3 与加性注意力的对比
除了缩放点积注意力,另一种常见的注意力机制是 “加性注意力”(如 Bahdanau 注意力),其计算公式为:
Attention
(
Q
,
K
,
V
)
=
softmax
(
W
a
[
Q
;
K
]
+
b
a
d
k
)
V
ext{Attention}(Q, K, V) = ext{softmax}left( frac{W_a [Q; K] + b_a}{d_k}
ight) V
Attention(Q,K,V)=softmax(dkWa[Q;K]+ba)V
其中
[
Q
;
K
]
[Q; K]
[Q;K]表示将 Q 与 K 拼接,
W
a
W_a
Wa是前馈网络权重,
b
a
b_a
ba是偏置。
两种注意力机制的对比:
对比维度 | 缩放点积注意力 | 加性注意力 |
---|---|---|
计算复杂度 |
O ( L q L k d k ) O(L_q L_k d_k) O(LqLkdk) |
O ( L q L k d k ) O(L_q L_k d_k) O(LqLkdk) |
计算效率 | 高(矩阵乘法可高度优化) | 低(前馈网络计算慢) |
空间复杂度 | 低(无需额外存储前馈网络参数) | 高(需存储
W a , b a W_a, b_a Wa,ba) |
适用场景 |
d k d_k dk较小时(如 d k ≤ 512 d_k leq 512 dk≤512) |
d k d_k dk较大时 |
Transformer 选择缩放点积注意力,是因为其在
d
k
=
512
d_k=512
dk=512的场景下效率更高,且通过 “多头注意力” 可弥补单头的表达局限(后续章节详细说明)。
3 Transformer 模型架构详解(从宏观到微观)
Transformer 采用经典的 “编码器 – 解码器架构”,但内部组件完全基于注意力机制设计。本节先展示整体架构,再逐层拆解每个组件的功能与细节。
3.1 初学者视角:Transformer 的整体框架
Transformer 的结构可简单概括为 “左右对称”:
左侧:编码器(Encoder):接收输入序列(如源语言句子 “我 爱 机器学习”),输出包含全局上下文的向量表示(每个词的向量都融合了全句信息);
右侧:解码器(Decoder):接收编码器的输出和已生成的目标序列(如 “我 爱” 对应的英文 “I love”),自回归生成完整输出序列(“I love machine learning”);
输入层:将离散词转换为连续向量(词嵌入),并注入位置信息(位置编码);
输出层:将解码器的输出转换为词表上的概率分布,预测下一个词。
用通俗的比喻:编码器像 “理解原文的翻译官”,解码器像 “生成译文的翻译官”,注意力机制像 “翻译官查阅词典时聚焦关键信息的能力”。
3.2 深入研究:Transformer 的详细架构(基于原论文图 1)
原论文中,Transformer 的编码器由
N
=
6
N=6
N=6个相同层堆叠而成,解码器也由
N
=
6
N=6
N=6个相同层堆叠而成。每个层的内部结构如下:
3.2.1 编码器层(Encoder Layer)
每个编码器层包含 2 个子层,且每个子层都配有 “残差连接” 和 “层归一化”
1. 多头自注意力子层
核心功能:捕捉输入序列内部的全局依赖。这里的 “自注意力” 指 Q、K、V 均来自同一输入(编码器前一层的输出),即 “序列自己关注自己”。例如,输入序列 “我 爱 机器学习” 中,“爱” 的向量会通过自注意力融合 “我” 和 “机器学习” 的信息,从而理解 “爱” 的对象是 “机器学习”。
2. 前馈网络子层(FFN)
核心功能:对每个位置的向量进行独立的非线性变换。自注意力的输出是 “全局依赖的线性融合”,FFN 通过 “线性变换 + ReLU 激活” 引入非线性,让模型学习更复杂的特征(如 “爱” 与 “机器学习” 的动宾关系语义)。
3. 残差连接(Residual Connection)
公式:
x
+
Sublayer
(
x
)
x + ext{Sublayer}(x)
x+Sublayer(x),其中
x
x
x是子层输入,
Sublayer
(
x
)
ext{Sublayer}(x)
Sublayer(x)是子层输出。核心作用是缓解梯度消失 —— 梯度可通过 “
x
x
x” 直接回传,无需经过子层的权重矩阵乘法。
4. 层归一化(Layer Normalization)
公式:
LayerNorm
(
x
+
Sublayer
(
x
)
)
ext{LayerNorm}(x + ext{Sublayer}(x))
LayerNorm(x+Sublayer(x)),作用是 “稳定各层输入的分布”。深度学习中,随着训练进行,各层输入的均值和方差会发生变化(内部协变量偏移),导致训练不稳定。层归一化通过对每个样本的向量维度进行归一化(如将 512 维向量的均值调整为 0,方差调整为 1),确保输入分布稳定。
3.2.2 解码器层(Decoder Layer)
每个解码器层包含 3 个子层,同样配有残差连接和层归一化
1. 掩码多头自注意力子层
核心功能:捕捉输出序列内部的依赖,同时避免未来信息泄露。这里的 “掩码” 指对 “未来位置” 的注意力权重进行屏蔽(设为
−
∞
-infty
−∞),确保生成第
t
t
t个词时,仅依赖前
t
t
t个已生成的词(如生成 “love” 时,只能用 “I” 的信息,不能用 “machine”“learning” 的信息)。
2. 编码器 – 解码器注意力子层(交叉注意力)
核心功能:建立输出序列与输入序列的语义对齐。这里的 Q 来自解码器前一层的输出(如 “我 爱” 对应的英文向量),K 和 V 来自编码器的最终输出(如 “我 爱 机器学习” 的全局向量),通过注意力机制让 “love” 关联到 “爱”,“machine learning” 关联到 “机器学习”。
3. 前馈网络子层
与编码器的 FFN 功能一致,对每个位置的向量进行非线性变换,增强特征表达。
3.3 关键设计:维度统一(
d
m
o
d
e
l
=
512
d_{model}=512
dmodel=512)
Transformer 中所有子层(自注意力、FFN)、词嵌入层、位置编码层的输出维度均统一为
d
m
o
d
e
l
=
512
d_{model}=512
dmodel=512,这一设计的核心目的是确保残差连接的有效性。
残差连接的本质是 “元素 – wise 加法”,要求两个相加的向量维度完全一致(如 512 维向量只能与 512 维向量相加)。若维度不匹配,需额外引入线性投影层(如
Sublayer
(
x
)
⋅
W
+
b
ext{Sublayer}(x) cdot W + b
Sublayer(x)⋅W+b)将维度统一,这会增加参数数量和计算成本。
例如,若词嵌入层输出 256 维向量,而自注意力子层输出 512 维向量,残差连接时需先将词嵌入向量通过
W
∈
R
256
×
512
W in mathbb{R}^{256 imes 512}
W∈R256×512投影到 512 维,这会增加
256
×
512
=
131072
256 imes 512 = 131072
256×512=131072个参数,且投影过程会引入额外计算。
选择
d
m
o
d
e
l
=
512
d_{model}=512
dmodel=512是论文通过实验平衡 “模型容量” 与 “计算效率” 的结果:
维度太小(如 256 维):向量承载的信息有限,无法捕捉复杂语义;
维度太大(如 1024 维):参数数量激增(1024 维的模型参数是 512 维的 4 倍),计算效率下降,且易过拟合。
4 核心组件深度解析(一):多头自注意力
多头自注意力是 Transformer 的 “灵魂”,其设计让模型能同时在多个特征子空间捕捉不同类型的依赖。本节从 “基础理解” 到 “数学推导”,全面解析多头自注意力的原理与作用。
4.1 初学者视角:为什么需要 “多头”?
单头自注意力的局限是:只能在单一特征空间捕捉依赖。例如,当处理句子 “小明在公园吃苹果,他很开心” 时,单头自注意力可能只能关注 “小明” 与 “吃” 的主谓关系,却忽略 “他” 与 “小明” 的指代关系、“苹果” 与 “开心” 的因果关系。
“多头自注意力” 的核心思想是:将 Q、K、V 通过多组独立投影,映射到多个子空间,在每个子空间中并行计算自注意力,最后将结果拼接整合。这样,不同的头可以关注不同类型的依赖:
头 1:关注主谓关系(“小明”→“吃”);
头 2:关注指代关系(“他”→“小明”);
头 3:关注因果关系(“苹果”→“开心”);
头 4:关注地点关系(“公园”→“吃”)。
通过这种 “分治策略”,多头自注意力能比单头捕捉更全面的依赖关系,大幅提升模型的表达能力。
4.2 深入研究:多头自注意力的数学原理
4.2.1 完整流程与公式
多头自注意力的流程可拆分为 5 步,公式如下:
线性投影:将 Q、K、V 通过
h
h
h组独立的线性投影矩阵,分别映射到
d
k
d_k
dk、
d
k
d_k
dk、
d
v
d_v
dv维度(论文中
h
=
8
h=8
h=8,
d
k
=
d
v
=
d
m
o
d
e
l
/
h
=
64
d_k=d_v=d_{model}/h=64
dk=dv=dmodel/h=64):
Q
i
=
Q
W
i
Q
,
K
i
=
K
W
i
K
,
V
i
=
V
W
i
V
Q_i = Q W_i^Q, quad K_i = K W_i^K, quad V_i = V W_i^V
Qi=QWiQ,Ki=KWiK,Vi=VWiV
其中:
例如,
d
m
o
d
e
l
=
512
d_{model}=512
dmodel=512,
h
=
8
h=8
h=8,
d
k
=
64
d_k=64
dk=64时,
W
i
Q
W_i^Q
WiQ的维度为
512
×
64
512 imes 64
512×64,每组投影将 512 维向量映射到 64 维。
W
i
Q
∈
R
d
m
o
d
e
l
×
d
k
W_i^Q in mathbb{R}^{d_{model} imes d_k}
WiQ∈Rdmodel×dk(Query 投影矩阵);
W
i
K
∈
R
d
m
o
d
e
l
×
d
k
W_i^K in mathbb{R}^{d_{model} imes d_k}
WiK∈Rdmodel×dk(Key 投影矩阵);
W
i
V
∈
R
d
m
o
d
e
l
×
d
v
W_i^V in mathbb{R}^{d_{model} imes d_v}
WiV∈Rdmodel×dv(Value 投影矩阵);
i
=
1
,
2
,
.
.
.
,
h
i=1,2,…,h
i=1,2,…,h(头的索引)。
单头注意力计算:对每组
(
Q
i
,
K
i
,
V
i
)
(Q_i, K_i, V_i)
(Qi,Ki,Vi),计算缩放点积注意力:
head
i
=
Attention
(
Q
i
,
K
i
,
V
i
)
=
softmax
(
Q
i
K
i
T
d
k
)
V
i
ext{head}_i = ext{Attention}(Q_i, K_i, V_i) = ext{softmax}left( frac{Q_i K_i^T}{sqrt{d_k}}
ight) V_i
headi=Attention(Qi,Ki,Vi)=softmax(dk
QiKiT)Vi
每个
head
i
ext{head}_i
headi的维度为
L
q
×
d
v
L_q imes d_v
Lq×dv(
L
q
L_q
Lq为 Query 序列长度)。
多头拼接:将
h
h
h个单头注意力的输出在 “特征维度” 上拼接,得到维度为
L
q
×
(
h
⋅
d
v
)
L_q imes (h cdot d_v)
Lq×(h⋅dv)的矩阵:
Concat
=
[
head
1
head
2
.
.
.
head
h
]
ext{Concat} = left[ ext{head}_1 quad ext{head}_2 quad … quad ext{head}_h
ight]
Concat=[head1head2…headh]
论文中
h
⋅
d
v
=
8
×
64
=
512
=
d
m
o
d
e
l
h cdot d_v = 8 imes 64 = 512 = d_{model}
h⋅dv=8×64=512=dmodel,拼接后的维度与输入 Q 的维度一致。
最终投影:将拼接后的矩阵通过线性投影矩阵
W
O
∈
R
(
h
⋅
d
v
)
×
d
m
o
d
e
l
W^O in mathbb{R}^{(h cdot d_v) imes d_{model}}
WO∈R(h⋅dv)×dmodel,得到多头自注意力的最终输出:
MultiHead
(
Q
,
K
,
V
)
=
Concat
⋅
W
O
ext{MultiHead}(Q, K, V) = ext{Concat} cdot W^O
MultiHead(Q,K,V)=Concat⋅WO
残差连接与层归一化:与编码器 / 解码器层的设计一致,输出经过
LayerNorm
(
x
+
MultiHead
(
x
)
)
ext{LayerNorm}(x + ext{MultiHead}(x))
LayerNorm(x+MultiHead(x))后传递到下一层。
4.2.2 关键设计的必要性
(1)为什么每个头的维度是
d
k
=
d
m
o
d
e
l
/
h
d_k=d_{model}/h
dk=dmodel/h?
为确保多头自注意力的计算复杂度与单头注意力相当,避免模型过于庞大。
单头注意力的计算复杂度:
O
(
L
q
L
k
d
m
o
d
e
l
)
O(L_q L_k d_{model})
O(LqLkdmodel)(Q、K 的维度为
d
m
o
d
e
l
d_{model}
dmodel);
多头注意力的计算复杂度:
h
×
O
(
L
q
L
k
d
k
)
=
h
×
O
(
L
q
L
k
(
d
m
o
d
e
l
/
h
)
)
=
O
(
L
q
L
k
d
m
o
d
e
l
)
h imes O(L_q L_k d_k) = h imes O(L_q L_k (d_{model}/h)) = O(L_q L_k d_{model})
h×O(LqLkdk)=h×O(LqLk(dmodel/h))=O(LqLkdmodel);
可见,两者复杂度相同,但多头注意力能在多个子空间捕捉依赖,表达能力更强。
(2)为什么拼接后需要最终投影?
拼接后的矩阵是
h
h
h个单头输出的 “机械组合”,各头的特征可能存在冗余或冲突(如两个头都关注主谓关系)。最终投影通过可学习的
W
O
W^O
WO对拼接特征进行加权整合,实现 “去冗余、强关联” 的效果。
例如,若头 1 关注主谓关系,头 2 关注指代关系,
W
O
W^O
WO会学习给这两个头分配合适的权重,让最终输出同时包含两种关系的信息,而非简单叠加。
(3)多头注意力的注意力权重分析(实证案例)
原论文通过可视化注意力权重,验证了多头的 “分工特性”。例如,在英德翻译任务中:
头 1 的权重集中在 “形容词 – 名词” 搭配(如 “red”→“apple”);
头 2 的权重集中在 “代词 – 先行词” 指代(如 “he”→“John”);
头 3 的权重集中在 “动词 – 宾语” 关系(如 “eat”→“apple”);
头 4 的权重集中在 “句间连接词” 关联(如 “because”→“so”)。
这种分工充分证明,多头注意力能捕捉多样化的依赖关系,是单头注意力无法替代的。
4.2.3 梯度反向传播推导
为深入理解多头自注意力的训练过程,我们推导其反向传播的关键步骤(以损失
L
mathcal{L}
L对
W
i
Q
W_i^Q
WiQ的梯度为例)。
根据链式法则,梯度可拆分为:
∂
L
∂
W
i
Q
=
∂
L
∂
head
i
⋅
∂
head
i
∂
Q
i
⋅
∂
Q
i
∂
W
i
Q
frac{partial mathcal{L}}{partial W_i^Q} = frac{partial mathcal{L}}{partial ext{head}_i} cdot frac{partial ext{head}_i}{partial Q_i} cdot frac{partial Q_i}{partial W_i^Q}
∂WiQ∂L=∂headi∂L⋅∂Qi∂headi⋅∂WiQ∂Qi
计算
∂
L
∂
head
i
frac{partial mathcal{L}}{partial ext{head}_i}
∂headi∂L:
最终输出
MultiHead
=
Concat
⋅
W
O
ext{MultiHead} = ext{Concat} cdot W^O
MultiHead=Concat⋅WO,因此
head
i
ext{head}_i
headi是
Concat
ext{Concat}
Concat的第
i
i
i个块。对
MultiHead
ext{MultiHead}
MultiHead求导后,可通过
W
O
W^O
WO的转置回传梯度:
∂
L
∂
head
i
=
(
∂
L
∂
MultiHead
⋅
W
O
T
)
c
¸
¬¬
i
a
¨
¸ª
a
˚
—
frac{partial mathcal{L}}{partial ext{head}_i} = left( frac{partial mathcal{L}}{partial ext{MultiHead}} cdot W^{O^T}
ight)_{ ext{第}i ext{个å—}}
∂headi∂L=(∂MultiHead∂L⋅WOT)c¸¬¬ia¨¸ªa˚—
计算
∂
head
i
∂
Q
i
frac{partial ext{head}_i}{partial Q_i}
∂Qi∂headi:
head
i
=
softmax
(
S
i
)
V
i
ext{head}_i = ext{softmax}(S_i) V_i
headi=softmax(Si)Vi,其中
S
i
=
Q
i
K
i
T
/
d
k
S_i = Q_i K_i^T / sqrt{d_k}
Si=QiKiT/dk
。根据 Softmax 的梯度公式:
∂
softmax
(
S
i
)
∂
S
i
=
diag
(
softmax
(
S
i
)
)
−
softmax
(
S
i
)
softmax
(
S
i
)
T
frac{partial ext{softmax}(S_i)}{partial S_i} = ext{diag}( ext{softmax}(S_i)) – ext{softmax}(S_i) ext{softmax}(S_i)^T
∂Si∂softmax(Si)=diag(softmax(Si))−softmax(Si)softmax(Si)T
因此:
∂
head
i
∂
Q
i
=
1
d
k
⋅
(
∂
softmax
(
S
i
)
∂
S
i
⋅
V
i
)
⋅
K
i
T
frac{partial ext{head}_i}{partial Q_i} = frac{1}{sqrt{d_k}} cdot left( frac{partial ext{softmax}(S_i)}{partial S_i} cdot V_i
ight) cdot K_i^T
∂Qi∂headi=dk
1⋅(∂Si∂softmax(Si)⋅Vi)⋅KiT
计算
∂
Q
i
∂
W
i
Q
frac{partial Q_i}{partial W_i^Q}
∂WiQ∂Qi:
Q
i
=
Q
W
i
Q
Q_i = Q W_i^Q
Qi=QWiQ,因此:
∂
Q
i
∂
W
i
Q
=
Q
T
frac{partial Q_i}{partial W_i^Q} = Q^T
∂WiQ∂Qi=QT
合并梯度:
∂
L
∂
W
i
Q
=
(
∂
L
∂
head
i
⋅
∂
head
i
∂
Q
i
)
⋅
Q
T
frac{partial mathcal{L}}{partial W_i^Q} = left( frac{partial mathcal{L}}{partial ext{head}_i} cdot frac{partial ext{head}_i}{partial Q_i}
ight) cdot Q^T
∂WiQ∂L=(∂headi∂L⋅∂Qi∂headi)⋅QT
其他参数(
W
i
K
,
W
i
V
,
W
O
W_i^K, W_i^V, W^O
WiK,WiV,WO)的梯度推导类似,最终所有梯度通过 Adam 优化器更新,确保模型收敛。
5 核心组件深度解析(二):掩码机制与位置编码
Transformer 无循环结构,需通过 “掩码机制” 确保自回归生成,通过 “位置编码” 注入序列顺序信息。这两个组件是 Transformer 能正确建模序列的关键。
5.1 初学者视角:掩码机制是什么?为什么需要它?
掩码机制的本质是 “屏蔽无效信息”,确保模型在生成输出时 “不偷看未来”。
以机器翻译任务为例,当生成英文句子 “I love machine learning” 时:
生成第 1 个词 “I” 时,只能用 “无”(或特殊的 “” 符号)作为上下文;
生成第 2 个词 “love” 时,只能用 “I” 作为上下文;
生成第 3 个词 “machine” 时,只能用 “I love” 作为上下文;
生成第 4 个词 “learning” 时,只能用 “I love machine” 作为上下文。
若模型能看到未来的词(如生成 “love” 时看到 “machine”),训练时会 “作弊”—— 依赖未来信息调整当前词的预测,但推理时(实际生成时)没有未来信息,导致生成的句子语法混乱(如 “I machine love learning”)。
掩码机制通过 “将未来位置的注意力权重设为$ -infty $”,让模型无法关注未来信息,确保训练与推理的逻辑一致。
5.2 深入研究:掩码机制的实现细节
5.2.1 掩码矩阵的构造
掩码矩阵是一个
L
t
×
L
t
L_t imes L_t
Lt×Lt的方阵(
L
t
L_t
Lt为目标序列长度),其元素满足:
Mask
i
,
j
=
{
0
j
≤
i
−
∞
j
>
i
ext{Mask}_{i,j} =
{0−∞j≤ij>i{0j≤i−∞j>i
Maski,j={0−∞j≤ij>i
例如,当
L
t
=
4
L_t=4
Lt=4时,掩码矩阵为:
Mask
=
[
0
−
∞
−
∞
−
∞
0
0
−
∞
−
∞
0
0
0
−
∞
0
0
0
0
]
ext{Mask} =
⎡⎣⎢⎢⎢0000−∞000−∞−∞00−∞−∞−∞0⎤⎦⎥⎥⎥[0−∞−∞−∞00−∞−∞000−∞0000]
Mask=
0000−∞000−∞−∞00−∞−∞−∞0
5.2.2 掩码在注意力计算中的作用
掩码机制在 “缩放点积” 后、“Softmax” 前生效,具体步骤为:
计算 Query 与 Key 的相似度矩阵:
S
=
Q
K
T
/
d
k
S = Q K^T / sqrt{d_k}
S=QKT/dk
(维度
L
t
×
L
t
L_t imes L_t
Lt×Lt);
将相似度矩阵与掩码矩阵元素 – wise 相加:
S
masked
=
S
+
Mask
S_{ ext{masked}} = S + ext{Mask}
Smasked=S+Mask;
对
S
masked
S_{ ext{masked}}
Smasked应用 Softmax:
α
=
softmax
(
S
masked
)
alpha = ext{softmax}(S_{ ext{masked}})
α=softmax(Smasked)。
由于未来位置的
S
masked
S_{ ext{masked}}
Smasked元素为
−
∞
-infty
−∞,Softmax 后这些位置的权重趋近于 0(
softmax
(
−
∞
)
≈
0
ext{softmax}(-infty) approx 0
softmax(−∞)≈0),确保当前位置无法关注未来信息。
例如,当
L
t
=
4
L_t=4
Lt=4,相似度矩阵
S
S
S为:
S
=
[
1.2
0.8
0.5
0.3
0.9
1.5
0.7
0.4
0.6
0.9
1.8
0.6
0.4
0.7
1.2
2.0
]
S =
⎡⎣⎢⎢⎢1.20.90.60.40.81.50.90.70.50.71.81.20.30.40.62.0⎤⎦⎥⎥⎥[1.20.80.50.30.91.50.70.40.60.91.80.60.40.71.22.0]
S=
1.20.90.60.40.81.50.90.70.50.71.81.20.30.40.62.0
加掩码后:
S
masked
=
[
1.2
−
∞
−
∞
−
∞
0.9
1.5
−
∞
−
∞
0.6
0.9
1.8
−
∞
0.4
0.7
1.2
2.0
]
S_{ ext{masked}} =
⎡⎣⎢⎢⎢1.20.90.60.4−∞1.50.90.7−∞−∞1.81.2−∞−∞−∞2.0⎤⎦⎥⎥⎥[1.2−∞−∞−∞0.91.5−∞−∞0.60.91.8−∞0.40.71.22.0]
Smasked=
1.20.90.60.4−∞1.50.90.7−∞−∞1.81.2−∞−∞−∞2.0
Softmax 后的权重矩阵为:
α
≈
[
1.0
0
0
0
0.3
0.7
0
0
0.1
0.2
0.7
0
0.05
0.1
0.25
0.6
]
alpha approx
⎡⎣⎢⎢⎢1.00.30.10.0500.70.20.1000.70.250000.6⎤⎦⎥⎥⎥[1.00000.30.7000.10.20.700.050.10.250.6]
α≈
1.00.30.10.0500.70.20.1000.70.250000.6
可见,第 1 个位置仅关注自身,第 2 个位置关注第 1-2 个位置,第 3 个位置关注第 1-3 个位置,第 4 个位置关注第 1-4 个位置,完全符合自回归生成的要求。
5.3 初学者视角:为什么需要位置编码?
Transformer 的自注意力机制是 “置换不变” 的 —— 即对输入序列的元素进行重新排列后,自注意力的输出也会同步排列,模型无法区分序列的顺序。
例如,输入序列 “猫 追 狗” 和 “狗 追 猫”,若不加入位置信息,自注意力计算的相似度矩阵完全相同(仅 Q、K 的顺序变化,元素值不变),模型会认为两个序列的语义相同,这显然不符合实际。
位置编码的作用是显式向模型注入序列的顺序信息,让模型能区分不同位置的元素,理解 “猫追狗” 与 “狗追猫” 的差异。
5.4 深入研究:位置编码的设计与数学原理
Transformer 采用 “正弦余弦位置编码”,而非 “可学习的位置编码”,其设计基于 “周期性” 和 “相对位置保留” 的原则。
5.4.1 正弦余弦位置编码的公式
对于序列中位置为
p
o
s
pos
pos(从 0 开始)的元素,其位置编码向量
PE
p
o
s
∈
R
d
m
o
d
e
l
ext{PE}_{pos} in mathbb{R}^{d_{model}}
PEpos∈Rdmodel的第
i
i
i个维度(
i
i
i从 0 开始)定义为:
PE
p
o
s
,
2
i
=
sin
(
p
o
s
10000
2
i
/
d
m
o
d
e
l
)
ext{PE}_{pos, 2i} = sinleft( frac{pos}{10000^{2i / d_{model}}}
ight)
PEpos,2i=sin(100002i/dmodelpos)
PE
p
o
s
,
2
i
+
1
=
cos
(
p
o
s
10000
2
i
/
d
m
o
d
e
l
)
ext{PE}_{pos, 2i+1} = cosleft( frac{pos}{10000^{2i / d_{model}}}
ight)
PEpos,2i+1=cos(100002i/dmodelpos)
其中:
2
i
2i
2i表示偶数维度,用正弦函数;
2
i
+
1
2i+1
2i+1表示奇数维度,用余弦函数;
10000
2
i
/
d
m
o
d
e
l
10000^{2i / d_{model}}
100002i/dmodel是周期的分母,控制正弦 / 余弦函数的周期大小。
5.4.2 核心优势:相对位置保留
正弦余弦位置编码的最大优势是能天然保留相对位置信息—— 对于任意固定的相对距离
k
k
k,位置
p
o
s
+
k
pos+k
pos+k的编码向量可由位置
p
o
s
pos
pos的编码向量线性表示。
根据三角函数的和角公式:
sin
(
A
+
B
)
=
sin
A
cos
B
+
cos
A
sin
B
sin(A + B) = sin A cos B + cos A sin B
sin(A+B)=sinAcosB+cosAsinB
cos
(
A
+
B
)
=
cos
A
cos
B
−
sin
A
sin
B
cos(A + B) = cos A cos B – sin A sin B
cos(A+B)=cosAcosB−sinAsinB
令
A
=
p
o
s
/
10000
2
i
/
d
m
o
d
e
l
A = pos / 10000^{2i / d_{model}}
A=pos/100002i/dmodel,
B
=
k
/
10000
2
i
/
d
m
o
d
e
l
B = k / 10000^{2i / d_{model}}
B=k/100002i/dmodel,则:
PE
p
o
s
+
k
,
2
i
=
sin
(
A
+
B
)
=
PE
p
o
s
,
2
i
⋅
cos
B
+
PE
p
o
s
,
2
i
+
1
⋅
sin
B
ext{PE}_{pos+k, 2i} = sin(A + B) = ext{PE}_{pos, 2i} cdot cos B + ext{PE}_{pos, 2i+1} cdot sin B
PEpos+k,2i=sin(A+B)=PEpos,2i⋅cosB+PEpos,2i+1⋅sinB
PE
p
o
s
+
k
,
2
i
+
1
=
cos
(
A
+
B
)
=
PE
p
o
s
,
2
i
+
1
⋅
cos
B
−
PE
p
o
s
,
2
i
⋅
sin
B
ext{PE}_{pos+k, 2i+1} = cos(A + B) = ext{PE}_{pos, 2i+1} cdot cos B – ext{PE}_{pos, 2i} cdot sin B
PEpos+k,2i+1=cos(A+B)=PEpos,2i+1⋅cosB−PEpos,2i⋅sinB
可见,
PE
p
o
s
+
k
ext{PE}_{pos+k}
PEpos+k是
PE
p
o
s
ext{PE}_{pos}
PEpos的线性组合,组合系数仅与
k
k
k(相对距离)有关,与
p
o
s
pos
pos(绝对位置)无关。这意味着模型在学习 “位置
p
o
s
pos
pos与
p
o
s
+
k
pos+k
pos+k的依赖” 时,无需额外学习绝对位置的映射,只需学习相对距离
k
k
k对应的系数,大幅降低学习难度。
例如,当
k
=
3
k=3
k=3时,模型只需学习
cos
B
cos B
cosB和
sin
B
sin B
sinB两个系数,就能理解 “任意位置与它后面第 3 个位置的关系”,而无需为每个位置单独学习。
5.4.3 与可学习位置编码的对比
除了正弦余弦编码,另一种常见的位置编码是 “可学习的位置编码”—— 即随机初始化一个
L
m
a
x
×
d
m
o
d
e
l
L_{max} imes d_{model}
Lmax×dmodel的矩阵(
L
m
a
x
L_{max}
Lmax为训练时的最大序列长度),随模型一起训练。
两种位置编码的对比:
对比维度 | 正弦余弦位置编码 | 可学习位置编码 |
---|---|---|
泛化性 | 强(可处理任意长度序列) | 弱(无法处理
> L m a x >L_{max} >Lmax的序列) |
参数数量 | 0(无额外参数) |
L m a x × d m o d e l L_{max} imes d_{model} Lmax×dmodel(如 L m a x = 512 L_{max}=512 Lmax=512时为 262144) |
训练稳定性 | 高(初始化固定,无训练波动) | 低(初始化随机,需稳定训练) |
相对位置建模 | 天然支持(线性组合) | 需额外学习(通过注意力权重) |
原论文通过实验验证,两种位置编码的性能相近(英德翻译开发集 BLEU 分数相差 0.1),但正弦余弦编码的泛化性更强,因此被选为默认方案。后续研究(如 BERT)采用可学习位置编码,是因为 BERT 的预训练序列长度固定(512),且可学习编码能更好地适配双向注意力场景,但这并不否定正弦余弦编码的有效性。
6 核心组件深度解析(三):前馈网络与残差连接
前馈网络(FFN)负责非线性特征变换,残差连接负责缓解梯度消失,两者与注意力机制协同工作,构成 Transformer 的完整功能模块。
6.1 初学者视角:前馈网络是什么?它做了什么?
前馈网络(FFN)是一个 “简单的两层神经网络”,其核心作用是对每个位置的向量进行独立的非线性变换。
在 Transformer 中,注意力机制的输出是 “全局依赖的线性融合”(如 “我 爱 机器学习” 的向量融合了全句信息),但线性融合无法捕捉复杂的语义关系(如 “爱” 与 “机器学习” 的动宾关系、“机器学习” 的名词短语属性)。FFN 通过 “线性变换 + ReLU 激活” 引入非线性,让模型能学习这些复杂特征。
例如,“爱” 的向量经过 FFN 后,会强化 “动作” 相关的特征,弱化无关特征;“机器学习” 的向量经过 FFN 后,会强化 “名词短语” 相关的特征,从而让后续层能更准确地捕捉语义依赖。
6.2 深入研究:前馈网络的数学原理与设计
6.2.1 数学公式与结构
Transformer 中的 FFN 由两个线性变换和一个 ReLU 激活函数组成,公式为:
FFN
(
x
)
=
max
(
0
,
x
W
1
+
b
1
)
W
2
+
b
2
ext{FFN}(x) = maxleft(0, x W_1 + b_1
ight) W_2 + b_2
FFN(x)=max(0,xW1+b1)W2+b2
其中:
x
∈
R
d
m
o
d
e
l
x in mathbb{R}^{d_{model}}
x∈Rdmodel:单个位置的输入向量;
W
1
∈
R
d
m
o
d
e
l
×
d
f
f
W_1 in mathbb{R}^{d_{model} imes d_{ff}}
W1∈Rdmodel×dff:第一层线性变换的权重矩阵;
b
1
∈
R
d
f
f
b_1 in mathbb{R}^{d_{ff}}
b1∈Rdff:第一层偏置;
W
2
∈
R
d
f
f
×
d
m
o
d
e
l
W_2 in mathbb{R}^{d_{ff} imes d_{model}}
W2∈Rdff×dmodel:第二层线性变换的权重矩阵;
b
2
∈
R
d
m
o
d
e
l
b_2 in mathbb{R}^{d_{model}}
b2∈Rdmodel:第二层偏置;
d
f
f
=
2048
d_{ff}=2048
dff=2048(论文设定):FFN 的中间层维度;
max
(
0
,
⋅
)
max(0, cdot)
max(0,⋅):ReLU 激活函数,引入非线性。
FFN 的结构可概括为 “维度扩张→非线性激活→维度压缩”:
维度扩张:
x
W
1
+
b
1
x W_1 + b_1
xW1+b1将
d
m
o
d
e
l
=
512
d_{model}=512
dmodel=512维向量扩张到
d
f
f
=
2048
d_{ff}=2048
dff=2048维,高维空间能提供更丰富的特征表达,让模型能区分细微的语义差异(如 “爱” 与 “喜欢” 的情感强度差异);
ReLU 激活:
max
(
0
,
x
W
1
+
b
1
)
max(0, x W_1 + b_1)
max(0,xW1+b1)将负数值置 0,保留正数值,这相当于 “筛选有效特征”—— 只有对当前任务有用的特征会被保留,无用特征被抑制;
维度压缩:
⋅
W
2
+
b
2
cdot W_2 + b_2
⋅W2+b2将 2048 维向量压缩回 512 维,确保 FFN 的输出维度与输入维度一致,适配残差连接。
6.2.2 关键特性:逐位置独立与参数共享
(1)逐位置独立
FFN 对序列中每个位置的向量单独处理,不同位置之间无信息交互。例如,序列 “我 爱 机器学习” 中,“我” 的向量、“爱” 的向量、“机器学习” 的向量会分别经过 FFN,彼此之间不影响。
这种设计的原因是:位置间的依赖已由注意力机制捕捉,FFN 的任务是 “加工单个位置的特征”,而非 “建立位置间的新依赖”。逐位置独立处理还能支持并行计算 —— 所有位置的 FFN 计算可同时执行,大幅提升效率。
(2)参数共享
FFN 的
W
1
,
b
1
,
W
2
,
b
2
W_1, b_1, W_2, b_2
W1,b1,W2,b2对序列中所有位置共享,即处理 “我” 和 “爱” 时使用同一套参数。
参数共享的优势:
减少参数数量:若每个位置使用独立参数,参数数量会增加
L
L
L倍(
L
L
L为序列长度),易导致过拟合;
提升泛化性:共享参数让 FFN 学习 “通用的特征变换规则”(如 “名词→名词短语”“动词→动作语义”),而非针对特定位置的 “专属规则”,能更好地适配不同长度的序列。
6.2.3 与 1×1 卷积的等价性
论文中明确指出:“FFN 也可视为两个核大小为 1 的卷积”。这是因为 1×1 卷积的核心作用是 “在通道维度(即特征维度)上进行线性变换,不改变空间维度(即序列长度)”,与 FFN 的逐位置处理逻辑完全一致。
具体来说:
对于序列数据,可将其视为 “通道数为
d
m
o
d
e
l
d_{model}
dmodel、高度为 1、宽度为
L
L
L的特征图”;
第一层 1×1 卷积:核大小为
1
×
1
1 imes 1
1×1,输出通道数为
d
f
f
d_{ff}
dff,对应 FFN 的
x
⋅
W
1
+
b
1
xcdot W_1 + b_1
x⋅W1+b1;
ReLU 激活:对应 FFN 的 ReLU;
第二层 1×1 卷积:核大小为
1
×
1
1 imes 1
1×1,输出通道数为
d
m
o
d
e
l
d_{model}
dmodel,对应 FFN 的
x
⋅
W
2
+
b
2
xcdot W_2 + b_2
x⋅W2+b2。
在实践中,FFN 与 1×1 卷积可互换,部分改进模型(如 ConvBERT)采用 1×1 卷积替代 FFN,性能相近,但 FFN 的实现更简单(无需处理卷积的 padding、stride 等参数),因此成为 Transformer 的默认选择。
6.3 初学者视角:残差连接是什么?它为什么能缓解梯度消失?
残差连接的直观理解是 “给模型加一条‘捷径’”—— 让输入能直接传递到输出,无需经过子层的复杂变换。
例如,当训练一个 100 层的深层网络时,若没有残差连接,梯度需经过 100 层权重矩阵的乘法,很容易衰减到 0;有了残差连接后,梯度可通过 “捷径” 直接从第 100 层回传到第 1 层,大幅减少衰减。
用通俗的比喻:残差连接像 “登山时的索道”,梯度无需一步步爬山(经过每层子层),可通过索道直接到达山顶(浅层),避免中途体力耗尽(梯度消失)。
6.4 深入研究:残差连接的数学证明与实现
6.4.1 残差连接的数学形式
Transformer 中的残差连接公式为:
y
=
LayerNorm
(
x
+
Sublayer
(
x
)
)
y = ext{LayerNorm}(x + ext{Sublayer}(x))
y=LayerNorm(x+Sublayer(x))
其中:
x
∈
R
L
×
d
m
o
d
e
l
x in mathbb{R}^{L imes d_{model}}
x∈RL×dmodel:子层(如多头自注意力、FFN)的输入;
Sublayer
(
x
)
∈
R
L
×
d
m
o
d
e
l
ext{Sublayer}(x) in mathbb{R}^{L imes d_{model}}
Sublayer(x)∈RL×dmodel:子层的输出;
x
+
Sublayer
(
x
)
x + ext{Sublayer}(x)
x+Sublayer(x):残差连接的核心,输入与子层输出的元素 – wise 加法;
LayerNorm
(
⋅
)
ext{LayerNorm}(cdot)
LayerNorm(⋅):层归一化,稳定输出分布。
6.4.2 残差连接缓解梯度消失的数学证明
我们通过 “泰勒展开” 证明残差连接能缓解梯度消失。
假设子层的输出为
Sublayer
(
x
)
=
F
(
x
)
ext{Sublayer}(x) = F(x)
Sublayer(x)=F(x)(
F
(
x
)
F(x)
F(x)为子层的变换函数),则残差连接的输出为:
y
=
x
+
F
(
x
)
y = x + F(x)
y=x+F(x)
反向传播时,损失
L
mathcal{L}
L对输入
x
x
x的梯度为:
∂
L
∂
x
=
∂
L
∂
y
⋅
∂
y
∂
x
=
∂
L
∂
y
⋅
(
1
+
∂
F
(
x
)
∂
x
)
frac{partial mathcal{L}}{partial x} = frac{partial mathcal{L}}{partial y} cdot frac{partial y}{partial x} = frac{partial mathcal{L}}{partial y} cdot left( 1 + frac{partial F(x)}{partial x}
ight)
∂x∂L=∂y∂L⋅∂x∂y=∂y∂L⋅(1+∂x∂F(x))
若没有残差连接(
y
=
F
(
x
)
y = F(x)
y=F(x)),梯度为:
∂
L
∂
x
=
∂
L
∂
y
⋅
∂
F
(
x
)
∂
x
frac{partial mathcal{L}}{partial x} = frac{partial mathcal{L}}{partial y} cdot frac{partial F(x)}{partial x}
∂x∂L=∂y∂L⋅∂x∂F(x)
当网络较深时,
∂
F
(
x
)
∂
x
frac{partial F(x)}{partial x}
∂x∂F(x)的绝对值通常小于 1(如 0.9),多次乘法后梯度会趋近于 0。例如,100 层网络的梯度为
∂
L
∂
y
×
0.9
100
≈
∂
L
∂
y
×
2.65
×
10
−
5
frac{partial mathcal{L}}{partial y} imes 0.9^{100} approx frac{partial mathcal{L}}{partial y} imes 2.65 imes 10^{-5}
∂y∂L×0.9100≈∂y∂L×2.65×10−5,几乎为 0。
有残差连接时,梯度为:
∂
L
∂
x
=
∂
L
∂
y
×
(
1
+
∂
F
(
x
)
∂
x
)
frac{partial mathcal{L}}{partial x} = frac{partial mathcal{L}}{partial y} imes (1 + frac{partial F(x)}{partial x})
∂x∂L=∂y∂L×(1+∂x∂F(x))
若
∂
F
(
x
)
∂
x
=
0.1
frac{partial F(x)}{partial x} = 0.1
∂x∂F(x)=0.1(子层对输入的影响较小),则
1
+
0.1
=
1.1
1 + 0.1 = 1.1
1+0.1=1.1,梯度会被放大;若
∂
F
(
x
)
∂
x
=
−
0.1
frac{partial F(x)}{partial x} = -0.1
∂x∂F(x)=−0.1,则
1
−
0.1
=
0.9
1 – 0.1 = 0.9
1−0.1=0.9,梯度衰减缓慢;即使
∂
F
(
x
)
∂
x
=
0
frac{partial F(x)}{partial x} = 0
∂x∂F(x)=0,梯度仍为
∂
L
∂
y
×
1
=
∂
L
∂
y
frac{partial mathcal{L}}{partial y} imes 1 = frac{partial mathcal{L}}{partial y}
∂y∂L×1=∂y∂L,无衰减。
因此,残差连接能确保梯度在深层网络中保持较大数值,有效缓解梯度消失。
6.4.3 残差连接与层归一化的顺序
Transformer 采用 “预激活” 的层归一化顺序(
LayerNorm
(
x
+
F
(
x
)
)
ext{LayerNorm}(x + F(x))
LayerNorm(x+F(x))),而非 “后激活”(
x
+
LayerNorm
(
F
(
x
)
)
x + ext{LayerNorm}(F(x))
x+LayerNorm(F(x)))。这种顺序的优势是:
层归一化作用于 “输入 + 子层输出”,能更有效地稳定输入分布;
子层输出
F
(
x
)
F(x)
F(x)未经过归一化,保留了子层的原始特征,避免归一化导致的信息丢失。
后续研究(如 BERT)验证了这种顺序的有效性,成为 Transformer 类模型的标准设计。
(篇幅有限,后续内容见链接)
Transformer 模型全景分析报告:从基础原理到深度实践(二)