返回首页
笔记2026/2/2516 min

资源受限下的破局者:On-Policy Distillation

在算力与标注数据双重受限下,On-Policy Distillation 如何用 Reverse KL、γ=0 与在线探索实现高效后训练。

资源受限下的破局者:On-Policy Distillation

在探讨大模型后训练(Post-training)时,算法工程师们通常面临着一个残酷的现实:资源是极其有限的。

如果我们手头只有极其有限的高质量人工标注数据,SFT(监督微调) 很容易碰到天花板,且模型一旦在实战中偏离了训练集见过的分布,就会产生灾难性的复合误差(Compounding Error)。

如果我们想用 RL(强化学习,如 PPO 或 GRPO) 让模型通过自我探索突破上限,显存和算力又会瞬间教做人——动辄 3 到 4 个同量级模型的显存开销,加上强化学习极其稀疏的奖励信号带来的海量采样需求,让低资源团队望而却步。

面对这种算力与数据的双重“水土不服”,On-Policy Distillation(同策略知识蒸馏) 作为一种极致高效的破局方案,正成为资源受限场景下的新范式。它巧妙地剥离了 RL 沉重的架构,同时保留了其最核心的“自我探索”能力。

aa

贯穿全文的直观比喻:训练一个新人下国际象棋

  • SFT / Off-Policy Distillation(离线蒸馏): 让新人死记硬背大师的获胜棋谱。一旦他在实战中下错一步,进入了棋谱里从未见过的残局,就会彻底崩溃(缺乏探索容错率)。
  • RL(强化学习): 不给任何棋谱,让新人自己去下(On-Policy 探索)。下完一整局,裁判只给一个标量反馈“赢了”或“输了”。新人根本不知道中间那 50 步里,究竟哪一步是真正的昏招(奖励极度稀疏,试错成本极高)。
  • On-Policy Distillation(在线蒸馏): 新人在实战中自己下棋(自主采样探索状态),但旁边站着一位大师(Teacher Model)。新人每考虑走一步,大师都会给出他在这个局面的全盘胜率评估(稠密概率分布)。新人得到了步步为营的巅峰指导。

1. 工程视角:极致的轻量化与“短视”的暴力美学

Motivation (核心动机): 既然引入了比 Reward Model 更庞大的 Teacher Model 来逐字打分,如果还套用传统 RL 那套极其复杂的价值计算(比如 PPO 里的 Critic 模型和 GAE 计算),算力和显存依然会爆炸。我们需要在工程上做到极其暴力的轻量化。

解法:逆 KL 散度 (Reverse KL) 与 γ=0\gamma = 0 的降本增效

在损失函数的设计上,最直接且高效的选择是 单步逆 KL 散度 (Reverse KL)

KL(πθπteacher)=Exπθ[logπθ(xt+1x1..t)logπteacher(xt+1x1..t)]KL(\pi_\theta || \pi_{\text{teacher}}) = \mathbb{E}_{x \sim \pi_\theta} \Bigl[ \log \pi_\theta(x_{t+1} | x_{1..t}) - \log \pi_{\text{teacher}}(x_{t+1} | x_{1..t}) \Bigr]

深度解析:为什么偏偏是 Reverse KL? 这个公式表层的物理意义是:在学生模型自己探索到的状态下,尽力模仿老师;一旦行为一致,梯度立刻停止。 但在底层数学逻辑上,这里藏着小模型逆袭的密码:Mode-seeking(求众数) vs. Mean-seeking(求平均)。 如果用传统的 Forward KL,小模型会被迫去平均覆盖老师所有的知识分布(样样都学,样样稀松);而 Reverse KL 是 Mode-seeking,它允许小模型“挑软柿子捏”——只要学生模型在老师认可的众多解法中,找到一条自己最能走通的高概率路径并做到极致,损失函数就会降到最低。这是小模型在资源受限下能完成蒸馏的数学前提。

工程上的极简妥协: 直接将强化学习中的折扣因子(Discount Factor, γ\gamma)设为 0。 这意味着,学生模型只优化紧接着的下一个 Token,完全不考虑未来的长远收益。从马尔可夫决策过程 (MDP) 的严谨数学角度来看,考虑未来收益(γ>0\gamma > 0)才是“政治正确”的。但在大模型工程实证中,γ>0\gamma > 0 根本没有带来明显的性能提升。因此,为了纯粹的效率,直接砍掉多步规划。不需要等待轨迹跑完,不需要训练 Critic 模型,算力成本比标准 PPO 暴降了一个数量级。

实战踩坑警告:Teacher 真的“免费”吗?

在实际工程中,让一个 70B 甚至更大参数的 Teacher 模型去计算全词表(数万维)的 Logits,其 KV Cache 显存占用和通信延迟依然会成为噩梦。 工程破局点: 业界绝不会真拿完整的全词表算梯度,而是采用 Top-K 截断(Teacher 只保留概率最大的前 K 个 Token,其余置为 0 后重新归一化)结合**异步打分(Asynchronous Scoring)**机制。这种在数学上略显粗糙的妥协,换来了系统吞吐量的巨大飞跃。

延伸版本:毕竟Teacher 还得部署(或者 call API),这本身也是一笔不小的开销。有没有更简单的方法?试试Self-distillation?


2. 梯度视角:将所有算法统一到 On-Policy 期望下的降维打击

Motivation (核心动机): On-Policy Distillation 到底在底层参数更新时,比传统的 SFT 和 RL 赢在了哪里?为了看清本质,我们需要剥开外壳,利用**重要性采样(Importance Sampling)**将它们全部统一到 On-Policy 探索(yπθ(x)y \sim \pi_\theta(\cdot|x)) 的期望下,直接对比反向传播时的梯度公式。

大一统的策略梯度框架

假设我们统一在学生模型自己生成的轨迹分布 ExDx,yπθ(x)[]\mathbb{E}_{x \sim D_x, y \sim \pi_\theta(\cdot|x)}[\dots] 下进行分析,所有的对齐算法的梯度更新都可以写成如下的通用模式:

θL=ExDx,yπθ(x)[t=1yytVWeight(y,yt)θlogπθ(ytx,y<t)]\nabla_\theta \mathcal{L} = - \mathbb{E}_{x \sim D_x, y \sim \pi_\theta(\cdot|x)} \left[ \sum_{t=1}^{|y|} \sum_{y'_t \in V} \mathbf{Weight}(y, y'_t) \cdot \nabla_\theta \log \pi_\theta(y'_t|x, y_{<t}) \right]

在这个极其优雅的框架下,四种主流算法的区别仅仅在于权重项 Weight(y,yt)\mathbf{Weight}(y, y'_t) 的不同:

I. SFT(监督微调)

WeightSFT=I(y=y)πθ(yx)I(yt=yt)\mathbf{Weight}_{\text{SFT}} = \frac{\mathbb{I}(y=y^*)}{\pi_\theta(y|x)} \cdot \mathbb{I}(y'_t = y_t)

解析: 极其严苛且稀疏。I(y=y)\mathbb{I}(y=y^*) 意味着它只对完美匹配标准答案的轨迹进行更新。

数学之美: 注意公式里的 1πθ(yx)\frac{1}{\pi_\theta(y|x)}。因为 SFT 本质是纯离线数据驱动,这个倒数项在重要性采样中强行抵消了 On-Policy 的采样概率。这精准地揭示了 SFT 在面对模型自我探索时效率极低的原因——它直接屏蔽并丢弃了所有不在静态数据集里的试错轨迹。

II. RL (如 PPO / GRPO)

WeightRL=r(x,y)I(yt=yt)\mathbf{Weight}_{\text{RL}} = r(x,y) \cdot \mathbb{I}(y'_t = y_t)

解析: 打破了 SFT 的轨迹限制,模型在任何探索到的轨迹上都能获得更新。但它的指导极其粗糙——r(x,y)r(x,y) 只是一个整句级别的标量奖励。它只是无脑地将这条轨迹上所有 Token 的概率等比例放大或缩小,根本无法提供“这一步该换成词表里哪个词更好”的细节指导。

III. Off-Policy Distillation(离线蒸馏)

WeightOff-Distill=I(y=y)πθ(yx)πteacher(ytx,y<t)\mathbf{Weight}_{\text{Off-Distill}} = \frac{\mathbb{I}(y=y^*)}{\pi_\theta(y|x)} \cdot \pi_{\text{teacher}}(y'_t|x, y_{<t})

解析: 引入了 Teacher 极其稠密的词表级概率分布进行细腻指导。但由于它依然带着 I(y=y)\mathbb{I}(y=y^*) 的枷锁,它只能在静态数据集的完美路径上生效。一旦模型自己推理时走偏了,它就瞎了。

IV. On-Policy Distillation(同策略在线蒸馏)

WeightOn-Distill=πteacher(ytx,y<t)\mathbf{Weight}_{\text{On-Distill}} = \pi_{\text{teacher}}(y'_t|x, y_{<t})

解析: 真正的降维打击。 它彻底去掉了 I(y=y)\mathbb{I}(y=y^*) 的限制,意味着模型可以在自我探索生成的任何轨迹(哪怕是充满了错误的轨迹) 上实时学习。 同时,它的梯度权重是 πteacher\pi_{\text{teacher}},意味着每走错一步,Teacher 都会在数万维的词表空间中,给出极其稠密、方向明确的纠偏信号。

探索机制的盲区提醒: 上面的数学推导有一个极其重要的工程前提:必须在生成采样时引入随机性(例如设置 Temperature > 0)。如果学生模型只使用贪心解码(Greedy Decoding),它采样的轨迹将极其单一,On-Policy 就退化成了一条极窄的路径,Teacher 的“纠偏兜底”价值就彻底丧失了。没有随机探索,就没有 On-Policy 的红利。


总结:高杠杆的炼丹哲学

在计算资源和优质数据双双受限的场景下,如何最大化每一滴算力的价值?

On-Policy Distillation 给出了一份还算满意的答卷:在工程侧,它通过砍掉面向未来的多步规划(γ=0\gamma=0)和 Critic 模型,并在实战中辅以 Top-K 截断,省下了海量显存;在数学底层,它又通过 Reverse KL 的求众数特性和全词表概率的稠密加权,在每一小步的梯度更新中塞满了信息量。

它用最小的架构代价,换取了最高质量的 Token 级在线纠偏。这,就是大模型后训练时代的极简暴力美学。

评论区

0 条评论

仅订阅用户可发表评论。使用订阅邮箱登录后可评论。

还没有评论,来抢沙发。