微调与对齐(Fine-tuning & Alignment)¶
预训练后的 Base Model 就像一个"学富五车但不懂交流"的学者——它拥有海量知识,但不会按人类的方式回答问题。微调与对齐的目的就是教会它"好好说话",让它从"文字接龙机器"变成"智能助手"。
训练三阶段全景¶
graph LR
A["预训练<br>Base Model<br>(会接龙)"] -->|"SFT"| B["SFT Model<br>(会回答问题)"]
B -->|"RLHF / DPO"| C["Chat Model<br>(回答得好且安全)"]
style A fill:#e3f2fd
style B fill:#fff3e0
style C fill:#e8f5e9
第一步:监督微调(SFT)¶
什么是 SFT?¶
SFT(Supervised Fine-Tuning,监督微调) 是用高质量的"指令-回答"配对数据对 Base Model 进行训练,让它学会按照指令格式回答问题。
SFT 的核心思路¶
SFT 在技术上和预训练几乎一样——都是预测下一个 Token。唯一的区别在于:
| 预训练 | SFT | |
|---|---|---|
| 数据格式 | 纯文本(无结构) | 指令-回答对(有结构) |
| 数据规模 | 万亿 Token | 数十万~数百万条 |
| 学习率 | 较大 | 较小(防止遗忘预训练知识) |
| 训练时长 | 数周~数月 | 数小时~数天 |
SFT 只计算回答部分的损失(Loss),不计算指令部分的。这告诉模型:"我不需要你学会提问,只要你学会回答。"
数据质量的重要性¶
LIMA 论文的核心发现
仅用 1000 条精选高质量数据 做 SFT,就能训练出比用几万条普通数据更好的模型。数据质量远比数量重要。
高质量 SFT 数据的特征:
- 指令多样性:覆盖问答、写作、推理、编程、翻译等多种任务
- 回答质量高:准确、完整、格式规范
- 风格一致:统一的回答语气和格式
第二步:人类对齐——为什么需要?¶
经过 SFT 后,模型已经"会回答问题"了,但它可能:
- 编造事实(幻觉):一本正经地胡说八道
- 不安全:生成有害、偏见或不当的内容
- 不符合偏好:回答虽然正确,但啰嗦/生硬/不友好
对齐(Alignment) 的目标就是让模型的输出符合人类的偏好:有帮助(Helpful)、诚实(Honest)、无害(Harmless)——即 3H 原则。
RLHF:基于人类反馈的强化学习¶
RLHF(Reinforcement Learning from Human Feedback) 是 OpenAI 在 InstructGPT/ChatGPT 中使用的核心对齐技术。
完整流程¶
graph TD
A["第 1 步:SFT<br>训练初始策略模型"] --> B["第 2 步:训练奖励模型<br>(学习人类偏好)"]
B --> C["第 3 步:PPO 强化学习<br>(用奖励信号优化策略)"]
第 1 步:训练奖励模型(Reward Model)¶
奖励模型的作用是给模型的回答打分,代替人类做评判。
训练数据收集:
- 给 SFT 模型一个问题,让它生成 多个不同的回答(如 4 个)
- 让人类标注员对这些回答进行排序(哪个最好、哪个最差)
- 将排序转化为"偏好对"训练数据
训练目标: 让奖励模型学会给好回答高分、给差回答低分。数学上使用 Bradley-Terry 模型:
其中 \(y_w\) 是被偏好的回答,\(y_l\) 是被拒绝的回答,\(r_\theta\) 是奖励模型打的分数。
第 2 步:PPO 强化学习优化¶
有了奖励模型后,就可以用强化学习(PPO 算法)来优化 LLM:
- 环境:给模型一个 Prompt
- 动作:模型生成一个完整的回答
- 奖励:奖励模型给这个回答打分
其中后面的 KL 散度惩罚项 极为关键——它防止模型为了追求高奖励而偏离 SFT 模型太远(否则模型可能学会"投机取巧"地骗取高分,而非真正提供好回答)。
RLHF 的痛点
- 训练极不稳定:PPO 超参数敏感,容易训崩
- 流程复杂:需要同时维护 4 个模型(策略模型、参考模型、奖励模型、价值模型)
- 奖励模型可能被"黑":LLM 可能找到奖励模型的漏洞,输出"高分但低质"的回答(Reward Hacking)
DPO:直接偏好优化¶
DPO(Direct Preference Optimization) 是 2023 年提出的一种更简洁的对齐方法,完全绕开了强化学习。
核心思想¶
DPO 证明了一个数学等价关系:RLHF 的优化目标可以被重写为一个简单的分类损失函数,直接在偏好对数据上训练即可。
直觉理解 DPO
DPO 的目标很直接:让模型生成好回答 \(y_w\) 的概率变高,生成差回答 \(y_l\) 的概率变低,同时不要偏离参考模型太远。
DPO vs RLHF¶
| 对比 | RLHF | DPO |
|---|---|---|
| 是否需要奖励模型 | 需要单独训练 | 不需要 |
| 是否涉及强化学习 | 是(PPO) | 否(纯监督学习) |
| 训练稳定性 | 不稳定,超参敏感 | 稳定,易于调参 |
| 参与模型数量 | 4 个(策略、参考、奖励、价值) | 2 个(策略、参考) |
| 训练数据 | 偏好排序 → 奖励模型 → RL | 直接用偏好对 |
| 效果 | 业界验证充分 | 迅速追赶,部分场景持平或超越 |
DPO 因其简洁高效,已被 LLaMA 3、Qwen 2 等众多模型采用。
其他对齐技术¶
ORPO(Odds Ratio Preference Optimization)¶
ORPO 更进一步,将 SFT 和偏好对齐合并为一步。它在 SFT 的损失函数中直接加入偏好优化项,无需单独的对齐阶段。
GRPO(Group Relative Policy Optimization)¶
DeepSeek 提出的方法,针对数学/代码等有明确正确答案的任务。它不需要人类偏好标注,而是:
- 让模型对同一问题生成多个回答
- 用规则验证哪些回答正确、哪些错误(如数学题可直接验算)
- 正确回答获得正奖励,错误回答获得负奖励
这种方法特别适合推理能力的对齐,DeepSeek-R1 即采用此方案。
参数高效微调(PEFT)¶
全量微调一个 70B 模型需要上百 GB 显存,成本极高。参数高效微调(Parameter-Efficient Fine-Tuning) 冻结模型的绝大部分参数,只训练极少量的新参数。
LoRA(Low-Rank Adaptation) ⭐ 最主流¶
LoRA 的核心思想源于一个关键观察:微调时参数的变化量是低秩的——即只影响一个低维子空间。
其中 \(W \in \mathbb{R}^{d \times d}\) 是原始的冻结权重矩阵,\(B \in \mathbb{R}^{d \times r}\)、\(A \in \mathbb{R}^{r \times d}\) 是两个小矩阵(\(r \ll d\),通常 \(r\) = 8~64)。
参数量对比
以一个 \(4096 \times 4096\) 的权重矩阵为例:
- 全量微调:训练 \(4096 \times 4096 = 16,777,216\) 个参数
- LoRA(r=16):训练 \(4096 \times 16 + 16 \times 4096 = 131,072\) 个参数
- 参数缩减:仅为原来的 0.78%!
LoRA 的优点:
- 内存友好:冻结原始模型,只训练小矩阵,显存需求大幅降低
- 可组合:针对不同任务训练不同的 LoRA 权重,推理时即插即用
- 无推理开销:推理前将 \(BA\) 合并到 \(W\) 中,推理速度不受影响
QLoRA¶
QLoRA = 量化 + LoRA。先将模型量化到 4-bit(显存降为原来的 1/4),再在其上应用 LoRA 微调。
这使得在单块消费级 GPU(如 24GB 的 RTX 4090) 上微调 70B 模型成为可能。
其他 PEFT 方法¶
| 方法 | 核心思想 |
|---|---|
| Prefix Tuning | 在每一层的输入前拼接可训练的虚拟 Token |
| Prompt Tuning | 只在输入 Embedding 前加可训练的 Soft Prompt |
| Adapter | 在 Transformer 每层中间插入小型可训练模块 |
总结:选择哪种微调/对齐方案?¶
graph TD
A["我想优化 LLM"] --> B{"有多少计算资源?"}
B -->|"很多(集群)"| C{"有人类偏好数据?"}
B -->|"有限(单卡/几卡)"| D["LoRA / QLoRA 微调"]
C -->|"有"| E{"追求训练稳定性?"}
C -->|"没有,但有正确答案"| F["GRPO"]
E -->|"是"| G["DPO"]
E -->|"要极致效果"| H["RLHF(PPO)"]