AI Hero Club

大模型后训练 · 第 3 章

已自行标记完成0 / 8

仅保存在当前浏览器;完成标记不代表通过项目验收。

本章提纲 8 个小节
全课目录 8 章
完整课程计划 ↗
大模型后训练 / 课程计划 ↗

CHAPTER 03 / 8建议学习 120 分钟

偏好数据:比较的是谁与谁

比较数据出现平局、重复或循环偏好时,还能从中识别怎样的奖励关系?

本章要解决的 3 个问题
  • 把同提示winner/loser、平局与重复比较写成可检查数据契约
  • 由重复比较频数估计胜率,并用循环偏好反例定位标量奖励假设的边界
  • 区分候选覆盖、标注规则与独立效用,构造可揭露位置或长度偏差的测试
课程项目 ZIP ↓

任务与读者起点

本章在SFT示范之外建立第二种监督信号:同一个提示下,两个回答哪一个更值得采用。读者需会有限频率、二项概率与前两章的条件策略;对logistic模型的推导将在第四章展开。现在先把数据对象与可识别内容说清楚,因为再精确的优化器也无法修复比较对象已经错配的训练表。项目采用公开合成规则生成十八个训练比较,不把它包装成人类反馈采集,也不把人工规则的确定性误称为真实偏好的普遍性质。

一条比较记为 (x,aw,al)(x,a_w,a_l):x是共同提示,w表示winner,l表示loser。合法条件包括两个动作编号存在且不相等,二者共享同一个x,x来自训练集合。比较只表达“在这个条件下w胜过l”,没有给出差几分、是否都正确或是否都糟糕。即使两个回答都错,标注者也可能偏好其中一个;因此pair胜率不是任务正确率。项目保留独立oracle效用,评估时不把学习到的奖励自己给自己打分。

候选来源也是数据的一部分

在真实语言模型里,候选通常由某个固定策略采样,生成温度、提示格式、长度上限与停止条件决定有哪些回答能进入比较。偏好集不是从“所有可能文本”均匀抽样。若旧策略几乎从不生成某类回答,该区域就缺少直接监督;新策略优化后移入那里,离线数据的结论不自动覆盖。此处只有四个候选,项目显式枚举正确简短与另外三个的比较,候选边界可完全列出,便于观察覆盖与盲点。

对每个正x,winner为编号一,loser依次为三、零、二;对每个负x,winner为零,loser依次为二、一、三。六个训练上下文各三条,共十八条。没有直接比较三个loser彼此的顺序,例如同为错误但简短与冗长谁更差,数据没有单独给标签。BT的共享特征会推断它们的顺序,这是参数化的外推;若把模型推断回写为“标注者已证明”,就混淆了观测和假设。

算例一:相同顺序,强度并不唯一

假设同一提示下,回答A与B比较三次,A赢两次、B赢一次。若独立重复比较服从同一胜率p,观测似然为 p2(1−p)p^2(1-p),忽略排列常数。对数似然是二倍logp加log一减p;求导为二除p减一除一减p,令零得到p=2/3。二阶导为负,因此是内部极大。观测支持的是一个噪声胜率估计,不是A的绝对奖励等于二、B等于一,也不证明A一定正确。

ℓ(p)=2log⁡p+log⁡(1−p),ℓ′(p)=2p−11−p,ℓ′′(p)=−2p2−1(1−p)2<0.\ell(p)=2\log p+\log(1-p),\quad \ell\prime(p)=\frac2p-\frac1{1-p},\quad \ell\prime\prime(p)=-\frac2{p^2}-\frac1{(1-p)^2}<0.
这里ell是比较数据的对数似然,取0<p<1;不是上一章的负对数损失。

若用BT形式 p=σ(rA−rB)p=\sigma(r_A-r_B),赔率p除一减p为二,所以分差为log2。给两个奖励都加一百,胜率不变;把分差翻倍则胜率变为四分之五,不再相同。独立检查一是把log2代回sigmoid恢复2/3;独立检查二是直接计算似然,在p=1/2和p=3/4附近比较,峰值应在2/3附近。频数、分差与概率是三个量,不能互相用同一个数字替代。

p^=arg⁡max⁡0<p<1pnw(1−p)nl=nwnw+nl,logit⁡(p^)=log⁡nwnl.\hat p=\arg\max_{0<p<1}p^{n_w}(1-p)^{n_l}=\frac{n_w}{n_w+n_l},\qquad \operatorname{logit}(\hat p)=\log\frac{n_w}{n_l}.
分差公式要求两方向计数都正;全胜的边界情形在下一章处理。

噪声、平局与重复

相同pair出现反向标签不必是数据损坏,可能是标注分歧或不同审题标准。若强行只保留多数方向,会丢失胜率强度信息,并使原本有噪声的数据看起来完全可分。本项目规则无噪声,因此所有winner固定;第四章将专门解释没有正则时尺度会不断增长。它没有实现多人标注者模型,也没有独立估计标签错误率,不能拿这里的完美pair排序当作真实评价系统的校准结果。

平局需要明确策略:可以单独建模平局概率、采用软标签二分之一,或按事先规则剔除。三种方案回答不同问题。随意把平局随机转成胜负会添加人为噪声;总把左边当winner又引入位置偏差。当前数据没有平局,代码也没有平局字段,因此遇到真实平局数据时应先改契约与损失,不能悄悄丢掉。对同一内容不同排版的回答,也要先定义它们是否视作同一候选。

算例二:循环偏好不能由单一顺序解释

设同一x下,A胜B、B胜C、C胜A,各自稳定胜率为四分之三。若BT使用一个标量奖励且sigmoid单调,则第一条要求rA大于rB,第二条要求rB大于rC,第三条要求rC大于rA。把不等式串起会得到rA大于自身的矛盾。等价地,三条log-odds都为log3,沿环求和是三倍log3;但奖励差沿环望远镜相消必须为零。因此这个数据无法被该模型精确拟合。

这不说明数据一定错。可能不同标准间存在真实循环,也可能隐藏了标注者或上下文差异;需要更丰富的比较模型,或者分开建模不同群体。项目的“正确且简短”合成规则是可传递标量效用导出的顺序,不含循环,所以适用于BT教学。独立检查是直接对某个候选奖励赋值,列出三个分差之和恒为零;无论怎样调参数,都不可能同时等于三倍log3。这是模型不适用的反例,不是优化迭代次数不足。

防止提示与候选错配

若把正数提示的正确回答“正数,简短”和负数提示的正确回答“负数,简短”拼成一对,再标前者胜出,实际上比较了两个不同任务。BT和DPO都会假定共同x,得到的梯度可能偏向某一固定符号而不是条件正确性。只看winner文本语义似乎没问题,必须检查上下文身份才能发现。真实多轮数据还要把相同轮次、系统提示和历史一起作为条件,不能只凭最后一句字符串相同就认为条件一致。

位置偏差可用交换展示顺序检查。若标注规则独立于左右位置,把候选互换并同时翻转标签,应保持对同一内容的判断。项目内部存winner/loser,不存屏幕左右位置;这消除了界面顺序在合成规则中的作用,却没有证明人类采集时也没有位置效应。若以后接入人类数据,应保存原展示次序与标注者信息,并在平衡分配下估计偏差,而不是在导出时删除这些证据。

长度偏差也要区分“真实任务偏好”与“无关捷径”。本任务明确要求简短,因此简短特征是目标的一部分;但正确性权重更高,不能只选最短错误回答。若比较集中所有winner都短、所有loser都长,而从未包含短错误对长正确,奖励模型可能仅学长度。项目让正确简短分别胜过错误简短与正确冗长,两个对照分别识别正确与简短因素。虽然没有覆盖全部自然语言失败,这个小机制基底避免把两个因素完全混在一起。

分组、权重与评价泄漏

切分应以提示身份或语义问题族为单位,而非把同一x的三条pair随机分到训练和测试。那样模型训练已见该提示另两组回答,测试只留一个pair,主要检验缺边补全。本项目按数值x分区;同一x的所有示范和比较都进入同一集合。测试的正负规律仍与训练共享,因此结论是规则内的数值泛化,不能宣称新的推理题型或开放领域偏好迁移。

重复pair会改变经验风险权重。若某提示有一百个比较而另一个只有一个,直接按pair平均会让前者更重要;按提示先平均再跨提示平均则不同。本项目每个训练x都有三条比较,二者恰好一致,但这种一致来自平衡设计,不是一般恒等式。代码固定按十八条pair平均。扩大数据时应保存每个提示比较数,避免标注密集区被无意赋予过大权重,再把这种偏差误解为用户更重视它。

独立oracle用于最终行为评价,不能在训练循环中根据其测试值挑选β\beta、步数或数据清理规则。当前β\beta与两百更新预先固定,β\beta网格仅列验证结果。oracle与偏好规则都来自我们设计,因而评估并不具有人类偏好真值的外部有效性;它的优点是能够确定性核对训练机制有没有按定义工作。把这个局限写明后,有限任务仍能提供非常清楚的算法正确性证据。

本章项目增量

本章交付preferences函数的十八条有界比较、上下文分区与合法性断言,以及对噪声、平局、循环和覆盖的清晰边界。项目测试逐条验证winner效用确实高于loser,数量与动作编号正确;没有把BT训练准确率当作这个规则检查的替代。下一章引入奖励分数与胜率的模型关系,先声明BT是一个统计假设,再由似然推导可训练目标,最后处理确定标签导致的尺度发散。

读者进入奖励拟合前应能在纸上回答三件事:某条pair究竟共享什么条件,标签支持哪一个相对陈述,哪些比较根本没有被观察。若这些问题不明确,增加网络深度或换优化器不会让训练更可信;它只会更精确地拟合一个含糊或错配的数据对象。

为使序列版能复现同一比较,候选编号还必须绑定精确回答字符串与EOS政策。把“NEG”改成“NEG.”会改变完整事件概率;哪怕语义相近,也不能继续沿用旧logprob收据。项目序列数据摘要因此覆盖prompt格式、四响应字符串和mask,而不只记录数值x。

独立运行标准库独立验证:频数似然、赔率分差与循环不可能性。
import math
wins,losses=2,1
p=wins/(wins+losses); delta=math.log(wins/losses)
sigmoid=lambda t:1/(1+math.exp(-t))
assert abs(sigmoid(delta)-p)<1e-12
likelihood=lambda q:q**wins*(1-q)**losses
assert likelihood(p)>likelihood(.5) and likelihood(p)>likelihood(.75)
r=[2.,1.,-3.]
differences=[r[0]-r[1],r[1]-r[2],r[2]-r[0]]
assert sum(differences)==0 and 3*math.log(3)>0
for x in [-2.,2.]:
    winner=0 if x<0 else 1
    pairs=[(winner,a) for a in range(4) if a!=winner]
    assert len(pairs)==3
print('estimated preference probability',p,'BT margin',delta,'cycle sum',sum(differences))

TRY IT YOURSELF

练习一:重复比较

同pair六次A赢、两次B赢,求频率估计及BT分差;两者是否等于奖励绝对值?

提示 1
先由胜负次数估计p,再用log[p/(1−p)]求BT分差。
提示 2
给所有奖励同时加同一常数,观察分差与胜率;这能检验绝对零点是否可识别。
对照参考解答
估计p=6/8=3/4;赔率3,分差为log3。奖励可以是[log3,0],也可以是[100+log3,100],二者完全同胜率,因此绝对零点不可识别。样本少时频率有误差,不能把四分之三当已知真实概率。

TRY IT YOURSELF

练习二:识别长度捷径

若所有winner既正确又短、所有loser既错误又长,怎样补两类比较以区分因素?

提示 1
想分离两种因素,需要每组只改变其中一种。
提示 2
分别固定正确性比较长短、固定长度比较正误,再检查正确长对错误短的权衡是否已有观测。
对照参考解答
加入“正确短对正确长”,固定正确性仅改变长度;再加入“正确短对错误短”,固定简短性仅改变正确。这两类是项目枚举中的关键子集。若目标还要求正确性优先,可再加正确长对错误短,当前项目并未直接采集此边,因此不得声称观测已经覆盖全部权衡。

TRY IT YOURSELF

练习三:BT适用性

同提示下稳定观察A胜B、B胜C、C胜A且各胜率0.75,为什么不能仅多训练几步解决?

提示 1
把三条胜率转成三个奖励差方程。
提示 2
将三式左边相加,观察相消结果;再与右边比较,判断是优化不足还是模型假设冲突。
对照参考解答
BT要求三个分差均为log3;但(rA−rB)+(rB−rC)+(rC−rA)=0,不能等于3log3。矛盾来自单标量可传递排序假设,非优化不足。需检查隐藏上下文或采用能表达循环/群体异质性的模型,并另行定义损失。

CHECK YOUR UNDERSTANDING

检验理解

先作答,再决定是否展开解析。选择题用于发现理解缺口;独立实现与迁移任务仍需另行检验。

1. 一条偏好比较必须共享什么?

查看解析条件不同则比较目标错配。
2. A赢两次B赢一次直接估计什么?

查看解析频数估计的是指定比较过程下的概率。
3. BT标量奖励对什么变换不变?

查看解析共同平移在奖励差中相消,缩放通常改变胜率。
4. 循环偏好反例说明什么?

查看解析模型的可传递标量顺序无法精确表达严格循环。

自行标记用于记录学习进度,不代表通过项目验收。