Transformer 为何选择自注意力机制?
引言
Transformer 架构的提出彻底改变了自然语言处理领域。为了理解为何选择自注意力机制(Self-Attention),我们需要回顾序列转换模型的发展背景及其面临的挑战。
一、起因:序列转换模型的演进
在 Transformer 出现之前,主流的序列转换模型主要基于循环神经网络(RNN)或卷积神经网络(CNN)。当时表现最好的模型通常结合了注意力机制来连接编码器和解码器。
1.1 循环神经网络(RNN)
RNN 及其变体(如 LSTM、GRU)曾在序列建模中占据主导地位。然而,这种架构存在显著缺陷:
- 信息瓶颈:编码器需将输入序列压缩为单个向量,长序列易导致信息丢失。
- 顺序依赖:每个时间步的输出依赖于前一步,难以并行计算,训练效率低。
- 长距离依赖:随着序列长度增加,梯度传播路径变长,难以捕捉远距离上下文关系。
1.2 注意力机制与 RNN 的结合
引入注意力机制后,模型可以在解码时关注编码器序列中的所有隐藏状态,缓解了单一向量承载所有信息的压力。但此时注意力机制仍与循环网络结合使用,并未完全解决并行化和长路径问题。
1.3 自注意力机制的诞生
Transformer 完全摒弃了循环和卷积操作,仅依赖注意力机制建立全局依赖。由于自注意力层的计算基于矩阵乘法,大部分计算可并行化,显著提升了训练效率。
二、动力:三个理想特性
Transformer 选择自注意力机制主要基于以下三个理想特性的考量:
2.1 总计算复杂度
对于序列长度 n 和表示维度 d:
- RNN:每层复杂度为 O(n * d^2)。
- CNN:通常为 O(k * n * d),其中 k 为核大小。若 k=n,复杂度较高。
- Self-Attention:复杂度为 O(n^2 * d)。当 n < d 时(常见于词嵌入场景),其计算效率优于 RNN。
2.2 可并行化计算量
- RNN:严格顺序执行,无法利用 GPU 并行加速。
- CNN:局部并行,受限于卷积核大小。
- Self-Attention:基于矩阵运算,几乎所有操作均可并行化,极大提升了硬件利用率。
2.3 最小顺序操作数
- RNN:顺序操作数为 O(n),限制了吞吐量。
- Self-Attention:顺序操作数较低,尽管需要计算所有元素间的注意力分数,但可通过矩阵运算高效实现。
三、核心机制详解
3.1 缩放点积注意力
自注意力机制的核心是缩放点积注意力(Scaled Dot-Product Attention)。给定查询 Q、键 K 和值 V,计算公式如下: Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) * V
其中,sqrt(d_k) 是缩放因子,用于防止点积结果过大导致 softmax 进入梯度极小区域。
3.2 多头注意力
为了增强模型的表达能力,Transformer 采用了多头注意力机制(Multi-Head Attention)。它将输入投影到多个子空间,分别进行注意力计算,最后拼接输出。这使得模型能够同时关注来自不同位置的不同表示子空间的信息。
3.3 位置编码
由于自注意力机制本身不具备感知序列顺序的能力,Transformer 引入了位置编码(Positional Encoding)。通过添加正弦和余弦函数生成的向量,模型能够区分序列中不同位置的 token。


