第6章:Transformer与注意力机制
Transformer模型详解
1. 模型架构概述
Transformer模型由Vaswani等人在2017年提出(《Attention Is All You Need》),其核心特点包括:
- 完全基于注意力机制:摒弃了传统的循环和卷积结构
- 编码器-解码器架构:由N个相同层堆叠而成(通常N=6)
- 并行化处理:显著提升训练效率
2. 核心组件
2.1 多头注意力机制(Multi-Head Attention)
# 伪代码示例
class MultiHeadAttention:
def __init__(self, d_model, num_heads):
self.W_q = Linear(d_model, d_model) # 查询矩阵
self.W_k = Linear(d_model, d_model) # 键矩阵
self.W_v = Linear(d_model, d_model) # 值矩阵
self.softmax = Softmax(dim=-1)
- 计算过程:
- 将输入拆分为多个头(通常8-16个)
- 分别计算缩放点积注意力:
2.2 位置编码(Positional Encoding)
- 解决序列顺序信息缺失问题
- 可学习或固定正弦/余弦函数
2.3 前馈网络(Feed Forward Network)
两层全连接网络+ReLU激活:
3. 关键技术细节
3.1 残差连接与层归一化
- 每个子层后执行:LayerNorm(x + Sublayer(x))
- 缓解梯度消失问题
3.2 掩码机制
- 编码器:处理可变长度输入
- 解码器:防止未来信息泄露(因果掩码)
4. 与RNN的对比优势
| 特性 | Transformer | RNN |
|---|---|---|
| 并行性 | 完全并行 | 序列处理 |
| 长程依赖 | 直接建模 | 梯度消失风险 |
| 计算复杂度 | O(n²·d) | O(n·d²) |
5. 实现示例(PyTorch关键部分)
class TransformerLayer(nn.Module):
def __init__(self, d_model, num_heads):
self.self_attn = MultiHeadAttention(d_model, num_heads)
self.ffn = PositionwiseFFN(d_model)
self.norm1 = LayerNorm(d_model)
self.norm2 = LayerNorm(d_model)
def forward(self, x, mask):
attn_out = self.self_attn(x, x, x, mask)
x = self.norm1(x + attn_out)
ffn_out = self.ffn(x)
return self.norm2(x + ffn_out)
6. 模型变体
- 参数共享:ALBERT的跨层参数共享
- 稀疏注意力:Longformer的局部+全局注意力
- 内存优化:Reformer的LSH注意力
关键洞见:Transformer的成功本质在于通过注意力机制建立了输入元素间的全连接动态权重网络,这种架构特别适合建模长距离依赖关系。
