Transformer架构详解
1. 架构概述
Transformer是一种基于自注意力机制的神经网络架构,由Vaswani等人在2017年的论文《Attention Is All You Need》中首次提出。它彻底改变了自然语言处理领域,逐步取代了传统的RNN和CNN架构。
主要特点
- 完全基于注意力机制:摒弃了传统的循环和卷积结构
- 并行计算能力强:克服了RNN的顺序计算限制
- 长距离依赖捕捉能力:通过自注意力机制有效捕捉任意距离的依赖关系
- 模块化设计:编码器-解码器结构清晰,易于扩展
2. 核心组件详解
2.1 编码器(Encoder)
结构组成
-
输入嵌入层(Input Embedding)
- 将输入的token转换为稠密向量表示
- 通常维度为512(d_model)或更大
- 包含可学习的参数矩阵
-
位置编码(Positional Encoding)
- 解决Transformer缺少位置信息的问题
- 使用正弦和余弦函数的固定模式:
PE(pos,2i) = sin(pos/10000^(2i/d_model)) PE(pos,2i+1) = cos(pos/10000^(2i/d_model))
- 与输入嵌入相加而非拼接
-
编码器层堆叠(Encoder Layers)
- 通常6层或更多(原始论文使用6层)
- 每层包含两个子层:
- 多头自注意力机制(Multi-Head Self-Attention)
- 前馈神经网络(Feed Forward Network)
- 每个子层都有残差连接和层归一化
自注意力机制细节
-
计算过程:
Attention(Q,K,V) = softmax(QK^T/√d_k)V
- Q(Query), K(Key), V(Value)来自同一输入
- √d_k缩放防止点积过大导致梯度消失
-
多头注意力:
- 将Q,K,V投影到h个不同子空间(h通常为8)
- 并行计算h个注意力头
- 拼接所有头的结果并通过线性变换
2.2 解码器(Decoder)
结构组成
-
输出嵌入层(Output Embedding)
- 与编码器嵌入层类似但独立
- 通常共享编码器嵌入层的权重(可选)
-
位置编码
- 与编码器使用相同的实现方式
-
解码器层堆叠(Decoder Layers)
- 通常6层(与编码器层数相同)
- 每层包含三个子层:
- 掩码多头自注意力(Masked Multi-Head Self-Attention)
- 编码器-解码器注意力(Encoder-Decoder Attention)
- 前馈神经网络
- 每个子层都有残差连接和层归一化
关键机制
-
掩码自注意力:
- 防止解码器"偷看"未来信息
- 通过添加负无穷掩码(-∞)实现
- 确保位置i只能关注位置≤i的token
-
编码器-解码器注意力:
- Q来自解码器前一层的输出
- K,V来自编码器的最终输出
- 允许解码器关注输入序列的相关部分
2.3 词表与分词器(Tokenizer)
主流分词方法
-
Byte Pair Encoding (BPE)
- 通过合并频繁出现的字节对逐步构建词表
- 平衡词表大小与token序列长度
- 被GPT系列模型采用
-
WordPiece
- 类似BPE但基于概率合并
- 被BERT等模型采用
-
SentencePiece
- 直接从原始文本训练
- 支持Unicode字符级处理
- 不依赖预处理分词
词表设计考量
- 大小通常在30k-100k之间
- 包含特殊token([CLS],[SEP],[MASK]等)
- 处理未知token的方式(如[UNK]或字节级回退)
2.4 位置编码的演进
-
原始正弦编码:
- 固定模式,无需学习
- 理论上可外推到任意长度
-
可学习位置编码:
- 将位置视为可学习的嵌入
- 被BERT等模型采用
- 但受限于训练时见过的最大长度
-
相对位置编码:
- 关注token之间的相对距离而非绝对位置
- 多种变体(T5, Transformer-XL等)
- 更好的长度外推能力
-
旋转位置编码(RoPE):
- 通过旋转矩阵注入位置信息
- 被LLaMA等最新模型采用
- 保持相对位置关系的线性特性
3. 训练机制
3.1 优化目标
-
语言建模目标:
- 自回归模型(GPT风格):最大化下一个token的似然
- 自编码模型(BERT风格):预测被掩码的token
-
损失函数:
- 交叉熵损失(Cross-Entropy Loss)
- 可选项:标签平滑(Label Smoothing)
3.2 优化策略
-
Adam优化器变种:
- 原始Transformer使用Adam(β1=0.9, β2=0.98, ε=1e-9)
- 现代变种:AdamW(解耦权重衰减)
-
学习率调度:
- 预热学习率(Warmup):
lrate = d_model^-0.5 * min(step_num^-0.5, step_num*warmup_steps^-1.5)
- 余弦衰减
- 线性衰减
- 预热学习率(Warmup):
-
正则化技术:
- Dropout(原始论文使用0.1)
- 权重衰减(通常0.01)
- 梯度裁剪(通常1.0)
4. 架构演进与变体
4.1 经典变体
-
BERT (2018)
- 仅使用编码器
- 双向自注意力
- 掩码语言建模目标
-
GPT (2018)
- 仅使用解码器(带掩码)
- 自回归语言建模
-
T5 (2019)
- 编码器-解码器完整结构
- 将所有任务统一为文本到文本格式
4.2 效率优化方向
-
稀疏注意力:
- Longformer(2020):局部+全局注意力
- BigBird(2020):随机+局部+全局注意力
-
混合架构:
- FNet(2021):用傅里叶变换替代注意力
- Hyena(2023):结合CNN与注意力
-
状态空间模型:
- Mamba(2023):选择性状态空间
4.3 现代大语言模型架构
-
GPT-3/4:
- 纯解码器架构
- 旋转位置编码
- 极深(96层以上)和极宽(12288维度)
-
LLaMA:
- RMSNorm替代LayerNorm
- SwiGLU激活函数
- 旋转位置编码
-
PaLM:
- 并行注意力与前馈计算
- 共享QKV投影
5. 实践建议
5.1 超参数选择
-
维度关系:
- d_model(模型维度):通常512-12288
- d_ff(前馈层维度):通常4*d_model
- h(注意力头数):通常d_model/64
-
深度选择:
- 基础模型:6-12层
- 大型模型:24-96层
- 极深模型:100+层
5.2 训练技巧
-
初始化策略:
- 注意力层:Xavier/Glorot初始化
- 残差连接:初始化为1/√N(N为层数)
-
精度选择:
- FP32:传统选择
- FP16/BF16:现代标准
- 混合精度训练:常用实践
-
批处理策略:
- 动态批处理
- 梯度累积
6. 关键数学原理
6.1 注意力机制数学
-
缩放点积注意力:
Attention(Q,K,V) = softmax(QK^T/√d_k)V
- Q ∈ ℝ^{n×d_k}, K ∈ ℝ^{m×d_k}, V ∈ ℝ^{m×d_v}
- 计算复杂度:O(nmd_k + nmd_v)
-
多头注意力:
MultiHead(Q,K,V) = Concat(head_1,...,head_h)W^O
其中:
head_i = Attention(QW_i^Q, KW_i^K, VW_i^V)
6.2 前馈网络
FFN(x) = max(0, xW_1 + b_1)W_2 + b_2
- 通常d_ff = 4*d_model
- 现代变体使用GELU或SwiGLU
6.3 层归一化
LayerNorm(x) = γ ⊙ (x - μ)/σ + β
- μ,σ为均值和标准差
- γ,β为可学习参数
7. 典型应用场景
-
文本生成:
- 自回归采样策略(贪心、beam search、top-k/p采样)
- 温度控制
-
机器翻译:
- 编码器处理源语言
- 解码器生成目标语言
-
文本分类:
- 使用[CLS]token或平均池化
- 接分类头
-
问答系统:
- 编码问题与上下文
- 预测答案起始/结束位置
项目实例
博客园:https://home.cnblogs.com/u/safjh
项目实例:https://github.com/toke648/SimpleLLM
一个基于Transformer架构实现的简易LLM大语言模型,完全自定义Transformer,通过大量的问答数据训练实现,支持自定义训练流程以及超参数等
从最基础的训练词表开始到构建Transformer、训练模型、推理,完全从代码上完整的大模型训练全流程
详细介绍了训练流程以及操作方法,并且持续更新
感兴趣的点个star,Ciallo~(∠・ω< )⌒★
欢迎贡献代码
相关文章
Attention Is All You Need:https://proceedings.neurips.cc/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf
Attention Is All You Need 解读:https://blog.csdn.net/chengyq116/article/details/106065576/
Attention as Energy Minimization Visualizing Energy Landscapes(大佬博客):https://mcbal.github.io/post/attention-as-energy-minimization-visualizing-energy-landscapes/
…
(正在施工)