Transformer模型详解
1. 模型架构概述
Transformer模型由Vaswani等人在2017年提出,其核心是完全基于注意力机制(Self-Attention)的编码器-解码器架构,摒弃了传统RNN/CNN的序列处理方式。主要组件包括:
- 编码器堆栈:N个相同的编码器层(原论文N=6)
- 解码器堆栈:N个相同的解码器层
- 位置编码:注入序列的位置信息
2. 核心组件解析
2.1 自注意力机制(Self-Attention)
# 伪代码示例
Q = W_q * input # Query矩阵
K = W_k * input # Key矩阵
V = W_v * input # Value矩阵
attention_scores = softmax((Q @ K.T) / sqrt(d_k)) @ V
2.2 多头注意力(Multi-Head Attention)
- 并行运行h个独立的注意力头(原论文h=8)
- 每个头学习不同的表示子空间
- 最终拼接所有头的输出并通过线性变换
2.3 位置前馈网络(Position-wise FFN)
FFN(x) = max(0, xW1 + b1)W2 + b2
2.4 残差连接与层归一化
- 每个子层输出:LayerNorm(x + Sublayer(x))
- 解决深层网络梯度消失问题
3. 编码器-解码器结构
| 组件 | 功能特点 |
|---|---|
| 编码器 | 每层包含多头自注意力+FFN,处理输入序列的全局依赖关系 |
| 解码器 | 新增编码器-解码器注意力层,使用掩码防止当前位置关注后续位置 |
4. 关键创新点
- 并行化计算:相比RNN的序列计算,可并行处理所有位置
- 长程依赖建模:任意两个位置的直接连接,解决RNN的梯度消失问题
- 位置编码方案:
PE(pos,2i) = sin(pos/10000^(2i/d_model)) PE(pos,2i+1) = cos(pos/10000^(2i/d_model))
5. 复杂度分析
| 操作 | 计算复杂度 | 空间复杂度 |
|---|---|---|
| 自注意力 | O(n²·d) | O(n²) |
| 前馈网络 | O(n·d²) | O(1) |
| 多头注意力 | O(h·n²·d/h) = O(n²·d) | O(h·n²) |
6. 与RNN/CNN的对比
| 特性 | Transformer | RNN | CNN |
|---|---|---|---|
| 并行性 | 完全并行 | 序列依赖 | 局部并行 |
| 长程依赖 | 直接建模 | 逐步传递 | 需要深层 |
| 计算效率 | 高(短序列) | 低 | 中等 |
7. 实现注意事项
训练技巧:
- 学习率预热(Warmup)
- 标签平滑(Label Smoothing)
- 梯度裁剪
优化方向:
- 稀疏注意力(如Longformer)
- 内存优化(如Reformer)
经典论文引用:
《Attention Is All You Need》(NeurIPS 2017) 提出了原始Transformer架构,在WMT2014英德翻译任务上达到28.4 BLEU分数,训练速度比最佳RNN模型快8倍。
