Transformer模型详解:从注意力机制到Encoder-Decoder架构
Transformer模型详解:从注意力机制到Encoder-Decoder架构
一、引言
Transformer模型由Vaswani等人在2017年发表的论文《Attention Is All You Need》中提出,彻底革新了自然语言处理(NLP)领域。与传统的循环神经网络(RNN)和长短期记忆网络(LSTM)不同,Transformer完全摒弃了循环结构,纯粹基于注意力机制来捕获序列中的依赖关系。
Transformer的优势在于:
- 并行计算能力强:不像RNN必须按时间步顺序计算
- 长距离依赖捕获:注意力机制可以直接连接序列中任意两个位置
- 可扩展性好:通过堆叠更多层获得更强的模型能力
如今,BERT、GPT系列等主流预训练模型均基于Transformer架构。本文将深入剖析Transformer的核心组件。
二、自注意力机制(Self-Attention)
注意力机制的核心思想是:对于序列中的每个元素,根据它与其他元素的相关性来加权聚合信息。
2.1 基本概念
对于输入序列 $X = (x_1, x_2, ..., x_n)$,自注意力机制通过三个可学习的权重矩阵 $WQ$、$WK$、$W^V$ 将每个输入 $x_i$ 映射为:
- 查询向量(Query):$q_i = x_i W^Q$
- 键向量(Key):$k_i = x_i W^K$
- 值向量(Value):$v_i = x_i W^V$
2.2 注意力分数的计算
对于第 $i$ 个位置的输出,首先计算该位置的查询与所有位置的键的点积,得到注意力分数:
$$\text{score}_{ij} = q_i \cdot k_j$$
2.3 Softmax归一化
将注意力分数通过Softmax函数归一化为权重分布(权重之和为1):
$$\alpha_{ij} = \frac{\exp(\text{score}{ij})}{\sum^n \exp(\text{score}_{ik})}$$
2.4 加权求和
最后,用注意力权重对所有值向量进行加权求和,得到当前位置的输出:
$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$
其中 $d_k$ 是键向量的维度,除以 $\sqrt{d_k}$ 是为了防止点积结果过大导致Softmax梯度消失。
三、多头注意力机制(Multi-Head Attention)
多头注意力是Transformer的关键创新之一,其核心思想是:让模型从不同的表示子空间同时学习信息。
3.1 原理
多头注意力将查询、键、值分别投影到 $h$ 个不同的低维空间,在每个空间独立执行注意力计算,然后将结果拼接并再次投影:
$$\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, ..., \text{head}_h)W^O$$
其中每个头:
$$\text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)$$
3.2 优势
- 多样化的表示:不同的头关注序列中不同位置的依赖关系(如语法关系、语义关系等)
- 增强表达能力:综合多个子空间的注意力信息,比单头注意力更丰富
- 并行计算:所有头的计算可以完全并行执行
在原始论文中,Transformer使用了 $h=8$ 个注意力头,每个头的维度为 $d_k = d_{\text{model}} / h = 64$。
四、位置编码(Positional Encoding)
由于自注意力机制本身是排列不变的(即对输入序列的顺序不敏感),需要额外注入位置信息。
4.1 为什么需要位置编码?
在RNN中,时间步天然隐含了位置信息。而Transformer同时处理所有位置的输入,若不添加位置编码,模型无法区分"我打你"和"你打我"。
4.2 正弦/余弦位置编码
Transformer使用固定频率的正弦和余弦函数来编码位置信息:
$$PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)$$
$$PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)$$
其中 $pos$ 表示位置,$i$ 表示维度索引。
4.3 位置编码的特性
- 周期性:不同频率的正弦/余弦函数提供了不同尺度的位置信息
- 相对位置关系:模型可以通过线性变换学习到相对位置关系
- 无需训练:固定编码,不增加模型参数
- 可外推:可以处理比训练时更长的序列
此外,也有可学习的位置编码(如BERT中使用),但正弦/余弦编码具有更好的泛化性。
五、Encoder-Decoder整体架构
Transformer采用Encoder-Decoder结构,这是Seq2Seq模型的经典设计范式。
5.1 Encoder(编码器)
Encoder由 $N=6$ 个相同的层堆叠而成,每一层包含两个子层:
- 多头自注意力子层(Multi-Head Self-Attention):每个位置关注输入序列中的所有位置
- 前馈神经网络子层(Feed-Forward Neural Network):两个线性变换+ReLU激活函数
$$\text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2$$
每个子层都采用了残差连接(Residual Connection)和层归一化(Layer Normalization):
$$\text{output} = \text{LayerNorm}(x + \text{Sublayer}(x))$$
5.2 Decoder(解码器)
Decoder同样由 $N=6$ 个相同的层堆叠而成,每一层包含三个子层:
- 掩码多头自注意力子层(Masked Multi-Head Self-Attention):防止当前位置注意到未来位置(自回归生成的关键)
- 编码器-解码器注意力子层(Cross-Attention):查询来自解码器,键和值来自编码器输出,让解码器关注输入序列的相关部分
- 前馈神经网络子层:与编码器相同
5.3 完整工作流程
- 输入嵌入:源语言序列经过词嵌入 + 位置编码进入Encoder
- 编码过程:Encoder通过自注意力捕获输入序列中的依赖关系,输出一系列隐藏表示
- 解码过程:Decoder以自回归方式生成目标序列,每一步利用Encoder的输出和之前已生成的内容
- 输出预测:最后一个线性层(Linear)和Softmax层将Decoder输出映射为词汇表上的概率分布
六、Transformer的关键设计细节
6.1 残差连接与层归一化
- 残差连接:缓解深层网络中的梯度消失问题,使信息可以直接跨层传递
- 层归一化:对每个样本的所有特征进行归一化,稳定训练过程,加速收敛
6.2 掩码机制
在Decoder的自注意力中,通过掩码将未来位置设置为 $-\infty$,使得Softmax后的注意力权重为0,确保模型在预测第 $t$ 个词时只能看到前 $t-1$ 个词。
6.3 标签平滑
训练时使用标签平滑(Label Smoothing),将硬标签(one-hot)替换为软标签,提高模型的泛化能力和校准度。
七、总结与展望
Transformer模型通过纯注意力机制解决了序列建模中的长距离依赖和并行计算问题,其核心组件包括:
| 组件 | 作用 |
|---|---|
| 自注意力机制 | 捕获序列内部任意位置的依赖关系 |
| 多头注意力 | 从多个子空间学习多样化表示 |
| 位置编码 | 注入序列的位置信息 |
| Encoder-Decoder架构 | 支持序列到序列的转换任务 |
自2017年提出以来,Transformer衍生出了众多变体:
- BERT:双向Encoder预训练模型
- GPT系列:自回归Decoder预训练模型
- ViT(Vision Transformer):将Transformer应用于计算机视觉
- Transformer-XL、Longformer:改进长序列处理能力
Transformer的成功证明了注意力机制足够强大,可以完全替代循环和卷积结构,这一思想深刻影响了后续几乎所有AI领域的发展。
参考来源:Vaswani et al., "Attention Is All You Need", NeurIPS 2017
浙公网安备 33010602011771号