LLM 底层原理深入
Transformer 与大模型核心原理
1. Attention 机制
Self-Attention 计算流程
输入嵌入 X (seq_len x d_model)
|
Q = X * W_Q, K = X * W_K, V = X * W_V
|
Attention(Q,K,V) = softmax(Q * K^T / sqrt(d_k)) * V
缩放因子 sqrt(d_k):防止点积过大导致 softmax 梯度消失
|
Multi-Head: 并行多个 attention 头,关注不同子空间
Multi-Head Attention
MultiHead(Q,K,V) = Concat(head_1,...,head_h) * W_O
其中 head_i = Attention(Q*W_Q_i, K*W_K_i, V*W_V_i)
典型配置:GPT-3 96 个头,每个头 d_k = d_model/h = 128
KV Cache 优化
自回归生成时,每个新 token 都需计算所有历史 token 的 K/V
-> 缓存所有历史 K/V,新 token 只需计算自己的 K/V
-> 生成速度从 O(n^2) 降为 O(n)
2. 位置编码
绝对位置编码(Sinusoidal)
PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
优点:无参数,可注意到超过训练长度的位置
缺点:强行建模窗口长度限制
RoPE(旋转位置编码)
将位置信息编码到 Q、K 的旋转操作中
内积 q^T * k 天然地只依赖两个 token 的相对位置
限度外推能力更强,被 LLaMA、Qwen 等模型广泛采用
3. 主流架构对比
GPT 系列(Decoder-Only)
仅使用 Transformer Decoder
因果式注意力(Causal Attention):每个 token 只能关注左边
适合文本生成任务
BERT 系列(Encoder-Only)
双向注意力:每个 token 可关注所有其他 token
适合理解任务:分类、NER、问答匹配
T5 系列(Encoder-Decoder)
Encoder 理解输入,Decoder 自回归生成输出
适合 Seq2Seq:翻译、摘要、问答
4. 模型训练
预训练目标
Causal LM(GPT):预测下一个 token
loss = CrossEntropy(predict[i], actual[i+1])
Masked LM(BERT):预测被遮罩的 token
随机遮罩 15% token,预测原始 token
常用优化器
Adam:自适应学习率,LLM 训练最常用
AdamW:Adam + 权重衰减,防止过拟合
Cosine LR Schedule:
- 预热期(warmup):学习率从 0 增到最大値
- 䆮减期:cos 曲线减小到最小学习率
混合精度训练(Mixed Precision)
forward + backward:FP16(快,内存少)
权重更新:FP32(防止上溢)
损失缩放:防止 FP16 下溢(梯度过小表示为 0)
5. 模型评估
自动化指标
Perplexity(困惑度):衡量模型对测试集的预测能力
PPL = exp(mean(-log P(token_i)))
PPL 越低越好
BLEU:机器翻译评估,n-gram 重合度
ROUGE:摘要评估,召回率为主
LLM 专属评测
MMLU:世界知识理解,57 个学科选择题
HumanEval:代码生成能力(编写 Python 函数)
GSM8K:小学数学题推理
MTBench:多轮对话质量,GPT-4 作裁判
6. 高效 Attention 变体
Flash Attention
- 将 Attention 计算分块,减少 HBM(显存)访问次数
- IO 复杂度:O(n^2/B) vs 标准 O(n^2),实际可加速 2-4x
- 然而输出与标准 Attention 完全相同(数学等价)
GQA(分组查询注意力)
MHA: 每个 Q 头都有独立的 K/V 头
MQA: 所有 Q 头共享 1 个 K/V 头(KV Cache 最小)
GQA: G 组 Q 头共享 1 个 K/V 头(平衡)
LLaMA 3 / Mistral 采用 GQA,大幅减小 KV Cache 占用
7. 资深面试题
- 为什么缩放系数 sqrt(d_k) 很重要?
- 向量维度 d_k 增大时,点积的方差增大,导致 softmax 梯度极小
- 除以 sqrt(d_k) 能把方差拉回到合理范围
- 为什么 GPT 不用 Encoder?
- 文本生成天然地是自回归的,只需 Decoder
- 去掉 Encoder-Decoder 交叉注意力,模型更简单、规模更容易扯展
- 长文本处理的振戰是什么?
- 标准 Attention 是 O(n^2) 空间和时间复杂度
- 解决:Flash Attention(效率)、Sliding Window(法拉)、RoPE 线性外推
- 当 context 超过训练长度时模型表现如何?
- Sinusoidal 位置编码:超长位置没被训练过,推理性能显著下降
- RoPE:基于相对位置,外推能力更强,才有 YaRN、LongRoPE 等扩展方法