📚 微调系列文章
一文了解微调技术的发展与演进
一文搞懂 LoRA 如何高效微调大模型
LoRA详细步骤解析
一文搞懂如何用 QLoRA 高效微调大语言模型
一文理解 AdaLoRA 动态低秩适配技术
一文理解提示微调(Prefix Tuning/Prompt Tuning/P Tuning)
近年来,大语言模型(LLM)微调领域持续探索更高效的方法。传统 RLHF 需先训练奖励模型,再用强化学习优化模型策略,流程复杂且计算资源消耗大。尽管PPO非常成功,但是RLHF中的PPO非常复杂,要同时维护和训练多个模型,包括策略模型、奖励模型、价值模型和SFT参考模型。DPO(Direct Preference Optimization)作为一种新兴技术,提出直接利用人类偏好数据,以简单且高效的方式训练模型,省去了强化学习步骤。
阅读本文时,请带着这三个问题思考:
- DPO 为什么被视为偏好优化的轻量级替代方案?
- DPO 的基本原理和训练流程有哪些关键点?
- 在实践中使用 DPO 有哪些优势与注意事项?
所有相关源码示例、流程图、模型配置与知识库构建技巧,我也将持续更新在Github:LLMHub,欢迎关注收藏!
一、DPO 背景与意义
传统的 RLHF 虽然效果显著,但是传统RLHF是一个两阶段的算法,先用偏好数据(A比B好)训练一个能给绝对分数(A 99分,B 66分)的奖励模型,然后再用这个分数去指导强化学习,同时训练复杂且对计算资源需求高。此外,训练奖励模型可能引入误差,影响最终微调效果。
DPO 应运而生,直接基于人类反馈的偏好对,用对比学习方式训练模型,无需额外奖励模型和强化学习,显著简化训练流程。这为资源有限或追求快速迭代的场景提供了新思路。
二、DPO 的核心原理与流程
1. 偏好数据的利用
DPO 同样依赖于人类标注的偏好对数据,每条样本包含同一输入的两条模型输出及对应偏好标签。
2. 目标函数设计
DPO 设计了一个对比损失,最大化被偏好的回答相对于不被偏好回答的生成概率差异。
具体来说,训练目标是让模型对优选回答赋予更高概率,而非优选回答概率更低,从而直接推动模型学习符合人类偏好的分布。
3. 训练过程
- 输入偏好对,计算两条输出的生成概率
- 通过最大化对比概率,更新模型参数
- 无需训练奖励模型,也不进行复杂的策略优化
4.示例代码
# 给定人类偏好数据 (x, y_winner, y_loser)
for batch in preference_data:
# 计算模型对 winner/loser 的 log likelihood
logp_win = log_prob(πθ(y_winner | x))
logp_lose = log_prob(πθ(y_loser | x))
# DPO 损失函数
loss = -logσ( logp_win - logp_lose )
# 更新参数
θ = θ - lr * ∇loss
三、DPO 的优势与挑战
优势
- 训练简洁:省去奖励模型训练和强化学习环节,流程更直接。
- 计算效率高:训练成本低,适合快速迭代和资源有限环境。
- 减少误差传播:避免奖励模型误差对策略微调的负面影响。
挑战
- 对偏好数据质量依赖强:数据不充分或偏差会影响训练效果。
- 理论和实证尚在完善中:相比 RLHF,DPO 应用还较新,部分场景表现有待深入验证。
- 泛化能力需进一步提升:对未见任务和领域的适应性仍需探索。
四、DPO使用建议
- 精心设计和筛选偏好数据,保证标签一致性和多样性。
- 结合监督微调成果作为初始化,提升训练稳定性。
- 监控训练过程,适当调整学习率和正则项防止过拟合。
- 在生产环境持续收集反馈数据,进行迭代优化。
最后我们回答一下文章开头提出的三个问题:
- DPO 为什么被视为偏好优化的轻量级替代方案?
因为它直接用偏好对数据训练模型,绕开了训练奖励模型和强化学习,极大简化了训练流程和资源消耗。 - DPO 的基本原理和训练流程有哪些关键点?
通过对比学习最大化优选回答的概率,直接调整模型参数,无需额外的奖励模型或策略优化步骤。 - 实践中使用 DPO 有哪些优势与注意事项?
优势是训练简单高效,适合资源有限场景;注意确保偏好数据质量,结合其他微调方法提升泛化能力。
关于深度学习和大模型相关的知识和前沿技术更新,请关注公众号coting!
以上内容部分参考了相关开源文档与社区资料。非常感谢,如有侵权请联系删除!