一个多月前我决定给公司的客服模型做 RLHF 对齐。网上教程看了一堆觉得不就是训个奖励模型再跑 PPO 吗结果真上手才发现——坑是真的多。写这篇文章不是为了讲理论论文已经够多了而是把我踩过的坑、试出来的方案、觉得好用的工具全部分享出来。如果你正准备搞 RLHF这篇应该能帮你省至少一周的时间。先说结论RLHF 到底值不值得搞先给个直接的回答如果你的模型已经做过 SFT 而且效果还行RLHF 能带来 15-30% 的质量提升。但如果 SFT 都没做好别碰 RLHF。我这次的目标是让客服模型的回答更像人——不是更准确SFT 已经做得很好了而是减少模板化回复、减少不必要的冗长、提高对话的自然度。这是一个典型的 RLHF 场景优化的是风格和偏好而不是事实准确性。第一步数据构建——这个阶段最费时间RLHF 需要三批数据SFT 数据你已经有了、偏好数据、还有一个用来初始化奖励模型的基础数据。最花时间的是偏好数据。我们需要人类标注员对同一个 prompt 的两个回答做对比——哪个更好为什么然后记录偏好。我踩的第一个坑就是标注标准不统一。一开始给了标注员一个模糊的指令“选更好的那个”。结果有的标注员偏好长回答有的偏好短回答有的追求准确性有的看重语气。最终的数据集里充斥着不一致的偏好奖励模型训出来也是混乱的。解决方案明确的标注规范后来我重新制定了标准按优先级排序事实准确性回答是否正确这是硬门槛有用性是否解决了用户的问题安全性有没有有害或不当内容风格语气自然、不啰嗦、不机械一条标注规则如果 A 事实错误、B 事实正确直接选 B。只有在事实都正确的情况下才比较有用性和风格。这样一来标注一致性从 60% 提升到了 85% 以上。数据量到底要多少根据我这次的经验和社区反馈偏好数据至少 10K 对比对20K 条回答最好 50K多样性比数量更重要5000 条覆盖 50 种场景的数据 50000 条只覆盖 2 种场景的数据质量把关每批数据随机抽 10% 做质检标注一致性低于 80% 的批次直接重标我实际用了 30K 条偏好数据覆盖了售前咨询、售后投诉、产品推荐、技术问题四个大类。前后花了两周时间收集和清洗。第二步奖励模型训练——比想象中敏感奖励模型Reward Model是 RLHF 的基石。如果 RM 训不好后面的 PPO 就是白费力气。我选了和基础模型同架构的模型做 RM——去掉 LM Head换成回归头输出标量分数。踩坑记录分数漂移刚开始训 RM 的时候发现 loss 降得挺漂亮但验证集上的准确率只有 65%。仔细一看问题模型学会了打安全分——给所有回答都打中高分而不是学会区分好坏。根源训练数据里好回答比坏回答多模型学到的先验是打高分就对了。解决办法保证偏好数据集里好/坏回答比例接近 1:1。如果天然不平衡可以做数据增强——把表现好的模型生成的回答作为坏样本或者用 GPT 改写。另外我还加了正则化强制 RM 的评分分布保持一定的方差。训练参数说一下我最终跑通的配置模型基座DeepSeek V2 Lite (1.5B) 学习率1e-5 → cosine decay batch size64 训练步数3000 步 验证集准确率78.3%78.3% 的准确率属于中等偏上。理想情况下应该干到 85%但受限于数据量和模型大小这个结果已经能让 PPO 跑起来了。第三步PPO 训练——最刺激的部分RLHF 最后一步是用 PPO 微调基础模型。这也是最容易出问题的地方。PPO 的三个组件Policy你要微调的模型生成回答Reward Model给回答打分Reference Model冻结的基础模型防止 policy 偏离太远 → 通过 KL 散度约束核心超参KL 惩罚系数 β。这玩意决定了模型能偏离基础模型多远。我踩过的大坑坑一奖励 hacking训到第 400 步的时候奖励分数一直在涨但实际生成的回答质量在下滑——模型学会了投机取巧生成一堆看上去不错但实际无意义的回答。诊断KL 惩罚系数 β 设得太小0.01模型觉得偏离原始 SFT 模型代价很低就放飞自我了。解决β 提到 0.1同时在验证集上每 100 步做一次人工评估。坑二收敛不稳定PPO 的 loss 曲线像过山车根本看不出是否收敛。原因PPO 对超参非常敏感特别是 clip 范围和 learning rate。我的最终参数能稳定跑完的KL β0.1 PPO clip0.2 学习率3e-6比 SFT 小一个数量级 batch size128 GAE λ0.95 discount γ0.99 每次更新步数4 训练步数2000 步坑三显存爆炸PPO 需要同时加载 policy、RM、reference model 三个模型。用 1.5B 的模型还好如果你想训 7B 的单卡肯定不够。我的做法用 DeepSpeed ZeRO-3 LoRA。把 RM 也分到多卡上policy 用 LoRA 微调reference model 只在需要计算 KL 时加载。这样 2×A100 可以训 7B 模型。最终效果评估忙了一个月最终的效果怎么样指标SFT 基线加 RLHF 后提升人工评分1-53.23.819%回答长度字187143-24%更简洁模板化回答比例34%18%-47%用户满意度72.4%81.6%9.2%最明显的改进是人味——模型不再每句话都以非常理解您的心情开头了回答更直接、更有针对性。用户的二次回复率也提高了。但我得吐槽一句RLHF 的边际效益递减非常快。前 500 步效果提升最明显后面 1500 步基本是在微调细节。如果你只跑 500 步也能拿到 80% 的效果。写在最后RLHF 不是银弹。如果你的模型连基本对话都做不好SFT 是优先级更高的事。但如果你已经有好模型的底子想优化回答的风格和自然度RLHF 值得搞。几个关键教训回头再看数据标注标准一定要明确不然后面所有工作都是白费奖励模型的质量决定了 PPO 的天花板值得花时间调PPO 超参一定要从保守开始KL 惩罚系数设大点不会错每 100 步做一次人工评估别只看奖励分数PS后续我计划试试 DPO据说比 PPO 稳定很多不用单独训奖励模型。搞定了来分享。