训练中看哪些指标?chosen/rejected 样本质量怎么保证?

第35题:训练中看哪些指标?chosen/rejected 样本质量怎么保证?

1. 核心回答

如果这里讨论的是 DPO、RLHF 等偏好优化训练,我会把监控指标分成三层:

  1. 优化过程是否稳定:看 train/eval loss、learning rate、gradient norm、吞吐、显存和序列长度;
  2. 模型是否学会 preference pair :看 rewards/chosenrewards/rejectedrewards/marginsrewards/accuracies、chosen/rejected log-probability;
  3. 最终生成能力是否真的提高:在独立测试集上比较 Win Rate、任务指标、安全性、事实性和不同数据切片的表现。

chosen/rejected 数据质量则主要通过:

明确 Rubric → 多人或重复标注 → 处理歧义样本 → 检查长度和格式捷径 → 构造有价值的 rejected → 去重和泄漏审计 → 独立抽检

来保证。


2. 训练阶段首先看哪些基础指标

2.1 Train Loss 和 Evaluation Loss

最基础的是:

  • train_loss
  • eval_loss

训练过程中通常希望看到训练 loss 逐渐下降。

更重要的是同时观察验证集。

如果出现:

Ltrain↓ L_{\text{train}}\downarrow Ltrain↓

同时:

Leval↑ L_{\text{eval}}\uparrow Leval↑

通常需要考虑过拟合、数据分布差异或训练过度等问题。

因此我会同时画:

Ltrain(t) L_{\text{train}}(t) Ltrain(t)

和:

Leval(t) L_{\text{eval}}(t) Leval(t)

观察二者随训练 step 的变化。


2.2 Learning Rate

需要记录当前:

learning_rate

尤其使用 scheduler 和 warmup 时,实际学习率会随训练过程变化。

如果 loss 或梯度突然异常,需要同时检查当时的 learning rate。

例如:

  • warmup 是否过短;
  • peak learning rate 是否过大;
  • scheduler 是否下降过快;
  • resume training 后 scheduler 状态是否正确恢复。

2.3 Gradient Norm

另一个重要指标是:

grad_norm

它反映参数梯度整体尺度。

如果长期出现非常大的 gradient norm,可能存在:

  • 学习率过高;
  • 异常 batch;
  • 数值不稳定;
  • loss spike。

如果 gradient norm 长期接近 0,则可能需要检查:

  • 参数是否真正参与训练;
  • LoRA target modules 是否配置正确;
  • learning rate 是否过低;
  • 梯度是否被错误 detach;
  • mixed precision 是否异常。

因此 gradient norm 是定位训练异常的重要诊断指标。


2.4 吞吐与显存

工程训练还需要同时记录:

  • tokens/s;
  • samples/s;
  • step time;
  • peak GPU memory;
  • GPU utilization。

例如模型效果正常,但 GPU utilization 长期只有 30%,说明训练流水线可能存在:

  • DataLoader 瓶颈;
  • CPU 预处理瓶颈;
  • padding 浪费;
  • batch size 太小;
  • 多卡通信开销。

这些指标主要回答:

训练资源是否被有效利用。


2.5 输入和输出长度分布

偏好训练中还应该持续观察:

  • prompt length;
  • chosen length;
  • rejected length;
  • truncation ratio;
  • EOS 完成比例。

长度尤其重要。

如果数据中:

ELchosen≫ELrejected EL_{\\text{chosen}} \gg EL_{\\text{rejected}} ELchosen≫ELrejected

模型可能学习一个非常简单的捷径:

"更长的回答更容易成为 chosen。"

这样模型学到的可能主要是长度偏好。

因此我会分别统计:

P(Lchosen) P(L_{\text{chosen}}) P(Lchosen)

和:

P(Lrejected) P(L_{\text{rejected}}) P(Lrejected)

并按照长度区间切片检查 preference accuracy。


3. DPO 训练中特别需要看哪些指标

对于一个 Preference Pair:

(x,y+,y−) (x,y^+,y^-) (x,y+,y−)

其中:

  • xxx 是 prompt;
  • y+y^+y+ 是 chosen;
  • y−y^-y− 是 rejected。

DPO 希望模型相对于 reference model 更偏好 y+y^+y+。

可以定义 DPO 的隐式 reward:

$$

r_\theta(x,y)

\beta

\log

\frac{\pi_\theta(y|x)}

{\pi_{\text{ref}}(y|x)}

因此 Hugging Face TRL 的 `DPOTrainer` 会直接记录一组非常有用的指标。 *** ** * ** *** ### 4. `rewards/chosen` `rewards/chosen` 表示 chosen response 的平均隐式 reward。 即: E\[rθ(x,y+)\] E\[r_\\theta(x,y\^+)\] E\[rθ(x,y+)\] 它反映当前 policy 相对于 reference model 对 chosen response 的相对偏好变化。 这个值需要结合 rejected 和 margin 一起观察。 单独要求: rchosen\>0 r_{\\text{chosen}}\>0 rchosen\>0 没有充分依据,因为 DPO 关注的是 pairwise relative preference。 *** ** * ** *** ### 5. `rewards/rejected` 对应 rejected response: E\[rθ(x,y−)\] E\[r_\\theta(x,y\^-)\] E\[rθ(x,y−)\] 训练过程中希望模型逐渐拉开 chosen 与 rejected 的相对差异。 因此相比单独观察: `rewards/chosen` 更有解释力的是: `rewards/margins` *** ** * ** *** ### 6. `rewards/margins` 定义为: ##

Margin

r_\theta(x,y^+)

r_\theta(x,y^-)

如果: Margin\>0 Margin\>0 Margin\>0 说明模型当前更加偏好 chosen。 训练过程中通常希望验证集上的平均 margin 能够形成稳定的正间隔。 例如: 0.1→0.4→0.8 0.1 \\rightarrow 0.4 \\rightarrow 0.8 0.1→0.4→0.8 说明 chosen 和 rejected 的区分逐渐增强。 但 margin 持续增大也不能单独证明模型最终生成效果持续提高。 如果训练数据存在错误标签,模型同样能够把错误 preference pair 学得越来越"确定"。 *** ** * ** *** ### 7. `rewards/accuracies` TRL 中的: `rewards/accuracies` 表示:

P

\left(

r_\theta(x,y^+)

r_\theta(x,y^-)

\right)

也就是模型正确排序 chosen 和 rejected 的比例。 例如: Accuracy=0.90 Accuracy=0.90 Accuracy=0.90 表示 90% 的 preference pair 中,模型给 chosen 的隐式 reward 高于 rejected。 这是一个非常直观的指标。 我会同时看: * Training Reward Accuracy; * Validation Reward Accuracy。 如果: Acctrain→0.99 Acc_{\\text{train}}\\rightarrow0.99 Acctrain→0.99 而: Accval≈0.65 Acc_{\\text{val}}\\approx0.65 Accval≈0.65 很可能存在 preference pair 过拟合。 *** ** * ** *** ### 8. `logps/chosen` 和 `logps/rejected` 还应该观察: * `logps/chosen` * `logps/rejected` 即模型分别赋给 chosen 和 rejected 的平均 log probability。 它可以帮助回答: **模型究竟通过什么方式扩大 preference margin。** 例如出现: log⁡P(y+)↓ \\log P(y\^+)\\downarrow logP(y+)↓ 同时: log⁡P(y−)↓↓ \\log P(y\^-)\\downarrow\\downarrow logP(y−)↓↓ 模型仍然可能获得更大的 preference margin。 因此只看 `rewards/accuracies` 容易遗漏策略概率本身的变化。 把: * reward; * reward margin; * log probability; 放在一起看,更容易发现异常训练动态。 *** ** * ** *** ### 9. 还需要关注与 Reference Model 的偏移 DPO 中的 β\\betaβ 控制 policy 相对于 reference model 的偏移强度。 实际训练中,如果框架提供 KL 或近似 KL 指标,我也会记录。 核心目的是检查: πθ \\pi_\\theta πθ 是否正在过度偏离: πref \\pi_{\\text{ref}} πref 偏移太弱可能学不到足够的 preference。 偏移过大则可能导致: * 原有能力下降; * 输出分布异常; * 风格过度变化; * reward overoptimization。 因此需要把 preference improvement 和模型能力保持一起评估。 *** ** * ** *** ### 10. 训练内部指标仍然需要外部任务评测 DPO loss 降低、reward accuracy 提高,都属于训练内部指标。 最终模型仍然需要独立生成评测。 例如和 Base / SFT Model 比较: ##

WinRate

P

(M_{\text{DPO}}

\succ

M_{\text{SFT}})

还可以根据具体任务检查: * Instruction Following; * Accuracy / F1; * Hallucination Rate; * Helpfulness; * Harmlessness; * Truthfulness; * Code Pass Rate; * Safety Refusal; * 长文本能力。 这样才能建立: Preference Loss改善→Preference Pair区分改善→实际生成质量改善 \\text{Preference Loss改善} \\rightarrow \\text{Preference Pair区分改善} \\rightarrow \\text{实际生成质量改善} Preference Loss改善→Preference Pair区分改善→实际生成质量改善 完整证据链。 *** ** * ** *** ### 11. chosen/rejected 数据应该满足什么基本结构 一条 DPO 数据通常可以表示为: (x,y+,y−) (x,y\^+,y\^-) (x,y+,y−) 其中两个 response 应该回答**同一个 prompt**。 核心条件是:

Quality(y^+|x)

Quality(y^-|x)

这里的 Quality 必须首先被定义。 例如回答质量可能包括: * 正确性; * 指令遵循; * 相关性; * 完整性; * 事实性; * 安全性; * 格式要求; * 简洁性。 如果标注者没有统一评价标准,那么 chosen/rejected 标签本身就会存在较高噪声。 *** ** * ** *** ### 12. 第一项质量控制:建立明确 Rubric 在标注前,我会先定义 Rubric。 例如: #### 12.1 正确性 是否存在事实错误、计算错误或逻辑错误。 #### 12.2 指令遵循 是否满足用户要求的: * 格式; * 长度; * 语言; * 输出约束; * 任务目标。 #### 12.3 相关性 回答是否直接处理问题。 #### 12.4 完整性 关键步骤是否缺失。 #### 12.5 安全性 是否违反安全约束。 然后给出优先级。 例如某一任务可以规定:

Correctness

InstructionFollowing

Completeness

Style

$$

这样两个标注者面对相同 pair 时,更容易获得一致判断。

InstructGPT 的人工反馈流程也采用了明确的标注说明,对 helpful、truthful 和 harmless 等维度进行定义。


13. 第二项质量控制:允许 Tie 和 Ambiguous

并不是所有 response pair 都有明确优劣关系。

例如:

Response A

简洁、正确。

Response B

更详细,同样正确。

如果任务没有明确规定偏好简洁还是详细,强制标:

text 复制代码
A = chosen
B = rejected

就会人为制造噪声。

因此更合理的标注系统应该允许:

  • A 胜;
  • B 胜;
  • Tie;
  • Uncertain / Ambiguous。

对于高歧义 pair,可以:

  1. 删除;
  2. 重新标注;
  3. 交给更多标注者;
  4. 根据置信度降低训练权重。

这样可以降低 Preference Label Noise。


14. 第三项质量控制:多人复核和一致性

对于关键数据,可以让多个标注者独立判断。

例如三个人分别判断:

text 复制代码
A > B
A > B
A > B

属于高一致性样本。

如果结果是:

text 复制代码
A > B
B > A
Tie

说明该 pair 的偏好非常不稳定。

可以进一步统计:

  • pairwise agreement;
  • majority agreement;
  • Cohen's Kappa;
  • Fleiss' Kappa;

等一致性指标。

对于高价值数据,我更倾向于优先训练:

高置信度、高一致性的 preference pair。


15. 第四项质量控制:防止 Length Bias

这是 Preference Dataset 很常见的问题。

假设训练集中:

P(Lchosen>Lrejected)=0.90 P ( L_{\text{chosen}}>L_{\text{rejected}} ) =0.90 P(Lchosen>Lrejected)=0.90

模型就可能学习:

长回答通常更好。

这种关联可能和真正的任务质量无关。

因此需要统计:

Lchosen−Lrejected L_{\text{chosen}}-L_{\text{rejected}} Lchosen−Lrejected

的分布。

同时检查:

  • chosen 是否系统性更长;
  • rejected 是否大量被截断;
  • chosen 是否包含更多 Markdown;
  • chosen 是否拥有固定开场白;
  • rejected 是否经常缺少 EOS。

已有偏好学习研究表明,长度偏差确实能够显著影响 preference evaluation 和训练结果。


16. 第五项质量控制:检查格式和风格捷径

除了长度,还可能存在其他 Shortcut。

例如:

chosen 总是:

text 复制代码
Sure, here is...

而 rejected 从来没有。

或者 chosen 总是:

  • Markdown 完整;
  • 有标题;
  • 有编号;
  • 没有拼写错误。

模型可能通过这些表面特征判断标签。

因此可以训练一个简单 classifier:

f(y)→{chosen,rejected} f(y)\rightarrow \{chosen,rejected\} f(y)→{chosen,rejected}

只给它:

  • 长度;
  • 标点数量;
  • Markdown 数量;
  • 特定短语;
  • 是否包含拒绝词;

等表面特征。

如果这个简单模型就能获得很高的 preference accuracy,说明数据存在明显 shortcut。


17. 第六项质量控制:Rejected 需要有学习价值

Rejected 的质量同样重要。

例如:

Chosen:

正确、完整地回答问题。

Rejected:

text 复制代码
asdfghjkl

这种 pair 很容易判断,但学习价值很低。

更有价值的 rejected 通常是:

  • 看起来合理但存在关键事实错误;
  • 大部分正确但违反一个重要约束;
  • 逻辑过程合理但结论错误;
  • 内容正确但遗漏关键条件;
  • 存在常见安全问题;
  • 与 chosen 很接近,但在核心质量维度上确实更差。

这种样本可以理解为 Hard Negative Preference Pair

它迫使模型学习真正的质量边界。

同时也需要控制难度。近期 Preference Data Construction 研究发现,简单选择 reward 最高和最低的两个响应组成 pair 并不总能得到最优训练数据。

因此 rejected 需要"有区分度",同时保持实际学习价值。


18. 第七项质量控制:去重和数据泄漏审计

需要检查:

  • 完全重复 prompt;
  • 近似重复 prompt;
  • 同一问题不同改写;
  • 同一 chosen/rejected pair;
  • 同一原始文档派生的数据。

尤其不能出现:

text 复制代码
Train:
Prompt A → chosen/rejected

Test:
Prompt A 的轻微改写 → chosen/rejected

这样测试集结果容易偏高。

因此最好按照:

  • 用户;
  • 任务;
  • 来源文档;
  • 项目;
  • Prompt Cluster;

进行 Group Split。


19. 第八项质量控制:对标签进行反向检查

对于抽样数据,可以进行 Label Swap Review。

原始:

yA≻yB y_A\succ y_B yA≻yB

重新呈现给标注者时:

  • 随机交换显示顺序;
  • 隐藏原始标签;
  • 隐藏模型来源。

然后再次判断。

如果同一个 pair 很容易因为:

  • 左右位置;
  • 模型名称;
  • 原始顺序;

发生标签翻转,就说明标注流程存在额外偏差。


20. 第九项质量控制:LLM Judge 只能作为一层工具

可以使用强模型辅助产生 preference label。

但模型评分本身仍然需要校验。

我会先抽取一部分:

Daudit D_{\text{audit}} Daudit

让人工专家独立标注,然后计算:

Agreement(Judge,Human) Agreement ( Judge, Human ) Agreement(Judge,Human)

并按照任务切片检查:

  • 代码;
  • 数学;
  • 安全;
  • 长文本;
  • 少数语言;
  • 边界问题。

如果某些类型上 Judge 与人工一致性很低,就不能直接使用 Judge 批量产生这些数据的最终标签。

模型分数适合作为:

  • 预筛选;
  • 辅助标注;
  • 低成本扩展;

最终的数据质量仍然需要独立验证。


21. 训练过程中怎样判断数据本身存在问题

数据问题经常可以从训练指标反推。

21.1 Train reward accuracy 很高,Validation 很低

可能存在:

  • 过拟合;
  • train/test distribution shift;
  • 重复数据;
  • shortcut。

21.2 chosen 和 rejected 长度高度分离

需要检查 Length Bias。

21.3 Loss 长期异常震荡

需要抽查:

  • 标签反转;
  • 冲突 pair;
  • 极端长样本;
  • 数据格式错误。

21.4 某类数据 reward accuracy 明显低

可以按任务切片:

Accmath Acc_{\text{math}} Accmath

Acccode Acc_{\text{code}} Acccode

Accsafety Acc_{\text{safety}} Accsafety

Accgeneral Acc_{\text{general}} Accgeneral

定位 Preference Label 的薄弱区域。

因此训练监控和数据质量审核应该形成反馈循环。


22. 一个完整的训练监控面板

如果让我实际训练 DPO,我会至少记录:

类别 指标
优化状态 Train Loss
优化状态 Eval Loss
优化状态 Learning Rate
优化状态 Gradient Norm
资源 Tokens/s
资源 Peak GPU Memory
DPO rewards/chosen
DPO rewards/rejected
DPO rewards/margins
DPO rewards/accuracies
DPO logps/chosen
DPO logps/rejected
输出 chosen/rejected Length
输出 EOS / Truncation Rate
泛化 Validation Preference Accuracy
最终效果 Win Rate vs SFT/Base
最终效果 真实任务指标
最终效果 Safety / Hallucination / Failure Slice

这样才能同时看到:

Optimization \text{Optimization} Optimization

Preference Learning \text{Preference Learning} Preference Learning

Generalization \text{Generalization} Generalization

三个层面。


23. 面试时可以压缩成下面这段

训练阶段我会分三层看指标。

第一层是优化稳定性,包括 train/eval loss、learning rate、gradient norm、吞吐和显存。第二层是 DPO 特有指标,包括 rewards/chosenrewards/rejectedrewards/marginsrewards/accuracies。其中 margin 表示 chosen 和 rejected 的隐式 reward 差,accuracy 表示模型正确给 chosen 更高 reward 的比例。我还会看 chosen/rejected 的 log probability 和长度分布,防止模型通过长度或格式捷径学习 preference。第三层是在独立测试集上看真实 Win Rate、任务指标、安全性和事实性,因为训练内部指标提高不能单独证明最终生成质量提高。

chosen/rejected 数据方面,我会先建立明确 Rubric,例如正确性、指令遵循、完整性和安全性,然后进行多人或重复标注。对于意见分歧大的 pair,保留 tie 或重新审核。我还会检查 chosen/rejected 的长度、格式和固定短语分布,避免 Length Bias 和 Shortcut。

Rejected 也需要保证质量。我更希望使用"表面合理但存在明确关键问题"的 hard negative,这样模型能够学习真正的质量边界。最后还需要做去重、Train/Test 泄漏审计、随机抽检和 held-out evaluation。

所以最终判断标准是:

标签可靠+Pair具有学习价值+不存在明显捷径+验证集能够泛化 \text{标签可靠} + \text{Pair具有学习价值} + \text{不存在明显捷径} + \text{验证集能够泛化} 标签可靠+Pair具有学习价值+不存在明显捷径+验证集能够泛化

这四项同时满足,chosen/rejected 数据才适合进入偏好训练。


24. 来源

  1. Rafailov et al., Direct Preference Optimization: Your Language Model is Secretly a Reward Model, NeurIPS 2023 / arXiv:2305.18290。提出 DPO,通过 preference pair 直接优化策略。
  2. Hugging Face TRL Documentation, DPOTrainer 。当前官方文档明确记录 losslearning_rategrad_normlogps/chosenlogps/rejectedrewards/chosenrewards/rejectedrewards/marginsrewards/accuracies 等训练指标。
  3. Ouyang et al., Training Language Models to Follow Instructions with Human Feedback, NeurIPS 2022。通过人工对多个模型回答进行排序构造 preference 数据,并给标注人员提供明确的 helpful、truthful、harmless 评价规范。
  4. Bai et al., Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback, 2022。使用人工 preference 数据训练 Helpful and Harmless Assistant。
  5. Lee et al., RLAIF: Scaling Reinforcement Learning from Human Feedback, 2023。实验中讨论了 preference 数据和评估中的长度偏差问题。
  6. Chowdhury et al., Provably Robust DPO: Aligning Language Models with Noisy Feedback, 2024。分析 Preference Label Noise 对 DPO 的影响。
  7. Xiao et al., Finding the Sweet Spot: Preference Data Construction for Scaling Preference Optimization, 2025。研究不同 chosen/rejected reward gap 的数据构造方式,并表明简单使用最高分与最低分样本组成 pair 并不总是最佳方案。
相关推荐
CypressTel1 小时前
GPT-6 Astra发布:复杂任务执行能力继续提升——赛柏特AI快讯
人工智能·gpt
ever_up9731 小时前
LangChain基础知识概述1
人工智能·python·langchain
豆豆2 小时前
AI 建站实战:AI 生成前端页面如何集成自有 CMS 系统
人工智能·cms·网站搭建·网站管理系统·ai建站·建站工具·中小企业建站
cjy0001112 小时前
2026年9月零基础能听懂国内 FDE 讲师的课吗?
大数据·前端·人工智能·fde
百胜软件@百胜软件2 小时前
百胜软件SenClaw胜券助手正式发布:AI让数据“开口说话”,随时赋能零售运营
大数据·人工智能·零售
程序员天天困2 小时前
Claude Fable 5.1 到底怎么样?扒完官方跑分和第三方榜单,说几句实话
人工智能·claude
喜欢睡觉2 小时前
LangChain 输出解析器:从裸文本到结构化输出
人工智能
工业涂料百问2 小时前
【市场格局】系列(四)汽车、船舶、风电涂料赛道对比:1400亿工业涂料里,哪个细分最“肥“?
人工智能·汽车
桃西西呀2 小时前
红酒标签上的 87 分是怎么算出来的?我拿 1599 瓶真酒把线性回归和逻辑回归拆开讲
人工智能·机器学习·llm