任务与读者起点
本课研究一个具体问题:已有条件概率策略后,怎样用示范和偏好改变它的行为,同时知道自己到底优化了什么。读者应会Python列表与函数、有限概率、对数、导数与链式法则;softmax与交叉熵会在下一章展开。先以四种完整响应、八参数微型策略作可穷举参考,再连接完整PyTorch decoder做真实序列SFT/DPO,二者全部参数都实际学习。它不是商用大模型,也没有预训练语料或在线模型接口;有限任务让偏好、概率与KL都能穷举核对,随后把机制映射到语言模型时会明确增加哪些假设。
在语言模型中,预训练通常以大量文本下一token预测为任务,监督微调以给定提示下的示范回答为目标,偏好学习则利用同一提示中两个回答谁更好的比较。这三个数据对象并不等价。示范提供一个要提高似然的具体回答,却未说明其余回答谁更差;比较给相对顺序,却通常不给绝对质量值。本课依次建立SFT、偏好数据、Bradley–Terry奖励模型、带KL的最优策略与DPO,最后在独立上下文上测量行为。显式奖励模型用于理解和对照,不是DPO训练必须调用的组件。
一个可以穷举的后训练世界
项目提示是非零实数x,任务是判断正负并尽量简短。四种响应编号固定:零为“负数,简短”,一为“正数,简短”,二为“负数,冗长”,三为“正数,冗长”。这里每个编号代表一个完整回答,而不是某个回答的第一个词。生成动作只有一次,因此条件响应分布完全等于一次四分类softmax。我们不会把这个简化说成已经训练完整自回归语言模型;多token回答的似然和掩码在第二章专门推导。
令动作集合为A,策略写作 ,其中a属于四个编号,是可训练参数。每个动作有两个参数:偏置与对x的斜率,logit为 ,共八个标量。softmax将实数logit变成严格正、和为一的概率。这个参数化能表达与正负相关的线性趋势,不能表达任意任务。为了可观察全部错误,我们始终保留四个动作,训练时不把错误类别硬遮掉;正确性改善必须来自学习,而非从候选集合中删掉错误。
训练上下文是负三、负二、负一、正一、正二、正三;验证是正负一点五与二点五;测试是正负零点五与三点五。三集合数值不重叠,但共享“看符号”的规则,测试既有靠近零的插值也有超出训练绝对值的外推。它不是新任务分布,更没有自然语言理解的证明范围。项目用固定数据摘要同时覆盖动作定义、划分、示范与比较生成规则;改其中任何一项都视作新实验,旧状态载入会拒绝摘要不匹配。
示例、偏好与评估函数
每个训练x有三条示范:正确简短两次、正确冗长一次。因此同一上下文的经验示范比例为三分之二与三分之一,错误动作零次。重复样本是有意的权重,而不是三个不同人真的写了这些话。若模型可自由给每个上下文分配概率,SFT最优会拟合这个比例;我们的共享线性参数与有限步优化只能近似它。保留冗长示范,能使后续偏好学习有一个非平凡的行为调整目标,而非SFT已经把简短概率推到一。
偏好集对每个x选择正确简短回答为winner,分别与另外三个回答配对,得到十八个训练比较。它明确偏好正确且简短,但没有直接比较两个失败回答之间的顺序。标签完全由公开规则生成,不来自人类标注者;把它称为“人类价值对齐数据”会越过证据。我们用一个独立定义的检查函数 评估,前项奖励正确,后项惩罚冗长。这个函数不是训练中的BT分数,也不是DPO隐式奖励。
算例一:均匀策略的完整行为账
设x为正一,四动作均为四分之一。正确动作是一与三,总正确质量为二分之一;简短动作是零与一,总简短质量也是二分之一。四个效用依次是零、一、负零点二、零点八,所以期望效用是四项相加除四,等于零点四。即使greedy在并列时总挑编号零而答错,概率分布上的正确质量仍是二分之一;“greedy准确率”与“随机按策略采样的期望正确率”不是同一量。
现在把概率改为 [0.05,0.60,0.05,0.30]。总正确质量是0.90,简短质量0.65,期望效用为0.60加0.30乘0.8再减0.05乘0.2,等于0.83。另一路检查用“正确质量减去零点二倍冗长质量”,得到0.90−0.2×0.35,也为0.83。这是第一个独立恒等式核验,能发现把简短与正确轴混用或遗漏失败冗长动作的实现。
算例二:SFT拟合不等于偏好最优
理想示范分布把三分之二概率给正确简短、三分之一给正确冗长,正确质量为一,简短质量三分之二,期望效用为一减零点二乘三分之一,即十五分之十四。若偏好阶段把概率全部移到正确简短,期望效用升到一,但SFT示范的交叉熵反而会变差,因为示范中确实有冗长回答。没有一个单独的“训练loss下降”能替代行为目标:不同损失对应不同数据假设,必须先说自己希望模仿示范频率还是改变偏好。
这个例子还揭示支持条件。有限logit的softmax给每个动作正概率,无法在有限参数精确达到错误动作零概率;所谓理想分布只是无限可表达空间中的边界解,不是两百步训练的精确终点。若把某些动作概率硬设零,后面的相对参考概率与KL可能无定义。项目保留正支持、采用稳定log概率计算,独立检查每个上下文概率和为一,再检查所有日志损失有限。
数据边界与可识别内容
偏好标签没有决定绝对奖励零点:同一x下给所有回答奖励加一个常数,所有两两胜率都不变。它也未决定没有比较过的回答在所有新上下文中的行为。用一个简单参数族补全这些空白是模型假设,不是标签本身证明。项目奖励使用两个可观察特征:动作符号乘x,及是否简短;它以线性方式共享跨上下文信息。没有把独立评估效用直接作为每条比较的实数训练标签。
数据检查必须逐项确认winner与loser不同、同一pair共享同一x、两者都是合法动作、上下文来自训练划分。相同pair重复会改变经验权重,反向重复可表示标注分歧,不能一律当重复垃圾删除。当前规则是确定无噪声比较,后面的BT因此会出现可分数据的参数尺度压力;课程会用这个失败机制解释正则化,而不把完美排序准确率当成奖励概率已经校准。
除了上下文分区,还应冻结候选生成过程。现实偏好集若只包含某个旧策略容易生成的回答,新策略移到未覆盖区域时,奖励或DPO约束并无直接标签支持。本项目穷举四候选的winner与其他三者,覆盖明确而狭窄;并未模拟开放文本中的无限候选空间。所谓离线偏好学习,意味着比较集在训练期间固定,不是策略每次更新后都去重新获得新反馈。
项目状态与本章验收
项目最初base是随机八参数策略,不冒充从大语料预训练得到的基础模型。SFT结束复制出reference;后续DPO只更新独立副本,reference始终冻结。奖励模型另有两个参数,与策略没有共享对象。明确对象身份能防止“参考也被更新”这种损失仍能运行却改变数学目标的故障。JSON保存数据摘要、各阶段参数、seed、与完整检查点历史,标准库训练没有隐藏在线服务或外部随机输出。
本章交付是任务、动作顺序、数据分区与三个评价量的契约。第二章将从示范似然推导SFT梯度,证明全部八个策略参数实际接到更新;第三章再处理比较如何进入统计模型。进入下一步前,读者应能在纸上给任意四概率向量算出正确质量、简短质量和期望效用,并指出这些数值仅描述本有限任务,不能改名为通用安全、事实性或商用大模型能力。
本课最终还有完整decoder序列支线,不停在四分类器上。它用ASCII提示与多字节回答,从随机参数做response-only SFT,再按完整回答logprob做DPO;embedding、注意力、位置、前馈、归一化和输出头全部更新。可穷举参考负责把每个公式与有限差分算到底,完整decoder负责检验真实序列接线,二者不能互相冒充。第七章会逐项对应两者概率空间,第八章保留标准格式成功与格式迁移失败。
任务明确排除x为零,因为四响应没有“零”这个类别。对零输入若强行评分,只会把未定义问题包装成模型错误;应先扩展动作与规则,再更新数据摘要。测试中的正负零点五仍属已定义非零域,但靠近边界。一个模型在这个边界表现不好是合法失败观察,跟向它询问没有定义标签的零不是同一回事。
p=[.05,.60,.05,.30]
u=[0.,1.,-.2,.8]
assert abs(sum(p)-1)<1e-12
correct=p[1]+p[3]; brief=p[0]+p[1]
expected=sum(a*b for a,b in zip(p,u))
assert abs(expected-(correct-.2*(1-brief)))<1e-12
ideal=1-.2/3
print('correct mass',correct,'brief mass',brief,'expected utility',expected,'ideal SFT utility',ideal)
TRY IT YOURSELF
练习一:分开两个行为轴
策略在正数上下文给四响应概率[0.4,0.1,0.1,0.4],求正确质量、简短质量、期望效用。
提示 1
提示 2
对照参考解答
TRY IT YOURSELF
练习二:示范与比较
只有示范“正确冗长”,是否能据此推断它优于正确简短?还需要什么信息?
提示 1
提示 2
对照参考解答
TRY IT YOURSELF
练习三:解释有限任务
列出本项目能直接测量的两项性质与不能由它证明的两项性质。