数据工程·奖励模型数据体检台

《AI 数据全书》· 第 20 章 · 奖励模型数据

奖励模型是 RLHF 里唯一把「人类偏好」翻译成可优化信号的环节,而它的失败方式是沉默的—— 分数照涨,质量不动。本工具把第 20 章拆成四个可交互解剖台: 边界样本分层、hard negative 构造、reward hacking 攻防、过程监督标注。 分层配比与 TVD、Monte Carlo 逐步抽样、HNC 块合并、Best-of-N 稳定性全部在浏览器里真算; 算不了的明确标出是文献值还是教学模型,并逐条回源到一手论文。

🔬内置池子的分层诊断

🧮 真算

§20.2 stratify_preference_data 的判定阈值与目标分布📖 文献值:按 margin 逐条分档,再与实际占比比对。

easymargin > 2.0
8条
目标 15%33.3%
差异一眼可见,作锚点
medium1.0 < margin ≤ 2.0
4条
目标 35%16.7%
明确但不极端
hard0.3 < margin ≤ 1.0
6条
目标 35%25.0%
需要仔细比较
boundarymargin ≤ 0.3
6条
目标 15%25.0%
几乎相当,最考验 RM
⚠️内置池子本身就有 medium 档不足:只有 4 条(目标 8 条)。 这不是工具的 bug,而是一个真实采集 pipeline 最常见的失败——明显好 / 明显差容易拿,质量接近的中等难度样本最难拿。

🎚️配比沙盘:拖出你的实际分布

🧮 真算
easy 权重8 → 33.3%
medium 权重4 → 16.7%
hard 权重6 → 25.0%
boundary 权重6 → 25.0%
TVD(实际 vs 目标)
0.283
偏离过大
hard + boundary 占比
50.0%
倒 U 曲线的横坐标
该配比下的验证准确率
78.0%
优于 10× 数据量
训练集总条数(用于折算每档需要多少条)2,000
easy
667
medium
333
hard
500
boundary
500
⚠️ 'medium' 样本不足: 实际 16.7% vs 目标 35.0%
上面这段是 §20.2 参考实现的告警文案原样输出(判定条件 actual < target × 0.5📖 文献值)。

📈⭐ 验证准确率 vs hard 占比

⚠ 教学模型
45%55%65%75%85%10× 数据量当前 50%0%25%50%75%100%
50K 精构造(本工具教学模型)500K 随意收集(数据量 ×10)

这条倒 U 是把 §20.2 两句话合成出来的📖 文献值:只有 easy → 学不到精细区分,准确率塌在谷底;只有 hard → 学到的是标注噪声,同样塌下去;峰顶 落在 50%,正好是原书目标分布里 hard + boundary 的合计占比。

灰色虚线是「把数据量翻 10 倍但随意收集」——它与横轴无关(不随配比变化),且始终低于紫色曲线的峰顶, 这就是 §20.2 那句「50K 精心构造 > 500K 随意收集」📖 文献值。

⚠ 曲线形状(高斯、σ=0.18、谷底 52%、峰顶 78%)是本工具设定,不是任何论文的实测曲线。 灰色平线 62% 同样是示意值。能当结论用的只有单调关系的方向与两端低、中间高这个形状。

🔎 一个容易读漏的点:内置池子的 hard+boundary 恰好是 50%,已经坐在峰顶上, 但它的 TVD 仍有 0.283(medium 档严重不足)——「落在准确率峰顶」和「分布均衡」是两件事,前者只看了 hard 维度的合计。

📏🔴 中文长度怎么切:按字 vs 按空格

🧮 真算

长度黑客的判据是「chosen 比 rejected 长多少」,中文必须用按字的长度。 若照抄英文习惯写 split(' ').length,中文整段只算 1 个 token,长度差恒为 0,长度黑客监测器会静默失效。这是本仓库第 7 次遇到同一类切分问题,所以做成可见对照而不只是代码里改对。

样本chosen 按字rejected 按字长度差(按字)按空格长度差(按空格)
#111242+167%10/1900%
#211271+58%10/743%
#36717+294%1/10%
#467670%1/10%
#54637+24%10/11-9%
#646460%10/100%

📋24 条偏好对(含 §20.2 原文两条)

🧮 真算
#1 Python 怎么排序列表?原书示例easy · margin 3.2
chosen:使用 sorted() 函数:sorted([3,1,2]) 返回 [1,2,3]。默认升序,降序用 sorted(lst, reverse=True)。自定义排序用 key 参数:sorted(lst, key=len)。
rejected:排序是一个很复杂的问题,涉及到算法和数据结构,建议你去学学快速排序和归并排序的原理。
#2 Python 怎么排序列表?原书示例hard · margin 0.42
chosen:使用 sorted() 函数:sorted([3,1,2]) 返回 [1,2,3]。默认升序,降序用 sorted(lst, reverse=True)。自定义排序用 key 参数:sorted(lst, key=len)。
rejected:使用 sort() 函数:sort([3,1,2]) 返回 [1,2,3]。默认升序,降序用 sort(lst, reverse=True)。
← 这条是 §20.2 的 Hard Negative 原文:差距微妙在 sort 不是函数而是方法、没有返回值、且不接受列表参数,写法看上去几乎一样。
#3 解释一下什么是过拟合easy · margin 2.8
chosen:过拟合指模型在训练集上表现很好、在未见数据上明显变差。常见成因是模型容量相对数据量过大或训练轮数过多,可用正则化、早停、增加数据缓解。
rejected:过拟合就是模型坏了,需要重新训练。
#4 解释一下什么是过拟合boundary · margin 0.21
chosen:过拟合指模型在训练集上表现很好、在未见数据上明显变差。常见成因是模型容量相对数据量过大或训练轮数过多,可用正则化、早停、增加数据缓解。
rejected:过拟合指模型在训练集上表现很好、在未见数据上明显变差。常见成因是模型容量相对数据量过大或训练轮数过多,可用正则化、早停、增加数据减少。

这个工具里哪些数字是真的

🧮 浏览器内真算
  • · 分层计数、TVD、目标配比偏离与告警(逐条判据执行)
  • · 中文长度按字统计 vs 按空格统计的对照
  • · Hard Negative 五法的样本生成与配额统计
  • · BoN / WoN 两代迭代的权重演化与五维覆盖度
  • · 三层防御预算分配与残余风险(指数衰减公式)
  • · Monte Carlo 逐步二项抽样、pass_rate 与置信度判定
  • · HNC 块合并与 Best-of-N 采样(300 次试验)
📖 引自第 20 章 / 一手来源
  • · 分层目标 15 / 35 / 35 / 15 与四档 margin 切点
  • · RewardBench 2 五个维度及其「常见失败」
  • · Anthropic 三个坏高分模式 + 12% / 50% 泛化发现
  • · METR RE-Bench 30.4% 与四类蓄意环境操纵
  • · PRM800K 80 万步 / $2–5M、MC 640K ≈ $50–200
  • · 隐式 PRM 1/38、PRIME +15.1%、R-PRM +13.9 / +8.5
  • · RRM(arXiv:2409.13156)、GenRM(arXiv:2408.15240)
⚠ 教学模型 / 示意值
  • · 倒 U 型准确率曲线的形状与峰值位置(原文只给定性)
  • · 注入器各模式的 RM / 人工增减量(绝对值无意义)
  • · 三层效能矩阵与风险指数衰减系数 k = 3.0
  • · MC 每一步的潜在通过率与「纠正」的可挽回程度
  • · Best-of-N 的 β 与 noise(网格搜索标定到定性形状)
  • · 40 条 MCTS 路径为构造语料,非任何真实模型的 rollout
带 📖 的数字与本工具实算的数字不做互相验证——数据集、模型、评测基准全都不同。 文献锚点在页面上单独列栏,不与实算列强行对齐。 内容参考《AI 数据全书》第 20 章「奖励模型数据」。