1. 前言
前情提要
《NLP深入学习:大模型背后的Transformer模型究竟是什么?(一)》
上文讲到了当前的主流大模型,如 GPT 背后的底层核心技术,就是谷歌2017年论文《Attention Is All You Need》提到的 Transformer 模型。
前文主要讲解输入部分内容!本文讲解核心的 Self-Attention 机制
2. 整体架构
我们再来回顾下 Transformer 的整体架构:
3. 编码器&解码器
3.1 自注意力机制( Self-Attention mechanism)
我们假设有 batch_size 的语句数量,一个语句序列的组成是
C
1
C
2
C
3
C
4
C
5
C
6
C1C2C3C4C5C6
C1C2C3C4C5C6,自注意力机制的流程如下:
下面来解释论文中的关键公式:
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{QK^T}{\sqrt {d_k}})V
Attention(Q,K,V)=softmax(dkQKT)V
其中 Q,K,V 据论文描述是 Query、Key 和 Value 单词的缩写。
Q
=
X
e
m
b
e
d
d
i
n
g
W
Q
,
K
=
X
e
m
b
e
d
d
i
n
g
W
K
,
V
=
X
e
m
b
e
d
d
i
n
g
W
V
Q=X_{embedding}W_Q,K=X_{embedding}W_K,V=X_{embedding}W_V
Q=XembeddingWQ,K=XembeddingWK,V=XembeddingWV
维度关系如下:
X
e
m
b
e
d
d
i
n
g
∈
R
b
a
t
c
h
_
s
i
z
e
∗
s
e
q
_
l
e
n
∗
e
m
b
e
d
_
d
i
m
X_{embedding} \in R^{batch\_size*seq\_len*embed\_dim}
Xembedding∈Rbatch_size∗seq_len∗embed_dim
W
Q
∈
R
e
m
b
e
d
_
d
i
m
∗
e
m
b
e
d
_
d
i
m
W_Q \in R^{embed\_dim*embed\_dim}
WQ∈Rembed_dim∗embed_dim
W
K
∈
R
e
m
b
e
d
_
d
i
m
∗
e
m
b
e
d
_
d
i
m
W_K \in R^{embed\_dim*embed\_dim}
WK∈Rembed_dim∗embed_dim
W
V
∈
R
e
m
b
e
d
_
d
i
m
∗
e
m
b
e
d
_
d
i
m
W_V \in R^{embed\_dim*embed\_dim}
WV∈Rembed_dim∗embed_dim
ps: b a t c h _ s i z e batch\_size batch_size 表示有多少条语句, s e q _ l e n seq\_len seq_len 表示语句序列长度, e m b e d _ d i m embed\_dim embed_dim 表示词向量维度
3.1.1 Q K T QK^T QKT 的解释说明
先来看
Q
K
T
QK^T
QKT 的计算过程吧,计算示意图如下(我们先忽略
W
Q
,
W
K
W_Q,W_K
WQ,WK 权重变换):
拿图中的
C
1
C
5
C1C5
C1C5 为例,即表示
C
1
C1
C1 词向量与
C
5
C5
C5 词向量的接近程度。这个如何理解呢,我们可以借助中学的向量内积公式来说明:
A
→
B
→
=
∣
A
∣
∣
B
∣
c
o
s
θ
\overrightarrow{A} \overrightarrow{B} = |A||B|cos\theta
AB=∣A∣∣B∣cosθ
- 当夹角为90度时,结果为0,说明两者没有关系,即 A 向量在 B 向量的投影为0;
- 当夹角为0度时,说明两者关系密切,即 A 向量在 B 向量的投影最大;
换句话说, C 1 C 1 , C 1 C 2 , C 1 C 3 , C 1 C 4 , C 1 C 5 C1C1, C1C2,C1C3,C1C4,C1C5 C1C1,C1C2,C1C3,C1C4,C1C5 表示了 C 1 , C 2 , C 3 , C 4 , C 5 C1,C2,C3,C4,C5 C1,C2,C3,C4,C5 与 C 1 C1 C1 的相近程度!
除以 d k \sqrt {d_k} dk 是为了把 Q K T QK^T QKT 矩阵变成标准正态分布,使得 softmax 归一化之后的结果更加稳定以便反向传播的时候获取平衡的梯度。
3.1.2 softmax 的作用
我们知道
Q
K
T
QK^T
QKT 的含义之后,紧接着用 softmax 归一化。
Softmax 函数是一种将一个 K 维实数向量(或矩阵的最后一维)转化为一个归一化概率分布的函数。在机器学习和深度学习中,尤其是在多分类问题中,softmax 函数常常被用作输出层的激活函数,将模型预测的原始得分转换为概率值。
softmax 函数的数学表达式为:
对于一个 K 维向量 z = [ z 1 , z 2 , . . . , z K ] z = [z_1, z_2, ..., z_K] z=[z1,z2,...,zK],softmax 函数的输出向量 s s s 定义为:
s j = e z j ∑ k = 1 K e z k , j = 1 , 2 , . . . , K s_j = \frac{e^{z_j}}{\sum_{k=1}^{K} e^{z_k}}, \quad j = 1, 2, ...,K sj=∑k=1Kezkezj,j=1,2,...,K
softmax 函数的输出满足以下性质:
- 输出值的范围都在 (0, 1) 之间。
- 输出向量的所有元素之和等于1,即形成了一个有效的概率分布。
在多分类问题中,softmax 函数能够确保模型的输出表示了各类别的概率分布,且最大的那个输出值对应了模型预测最有可能的类别。例如,在图像分类任务中,softmax 层的输出向量可以解读为模型认为图像属于各个类别的概率。
⋆ \Large\textcolor{red}\star ⋆ 简单点说 softmax 函数将 C 1 , C 2 , C 3 , C 4 , C 5 C1,C2,C3,C4,C5 C1,C2,C3,C4,C5 与 C 1 C1 C1 的相近程度转换成了权重分布(且权重之和为1),也就是说越接近 C 1 C1 C1 则权重越大。
得到的矩阵就是一个注意力权重的概率分布,即注意力矩阵!
费这么大劲,得到这么一个矩阵有什么用呢?咱们接着往下看!
3.1.3 s o f t m a x ( Q K T d k ) V softmax(\frac{QK^T}{\sqrt {d_k}})V softmax(dkQKT)V
最后再将上面 softmax 得到的结果乘于
V
V
V,即
s
o
f
t
m
a
x
(
Q
K
T
d
k
)
V
softmax(\frac{QK^T}{\sqrt {d_k}})V
softmax(dkQKT)V 示意图如下:
看图中灰色的计算过程,上面说了左边
s
o
f
t
m
a
x
(
Q
K
T
d
k
)
softmax(\frac{QK^T}{\sqrt {d_k}})
softmax(dkQKT) 的结果是注意力矩阵,注意力权重的和为1。用注意力矩阵的权重给
V
V
V 进行加权,从而使每个字向量都含有当前句子内所有字向量的信息。
⋆ \Large\textcolor{red}\star ⋆ 简单点说 ,为了让当前字向量含有其他字的信息。
在论文里
s
o
f
t
m
a
x
(
Q
K
T
d
k
)
V
softmax(\frac{QK^T}{\sqrt {d_k}})V
softmax(dkQKT)V 称为 “Scaled Dot-Product Attention” ,即下图:
3.1.4 Multi-Head Attention
我们看论文里 Multi-Head Attention 公式是如何定义的:
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
MultiHead(Q,K,V)=Concat(head_1,....,head_h)W^O
MultiHead(Q,K,V)=Concat(head1,....,headh)WO
其中,
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
)
head_i=Attention(QW_i^Q,KW_i^K,VW_i^V)
headi=Attention(QWiQ,KWiK,VWiV)
W i Q ∈ R e m b e d _ d i m × d k , W i K ∈ R e m b e d _ d i m × d k , W i V ∈ R e m b e d _ d i m × d v , W O V ∈ R h d v × e m b e d _ d i m W_i^Q\in R^{embed\_dim \times d_k}, W_i^K\in R^{embed\_dim \times d_k}, W_i^V\in R^{embed\_dim \times d_v},W_O^V\in R^{hd_v \times embed\_dim} WiQ∈Rembed_dim×dk,WiK∈Rembed_dim×dk,WiV∈Rembed_dim×dv,WOV∈Rhdv×embed_dim
对于论文中而言, d k = d v = e m b e d _ d i m / h d_k=d_v=embed\_dim/h dk=dv=embed_dim/h,而 h 就是所谓的 heads
我们来逐步拆解分析上公式中的含义:
(1)我们先来看一下
Q
W
i
Q
QW_i^Q
QWiQ 得到的矩阵长什么样子。
Q
∈
R
s
e
q
_
l
e
n
×
e
m
b
e
d
_
d
i
m
Q\in R^{seq\_len \times embed\_dim}
Q∈Rseq_len×embed_dim,
W
i
Q
∈
R
e
m
b
e
d
_
d
i
m
×
d
k
W_i^Q\in R^{embed\_dim \times d_k}
WiQ∈Rembed_dim×dk,那么
Q
W
i
Q
∈
R
s
e
q
_
l
e
n
×
d
k
QW_i^Q \in R^{seq\_len \times d_k}
QWiQ∈Rseq_len×dk
假设 heads=2,即
d
k
=
e
m
b
e
d
_
d
i
m
/
h
=
e
m
b
e
d
_
d
i
m
/
2
d_k=embed\_dim / h = embed\_dim / 2
dk=embed_dim/h=embed_dim/2,换句话说,
Q
Q
Q 经过
W
i
W_i
Wi 的线性变换之后,达到了类似一种切分的效果,把原先的词向量维度切分成 2 份,如下图:
论文中 heads=8,也就是切成了8份。注意我们是方便理解简化成切成了8份,实际是有线性变换的,拼起来不一定等于原来的结果。
其他的 K W i K , V W i V KW_i^K,VW_i^V KWiK,VWiV 也是一样的含义!
(2)拿其中一个 head 做一次运算,如下图:
其中一个 head 运算完成后,得到一半维度的结果;那么另外一个 head 运算完成后,则会得到另外一半维度的结果。
最后的结果拼接起来,就是论文中公式的含义,只不过论文最后再增加了一次
W
O
W^O
WO 的线性变换:
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
MultiHead(Q,K,V)=Concat(head_1,....,head_h)W^O
MultiHead(Q,K,V)=Concat(head1,....,headh)WO
不同的部分可以学习单词不同维度里的信息,这里有点类似 CNN 的卷积核。
经过上面的讲解之后再来看论文里的这张图就比较容易理解了:
图中:
- V , K , Q V,K,Q V,K,Q 经过 Linear 拆分之后,得到 heads 个矩阵
- 每一矩阵分别进行 A t t e n t i o n Attention Attention 公式计算,即图中的 Scaled Dot-Product Attention
- 最后 Concat 拼接起来,维度又恢复到 embed_dim
- 最后一个 Linear 操作就是公式中的 W O W^O WO
3.1.5 论文可视化图的解释
在论文的附录中有一些自注意力机制的可视化图,我尝试说明一下论文中可视化图中的含义,如下:
首先,图中左边每一个字会对应8个不同颜色的方块(有些字论文没有画出来),最明显的是 difficult
其实这说明了 heads=8,因为每一个字转换成 Embedding 向量后,又被拆分成 heads 个部分,每一个颜色就对应一个 head 部分,所以 heads=8
其次,图中关注的是 making 这个单词与上下文哪个单词关系密切。making 有多条连线,颜色各不相同,例如连接到 difficult 的这条线,颜色为深褐色,和 difficult 的第3个 head 部分颜色接近,说明 making 与 difficult 的第3个 head 特征关系密切。同理,making 与 more 的第1个 head 特征关系密切,因为颜色都是灰色。
这就是我对论文 Multi-Head Attention 的可视化描述的理解!
3.2 残差连接和 Layer Normalization
上面内容很多,也是论文的核心内容,我们看看进度到了哪里:
3.2.1 残差连接
我们在图中看到了将输入连接到输出,这是残差连接(Residual Connection),是深度学习中的一种网络结构设计技巧,其核心理念是为了解决深度神经网络训练时遇到的梯度消失和爆炸问题,通过引入捷径路径,使得信息能够更快地穿过深层网络,从而改善模型的训练效果和性能。
在一个含有残差连接的网络结构中,输入信息不仅会经过一系列的层(如卷积层、全连接层等)进行变换,还会通过一个快捷路径直接传递到后面的层,然后将这两部分信息相加或融合在一起:
X
e
m
b
e
d
d
i
n
g
+
A
t
t
e
n
t
i
o
n
(
Q
,
K
,
V
)
X_{embedding} + Attention(Q,K,V)
Xembedding+Attention(Q,K,V)
通过残差连接,模型可以直接学习输入特征与输出特征之间的残差(或者说是差异),而不是直接学习复杂的映射关系,这样往往能更容易地优化网络,并允许网络更深。
3.2.2 Layer Normalization
Layer Normalization(层归一化)是一种用于深度学习模型中的归一化技术,是对单个样本内部的层输出进行归一化处理。能改善模型中的梯度传播问题,进而提高模型的训练效率和性能。
对于矩阵每一行
x
x
x,计算其均值
μ
\mu
μ 和方差
σ
2
\sigma^2
σ2:
μ
=
1
m
∑
i
=
1
m
x
i
\mu = \frac{1}{m} \sum_{i=1}^{m} x_i
μ=m1i=1∑mxi
σ
2
=
1
m
∑
i
=
1
m
(
x
i
−
μ
)
2
\sigma^2 = \frac{1}{m} \sum_{i=1}^{m} (x_i - \mu)^2
σ2=m1i=1∑m(xi−μ)2
其中, m m m为该层输出向量的维度, x i x_i xi 为一行的某个值。
归一化的结果如下:
L
a
y
e
r
N
o
r
m
(
x
)
=
γ
⋅
x
i
−
μ
σ
2
+
ϵ
+
β
LayerNorm(x) =\gamma \cdot \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta
LayerNorm(x)=γ⋅σ2+ϵxi−μ+β
其中,
ϵ
\epsilon
ϵ 是一个很小的常数(如1e-12),用于防止除以零的情况,
γ
\gamma
γ 和
β
\beta
β 分别是标量参数,通过反向传播和梯度下降进行学习。
3.2.3 Feed Forward
Transformer 模型中的 Feed Forward Network(FFN)是一个全连接的前馈神经网络结构,它是 Transformer 模型编码器和解码器模块中的关键组成部分之一。FFN 的设计目的是为模型提供额外的非线性转换能力,以提取更丰富的特征表示。
在每个 Transformer 层中,FFN 位于多头自注意力机制(Multi-Head Self-Attention)之后。其基本结构通常包含两个线性变换层,中间插入一个非线性激活函数,例如 ReLU(Rectified Linear Unit)。
具体结构如下:
(1) 第一层线性变换(通常称为隐藏层):
输入为自注意力机制输出的结果,记为
X
X
X。通过一个线性映射将输入转换为新的向量表示:
H
=
W
1
X
+
b
1
H = W_1X + b_1
H=W1X+b1
并通过 ReLU 激活函数进行非线性处理:
H
′
=
R
e
L
U
(
H
)
H' = ReLU(H)
H′=ReLU(H)
(2)第二层线性变换(通常称为输出层):
对 ReLU 激活后的向量
H
′
H'
H′ 再次进行线性映射,这次使用权重矩阵
W
2
W_2
W2 和偏置项
b
2
b_2
b2:
F
F
N
(
X
)
=
W
2
H
′
+
b
2
FFN(X) = W_2H' + b_2
FFN(X)=W2H′+b2
整个 Feed Forward Network 的计算可以表示为:
F
F
N
(
X
)
=
W
2
⋅
R
e
L
U
(
W
1
X
+
b
1
)
+
b
2
FFN(X) = W_{2} \cdot ReLU(W_1X + b_1) + b_2
FFN(X)=W2⋅ReLU(W1X+b1)+b2
通过这种方式,FFN 增加了模型的表达能力,因为它允许模型学习更复杂的非线性函数来对输入数据进行转换。此外,FFN 的维度通常大于自注意力层的隐藏尺寸,这被称为模型的内部维度(hidden dimension),这样可以在更高维度空间中进行转换后再映射回原来的维度,有助于模型学习更抽象的特征表示。
4. 输出
解码器在生成任务(如机器翻译)中,每一步都会输出一个向量,这个向量经过一个 Linear 和 Softmax 函数后,生成的是当前预测的下一个词的概率分布。在模型训练和推理阶段,可以选择概率最高的词作为当前预测结果,并作为下一步的输入。
5. 总结
Transformer 模型是一种革命性的深度学习架构,由 Vaswani 等人在2017年的论文《Attention Is All You Need》中首次提出,主要用于处理序列数据,尤其是在自然语言处理(NLP)领域产生了深远影响。Transformer 的核心特点是抛弃了循环神经网络(RNN)和长短期记忆网络(LSTM)在处理序列时的顺序依赖特性,转而采用全并行的自注意力机制来捕捉序列内部的长程依赖关系。
以下是Transformer模型的主要组成部分和工作原理:
-
自注意力机制:
自注意力机制允许模型在处理序列元素时考虑序列中所有其他位置的信息,为每个位置分配一个权重,突出重要的上下文信息。它包括三个主要部分:查询(Query)、键(Key)和值(Value)。通过对查询与键的相似度计算注意力权重,然后使用这些权重加权求和值向量,形成每个位置的上下文向量。 -
编码器(Encoder):
编码器由多个相同的层堆叠而成,每一层包括自注意力子层和前馈神经网络(Feedforward Neural Network, FFN)子层,以及残差连接(Residual Connections)和层归一化(Layer Normalization)。编码器将输入序列映射为一组高级抽象的向量表示,这些表示能够捕获整个输入序列的上下文信息。 -
解码器(Decoder):
解码器同样由多个类似的层组成,除了自注意力机制外,还包括了对编码器输出的注意力机制,确保在生成新序列的同时考虑到源序列的信息。解码器逐步生成输出序列,每一步都会产生一个条件概率分布,用来预测下一个词。 -
位置编码(Positional Encoding):
为了保持序列中的位置信息,Transformer引入了位置编码,直接添加到词嵌入上,以便模型区分输入序列中词的位置。 -
并行计算能力:
由于 Transformer 摆脱了 RNN 固有的顺序计算限制,它能够在 GPU 集群上高效地并行计算,极大地提升了训练和推断的速度。
总的来说,Transformer 模型在各种 NLP 任务中被广泛应用,如机器翻译、文本生成、文本摘要、问答系统等,并且其思想和变体被广泛集成到 BERT、GPT、T5 等众多预训练模型中,推动了 NLP 领域的快速发展。
6. 参考
《Attention Is All You Need》
《NLP深入学习:大模型背后的Transformer模型究竟是什么?(一)》
欢迎关注本人,我是喜欢搞事的程序猿; 一起进步,一起学习;
欢迎关注知乎:SmallerFL;
也欢迎关注我的wx公众号:一个比特定乾坤