AI Hero Club

大模型后训练 · 第 5 章

已自行标记完成0 / 8

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

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

CHAPTER 05 / 8建议学习 120 分钟

KL约束下的最优策略怎样推出来

怎样从奖励减 KL 的目标推到最优策略,并核对零参考概率处为何不能直接套公式?

本章要解决的 3 个问题
  • 在有限正支持参考分布上逐步求解期望奖励减KL的最优策略
  • 由KL非负性给出独立全局最优证明,核对温度与奖励尺度的联动
  • 构造零参考支持与反向KL反例,界定公式不能直接覆盖的情形
课程项目 ZIP ↓

任务与先修:先固定奖励,再优化分布

第四章拟合的是比较概率,现在暂时把实数奖励r当作已给定输入,研究另一个问题:怎样改变策略,使期望奖励增加,同时不任意远离参考策略q。读者需会有限求和、对数、导数与约束极值;拉格朗日乘子的具体操作会逐步写出,不假定读者已经知道结论。我们只在一个固定x下求四候选分布,随后逐上下文应用。真实参数共享策略可能无法同时实现所有逐x最优分布,这个表达能力限制必须与分布层面的解析解分开。

固定有限动作集合,参考概率qaq_a全部严格正且和为一,奖励rar_a有限。待选概率pap_a非负、和为一。定义前向KL为各项 palog⁡(pa/qa)p_a\log(p_a/q_a) 的和,并约定pap_a为零时该项取连续极限零。目标J是期望奖励减τ\tau倍KL,τ\tau严格正。这里“前向”仅指本课采用p到q的方向,不把另一方向也叫同一个惩罚。τ\tau的单位与奖励相同;它不是学习率,也不是softmax采样温度的任意别名。

从一阶条件得到候选解

先在所有pap_a为正的内部寻找驻点。把和为一的约束用乘子λ\lambda加入目标,写成期望奖励减τ\tau KL加λ\lambda乘概率和减一。对pap_a求导,奖励项给rar_a,p logp/q的导数是logp/q加一,约束给λ\lambda。令导数零,得到log⁡(pa/qa)\log(p_a/q_a)等于rar_a除τ\tau,再加一个与动作无关的常数。取指数后pap_a等于qaq_a乘e的rar_a除τ\tau次方,再乘同一个常数。

A(p,λ)=∑apara−τ∑apalog⁡(pa/qa)+λ(∑apa−1),0=ra−τ[log⁡(pa/qa)+1]+λ,log⁡(pa/qa)=ra/τ+λ/τ−1.\begin{aligned}\mathcal A(p,\lambda)&=\sum_a p_ar_a-\tau\sum_a p_a\log(p_a/q_a)+\lambda(\sum_a p_a-1),\\0&=r_a-\tau[\log(p_a/q_a)+1]+\lambda,\\\log(p_a/q_a)&=r_a/\tau+\lambda/\tau-1.\end{aligned}
内部驻点的一阶条件;乘子lambda对应归一化约束,tau严格正。

归一化决定这个常数:定义Z为所有qaq_a乘e的rar_a除τ\tau次方之和,Z严格正且有限,所以常数为一除Z。得到p∗p^*与q按奖励指数倾斜的分布。正q与有限r确保每项p∗p^*正,候选确实位于内部,且和为一。我们没有只把一阶条件当成最优证明;下面把任意可行分布与候选直接比较,覆盖边界与全局性质。

J(p)=∑apara−τ∑apalog⁡paqa,pa∗=qaera/τZ,Z=∑aqaera/τ.J(p)=\sum_a p_ar_a-\tau\sum_a p_a\log\frac{p_a}{q_a},\qquad p_a^*=\frac{q_ae^{r_a/\tau}}{Z},\quad Z=\sum_a q_ae^{r_a/\tau}.
有限响应、tau>0、所有q>0、奖励有限,是此公式的适用条件。

用另一路证明全局最优

由p∗p^*定义,奖励可重写为τ\tau乘log⁡(p∗/q)\log(p^*/q),再加τ\tau log⁡Z\log Z。代入任意p的J:期望中的τ\tau log⁡Z\log Z因概率和为一保持不变;剩下τ\tau乘p加权的log⁡(p∗/q)\log(p^*/q),减τ\tau乘p加权的log⁡(p/q)\log(p/q)。两个q项相消,得到J(p)=τ\tau log⁡Z\log Z−τ\tau DKL(p∥p∗)D_{\mathrm{KL}}(p\Vert p^*)。这是精确代数等式,而不是某种训练近似。只要KL非负,p∗p^*即达到全局最大τ\tau log⁡Z\log Z。

J(p)=τlog⁡Z−τDKL(p∥p∗)≤τlog⁡Z=J(p∗).J(p)=\tau\log Z-\tau D_{KL}(p\|p^*)\le\tau\log Z=J(p^*).
由重写奖励与KL非负给出的全局最优证明,不依赖优化迭代是否成功。

KL 非负须单独处理 p 的零项。定义支持集 S={a:p_a>0},零项按 0 log 0=0 的连续极限处理。对 t>0,−log t≥1−t:两边差的导数为 1−1/t,在 t=1 前负后正,最小值为零。对每个 a∈S 取 t=p*_a/p_a,乘 p_a 后在 S 上求和,得到 DKL(p∥p∗)≥1−∑a∈Spa∗≥0D_{\mathrm{KL}}(p\Vert p^*)\ge 1-\sum_{a\in S}p_a^*\ge0。第一步右边不能直接写为零:若 p=(1,0)、p*=(0.7,0.3),它是 0.3,而实际 KL=−log 0.7≈0.356675。 本章 q 各项为正、奖励有限、τ>0,故 p* 每项严格正。若 S 缺少任一动作,则 1−Σ_S p*>0,不能取等;若 S 是全集,则第一不等式取等要求每项 p*_a/p_a=1。因而等号仅在 p=p*,给出唯一全局最优。这个检查与驻点计算走不同路线,也覆盖了概率单纯形边界。

算例一:两个候选的完整最优账

令q=[1/2,1/2],奖励r=[1,0],τ\tau=1。未归一化权重是[e/2,1/2],Z=(e+1)/2,p∗p^*=[e/(e+1),1/(e+1)],约[0.731059,0.268941]。期望奖励为0.731059,KL约0.110944,目标差约0.620115;另一条路计算log⁡Z\log Z也约0.620115。两个值相等是对推导的直接代回检查。

若不顾KL只选第一个,奖励达到一,但KL为log2,正则目标约0.306853,反而低于p∗p^*。参考q本身奖励0.5、KL为零,目标0.5,也低于p∗p^*。比较三者可见最优不是保持参考不动,也不是一味最大化奖励。它是在预先固定τ\tau下的折中;若任务真的允许完全抛弃参考,应改变目标而不是声称这个正则解“没优化好”。

将τ\tau改为0.5,p∗p^*变为sigmoid二与一减sigmoid二,约[0.880797,0.119203],更集中到高奖励。τ\tau趋很大时指数奖励差被压小,分布趋q;τ\tau趋零正侧时质量集中到奖励最大的动作,并在并列最大者内部按q比例分配。这是给定有限奖励的极限结论,不表示数值代码可以直接把τ\tau设为零;公式和实现都要求严格正,极小时还需稳定log空间计算。

奖励的零点和尺度

给同一x下所有r加c,未归一化权重都乘e的c除τ\tau次方,归一化后完全相消,最优策略不变;目标最大值只平移c。这个自由度与BT中共同奖励偏置不可识别一致。若把奖励乘正数k,同时把τ\tau也乘k,奖励除τ\tau不变,p∗p^*也不变。只乘奖励、不改τ\tau,则策略更集中,不能称为同一优化问题的等价表述。

因此BT奖励的单位约定会进入后面的DPO β\beta。我们固定比较sigmoid温度为一,τ\tau作为奖励到策略的转换尺度。现实不同奖励模型训练出来的分数可能有不同尺度,直接复用同一个KL系数未必可比;应该基于明确目标和验证协议重新校准。当前项目只在有限响应上精确算KL,序列版还存在整个文本空间无法穷举的问题,第七章会把可算诊断与真正全分布KL严格区分。

算例二:零支持让高奖励无路可走

设参考q=[1,0],奖励r=[0,100]。若候选p给第二动作任何正概率,KL中会出现p2乘logp2除零,发散为正无穷,正则目标负无穷。要保持有限目标只能p2=0,因此最优仍为[1,0],不论第二奖励多高。先前正支持公式的条件在此不成立,不能直接算零乘无穷后说策略自动发现第二动作。

这个反例说明参考支持是实质性条件。有限softmax数学上给所有动作正概率,但实际浮点概率可能下溢,代码应优先保留log概率并做稳定归一化。项目参考小策略数值范围温和,boltzmann函数还显式拒绝非正q与非正τ\tau。拒绝不等于“修复”零支持;若任务允许改变支持,需要重新定义策略空间或平滑参考,并承认它改变了目标。独立检查是枚举可行支持,而不是只看函数是否返回向量。

KL方向不是符号习惯

若惩罚改成DKL(q∥p)D_{\mathrm{KL}}(q\Vert p),导数里的项会变成qaq_a除pap_a,而不是log⁡(pa/qa)\log(p_a/q_a)加一,最优不再是同一个指数倾斜。两种KL在p=q处都为零,也都非负,但远离参考时对稀有事件的惩罚不同。看到实验日志里一个名为“KL”的数不足以知道优化对象,应注明哪一个分布负责求期望、哪个放在对数分母,以及是否只对候选子集归一化。

在语言模型里,整回答分布KL是对所有可能完整响应的求和;单个固定回答的log比只是其中一个随机变量取值,可能为负,并不等于KL。若从当前策略采样,logπ除q的期望才对应前向KL,且必须保持同一条件、边界与采样分布。有限项目可以穷举四动作,所以没有抽样误差;完整decoder候选诊断只在四条指定字符串重新归一化,不能据此报告整个语言模型的KL。

与参数化训练的关系

分布p∗p^*是逐x的理论最优,但共享八参数线性策略不一定能在全部x上精确表示它。即使能表示,有限次梯度更新也未必到达。完整decoder的限制更多:表示、有限数据、偏好模型误差与优化误差都可能存在。解析解提供的是推导DPO的桥梁与有限算例的检验基准,而不是对任何训练运行“最终会收敛到这个结果”的保证。

本章项目增量是boltzmann函数、精确KL与最优值的双路验算,以及零支持的故障拒绝。第六章将把BT奖励写成最优策略与参考的log比,利用同一提示下归一化常数相消,得到直接在策略上计算的DPO损失。读者应先能说出这里奖励已给定、下一章奖励来自比较假设这两层区别,避免把变量替换误当成不需要偏好数据或不需要模型条件。

“KL约束”与“减去KL惩罚”应精确区分。硬约束问题会先规定允许KL不超过某个预算,再在可行域内最大化奖励;本章固定τ\tau优化惩罚形式,不事先承诺最终KL恰为某个数。特定凸条件下可以用乘子联系两者,但预算与乘子的映射依赖奖励和参考分布。若日志只写β\beta0.1,不能据此声称模型实际偏离恰好0.1 nats。第八章会用实测KL而不是系数名字描述偏离。

稳定计算最优分布时,先形成每动作的logq加r除τ\tau,取这些数的最大值a,全部减a后再指数归一化。公共e的a次方在分子分母相消,结果与直接公式相同,却避免高奖励或小τ\tau使指数溢出。最大值a只是数值基准,不是新奖励阈值,也不改变支持。若q本身已经在浮点中舍入成零,则应保留更早的logq,而不是对零取log后假称稳定化能恢复丢失的信息。

有限生成树提供从四动作到文本的一个概念桥梁。每个节点是已生成前缀,边是下一个token的条件概率;根到EOS路径概率是边概率连乘。若设置最大长度,应把未EOS的末端登记为abort结果,连同所有已结束路径共同构成完整样本空间。只有在这个完整空间定义奖励与参考,分布层面KL最优结论才有相同含义。项目只评分给定短路径,不枚举整棵树,因此不能把候选诊断升级为已算全树最优。

当模型参数同时服务多个x时,逐x的解析解只是一个目标分布族。共享参数训练相当于在可表达分布族内寻找折中,未必能达到每个Z给出的上界。用自由分布的最大值减去实际参数化目标,可包含表达与优化两类缺口,若奖励又是拟合得到,还多一层估计误差。把这些误差来源列清,才不会从解析式错误推断任何规模网络或任何数据量都有同样保证。

对于奖励全相同的极限,指数因子共同相消,最优分布必须回到q;这是一个很强的单测。如果函数反而输出均匀,说明实现丢掉了参考因子。对于τ\tau很大同样应接近q而非默认均匀,只有q本来均匀两者才巧合。项目boltzmann单测同时检查正支持和最优值,读者可用这个退化例独立检查自己的移植代码。

独立运行标准库独立验证:驻点、KL恒等式、全局网格对照与奖励平移不变。
import math
q=[.5,.5];r=[1.,0.];tau=1.
weights=[q[i]*math.exp(r[i]/tau) for i in range(2)];Z=sum(weights);p=[v/Z for v in weights]
kl=lambda a,b:sum(x*math.log(x/y) for x,y in zip(a,b) if x)
J=lambda a:sum(x*y for x,y in zip(a,r))-tau*kl(a,q)
assert abs(J(p)-tau*math.log(Z))<1e-12
for i in range(1,1000):
    a=[i/1000,1-i/1000]
    assert abs(J(a)-(tau*math.log(Z)-tau*kl(a,p)))<1e-12
    assert J(a)<=J(p)+1e-12
shift=[q[i]*math.exp((r[i]+3)/tau) for i in range(2)];shift=[v/sum(shift) for v in shift]
assert max(abs(a-b) for a,b in zip(p,shift))<1e-12
print('optimal',p,'reward',p[0],'KL',kl(p,q),'objective',J(p),'logZ',math.log(Z))

TRY IT YOURSELF

练习一:联动尺度

若奖励全部乘三,tau也乘三,p星是否变化?若只乘奖励呢?

提示 1
p星依赖的是r/tau与q,先比较两种缩放下这个比值。
提示 2
共同缩放后检查归一化权重;只放大奖励时比较高低奖励的权重比,而非单看目标量纲。
对照参考解答
前者r/tau逐项不变,所以未归一化权重和归一化策略都不变;目标整体乘三。只乘奖励等价于把有效tau缩为原来的三分之一,通常使分布更集中在高奖励动作,除非奖励本来全相同。

TRY IT YOURSELF

练习二:支持条件

q=[0.8,0.2]且奖励两项相等时p星是什么?q=[1,0]且第二奖励很高时呢?

提示 1
奖励相同会使指数项成为公共因子;零支持又限制了可行分布。
提示 2
先按正支持公式化简,再对q为零的位置直接检查有限前向KL的定义,别把平滑当原问题。
对照参考解答
奖励相等时指数因子共同相消,p星=q。零支持例不满足正q条件;在要求有限前向KL的可行域中第二动作必须仍为零,所以只能[1,0]。若给参考加平滑,会允许它,但那是新目标而非原问题的数值修补。

TRY IT YOURSELF

练习三:单个log比

某个回答的logπ除q为−2,能否判定KL为负、实现错?说明完整定义。

提示 1
单个log比是随机变量的一次取值,KL是按哪一分布求的期望?
提示 2
把所有响应的π权重与log比逐项写出;候选重新归一化后是否仍是原完整分布?
对照参考解答
不能。单个log比可以为负,表示该事件在π下概率较低。前向KL是按π对所有响应求期望 ∑yπ(y∣x)log⁡(π(y∣x)/q(y∣x))\sum_y\pi(y|x)\log(\pi(y|x)/q(y|x)),整体非负。有限样本均值还可能受误差影响;候选重新归一化算的是另一个分布的KL。

CHECK YOUR UNDERSTANDING

检验理解

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

1. 解析p星要求什么?

查看解析这些条件保证Z有限正且内部候选合法。
2. 全局证明的关键恒等式是什么?

查看解析再用KL非负性得到唯一最优。
3. 单个响应logπ/q是什么?

查看解析只有按正确分布求期望才得到相应KL。
4. 给奖励共同加常数会怎样?

查看解析共同指数因子在Z中相消。

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