跳到主要内容

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(旋转位置编码)

将位置信息编码到 QK 的旋转操作中
内积 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 LMGPT):预测下一个 token
loss = CrossEntropy(predict[i], actual[i+1])

Masked LMBERT):预测被遮罩的 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 头共享 1K/V 头(KV Cache 最小)
GQA: GQ 头共享 1K/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 等扩展方法