任务与读者起点
本章在SFT示范之外建立第二种监督信号:同一个提示下,两个回答哪一个更值得采用。读者需会有限频率、二项概率与前两章的条件策略;对logistic模型的推导将在第四章展开。现在先把数据对象与可识别内容说清楚,因为再精确的优化器也无法修复比较对象已经错配的训练表。项目采用公开合成规则生成十八个训练比较,不把它包装成人类反馈采集,也不把人工规则的确定性误称为真实偏好的普遍性质。
一条比较记为 :x是共同提示,w表示winner,l表示loser。合法条件包括两个动作编号存在且不相等,二者共享同一个x,x来自训练集合。比较只表达“在这个条件下w胜过l”,没有给出差几分、是否都正确或是否都糟糕。即使两个回答都错,标注者也可能偏好其中一个;因此pair胜率不是任务正确率。项目保留独立oracle效用,评估时不把学习到的奖励自己给自己打分。
候选来源也是数据的一部分
在真实语言模型里,候选通常由某个固定策略采样,生成温度、提示格式、长度上限与停止条件决定有哪些回答能进入比较。偏好集不是从“所有可能文本”均匀抽样。若旧策略几乎从不生成某类回答,该区域就缺少直接监督;新策略优化后移入那里,离线数据的结论不自动覆盖。此处只有四个候选,项目显式枚举正确简短与另外三个的比较,候选边界可完全列出,便于观察覆盖与盲点。
对每个正x,winner为编号一,loser依次为三、零、二;对每个负x,winner为零,loser依次为二、一、三。六个训练上下文各三条,共十八条。没有直接比较三个loser彼此的顺序,例如同为错误但简短与冗长谁更差,数据没有单独给标签。BT的共享特征会推断它们的顺序,这是参数化的外推;若把模型推断回写为“标注者已证明”,就混淆了观测和假设。
算例一:相同顺序,强度并不唯一
假设同一提示下,回答A与B比较三次,A赢两次、B赢一次。若独立重复比较服从同一胜率p,观测似然为 ,忽略排列常数。对数似然是二倍logp加log一减p;求导为二除p减一除一减p,令零得到p=2/3。二阶导为负,因此是内部极大。观测支持的是一个噪声胜率估计,不是A的绝对奖励等于二、B等于一,也不证明A一定正确。
若用BT形式 ,赔率p除一减p为二,所以分差为log2。给两个奖励都加一百,胜率不变;把分差翻倍则胜率变为四分之五,不再相同。独立检查一是把log2代回sigmoid恢复2/3;独立检查二是直接计算似然,在p=1/2和p=3/4附近比较,峰值应在2/3附近。频数、分差与概率是三个量,不能互相用同一个数字替代。
噪声、平局与重复
相同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用于最终行为评价,不能在训练循环中根据其测试值挑选、步数或数据清理规则。当前与两百更新预先固定,网格仅列验证结果。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
提示 2
对照参考解答
TRY IT YOURSELF
练习二:识别长度捷径
若所有winner既正确又短、所有loser既错误又长,怎样补两类比较以区分因素?
提示 1
提示 2
对照参考解答
TRY IT YOURSELF
练习三:BT适用性
同提示下稳定观察A胜B、B胜C、C胜A且各胜率0.75,为什么不能仅多训练几步解决?