Transformer 模型全景分析报告:从基础原理到深度实践(一)

摘要

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(Wh​ht−1​+Wx​xt​+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(Wh​ht−1​+Wx​xt​+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

logk​T层(如

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=1dk​​Qi,m​Kj,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,m​Kj,m​]=E[(Qi,m​Kj,m​)2]−(E[Qi,m​Kj,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=1dk​​1=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​​)=dk​1​×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(dk​Wa​[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(Lq​Lk​dk​)

O

(

L

q

L

k

d

k

)

O(L_q L_k d_k)

O(Lq​Lk​dk​)

计算效率 高(矩阵乘法可高度优化) 低(前馈网络计算慢)
空间复杂度 低(无需额外存储前馈网络参数) 高(需存储

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”);

输入层:将离散词转换为连续向量(词嵌入),并注入位置信息(位置编码);

输出层:将解码器的输出转换为词表上的概率分布,预测下一个词。

用通俗的比喻:编码器像 “理解原文的翻译官”,解码器像 “生成译文的翻译官”,注意力机制像 “翻译官查阅词典时聚焦关键信息的能力”。

Transformer 模型全景分析报告:从基础原理到深度实践(一)

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 深入研究:多头自注意力的数学原理

Transformer 模型全景分析报告:从基础原理到深度实践(一)

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​
​Qi​KiT​​)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=[head1​head2​…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(Lq​Lk​dmodel​)(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(Lq​Lk​dk​)=h×O(Lq​Lk​(dmodel​/h))=O(Lq​Lk​dmodel​);

可见,两者复杂度相同,但多头注意力能在多个子空间捕捉依赖,表达能力更强。

(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​=Qi​KiT​/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.4​0.81.50.90.7​0.50.71.81.2​0.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.05​00.70.20.1​000.70.25​0000.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/dmodel​pos​)

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/dmodel​pos​)

其中:

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 模型全景分析报告:从基础原理到深度实践(二)

© 版权声明

相关文章

暂无评论

none
暂无评论...