NLP深入学习:大模型背后的Transformer模型究竟是什么?(二)
NLP深入学习:大模型背后的Transformer模型究竟是什么?(二)
Transformer模型是自然语言处理领域的重要突破,其核心的自注意力机制改变了传统序列模型的处理方式。本文深入解析了Transformer模型的关键技术细节,包括自注意力机制、多头注意力、残差连接和层归一化等核心组件,帮助读者理解这一革命性模型的工作原理。
1. 前言
在上一篇文章中,我们介绍了当前主流大模型(如GPT)背后的底层核心技术——Transformer模型。本文将重点讲解Transformer模型的核心机制:自注意力机制。
2. 整体架构
Transformer模型的整体架构包括编码器(Encoder)和解码器(Decoder)两大部分。编码器负责将输入序列转换为高级抽象的向量表示,解码器则基于这些表示生成输出序列。
3. 编码器&解码器
3.1 自注意力机制(Self-Attention mechanism)
假设我们有batch_size个语句,每个语句序列由$C_1C_2C_3C_4C_5C_6$组成。自注意力机制的流程如下:
3.1.1 $QK^T$的解释说明
先来看$QK^T$的计算过程。计算示意图如下(忽略$W_Q, W_K$权重变换):
以$C_1C_5$为例,表示$C_1$词向量与$C_5$词向量的接近程度。这可以通过向量内积公式来理解:
$$
\overrightarrow{A} \overrightarrow{B} = |A||B|cos\theta
$$
- 当夹角为90度时,结果为0,说明两者没有关系;
- 当夹角为0度时,说明两者关系密切。
换句话说,$C_1C_1, C_1C_2, C_1C_3, C_1C_4, C_1C_5$表示了$C_1, C_2, C_3, C_4, C_5$与$C_1$的相近程度。除以$\sqrt{d_k}$是为了将$QK^T$矩阵标准化,使得softmax归一化后的结果更加稳定。
3.1.2 softmax的作用
softmax函数将$QK^T$的输出转换为概率分布,确保每个元素的值都在(0,1)之间,且所有元素之和为1。其数学表达式为:
$$
s_j = \frac{e^{z_j}}{\sum_{k=1}^{K} e^{z_k}}, \quad j = 1, 2, ...,K
$$
简单来说,softmax函数将$C_1, C_2, C_3, C_4, C_5$与$C_1$的相近程度转换成了权重分布,越接近$C_1$则权重越大。
3.1.3 $softmax(\frac{QK^T}{\sqrt{d_k}})V$
最后将softmax得到的结果乘以V,即$softmax(\frac{QK^T}{\sqrt{d_k}})V$。示意图如下:
左边$softmax(\frac{QK^T}{\sqrt{d_k}})$的结果是注意力矩阵,注意力权重的和为1。用注意力矩阵的权重给V进行加权,从而使每个字向量都含有当前句子内所有字向量的信息。
3.1.4 Multi-Head Attention
Multi-Head Attention的公式定义为:
$$
MultiHead(Q,K,V) = Concat(head_1,....,head_h)W^O
$$
其中:
$$
head_i=Attention(QW_i^Q,KW_i^K,VW_i^V)
$$
对于论文中而言,$d_k=d_v=embed_dim/h$,而h就是所谓的heads。
我们来逐步拆解分析上公式中的含义:
(1)我们先来看一下$QW_i^Q$得到的矩阵长什么样子。
$Q\in R^{seq_len \times embed_dim}$,$W_i^Q\in R^{embed_dim \times d_k}$,那么$QW_i^Q \in R^{seq_len \times d_k}$
假设heads=2,即$d_k=embed_dim / h = embed_dim / 2$,换句话说,Q经过$W_i$的线性变换之后,达到了类似一种切分的效果,把原先的词向量维度切分成2份,如下图:
论文中heads=8,也就是切成了8份。注意我们是方便理解简化成切成了8份,实际是有线性变换的,拼起来不一定等于原来的结果。
其他的$KW_i^K, VW_i^V$也是一样的含义!
(2)拿其中一个head做一次运算,如下图:
其中一个head运算完成后,得到一半维度的结果;那么另外一个head运算完成后,则会得到另外一半维度的结果。最后的结果拼接起来,就是论文中公式的含义,只不过论文最后再增加了一次$W_O$的线性变换:
$$
MultiHead(Q,K,V)=Concat(head_1,....,head_h)W^O
$$
不同的部分可以学习单词不同维度里的信息,这里有点类似CNN的卷积核。
经过上面的讲解之后再来看论文里的这张图就比较容易理解了:
图中:
- V, K, Q经过Linear拆分之后,得到heads个矩阵
- 每一矩阵分别进行Attention公式计算,即图中的Scaled Dot-Product Attention
- 最后Concat拼接起来,维度又恢复到embed_dim
- 最后一个Linear操作就是公式中的$W_O$
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_{embedding} + Attention(Q,K,V)
$$
通过残差连接,模型可以直接学习输入特征与输出特征之间的残差(或者说是差异),而不是直接学习复杂的映射关系,这样往往能更容易地优化网络,并允许网络更深。
3.2.2 Layer Normalization
Layer Normalization(层归一化)是一种用于深度学习模型中的归一化技术,是对单个样本内部的层输出进行归一化处理。能改善模型中的梯度传播问题,进而提高模型的训练效率和性能。
对于矩阵每一行$x$,计算其均值$\mu$和方差$\sigma^2$:
$$
\mu = \frac{1}{m} \sum_{i=1}^{m} x_i
$$
$$
\sigma^2 = \frac{1}{m} \sum_{i=1}^{m} (x_i - \mu)^2
$$
其中,$m$为该层输出向量的维度,$x_i$为一行的某个值。
归一化的结果如下:
$$
LayerNorm(x) =\gamma \cdot \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta
$$
其中,$\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。通过一个线性映射将输入转换为新的向量表示:
$$
H = W_1X + b_1
$$
并通过ReLU激活函数进行非线性处理:
$$
H' = ReLU(H)
$$
(2)第二层线性变换(通常称为输出层):
对ReLU激活后的向量$H'$再次进行线性映射,这次使用权重矩阵$W_2$和偏置项$b_2$:
$$
FFN(X) = W_2H' + b_2
$$
整个Feed Forward Network的计算可以表示为:
$$
FFN(X) = W_{2} \cdot ReLU(W_1X + b_1) + b_2
$$
通过这种方式,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模型究竟是什么?(一)》