Transformer 是一种革命性的深度学习架构,专门设计用于处理序列数据,特别是在自然语言处理(NLP)任务中表现卓越。它由 Vaswani 等人在 2017 年发表的论文《Attention is All You Need》中首次提出,打破了当时基于循环神经网络(RNN)和卷积神经网络(CNN)的序列建模常规,完全依赖自注意力机制实现高效的并行计算和对长距离依赖关系的有效建模。
一、核心思想
Transformer沿袭seq2seq的encoder-decoder架构,但以Self-Attention替换RNN,实现并行训练与全局信息捕获。作为首个仅依赖自注意力计算输入输出表示,无需序列对齐的转换模型,其设计核心融合自注意力与前馈神经网络,使模型预测时能灵活聚焦各特征。
找出句中单词之间的关系并给出正确的注意力。自注意力允许模型查看输入序列中的其他单词,以便更好地理解序列中的某个单词。
第一步:获取输入句子的每一个单词的表示向量 X,X由单词的 Embedding 和单词位置的 Embedding 相加得到。
第二步:将得到的单词表示向量矩阵传入 Encoder 中,经过 Encoder block 后可以得到句子所有单词的编码信息矩阵 C。单词向量矩阵用 X(n×d)表示, n 是句子中单词个数,d 是表示向量的维度 (论文中 d=512)。每一个 Encoder block 输出的矩阵维度与输入完全一致。
第三步:将 Encoder 输出的编码信息矩阵 C传递到 Decoder 中,Decoder 依次会根据当前翻译过的单词 1~ i 翻译下一个单词 i+1。在使用的过程中,翻译到单词 i+1 的时候需要通过 Mask (掩盖) 操作遮盖住 i+1 之后的单词。
二、整体架构
Transformer 采用了经典的 Encoder-Decoder 结构,由两个主要部分组成:
1. 编码器(Encoder)
作用:对输入序列进行编码,生成其高级抽象的语义表示。
结构:
- 输入嵌入层(Input Embedding Layer):将原始文本词汇映射为固定长度的向量,通常是通过查找预训练的词嵌入表实现。
- 位置编码(Positional Encoding):由于 Transformer 没有循环结构,无法直接捕捉序列中词语的顺序信息,因此需要人为注入位置信息。位置编码通常以向量形式附加到词嵌入上,以保留输入序列中的词语排列顺序。
- 编码器层(Encoder Layers):由多个相同的层堆叠而成,每一层包括两个核心子模块:
- 多头自注意力(Multi-Head Attention):让模型能够关注输入序列中不同位置之间的相关性,同时处理整个序列,无需按照顺序逐个处理。每个注意力头从不同的子空间视角捕获输入间的关联。
- 前馈神经网络(Feed-Forward Network, FFN):包含两个全连接层(FC),通常中间层使用ReLU激活函数,为模型提供额外的非线性变换能力。
- 残差连接(Add & Norm):在每个子模块(Attention 和 FFN)之后添加,将原始输入与经过子模块计算后的结果相加,帮助缓解深度网络中的梯度消失问题,促进信息流。
- 层归一化(Layer Normalization):在残差连接之后应用,对每一层的输出进行标准化,使各层输出保持相近的尺度,提高训练稳定性与收敛速度。
2. 解码器(Decoder)
作用:根据编码器生成的语义表示,生成目标序列(如翻译后的句子或回答问题的文本)。
结构:
- 输入嵌入层(Input Embedding Layer):同编码器,对目标序列词汇进行嵌入。
- 位置编码(Positional Encoding):同样注入位置信息,确保模型理解目标序列中的词语排列。
- 解码器层(Decoder Layers):同样由多个相同层堆叠,每一层包含三个核心子模块:
- 多头自注意力(Multi-Head Attention):与编码器中的自注意力相似,但受限于自回归性,即在预测当前词时只能访问已生成的词,不能看到后续位置的信息。
- 编码器-解码器注意力(Encoder-Decoder Attention):让解码器能关注编码器输出,获取与当前生成词相关的源序列信息,实现源序列与目标序列之间的交互。
- 前馈神经网络(Feed-Forward Network, FFN):与编码器中的 Feed Forward 结构相同,提供非线性变换能力。
- 残差连接(Add & Norm):与编码器相同,存在于每个子模块之后。
- 层归一化(Layer Normalization):与编码器相同,位于残差连接之后。
三、核心组件详解
1. 多头自注意力(Multi-Head Self-Attention)
原理:将注意力机制分解为多个并行的注意力头,每个头负责从不同的子空间角度计算注意力权重。每个头的注意力计算公式如下:
Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V
Self-Attention:
自注意力机制的初始化阶段涉及从编码器接收到的每个词的输入向量X中分别导出三个独特的向量表示:Query (Q)、Key (K) 和 Value (V)。具体来说,对每一个单词,我们都会对应地生成一个Q向量、一个K向量及一个V向量,它们通过对输入序列的词嵌入进行线性变换得到;d_k
是键向量的维度,根号下的除法操作有助于稳定梯度并防止数值溢出。
Multi-Head Attention:
Multi-Head Attention 是由多个 Self-Attention 组合形成。将输入向量分别通过不同的线性变换矩阵产生多个 Q
、K
、V
组合,各自执行注意力计算,然后将各个头的结果拼接并经过另一个线性变换得到最终的注意力输出。
2. 前馈神经网络(Feed Forward)
Feed Forward 主要负责对自注意力层输出的特征向量进行深度非线性变换,提取更丰富的特征表示,增强模型的表达能力和适应性,同时通过与残差连接和层归一化的配合,确保模型训练的稳定性和效率。
结构:通常由两个全连接层组成,中间可能包含激活函数(如 ReLU),形式如下:
FFN(x) = max(0, xW_1 + b_1)W_2 + b_2
其中,W_1
、W_2
是权重矩阵,b_1
、b_2
是偏置项。
四、训练与推理
训练
Transformer 使用最大似然估计(MLE)作为损失函数进行端到端训练。对于机器翻译任务,训练数据是一对对齐的源语言和目标语言句子。模型的训练过程包括:
- 编码器:将源语言句子通过编码器得到其上下文相关的向量表示。
- 解码器:在给定编码器输出和之前生成的目标语言词的情况下,解码器逐词生成目标语言句子。
- 损失计算:对比模型生成的序列与真实目标序列,计算交叉熵损失。
训练过程中普遍采用 教师强制(Teacher Forcing) 策略,即在解码器每一步的输入中使用真实的上一个目标词,而非模型当前预测的词。
推理
在实际应用中,模型进行推理时不再使用教师强制。常用 自回归解码 方法,如 贪心搜索 或更复杂的 束搜索(Beam Search),以生成最有可能的输出序列。这些方法在每一步选择概率最高的词或一组词继续生成,直到遇到结束符或达到最大长度限制。
五、优势与影响
Transformer 的关键优势包括:
- 并行计算:自注意力机制天然支持并行计算,显著减少序列处理的时间复杂度,尤其适合大规模数据集和长序列。
- 全局建模能力:能够直接捕获序列中任意两个位置之间的依赖关系,有效解决 RNN 在处理长距离依赖时的局限性。
- 高性能:在多种 NLP 任务上,如机器翻译、文本分类、问答系统等,Transformer 及其变体(BERT、GPT、Transformer-XL 等)取得了超越传统模型的性能。
Transformer 的出现不仅引领了 NLP 领域的技术革新,还启发了其他领域(如计算机视觉、语音识别、推荐系统等)对注意力机制的应用,对深度学习研究与实践产生了深远影响。
当然任何一种事物都需要创新与迭代,基于以上对于Transformer模型了解可知,Transformer计算成本较高、处理长序列效率相对低、位置编码有它的局限性、局部信息捕获能力较弱等方面。这些挑战推动了研究者持续探索改进Transformer模型结构、优化训练策略以及开发更高效、更轻量级的变种模型。