
DPO vs ORPO vs KTO完全对比train-llm-from-scratch教你怎么选【免费下载链接】train-llm-from-scratchA straightforward method for training your LLM, from downloading data to generating text.项目地址: https://gitcode.com/GitHub_Trending/tr/train-llm-from-scratch正在做 LLM 对齐Alignment的朋友选算法是不是被绕晕了今天这篇DPO vs ORPO vs KTO 完全对比用开源项目 train-llm-from-scratch从零手写 Transformer 到完整后训练链路的 PyTorch 项目里同一套代码的三种损失函数实现帮你在 10 分钟内搞懂三种偏好优化算法的差异并给出明确的选择建议 快速上手git clone https://link.gitcode.com/i/bed9c06b1a21d6b8c21b129e0eb340b7 cd train-llm-from-scratch pip install -e .它们处在 LLM 训练流程的哪个环节三者都属于**后训练Post-Training**阶段的偏好优化环节位于 SFT 之后、强化学习PPO/GRPO之前核心区别在于数据要求和是否需要参考模型这张表一眼看懂维度DPOORPOKTO数据形式成对偏好chosen vs rejected成对偏好非成对/ 即可参考模型Reference需要冻结 SFT 副本❌ 不需要需要KL 基线能否替代 SFT否需先 SFT✅ 可一步完成 SFT对齐否需先 SFT显存开销较高策略参考双模型最低单模型较高双模型默认学习率5e-7小步慢走同左同左三种损失函数的核心思想不堆代码版三种算法共用一个原料——序列 log 概率对回答里每个 token 的对数概率求和由 src/post_training/rollout.py 的sequence_logprobs提供PPO/GRPO 也复用它。DPO让好的更好、坏的更坏拿到一个偏好对DPO 同时让策略模型和冻结的参考模型各自算出 chosen/rejected 的 log 概率比较二者的偏好比目标是策略对 chosen 相对 rejected 的偏好要超过参考模型的偏好。参数beta默认 0.1控制偏离参考模型的强度——推得越狠模型越容易翻车所以默认学习率只有 5e-7。一句话成对数据 想要最经典、最稳的对齐 → 选 DPO。ORPO省掉参考模型还顺便干了 SFT 的活ORPO 的损失 NLL(chosen)在好回答上继续做 SFTλ × 优势比偏好项odds ratio把好回答的相对优势拉开。两大好处不用冻结一份参考模型显存减半SFT 和对齐合并成一步没有 SFT 检查点也能直接跑。一句话想流程最简、显存有限、还没做过 SFT → 选 ORPO。KTO没有配对数据也不慌真实场景里很多时候只有这条回答 / 那条回答 的零散反馈凑不成 pair。KTO 把 chosen 当desirable、rejected 当undesirable用批内估计的参考 KL 基线分别给两类信号加权优化。一句话只有单条点赞/点踩信号、凑不出偏好对 → 选 KTO。三者的完整实现都在 src/post_training/dpo.pydpo_loss/orpo_loss/kto_loss三个函数各几十行非常适合作为学习材料逐行精读。一键切换同一脚本跑三种算法数据准备一次即可scripts/prepare_preference_data.py会把 HH-RLHF UltraFeedback 转成{prompt, chosen, rejected}格式的 JSONL见 data_loader/preference_dataset.py。python scripts/train_dpo.py --loss_type dpo --beta 0.1 # 经典 python scripts/train_dpo.py --loss_type orpo --orpo_lambda 1.0 # 免参考模型 python scripts/train_dpo.py --loss_type kto --beta 0.1 # 单信号超参在 configs/dpo.json 里按阶段管理beta、orpo_lambda、lr、max_len…也支持命令行覆盖如--beta 0.2。想要先验证环境直接用 configs/smoke/dpo.json 的极小配置几秒出结果。怎么判断训练成功盯这 3 个数字训练日志里的指标含义详见 docs/05_dpo.mdlossDPO/KTO 起点约 0.693ORPO 起点更高含 NLL 项acc隐式奖励准确率——策略更偏好 chosen 的比例应稳定超过 0.5项目实测约 0.574r_chosen − r_rejectedmargin隐式奖励差越拉越开越好GSM8K dev 准确率真正的下游体检用 scripts/eval_post_training.py 对 base / SFT / DPO / PPO / GRPO 各阶段跑同一张表。终极选择清单 ✅有成对偏好数据、已做过 SFT →DPO最经典、生态最全想一步到位SFT对齐合并或显存紧张 →ORPO只有单条 / 反馈、无配对 →KTO对对齐还不满意、且有可验证奖励如数学题答案→ 继续上PPOsrc/post_training/ppo.py或GRPOsrc/post_training/grpo.py用同一套代码无缝衔接延伸阅读阶段文档docs/05_dpo.md、docs/04_reward_model.md、docs/06_ppo.md后训练总览POST_TRAINING.md配置系统config/post_training_config.py configs/Streamlit 控制面板可视化启动每个阶段streamlit run ui/app.py整套流程里三个算法只是换一行损失函数这正是 train-llm-from-scratch 最有教学价值的地方数据、损失、评估全部透明看完这一篇你对 LLM 对齐算法的选型应该不再纠结了 【免费下载链接】train-llm-from-scratchA straightforward method for training your LLM, from downloading data to generating text.项目地址: https://gitcode.com/GitHub_Trending/tr/train-llm-from-scratch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考