3.3 PPO 训练中的Trick与常见问题(面向大模型 / RLHF 场景)
PPO(Proximal Policy Optimization)在大模型对齐(如 RLHF)里已经形成了一套相对“标准”的工程范式:用 SFT policy 初始化 Actor,用 reference policy(通常就是 SFT policy) 做 KL 约束,再配合一系列稳定性技巧(GAE、归一化、loss clipping、混合训练目标等)。这些技巧背后的共同目标是:下面按“模型层面 →
3.3 PPO 训练中的 Trick 与常见问题(面向大模型 / RLHF 场景)
PPO(Proximal Policy Optimization)在大模型对齐(如 RLHF)里已经形成了一套相对“标准”的工程范式:用 SFT policy 初始化 Actor,用 reference policy(通常就是 SFT policy) 做 KL 约束,再配合一系列稳定性技巧(GAE、归一化、loss clipping、混合训练目标等)。这些技巧背后的共同目标是:
- 防止策略走太远(避免坍塌、过拟合、模式崩坏)
- 保持语言能力与知识(减轻遗忘与对齐税)
- 让训练信号尺度可控(reward/advantage 的分布稳定)
- 减少分布漂移与估计方差(token-level 信号更细、方差更低)
下面按“模型层面 → PPO 层面 → 奖励利用与泛化问题 → SFT vs RLHF 本质区别 → PPO 梯度推导”给出一套可直接复用的系统化描述。
一、模型层面(与大模型生成过程强绑定)
1)Token-level KL Penalty:逐 token 的 KL 惩罚(RL vs SFT/reference)
在大模型 PPO(尤其 RLHF)里,KL 约束通常不是在序列级别一次性算完,而是在每个 token 上计算,并把它当作奖励里的惩罚项。这是因为生成是逐 token 展开的,token 级约束能更细粒度地控制“哪里偏了”。
设:
- prompt 为 xxx
- 模型生成序列为 y=(a1,…,aT)y=(a_1,\dots,a_T)y=(a1,…,aT)
- 状态 sts_tst 表示当前上下文(prompt + 之前生成的 token)
- Actor(RL policy)为 πθRL\pi_{\theta}^{RL}πθRL
- reference policy(通常是 SFT policy)为 πSFT\pi^{SFT}πSFT
典型的 token-level 奖励写法是:
r(st,at)=I(at=EOS)⋅r(x,y) − β⋅KL(t) r(s_t,a_t)=\mathbf{I}(a_t=\text{EOS})\cdot r(x,y)\;-\;\beta \cdot \mathrm{KL}(t) r(st,at)=I(at=EOS)⋅r(x,y)−β⋅KL(t)
其中 I(at=EOS)\mathbf{I}(a_t=\text{EOS})I(at=EOS) 表示:只有在 EOS 时刻才给到序列级 reward r(x,y)r(x,y)r(x,y)(例如奖励模型对整段回答的打分),而在其它 token 上只施加 KL 惩罚,确保每一步都对“偏离 reference”付出代价。
token 级 KL 通常用“对数概率差”表示(等价于对单个动作的 KL 贡献):
KL(t)=logπθRL(at∣st)πSFT(at∣st) \mathrm{KL}(t)=\log \frac{\pi_{\theta}^{RL}(a_t\mid s_t)}{\pi^{SFT}(a_t\mid s_t)} KL(t)=logπSFT(at∣st)πθRL(at∣st)
- 若 πθRL(at∣st)>πSFT(at∣st)\pi_{\theta}^{RL}(a_t\mid s_t)>\pi^{SFT}(a_t\mid s_t)πθRL(at∣st)>πSFT(at∣st),则 KL(t)>0\mathrm{KL}(t)>0KL(t)>0,产生惩罚。
- 若 RL policy 选择了 reference 更不倾向的 token,就会被惩罚“拉回去”。
与传统在线 RL 的区别:最大熵项 vs reference KL
传统 online RL 通常没有一个“reference policy”(比如 SFT),更常见的是最大熵强化学习(maximum entropy RL),在目标里显式加入熵奖励:
αH(π(⋅∣s))=αEa∼π[−logπ(a∣s)] \alpha \mathcal{H}(\pi(\cdot\mid s))=\alpha \mathbb{E}_{a\sim\pi}[-\log \pi(a\mid s)] αH(π(⋅∣s))=αEa∼π[−logπ(a∣s)]
直观对比:
- 最大熵项:鼓励探索、鼓励策略保持随机性(不要过早变得确定)。
- reference KL:鼓励策略不要偏离某个“可信初始行为”(SFT 能力与语言风格)。
在大模型对齐里,reference KL 更关键,因为语言模型的“可用性”高度依赖初始 SFT 行为;如果只用最大熵项,策略可能保持随机但语言质量会明显漂移。
例子:为什么 token-level 更稳?
假设 reference 在某个位置强烈倾向于输出礼貌用语(比如 “Sure,”),但 RL 发现输出更强硬的词能骗过奖励模型。那么:
- 序列级 KL 可能在整体上看还好,但某些关键 token 已经开始“劣化风格”;
- token-level KL 会在这些关键位置立即产生惩罚,避免局部崩坏扩散。
2)Generalized Advantage Estimation(GAE):把 token 级 reward 变成 token 级 advantage
PPO 更新需要 advantage AtA_tAt。在大模型里,reward 往往只有 EOS 才有序列级评分,但 KL 惩罚是 token 级,因此我们最终得到一条 token 级 reward 序列 {rt}t=1T\{r_t\}_{t=1}^T{rt}t=1T,并需要估计每个 token 的 advantage。
GAE 通过 TD residual(优势残差)来折中“低偏差 vs 低方差”。
定义 TD 残差:
δt=rt+γV(st+1)−V(st) \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) δt=rt+γV(st+1)−V(st)
GAE 的优势估计为:
AtGAE(γ,λ)=∑l=0T−t−1(γλ)l δt+l A_t^{GAE(\gamma,\lambda)}=\sum_{l=0}^{T-t-1}(\gamma\lambda)^l\,\delta_{t+l} AtGAE(γ,λ)=l=0∑T−t−1(γλ)lδt+l
在很多 RLHF 实践中常见设置是 λ=1\lambda=1λ=1(甚至 γ=1\gamma=1γ=1,因为是短序列回报),此时 GAE 退化为“更接近蒙特卡洛”的估计,直观上就是把后续的(含 EOS reward 与各 token KL 惩罚)更完整地传回到前面 token。
At(λ=1)=∑l=0T−t−1γl δt+l A_t^{(\lambda=1)}=\sum_{l=0}^{T-t-1}\gamma^l\,\delta_{t+l} At(λ=1)=l=0∑T−t−1γlδt+l
为什么大模型里 λ\lambdaλ 往往设得很大(甚至 1)?
- 生成序列长度有限;
- reward 结构特殊(EOS reward + token KL);
- 更希望 credit assignment 能覆盖整段回答的整体质量,而不是只局部 TD。
3)Adding SFT Loss:在 PPO 中加入监督 NLL,保留 SFT 能力
仅靠 PPO(尤其 reward model 不够可靠时)容易导致语言能力退化、知识遗忘或输出风格漂移。因此常见做法是:PPO 更新同时加一项 SFT 风格的 next-token prediction loss(即 NLL),再加上 KL 约束,相当于让策略在“追 reward”时不要丢掉“会说人话”的基本能力。
一个常见的混合目标形式是:
L=LPPO+αLSFT+βLKL \mathcal{L} = \mathcal{L}_{PPO} + \alpha \mathcal{L}_{SFT} + \beta \mathcal{L}_{KL} L=LPPO+αLSFT+βLKL
其中:
- LPPO\mathcal{L}_{PPO}LPPO 是 PPO 的 clipped policy loss(后面会展开)
- LSFT\mathcal{L}_{SFT}LSFT 是对 SFT 数据的负对数似然
- LKL\mathcal{L}_{KL}LKL 通常体现在 reward 里(也可写成显式 loss)
直观理解:
PPO 负责“往偏好方向走”,SFT loss 负责“别走丢”,KL 负责“别走太快、太远”。
二、PPO 层面(优化目标与稳定性技巧)
4)PPO-ptx:在 PPO 里混入预训练数据目标(减轻遗忘与对齐税)
在 InstructGPT 的 PPO-ptx 设定中,除了最大化“带 KL 约束的奖励目标”,还额外加入一项在预训练数据上的目标(ptx loss),用来减少对齐过程中的能力退化(常称 alignment tax)。
一种写法是把它写成“两个期望之和”:
objective(ϕ)=E(x,y)∼DπϕRL[rθ(x,y)−βlogπϕRL(y∣x)πSFT(y∣x)] + γEx∼Dpretrain[logπϕRL(x)] \mathrm{objective}(\phi) = \mathbb{E}_{(x,y)\sim D_{\pi_{\phi}^{RL}}}\Big[r_{\theta}(x,y)-\beta \log\frac{\pi_{\phi}^{RL}(y\mid x)}{\pi^{SFT}(y\mid x)}\Big] \;+\; \gamma \mathbb{E}_{x\sim D_{pretrain}}\Big[\log \pi_{\phi}^{RL}(x)\Big] objective(ϕ)=E(x,y)∼DπϕRL[rθ(x,y)−βlogπSFT(y∣x)πϕRL(y∣x)]+γEx∼Dpretrain[logπϕRL(x)]
这里第二项可以理解为:在大量预训练分布上继续“复习语言建模”,防止 PPO 只在对齐数据分布上优化导致遗忘。
例子:为什么 ptx 能缓解遗忘?
如果 RLHF 数据集中几乎没有数学推导,Actor 只在“对齐风格”上反复更新,很容易让模型在数学推理任务上退化。ptx 让模型在更广的语言分布上持续保持能力,尤其对小模型更明显。
5)KL Reward(β\betaβ 的关键性):避免走太远、避免坍塌与过拟合
KL 惩罚前的系数 β\betaβ 往往是 RLHF 中最敏感的超参之一。它控制“对齐速度 vs 稳定性”:
- β\betaβ 太小:策略容易偏离 reference 太远,出现 reward hacking、语言风格崩坏、输出坍塌(极短、重复、模板化)。
- β\betaβ 太大:策略几乎不动,学不到 reward 的信号,对齐效果弱。
实践中常用的思路是设一个 target KL(希望策略每次更新的 KL 大约维持在某个范围),然后调 β\betaβ 让实际 KL 靠近 target KL。形式上你可以监控:
KLavg=1T∑t=1TE[logπθRL(at∣st)πSFT(at∣st)] \mathrm{KL}_{avg}=\frac{1}{T}\sum_{t=1}^{T}\mathbb{E}\Big[\log \frac{\pi_{\theta}^{RL}(a_t\mid s_t)}{\pi^{SFT}(a_t\mid s_t)}\Big] KLavg=T1t=1∑TE[logπSFT(at∣st)πθRL(at∣st)]
案例:两种失败模式
- 模式 A(β\betaβ 太小):reward 很快上升,但输出变得更“迎合奖励模型”,例如变得更啰嗦、更模板、更擅长讨巧措辞;人工测评下降。
- 模式 B(β\betaβ 太大):输出几乎与 SFT 相同,reward 提升非常慢或停滞。
6)PTX Loss 系数 γ\gammaγ:要结合 loss 尺度而不是照抄常数
ptx loss 的系数 γ\gammaγ 不应该被当成“通用常数”。原因是:
- 不同实现里 policy loss、value loss、SFT loss、ptx loss 的数值尺度差异巨大;
- batch size、token 数、mask 方式都会影响 loss 的绝对值。
因此更合理的做法是:观察训练中各项 loss 的量级,让 γ\gammaγ 调到一个“ptx 起到稳定作用但不压制 PPO 信号”的范围。
7)Reward Normalization:奖励归一化对稳定性非常关键
RLHF 的 reward 来自奖励模型或 judge 模型,它的输出尺度可能漂移、分布长尾、随训练阶段改变。reward normalization 往往能显著改善稳定性。
一个简单做法是 batch 内标准化(Z-score):
ri′=ri−μrσr+ϵ r'_i=\frac{r_i-\mu_r}{\sigma_r+\epsilon} ri′=σr+ϵri−μr
其中 μr,σr\mu_r,\sigma_rμr,σr 是当前 batch 的 reward 均值与标准差。
这会让 advantage 的尺度更可控,避免 value 网络被极端 reward 冲击。
8)Distributed Advantage Normalization:分布式训练时要做“全局归一化”
在 DDP / DeepSpeed 等分布式训练中,如果每个进程只对本地样本做 advantage normalization,那么不同进程的 advantage 统计量不同,等价于“每个 worker 在优化不同的目标尺度”,会引入额外噪声与不稳定。
理想做法是对所有 worker 的 advantage 做全局统计:
μA=1N∑i=1NAi,σA=1N∑i=1N(Ai−μA)2 \mu_A = \frac{1}{N}\sum_{i=1}^{N}A_i,\quad \sigma_A=\sqrt{\frac{1}{N}\sum_{i=1}^{N}(A_i-\mu_A)^2} μA=N1i=1∑NAi,σA=N1i=1∑N(Ai−μA)2
然后每个样本都用同一个 μA,σA\mu_A,\sigma_AμA,σA:
Ai′=Ai−μAσA+ϵ A'_i=\frac{A_i-\mu_A}{\sigma_A+\epsilon} Ai′=σA+ϵAi−μA
9)Model Initialization:用 SFT 初始化 Actor,用奖励模型初始化 Critic
这几乎是 RLHF PPO 的默认设定:
- Actor:从 SFT policy 初始化,保证基础语言能力与指令跟随能力。
- Critic(value):通常从奖励模型或相关能力模型初始化(或至少 warm-start),保证 value 估计不会一开始完全随机。
直觉是:PPO 对初始策略非常敏感。若 Actor 随机初始化,生成序列不可用,reward 也无意义;若 value 网络随机,advantage 噪声极大,训练不稳。
10)Adam Learning Rate:Actor 学习率通常显著小于 SFT
在实践中:
- Actor 的学习率通常比 SFT 小一个数量级左右;
- Critic 的学习率往往更大(因为它要快速拟合当前策略下的回报分布)。
原因:Actor 一旦更新太快,KL 会暴涨,策略容易崩;value 网络慢一点反而会拖累 advantage 估计,造成更大方差。
11)Value Function Loss Clipping:防止 value 网络更新过猛
PPO 不仅 clip policy ratio,也常 clip value 的更新幅度。常见形式:
Lv=max[(Vθt−Vtarg)2, (clip(Vθt,Vθt−1−ϵ,Vθt−1+ϵ)−Vtarg)2] \mathcal{L}_v= \max\Big[ \big(V_{\theta_t}-V_{targ}\big)^2,\; \big(\mathrm{clip}(V_{\theta_t},V_{\theta_{t-1}}-\epsilon,V_{\theta_{t-1}}+\epsilon)-V_{targ}\big)^2 \Big] Lv=max[(Vθt−Vtarg)2,(clip(Vθt,Vθt−1−ϵ,Vθt−1+ϵ)−Vtarg)2]
其中:
- VtargV_{targ}Vtarg 是回报目标(例如 RtR_tRt 或 GAE-based target)
- ϵ\epsilonϵ 控制 value 每轮允许的最大改变量
直觉:value 若跳动太大,advantage 会被错误地放大或翻转符号,直接破坏 policy 更新方向。
12)Advantage Normalization:Z-score 标准化减轻大值敏感性
因为 policy loss 与 value loss 对大数值敏感,标准化 advantage 是常用技巧。Z-score 形式:
Ai′=Ai−μAσA+ϵ A'_i=\frac{A_i-\mu_A}{\sigma_A+\epsilon} Ai′=σA+ϵAi−μA
这会让 PPO 的更新更像“方向学习”,减少个别极端样本主导梯度的风险。
三、奖励利用与泛化问题:train reward 上升但测试下降
在持续对同一训练集做 RL 时,常见现象是:
- train reward 一直上升
- 但测试集人工评估下降
通常原因分两类:reward hacking 与 generalization / overfitting。
1)Reward hacking:模型学会“骗”奖励模型
reward model 本质是一个可被攻击的函数。模型可能学到某些表面模式(特定措辞、结构、冗长解释、夸张礼貌)能提高 reward,但真实质量并未提升,甚至下降。
典型信号:
- train reward 上升很快
- 输出越来越模板化
- 人工评估(或更强 judge)反而下降
2)Generalization 问题:没有 hack,但对训练分布过拟合
另一种情况是:人工评估在训练集上也在上升,说明 reward hacking 不明显;但在测试集上下降,说明策略在训练分布上过拟合,泛化能力变差。
典型信号:
- train 与 val 的 reward gap 变大
- 对特定风格 prompt 变得非常强,但换一种表达就退化
- 输出变得更“训练集特化”(例如过度遵循某种模板)
实际案例(直觉型)
假设训练集里很多 prompt 都是“请分点列出理由”,模型会学到:只要输出固定的三段式结构就能得高 reward;但测试集中 prompt 更开放、需要真正推理时,这种模板无法泛化,反而降低质量。
四、SFT 与 RLHF 的本质区别:优化目标与梯度形态不同
1)SFT:模仿学习(所有 token 权重相同)
SFT 的目标是最大化数据集中给定输出的似然,本质是行为克隆。其梯度形式:
∇θJSFT(θ)=E[1T∑t=1T∇θlogπθ(ot∣p,o<t)] \nabla_{\theta}J_{SFT}(\theta)= \mathbb{E}\Big[\frac{1}{T}\sum_{t=1}^{T}\nabla_{\theta}\log \pi_{\theta}(o_t\mid p,o_{<t})\Big] ∇θJSFT(θ)=E[T1t=1∑T∇θlogπθ(ot∣p,o<t)]
可以看到每个 token 的梯度系数是 1(或统一权重),所有 token 对更新贡献同等重要。
2)RLHF-PPO:探索-利用(token 梯度被 advantage 加权)
RLHF 用 PPO 时,输出来自当前策略采样,然后用 advantage 决定“哪些 token 的行为应该被强化或抑制”。其核心梯度形态:
∇θJPPO(θ)=E[1T∑t=1TAt∇θlogπθ(ot∣p,o<t)] \nabla_{\theta}J_{PPO}(\theta)= \mathbb{E}\Big[\frac{1}{T}\sum_{t=1}^{T}A_t \nabla_{\theta}\log \pi_{\theta}(o_t\mid p,o_{<t})\Big] ∇θJPPO(θ)=E[T1t=1∑TAt∇θlogπθ(ot∣p,o<t)]
关键差异在于:
- At>0A_t>0At>0:强化该 token 的倾向(增大概率)
- At<0A_t<0At<0:抑制该 token 的倾向(减小概率)
- ∣At∣|A_t|∣At∣:控制更新幅度(信号强弱)
因此 RLHF 的训练行为更像“在采样输出上做有方向的再加权学习”,而不是对固定输出做模仿。
五、PPO 梯度推导(简化形式,去掉 clip,只更新一轮)
为了直观看到 PPO 梯度为什么长成 At∇logπA_t \nabla \log \piAt∇logπ 的样子,可以做一个常见的简化:
- 去掉 ratio clip
- 只更新一轮,使得 πθold=πθ\pi_{\theta_{old}}=\pi_{\theta}πθold=πθ(在推导中把 old 当常量)
从一个简化的 PPO 目标开始(只保留 ratio 与 advantage):
JPPO(θ)=E[1T∑t=1TAt⋅πθ(ot∣p,o<t)πθold(ot∣p,o<t)] J_{PPO}(\theta)= \mathbb{E}\Big[\frac{1}{T}\sum_{t=1}^{T} A_t\cdot \frac{\pi_{\theta}(o_t\mid p,o_{<t})}{\pi_{\theta_{old}}(o_t\mid p,o_{<t})} \Big] JPPO(θ)=E[T1t=1∑TAt⋅πθold(ot∣p,o<t)πθ(ot∣p,o<t)]
对 θ\thetaθ 求梯度:
∇θJPPO(θ)=∇θE[1T∑t=1TAt⋅πθ(ot∣p,o<t)πθold(ot∣p,o<t)] \nabla_{\theta}J_{PPO}(\theta)= \nabla_{\theta}\mathbb{E}\Big[\frac{1}{T}\sum_{t=1}^{T} A_t\cdot \frac{\pi_{\theta}(o_t\mid p,o_{<t})}{\pi_{\theta_{old}}(o_t\mid p,o_{<t})} \Big] ∇θJPPO(θ)=∇θE[T1t=1∑TAt⋅πθold(ot∣p,o<t)πθ(ot∣p,o<t)]
将梯度移入期望(这里省略分布变化带来的严格推导细节,保留常用形式),得到:
=E[1T∑t=1TAt⋅∇θπθ(ot∣p,o<t)πθold(ot∣p,o<t)] \mathrm{}= \mathbb{E}\Big[\frac{1}{T}\sum_{t=1}^{T} A_t\cdot \frac{\nabla_{\theta}\pi_{\theta}(o_t\mid p,o_{<t})}{\pi_{\theta_{old}}(o_t\mid p,o_{<t})} \Big] =E[T1t=1∑TAt⋅πθold(ot∣p,o<t)∇θπθ(ot∣p,o<t)]
再乘除同一项 πθ(ot∣p,o<t)\pi_{\theta}(o_t\mid p,o_{<t})πθ(ot∣p,o<t):
=E[1T∑t=1TAt⋅πθ(ot∣p,o<t)πθold(ot∣p,o<t)⋅∇θπθ(ot∣p,o<t)πθ(ot∣p,o<t)] \mathrm{}= \mathbb{E}\Big[\frac{1}{T}\sum_{t=1}^{T} A_t\cdot \frac{\pi_{\theta}(o_t\mid p,o_{<t})}{\pi_{\theta_{old}}(o_t\mid p,o_{<t})} \cdot \frac{\nabla_{\theta}\pi_{\theta}(o_t\mid p,o_{<t})}{\pi_{\theta}(o_t\mid p,o_{<t})} \Big] =E[T1t=1∑TAt⋅πθold(ot∣p,o<t)πθ(ot∣p,o<t)⋅πθ(ot∣p,o<t)∇θπθ(ot∣p,o<t)]
注意最后一项是对数梯度恒等式:
∇θπθ(ot∣p,o<t)πθ(ot∣p,o<t)=∇θlogπθ(ot∣p,o<t) \frac{\nabla_{\theta}\pi_{\theta}(o_t\mid p,o_{<t})}{\pi_{\theta}(o_t\mid p,o_{<t})} \mathrm{}= \nabla_{\theta}\log \pi_{\theta}(o_t\mid p,o_{<t}) πθ(ot∣p,o<t)∇θπθ(ot∣p,o<t)=∇θlogπθ(ot∣p,o<t)
因此:
∇θJPPO(θ)=E[1T∑t=1TAt⋅πθ(ot∣p,o<t)πθold(ot∣p,o<t)⋅∇θlogπθ(ot∣p,o<t)] \nabla_{\theta}J_{PPO}(\theta)= \mathbb{E}\Big[\frac{1}{T}\sum_{t=1}^{T} A_t\cdot \frac{\pi_{\theta}(o_t\mid p,o_{<t})}{\pi_{\theta_{old}}(o_t\mid p,o_{<t})} \cdot \nabla_{\theta}\log \pi_{\theta}(o_t\mid p,o_{<t}) \Big] ∇θJPPO(θ)=E[T1t=1∑TAt⋅πθold(ot∣p,o<t)πθ(ot∣p,o<t)⋅∇θlogπθ(ot∣p,o<t)]
在“只更新一轮、πθold=πθ\pi_{\theta_{old}}=\pi_{\theta}πθold=πθ”的极简条件下,ratio 约为 1,就得到最熟悉的形式:
∇θJPPO(θ)=E[1T∑t=1TAt⋅∇θlogπθ(ot∣p,o<t)] \nabla_{\theta}J_{PPO}(\theta)= \mathbb{E}\Big[\frac{1}{T}\sum_{t=1}^{T} A_t\cdot \nabla_{\theta}\log \pi_{\theta}(o_t\mid p,o_{<t}) \Big] ∇θJPPO(θ)=E[T1t=1∑TAt⋅∇θlogπθ(ot∣p,o<t)]
这也解释了为何 RLHF-PPO 与 SFT 的梯度形式如此相似:
它们都在做 ∇logπ\nabla \log \pi∇logπ,区别只在于 RLHF 用 AtA_tAt 给每个 token 的梯度加上了方向与幅度权重。
六、把所有 Trick 串成一条直观链路
假设某个 prompt 要求“简洁回答”,奖励模型偏好“短且直接”。Actor 从 SFT 初始化,最初输出偏长。PPO 训练中会发生:
- Actor 采样生成 yyy,EOS 处得到序列级 reward r(x,y)r(x,y)r(x,y),同时每个 token 都计算 KL(t)\mathrm{KL}(t)KL(t) 并扣罚。
- 得到 token 级 reward 序列 rt=I(at=EOS)r(x,y)−βKL(t)r_t=\mathbf{I}(a_t=\text{EOS})r(x,y)-\beta \mathrm{KL}(t)rt=I(at=EOS)r(x,y)−βKL(t)。
- 用 GAE 把 rtr_trt 转成每个 token 的 advantage AtA_tAt:越能贡献“简洁且高 reward”的 token,其 AtA_tAt 越大。
- policy 更新时,At>0A_t>0At>0 的 token 倾向被增强,At<0A_t<0At<0 的 token 倾向被抑制;同时 KL 惩罚把更新拉回 SFT,避免策略突然变得“只会输出极短模板”。
- 若发现输出开始变得不自然或知识退化,引入 SFT loss / ptx loss 让模型继续保持语言能力与知识面。
- reward / advantage normalization 确保训练不会被少量极端样本带偏;分布式训练时做全局归一化避免不同 worker 尺度不一致。
- value loss clipping 防止 critic 估计跳动,避免 advantage 噪声进一步放大。
最终目标不是“让 train reward 无限上涨”,而是让 reward 的提升对应到真实的人类偏好与泛化能力提升;否则就会出现 reward hacking 或训练集过拟合导致测试下降。
更多推荐


所有评论(0)