Transformer 模型
本文内容基于 Attention is all you need 论文。
工作流
本节对 Transformer 的训练推理工作流、Encoder 和 Decoder 工作流做出解释。
训练推理工作流
训练阶段,输入序列经过 N 个 Encoder 模块输出矩阵 K K K、 V V V,这些矩阵包含了输入序列的全局信息,不会再重复生成。
第一个 Decoder 模块接收起始提示符经过基于掩码的多头注意力块,生成矩阵 Q Q Q,和来自 Encoder 模块的矩阵 K K K、 V V V 一起输入到多头注意力块,后面经过前馈全连接网络等模块,并将结果输出给第二个 Decoder 模块,重复过程,直到第 N 个模块输出。
Encoder 工作流
整个 Encoder 模块由 6 个相同的子 Encoder 模块顺序连接构成,第一个 Encoder 接收输入,经过多头注意力、前馈全连接网络、残差连接和正则化后,输出给下一个 Encoder 模块,最后一个 Encoder 模块输出 Q、V 矩阵给 Decoder 模块。
Decoder 工作流
模块详解
本节对 Transformer 中每个最小单位的模块做出解释。
输入及编码
位置编码
位置编码(Postional Encoding)
Attention
缩放点积注意力
缩放点积注意力(Scaled Dot-Product Attention)
操作步骤:
输入一个序列 X X X,分别与 W Q W_Q WQ、 W K W_K WK 、 W V W_V WV 三个权重矩阵做矩阵乘法,计算得到三个矩阵 Q Q Q、 K K K、 V V V。
然后矩阵 Q Q Q 和 K K K 做矩阵乘法,缩放因子 d k d_k dk,softmax,和矩阵 V V V 做乘法
数学公式:
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V)=softmax(\frac{Q K^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dkQKT)V
上式中,缩放因子 d k \sqrt{d_k} dk 用于标准化为 N ( 0 , 1 ) N(0,1) N(0,1)。
Multi-head attention
多头注意力机制允许模型在不同的子空间中学习不同的特征,每个头都有不同的 Q Q Q、 K K K、 V V V,最后将所有头的输出通过一个线性层拼接。
M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , . . . , h e a d h ) W O h e a d i = A t t e n t i o n ( Q W i Q , K W i K , V W i V ) \begin{align*} & MultiHead(Q,K,V)=Concat(head_1, ..., head_h)W^O \\ & head_i = Attention(QW_i^Q,KW_i^K,VW_i^V) \end{align*} MultiHead(Q,K,V)=Concat(head1,...,headh)WOheadi=Attention(QWiQ,KWiK,VWiV)
问题:下面三个 Linear 是什么?
增加解释:self-attention、解码器和编码器中的几个 attention 的区别
前馈全连接网络
前馈全链接网络(Position-wise Feed-Forward Networks)用于变换数据维度,包括:两个全连接层和一个 RELU 激活层,数学上表示为:
F
F
N
(
x
)
=
m
a
x
(
0
,
W
1
x
+
b
1
)
W
2
+
b
2
FFN(x)=max(0, W_1 x + b_1)W_2 + b_2
FFN(x)=max(0,W1x+b1)W2+b2
上式中,
W
1
x
+
b
1
W_1 x + b_1
W1x+b1 为第一层全连接层,
m
a
x
(
0
,
W
1
x
+
b
1
)
max(0, W_1 x + b_1)
max(0,W1x+b1) 为 RELU 激活函数,
(
)
W
2
+
b
2
()W_2 + b_2
()W2+b2 为第二层全连接层。
W
1
W_1
W1 为,
W
2
W_2
W2 为
Add & Norm
这部分由残差连接(Residual Connection)和层归一化(Layer Norm)构成。
残差连接是一种常见的深度学习技巧,它将输出和其输入相连来实现,数学上表示为:
R e s i d u a l = x + R e s i d u a l ( x ) Residual = x + Residual(x) Residual=x+Residual(x)
上式中, x x x 为残差连接层的输入, R e s i d u a l ( x ) Residual(x) Residual(x) 为残差连接层的输出。
作用:缓解深层网络中的梯度消失问题。
层归一化可以理解为对同样本的不同特征维度的归一化。
作用:稳定训练过程、提高模型稳定性、减少梯度消失和爆炸
自注意力机制
自注意力机制(Self Attention)定义为将单个序列或句子的不同位置关联起来获得更有效表示的机制。
Transformer 相较于 RNN 的改进
- 并行计算
- 因为 attention 机制能一次获取全局信息,所以最长计算路径短
- 可以捕捉长距离依赖关系
Layer Type | Complexity per Layer | Sequential Operations | Maximum Path Length |
---|---|---|---|
Self-Attention | O ( n 2 ⋅ d ) O(n²·d) O(n2⋅d) | O ( 1 ) O(1) O(1) | O ( 1 ) O(1) O(1) |
Recurrent | O ( n ⋅ d 2 ) O(n·d²) O(n⋅d2) | O ( n ) O(n) O(n) | O ( n ) O(n) O(n) |
Convolutional | O ( k ⋅ n ⋅ d 2 ) O(k·n·d²) O(k⋅n⋅d2) | O ( 1 ) O(1) O(1) | O ( l o g k ( n ) ) O(log_k(n)) O(logk(n)) |
Self-Attention (restricted) | O ( r ⋅ n ⋅ d ) O(r·n·d) O(r⋅n⋅d) | O ( 1 ) O(1) O(1) | O ( n / r ) O(n/r) O(n/r) |
参考资料:
The Illustrated Transformer – Jay Alammar – Visualizing machine learning one concept at a time. 该文章的中译版本:细节拉满,全网最详细的Transformer介绍(含大量插图)! - 知乎、Transformer 的训练与推理 | 暗香画楼
Transformer常见问题与回答总结 - 知乎:用于检测是否理解了 Transformer 模型
Encoder 模块的代码复现视频