Transformer 是一种基于自注意力机制的深度学习架构,由 Google 在 2017 年提出,彻底改变了 NLP 领域。
核心组件
1. 自注意力机制(Self-Attention)
自注意力机制允许模型在处理每个词时,同时关注输入序列中的所有其他词,从而捕捉长距离依赖关系。
计算步骤:
- 生成 Query(Q)、Key(K)、Value(V)三个向量
- 计算注意力分数:Attention(Q, K, V) = softmax(QK^T / √d_k)V
- d_k 是缩放因子,防止梯度消失
多头注意力(Multi-Head Attention):
- 将 Q、K、V 分割成多个头
- 每个头独立学习不同的注意力模式
- 最后将所有头的输出拼接并通过线性变换
2. 位置编码(Positional Encoding)
由于 Transformer 不使用循环结构,无法捕捉序列顺序信息,因此需要显式注入位置信息。
方法:
- 使用正弦和余弦函数生成位置编码
- 位置编码与词嵌入相加作为最终输入
- 允许模型学习相对位置关系
3. 编码器-解码器结构
编码器:
- 由多个相同的层堆叠而成
- 每层包含多头自注意力和前馈神经网络
- 使用残差连接和层归一化
解码器:
- 包含编码器-解码器注意力层
- 掩码自注意力防止看到未来信息
- 生成序列时使用自回归方式
关键优势
1. 并行计算
- 不像 RNN 需要按顺序处理,可以并行计算
- 大幅提升训练和推理速度
2. 长距离依赖
- 自注意力机制直接连接任意两个位置
- 不受序列长度限制
3. 可解释性
- 注意力权重可视化展示模型关注点
- 便于理解和调试
应用场景
- 机器翻译
- 文本摘要
- 问答系统
- 语言模型预训练(BERT、GPT)
- 图像处理(Vision Transformer)
变体和改进
BERT(Bidirectional Encoder Representations from Transformers)
- 仅使用编码器部分
- 双向上下文理解
- 掩码语言模型预训练
GPT(Generative Pre-trained Transformer)
- 仅使用解码器部分
- 自回归生成
- 大规模预训练
T5(Text-to-Text Transfer Transformer)
- 统一所有 NLP 任务为文本到文本格式
- 编码器-解码器架构
实践要点
超参数调优
- 注意力头数:通常 8-16
- 隐藏层维度:512-2048
- 前馈网络维度:隐藏层维度的 4 倍
- 层数:6-24 层
优化技巧
- 学习率预热(Warm-up)
- 标签平滑
- Dropout 正则化
- 梯度裁剪
计算优化
- 混合精度训练
- 梯度累积
- 模型并行化
- Flash Attention