🏛️ 大模型全链路训练与对齐深度手册
本手册涵盖从 LoRA 微调参数设置到 RLHF/DPO 对齐算法的核心逻辑、数学本质及工程陷阱。
一、 微调基石:LoRA 核心参数解析
在 SFT 或对齐阶段,LoRA 是最常用的"手术刀"。其性能由两个核心参数决定:
1.1 秩 (Rank / r) ------ "画板的大小"
- 定义 :低秩矩阵的中间维度。决定了允许模型通过微调学习多少新信息。
- 配置建议 :
r=8/16:适合一般任务、风格转换,显存占用极低。r=32/64:适合复杂逻辑、特定领域知识(如医疗、代码)。
1.2 缩放因子 (Alpha / lora_alpha) ------ "颜料的浓度"
- 定义 :控制微调信号在最终输出中的权重,缩放系数为 <math xmlns="http://www.w3.org/1998/Math/MathML"> Scaling = α / r \text{Scaling} = \alpha / r </math>Scaling=α/r。
- 配置建议 :
- 工业标准 :通常设置
lora_alpha = 2 * r。 - 调优逻辑:若模型不听指令,调大 Alpha;若模型出现严重遗忘(学傻了),调小 Alpha 或 Rank。
- 工业标准 :通常设置
二、 经典对齐:RLHF (基于人类反馈的强化学习)
RLHF 通过"三步走"战略(SFT -> RM -> PPO),将人类审美向量化。
2.1 考官质检:奖励模型 (Reward Model, RM)
- 训练逻辑 :采用 Pairwise Ranking(成对排序) 。让标注员选出 <math xmlns="http://www.w3.org/1998/Math/MathML"> y b e t t e r ≻ y w o r s e y_{better} \succ y_{worse} </math>ybetter≻yworse。
- 损失函数 : <math xmlns="http://www.w3.org/1998/Math/MathML"> L R M = − log ( σ ( r θ ( x , y w ) − r θ ( x , y l ) ) ) L_{RM} = -\log(\sigma(r_{\theta}(x, y_w) - r_{\theta}(x, y_l))) </math>LRM=−log(σ(rθ(x,yw)−rθ(x,yl)))。
- 质量指标 :排序准确率 (Ranking Accuracy)。优秀的 RM 准确率应在 70%-80% 以上。
2.2 工程架构:PPO 的"四保一"系统
在强化学习阶段,显存需同时承载 4 个模型实体:
| 模型实体 | 状态 | 职责 | 类比 |
|---|---|---|---|
| Policy Model | 训练 (LoRA) | 生成回答,最终要交付的本体。 | 考生 |
| Reference Model | 冻结 | 计算 KL 散度约束,防止模型"学歪"。 | 初心 (锚点) |
| Reward Model | 冻结 | 给生成结果打分。 | 考官 |
| Value Model | 训练 (LoRA) | 预测预期回报,稳定训练波动。 | 自我评估系统 |
2.3 数学约束:KL 惩罚
<math xmlns="http://www.w3.org/1998/Math/MathML"> T o t a l _ R e w a r d = R e w a r d R M − β log π R L π S F T Total\Reward = Reward{RM} - \beta \log \frac{\pi_{RL}}{\pi_{SFT}} </math>Total_Reward=RewardRM−βlogπSFTπRL
KL 散度作为"刹车",防止模型为了骗分而产生"奖励黑客"行为(如通过堆砌礼貌用语刷高分)。
三、 技术革命:DPO (直接偏好优化)
DPO 证明了:不需要独立的 RM 和复杂的 PPO 循环,也能实现同等对齐。
3.1 核心原理:跳过中间商
DPO 将强化学习降维成了二元分类问题。它利用好坏答案在当前模型与参考模型中的概率比值来构造损失:
<math xmlns="http://www.w3.org/1998/Math/MathML"> L D P O = − log σ ( β log π θ ( y w ∣ x ) π r e f ( y w ∣ x ) − β log π θ ( y l ∣ x ) π r e f ( y l ∣ x ) ) L_{DPO} = -\log \sigma \left( \beta \log \frac{\pi_\theta(y_w|x)}{\pi_{ref}(y_w|x)} - \beta \log \frac{\pi_\theta(y_l|x)}{\pi_{ref}(y_l|x)} \right) </math>LDPO=−logσ(βlogπref(yw∣x)πθ(yw∣x)−βlogπref(yl∣x)πθ(yl∣x))
3.2 DPO 相比 RLHF 的劣势(硬伤)
- 缺乏在线探索能力:DPO 是离线训练(Off-policy),只能学死数据。RLHF 能自发生成新答案(On-policy),上限往往更高。
- 过度依赖 SFT 基座:若 SFT 没练好,DPO 极易失效甚至导致乱码。
- 泛化性与模式崩溃:DPO 倾向于极端化概率分布,容易导致模型说话变得单一、死板,即"对齐税"严重。
- 噪声敏感:DPO 缺乏 RM 的抽象过滤能力,会直接学习错误的标注偏好。
3.3 深度解读
在学习 DPO (直接偏好优化) 时,最容易产生的一个核心疑惑是:"如果模型在训练时根本不开口说话(生成),它是如何变强的?" 以下从底层逻辑到数学实现对这一疑惑进行系统梳理。
1. DPO 的核心动作:从"创作者"转向"评论家"
在 SFT 或推理阶段,模型是生成式 的(逐字蹦词);但在 DPO 训练阶段,模型是判别式的。
- 训练状态:模型并不会真正从零"输出"一段文本。
- 执行逻辑 :系统将偏好数据集里预先标好的"好答案" ( <math xmlns="http://www.w3.org/1998/Math/MathML"> y w y_w </math>yw) 和"坏答案" ( <math xmlns="http://www.w3.org/1998/Math/MathML"> y l y_l </math>yl) 直接喂给模型。模型顺着这些 Token 走一遍前向传播(Forward Pass),计算它对这些既有 Token 的"认同程度"。
2. 数学底层:如何计算"认同感"(以"你好"为例)
假设 Prompt <math xmlns="http://www.w3.org/1998/Math/MathML"> x x </math>x 是:"请打个招呼",数据集中:
- 好答案 ( <math xmlns="http://www.w3.org/1998/Math/MathML"> y w y_w </math>yw):"您好"
- 坏答案 ( <math xmlns="http://www.w3.org/1998/Math/MathML"> y l y_l </math>yl):"你好"
模型对一段话的认同程度是通过 对数概率累加 (Log-Probability Sum) 来量化的:
计算过程分解:
- 拆解 Token :将"您好"拆解为
您和好。 - 计算单步概率 :
- 输入"请打个招呼",模型预测第一个字是
您的概率 <math xmlns="http://www.w3.org/1998/Math/MathML"> P ( 您 ) = 0.8 P(\text{您}) = 0.8 </math>P(您)=0.8 - 输入"请打个招呼,您",模型预测下一个字是
好的概率 <math xmlns="http://www.w3.org/1998/Math/MathML"> P ( 好 ) = 0.9 P(\text{好}) = 0.9 </math>P(好)=0.9
- 输入"请打个招呼",模型预测第一个字是
- 对数累加 :
- <math xmlns="http://www.w3.org/1998/Math/MathML"> log P ( 您好 ) = log ( 0.8 ) + log ( 0.9 ) ≈ ( − 0.22 ) + ( − 0.10 ) = − 0.32 \log P(\text{您好}) = \log(0.8) + \log(0.9) \approx (-0.22) + (-0.10) = -0.32 </math>logP(您好)=log(0.8)+log(0.9)≈(−0.22)+(−0.10)=−0.32
- 同理,计算出"你好"的认同分,假设为 <math xmlns="http://www.w3.org/1998/Math/MathML"> log P ( 你好 ) = − 1.5 \log P(\text{你好}) = -1.5 </math>logP(你好)=−1.5(分值越小,代表概率越低)。
3. DPO 的"拉踩"机制(对比学习)
DPO 并不追求绝对的高分,它追求的是相对进步。它会同时对比两组关系:
- 好答案的进步:当前模型对"您好"的认同度相对于原始模型(Ref)提升了多少。
- 坏答案的退步:当前模型对"你好"的认同度相对于原始模型(Ref)下降了多少。
- 训练目标:通过 Loss 函数强制拉大这两者的差距,从而让模型"内化"人类的偏好,学会"您好"比"你好"更得体。
4. 深度疑惑解答:Training-Inference Gap
问:模型输出的答案和数据集里的不一样,怎么办?
- 答 :DPO 根本不在乎模型"想写什么"。它只在乎:"如果我强迫你写出'您好',你愿不愿意?"。DPO 训练的是模型的"偏好分布",而不是"生成行为"。
问:DPO 这种"评分"做法的局限性?
- 盲区(Exploration Gap):由于模型在训练时从不"开口说话",它只能在给定的"你好"和"您好"之间学拉踩。如果模型此时自发产生了一个更高级的词汇(如"阁下安好"),DPO 是无法捕获这种自发进化的。
📌 总结:DPO 的本质
DPO 是将复杂的强化学习过程伪装成了一场关于概率的选择题考试。它通过计算模型对既有文本的"认同概率比值",实现了低成本、高效率的对齐。
四、 工业界选型对比总结
| 特性 | RLHF (PPO) | DPO |
|---|---|---|
| 模型数量 | 4 个 | 2 个 |
| 训练稳定性 | 极低(超参地狱) | 极高(简单分类) |
| 探索能力 | 强(在线进化) | 无(离线重排) |
| 适用场景 | 复杂多步推理、极致性能冲刺 | 快速价值观对齐、算力受限场景 |
🏆 专家工程建议
- 参数选择 :微调时务必关注
r和alpha的比例。 - 对齐路径 :初学者或快速迭代建议用 DPO ;追求推理天花板建议用 RLHF(或其变体如 GRPO)。
- 数据为王:无论是 RM 还是 DPO,成对偏好数据的质量(一致性)直接决定了最终模型的"情商"。