第18课:微调方法论 —— LoRA / QLoRA / DPO
本节目标:理解微调 vs RAG vs Prompt 的决策边界、掌握 LoRA 低秩分解原理、搞懂 DPO 为什么替代了 PPO。
1. 微调 vs RAG vs Prompt:决策树
Code
需求类型?
├─ 注入新知识?
│ ├─ 时效性强 → RAG
│ └─ 大量稳定知识 → 微调 + RAG(少数场景)
│
├─ 改变输出风格/格式?
│ ├─ 简单任务 → Few-Shot Prompt
│ └─ 复杂、稳定需求 → 微调
│
├─ 学习新任务/技能?
│ ├─ 能用 Prompt 描述清楚 → Prompt
│ └─ 难以用语言描述 → 微调
│
└─ 优化推理能力?
└─ 微调 + CoT 数据
一句话金句
"知识用 RAG,技能用微调,风格优先 Prompt。"
| 维度 | Prompt | RAG | 微调 |
|---|---|---|---|
| 成本 | 极低 | 低 | 高 |
| 数据需求 | 少 | 中 | 大(千-万条) |
| 更新速度 | 实时 | 实时 | 慢(要重训) |
| 风格控制 | 弱 | 弱 | 强 |
| 领域知识 | 弱 | 强(外部) | 强(内化) |
2. LoRA:参数高效微调
核心公式
code
W_new = W_original + ΔW
= W_original + B × A (低秩分解)
其中 A、B 是低秩矩阵 (rank r 远小于 d)
例:原本要训练 1000×1000 = 100万参数
LoRA r=8 只需训练 1000×8 + 8×1000 = 16,000 参数
参数减少 60+ 倍
为什么有效?
"低秩假设":模型微调时,权重的"增量"本质上是低秩的。实验证明 r=8 就能达到全参微调 95% 的效果。
四大优势
- 训练参数少 100-1000 倍
- 可叠加多个 LoRA(不同任务热切换)
- 不改原模型(推理时可合并/不合并)
- 效果接近全参微调
关键超参
| 参数 | 推荐值 | 说明 |
|---|---|---|
| r (rank) | 4-64 | 越大表达力越强 |
| alpha | 通常 = 2r | 缩放系数 |
| target_modules | q_proj, v_proj | 最常见选择 |
3. QLoRA:穷人的救星
code
QLoRA = Quantization + LoRA
原理:
① 把基础模型量化到 4-bit(显存减少 4 倍)
② 反量化时只对 LoRA 矩阵做高精度计算
③ 用 NF4 (NormalFloat 4) 量化格式
效果:
单卡 24GB 显存可微调 33B 模型
单卡 48GB 可微调 65B 模型
精度损失小于 1%
4. LLM 训练四阶段
Code
Stage 1: Pre-training(预训练)
万亿 token 互联网文本 → Base 模型
Stage 2: SFT(监督微调)
1万-100万条 (instruction, response) → Chat 模型
Stage 3: RM(奖励建模)
人类偏好对 → 奖励模型(评判员)
Stage 4: RLHF / DPO(对齐人类偏好)
让 LLM 输出更"符合人类喜好" → 最终模型
SFT 数据质量金句
"Less is More" — Meta 的 LIMA 论文证明:1000 条高质量数据微调的效果,可以超过 50000 条低质量数据。
5. DPO:为什么替代了 PPO?
PPO 的痛点
PPO 训练时要同时加载 4 个模型(Actor、Critic、Reward Model、Reference Model)→ 显存爆炸、训练不稳定、调参像玄学。
DPO 的创新
一个数学发现:RLHF 的最优解可以直接用偏好数据求出,不需要训练 RM,不需要 PPO!
code
PPO:需要 4 个模型,训练不稳定
DPO:只需 2 个模型(当前 + 参考),像 SFT 一样稳定
| 维度 | PPO | DPO |
|---|---|---|
| 模型数 | 4 个 | 2 个 |
| 训练稳定性 | 不稳定 | 稳定 |
| 代码复杂度 | 复杂 | 像 SFT 一样简单 |
| 采用情况 | OpenAI/Anthropic | Llama-3 / Mistral / 国产模型主流 |
"PPO 是开拓者,DPO 是普及者。"
6. 灾难性遗忘及其防御
现象:微调后专业能力强了,但通用能力崩了。
防御组合拳:
- 数据层:加入 10-30% 通用数据
- 方法层:用 LoRA(不修改原参数)
- 训练层:低学习率 + 1-3 epoch
- 约束层:KL 散度限制偏移
核心要点
- 知识用 RAG,技能用微调,风格优先 Prompt
- LoRA 用低秩分解把微调参数减少 100-1000 倍
- QLoRA = 量化 + LoRA,单卡 24GB 可训 33B 模型
- DPO 用数学消除 RM 和 PPO,训练像 SFT 一样简单稳定
- 数据质量 > 算法 > 算力
下一课:Transformer 底层原理 —— Self-Attention 到 RoPE。