从奖励塑形到自适应监督:OPD策略蒸馏优化实践

发布时间:2026/10/8 9:58:11
从奖励塑形到自适应监督:OPD策略蒸馏优化实践 1. 进展总览为什么这个阶段值得单独拎出来写先说明一下这篇文章是上一轮 On-Policy DistillationOPD进展梳理的续篇覆盖的是 6 月到 9 月这段时间的工作。之所以要单独拆出来写是因为这段时间的推进节奏和前几个月完全不一样——前几月主要是在 OPD 这条主线上做单点突破而这几个月的工作重心明显转向了“先把 reward shaping 用明白再让它反过来约束蒸馏过程”这条更复杂的路径。写这篇文章的初衷很简单我在这四个月里踩了不少坑有的坑现在回头看简直是低级错误但当时确实卡了很久。把这些过程整理出来既是对自己工作的复盘也希望给正在做策略蒸馏、奖励塑形或者自适应监督方向的同学提供一些可复现的参考。内容会涉及一部分公式和伪代码但重心放在思路演进和实操细节上毕竟论文里不会写的东西往往才是真正花时间的地方。先说结论6 到 9 月这四个月的实质进展可以压缩成三件事——第一把 reward shaping 从“可有可无的 trick”提升到了“影响蒸馏稳定性的关键变量”第二找到了 OPD 在非平稳奖励环境下的失效边界并针对性地设计了自适应监督机制第三把在线样本的利用率提高了将近一倍同时把专家策略的灾难性遗忘问题基本压住了。当然任何进展都不是线性的。这期间也走过弯路比如一度想用统一框架同时解决奖励稀疏和策略漂移两个问题最后发现二者在时间尺度上的需求是冲突的强行耦合反而让训练过程变得更难调试。这个教训我会在后面详细展开。2. 核心问题复盘OPD 到底卡在哪里2.1 回顾 OPD 的基础设定先把 OPD 的基本框架说清楚方便上下文连贯。On-Policy Distillation 是策略蒸馏的一个变体核心思想是用一个已经训练好的专家策略去指导学生策略的学习。传统蒸馏一般是用专家生成的离线数据做行为克隆而 OPD 的特点是学生策略在和环境交互的在线过程中实时参考专家策略的输出来修正自己的行为。具体实现上OPD 通常包含两条 loss 支路一条是环境奖励对应的策略梯度损失另一条是模仿损失负责拉近学生策略和专家策略在动作分布上的距离。训练过程中学生策略一直在和环境互动同时每一步都会拿自己的动作概率和专家的动作概率做对比差异大了就加大惩罚差异小了就相对放松。听上去很顺但实际跑起来问题不少。最典型的场景是当专家策略和学生策略的能力差距很大的时候模仿损失会让学生策略陷入“想学但学不动”的状态——专家的动作分布对学生来说过于陡峭学生策略的梯度方向被模仿损失主导环境奖励反而成了次要信号于是策略收敛到一个局部最优整体性能卡在中间水平。2.2 之前版本遗留的三个痛点3 到 5 月的工作解决了一部分问题但遗留了三个明显的痛点6 月一开始就是在跟这三个问题较劲。第一个痛点是奖励尺度不匹配。模仿损失和策略梯度损失在数值尺度上经常差一个数量级导致训练过程中两条支路的实际影响力严重失衡。调 loss 权重是一个办法但只要环境一变或者专家策略一换原来的权重又要重新调这个过程非常费时。第二个痛点是稀疏奖励环境下策略启动困难。如果环境奖励大部分时候是 0学生策略在初期几乎没有有效的梯度信号只能靠模仿损失勉强拖着走。但模仿损失本身在动作分布差距较大的时候效率很低于是学生策略前期学习速度极慢甚至出现训练很久还在原地打转的现象。第三个痛点是专家策略的利用效率低。OPD 只在每一步把专家的输出当作“标准答案”来模仿但专家策略内部包含的长期规划信息、对状态的偏好结构全都被简化成了逐动作的分布对齐信息利用效率其实是浪费的。这三个痛点叠加在一起表现就是训练曲线长时间不增长、loss 震荡、以及学生策略在简单状态下学会、复杂状态下又退化的“跷跷板”现象。3. Reward Shaping 的实验路径从补救到关键变量3.1 为什么选 reward shaping而不是换网络结构面对上面三个痛点第一个直觉反应通常是调网络结构、换优化器、加归一化层之类的。但我当时选择先动 reward shaping原因有两个。第一OPD 已经是一个两路 loss 叠加的框架如果再动网络结构问题排查的变量会变得非常多。reward shaping 是在奖励信号层面做文章不改变模型结构介入成本低回滚也容易。第二reward shaping 直接作用于策略梯度那条支路正好可以缓解模仿损失和环境奖励之间的失衡问题——如果环境奖励本身已经包含了足够多的结构信息模仿损失的负担就会降下来。这里补充一个生活化的类比。OPD 像是让一个新手跟着一位老师傅学手艺。老师傅做菜很快新手每一步都在看老师傅的手法但自己动手的时候总是不对味。reward shaping 就相当于在做的过程中把“火候对不对”“调味顺序对不对”这些即时反馈拆成更细的评价信号让新手每一步都清楚自己做得怎么样而不是等到出锅了才知道整盘菜失败了。当然reward shaping 用不好也会出问题。最典型的是 shaping reward 设计过于密集导致策略过度拟合辅助信号反而忽略了真实目标。这个在实验中遇到过后面会详细讲。3.2 静态 shaping 方案的三个迭代版本6 月到 7 月初我一直在做静态 shaping 的版本迭代就是 shaping reward 的形式固定幅度固定不随训练进度变化。一共试了三个版本。第一版是简单距离奖励。做法是取专家轨迹里的状态访问频率分布给高频状态一个正向 shaping 奖励状态访问频率低就适当给负向惩罚意图是引导学生策略多靠近专家常走的状态区域。这个版本的问题在于学生策略前期的状态分布和专家差异非常大距离奖励的梯度方向不稳定前期反而加剧了探索的盲目性。第二版加入了进度奖励。具体做法是在一个 episode 里根据学生策略当前到达的“进度节点”加权给奖励——比如在导航类任务中每通过一个关卡节点就多给一份奖励。这一版的效果好了不少因为进度奖励提供了中间时刻的反馈信号缓解了稀疏奖励下策略启动慢的问题。但它的参数敏感性很高奖励幅度稍微调大一点学生策略就容易过度追求节点目标放弃了对最终目标的优化。第三版是分段势函数。这是我目前觉得静态 shaping 里最稳定的一版。用一个势函数记录当前状态距离任务目标的“距离变化”每一步的 shaping reward 等于前后两个状态势函数值的差。这个形式在理论上有一个很好的性质就是满足势函数 shaping 的最优策略不变性——也就是说加了这个 shaping reward理论上不该改变真正的最优策略。当然这是理论性质实际因为函数逼近误差最优策略还是会偏。但至少训练稳定性比前两版好很多。这里提示一下分段势函数实现时要注意势函数的尺度应当和环境原始奖励保持在一个数量级。我当时第一版实现里势函数量级是原始奖励的十倍训练起来学生策略很快就“飘”了动作分布变得很激进后来把势函数压缩回同一个量级才稳下来。3.3 从静态到动态为什么 shaping 必须跟着策略走静态 shaping 做到 7 月中旬效果基本到顶了。训练曲线比之前平滑启动速度也快了但有一个问题很扎眼一旦学生策略的能力超过了 shaping reward 的设计假设shaping reward 就开始帮倒忙。举个例子。如果一个 shaping reward 是鼓励学生策略进入某些区域的那么当学生策略的能力已经足够好、可以走更优路径的时候shaping reward 仍然在把策略往老路子上拉。这时候 shaping reward 变成了一个“经验包袱”限制了策略的进一步优化。在这个观察的基础上我开始尝试动态 shaping。思路是把 shaping reward 的权重设计成随训练进度衰减的函数训练前期 shaping 占比高帮助学生快速建立基础行为模式训练后期 shaping 占比低把主导权交还给环境奖励。这个思路实现起来不复杂就是一个简单的退火公式但效果比静态版本好不少。不过动态 shaping 只是解决了“什么时候用 shaping”的问题还没解决“shaping 本身给得对不对”的问题。这个问题的答案要等到自适应监督上线之后才逐渐清晰。4. 自适应监督机制从“固定模仿”到“按需模仿”4.1 自适应监督要解决的本质上是什么OPD 里的模仿损失本质上是一种监督信号。标准做法是每步都让专家和学生策略的动作分布尽量对齐权重固定。这样做的问题是不同状态下模仿的“必要性”其实是不一样的。有的状态下学生策略已经学得很好动作分布和专家已经比较接近这时候再强行拉对齐收益很小。有的状态下学生策略完全不会动作分布和专家差了十万八千里这时候如果模仿权重不够学生就学不进去。用同一个固定权重处理这两种情况必然顾此失彼。自适应监督的目标就是让模仿权重随状态和学生策略的实际水平动态调整。学得好的地方少管一点学得差的地方多管一点。这个思路和课程学习有相似之处但更细粒度不再是一个训练阶段的课程安排而是逐状态、逐时间步的监督强度调节。4.2 置信度加权蒸馏的具体实现7 月下旬开始我实现了一个置信度加权的蒸馏版本。核心做法是在模仿损失前面乘一个权重系数这个系数由学生策略自身的置信度决定。具体实现分两步。第一步用学生策略在当前状态下的动作分布熵来度量置信度。熵低说明策略对动作选择很有把握熵高说明策略对动作选择很不确定。第二步把熵映射到注意力系数上熵越低模仿权重越低熵越高模仿权重越高让模型把精力集中在自己真正拿不准的状态上。公式形式不算复杂但实际调参过程花了不少时间。注意力系数的上下限、温度参数、学生策略熵的滑动平均窗口长度每一个都会影响最终的训练行为必须一组一组试。这个机制上线后一个直观的变化是训练曲线前期的抖动明显变小了。之前学生策略经常出现“这步会了、下一步又忘了”的现象引入置信度加权之后策略在低置信度状态下能得到更强的监督所以抢回来的技能不容易再丢掉。但这里还有一个遗留问题——置信度本身是一个可能被“骗”的指标。学生策略可能在某个状态下动作分布很尖锐但动作选择却是错的。这种情况下熵很低自适应监督会降低权重结果反而放过了需要纠正的错误。这个问题后面是通过引入专家和学生策略的价值估计差来进一步修正的。4.3 价值差异驱动的自适应监督这是 8 月中旬到 9 月的主线工作。思路是基于一个观察专家策略和学生策略对同一状态的长期价值判断往往存在系统性差异而这个差异比动作分布的 KL 散度更能反映“该不该多管”。实现上我在蒸馏框架里引入了两个 critic。一个 critic 估计专家策略的价值另一个 critic 估计学生策略的价值。在每一步计算两者对当前状态的估值差如果差异大说明学生策略对当前状态的理解和专家出现了明显分歧这时加大模仿权重如果差异小说明学生策略的状态理解已经接近专家可以放心降低模仿权重。这个方案相比置信度加权有一个明显优势价值差异是基于长期累积回报的估计不只看当前动作分布的尖锐程度更不容易被“高置信度但错误”的状态欺骗。代价是训练里多了两个 critic体积、显存、稳定性都要重新调试。这里分享一个调试经验价值差异的估计对 critic 的更新频率很敏感。更新太频繁价值估计方差大监督权重震荡更新太少价值估计滞后监督信号失真。我最后采用的方法是 critic 更新频率和学生策略的 rollout 频率异步配置——学生策略每 4 步更新一次critic 每 16 步更新一次同时给价值差套了一个简单的滑动平均平滑层。这套自适应监督机制上线后和动态 reward shaping 配合整体性能在三个基准任务上都有提升。提升幅度最大的是一个奖励极其稀疏的导航任务对比固定权重的 OPD 基线平均回报提升了 37%训练步数节省了 29%。4.4 自适应监督和 reward shaping 的联动效果需要强调一点reward shaping 和自适应监督并不是两条平行的工作线它们在 9 月之后实际上是协同的。reward shaping 改变了学生策略收到的即时反馈而自适应监督改变了学生策略在模仿专家时的学习强度。二者一个负责“让环境经验更有信息量”一个负责“让模仿行为更高效”形成了一种双通道的修正机制。具体到实验表现上reward shaping 单独用的时候训练速度提升但最终收敛水平略低于不 shaping 的版本主要原因是 shaping 上限受势函数设计质量影响。自适应监督单独用的时候最终收敛水平高但训练前期如果稀疏奖励启动速度还是不快。两个一起用之后前期 shaping 提供快速启动后期自适应监督保证策略能在专家指导下稳步优化整体的训练曲线几乎看不到前期长时间平台期的问题。另外一个现象也很有意思加了自适应监督之后reward shaping 的退火速度可以明显加快。因为当学生策略在高置信度状态下可以不依赖 shaping 信号shaping 的负担就降低了的。5. 核心实验设计与结果拆解5.1 基线选择与消融配置这次实验我没有直接用论文里的现成 baseline而是以三个月前自己实现的 OPD 框架为基线因为不同实现之间细节差异太大直接和论文数字对比会带来很多不可控变量。我最终设置了四个对照组基线 A固定权重 OPD无 shaping无自适应监督。基线 BOPD 静态分段势函数 shaping。基线 COPD 动态 shaping退火权重。实验组 DOPD 动态 shaping 置信度加权蒸馏 价值差异监督。所有对照组的超参数尽量保持一致只允许 shapping 策略和监督机制这一条变量变化。训练步数统一设定、随机种子对齐、环境版本固定。实验环境方面用了三个任务组奖励稀疏程度依次递增。第一组是中等稠密的控制任务第二组是稀疏奖励的导航任务第三组是极度稀疏且带有随机扰动的高难任务。5.2 数据结果与关键趋势先说总体趋势对照组平均回报收敛步数训练稳定性采样效率基线 A1.00x1.00x中1.00x基线 B1.08x0.82x中高1.12x基线 C1.15x0.74x较高1.26x实验组 D1.37x0.71x高1.41x这里所有数值都以基线 A 为 1.00 做归一化。可以看出从 B 到 D 提升是逐步累积的不是某个单一改动带来的跳变。关键趋势有三点值得展开。第一静态 shaping 对收敛步数的改善最明显但对最终性能帮助有限。基B 的收敛步数比基线 A 快了 18%但平均回报只多了 8%说明静态 shaping 主要在优化“学习节奏”并没有从根本上提升策略的上限。这支持了前面的判断静态 shaping 的能力上限受限于势函数本身的设计质量。第二动态 shaping 的增益来自后期策略优化不再被固定的 shaping 信号束缚。基线 C 相比基线 B 在平均回报上提升了 7%这个增益在训练的后期出现。前期两条曲线几乎重合中期开始分化。第三自适应监督是拉高最终性能的最大功臣。实验组 D 相比基线 C 提升了 22% 的平均回报而且这个提升曲线是单调的没有出现先升后降的情况。这意味着价值差异监督和置信度加权这两个机制确实把专家策略的信息利用效率提上去了。5.3 消融实验每个组件是否真的有用为了验证每个组件的独立性我把实验组 D 的机制拆开做了一组消融对比D1动态 shaping 置信度加权去掉价值差异监督。D2动态 shaping 价值差异监督去掉置信度加权。结果很有意思。D1 的平均回报比 D 差 8%D2 比 D 倒是只差了 3%。这说明价值差异监督在这个任务组合里贡献了绝大部分自适应能力置信度加权更像是“锦上添花”。不过需要注意这个结论在简单任务上不成立。在奖励相对稠密的控制任务上去掉价值差异监督、只保留置信度加权的版本差幅微乎其微说明价值差异监督在简单任务上其实是个“冗余”组件——它不带来危害但也帮不上太多忙。换一个角度说如果目标任务相对简单只做置信度加权就足够价值差异监督的额外开销可以省掉。5.4 专家策略的遗忘问题好像被解决了但又没完全解决前面提到专家策略的灾难性遗忘这是 6 月到 9 月一直关注的一个问题。严格来说灾难性遗忘指的是学生策略在训练后期把早期学会的技能丢掉了。但我也发现一个容易忽略的相关问题——专家策略自身的遗忘。当我们用在线蒸馏不断更新学生策略时专家策略如果也参与微调就很有可能在后期被学生策略带偏。为了解决这个问题我在实验组 D 里把专家策略完全冻结只作为监督信号源使用。冻结之后专家策略的稳定性得到保证但代价是专家策略无法适应环境变化。如果环境本身是非平稳的冻结的专家反而可能成为“过时的经验”。这个问题我们没有在 9 月底之前拿到完美解法只是通过动态 shaping 和自适应监督的组合在非平稳程度不高的环境上缓解了症状。这里要做一个明确的提醒**如果环境是非平稳的而且这种非平稳不是少量扰动而是结构性变化那么冻结专家策略的方案一定会遇到天花板。**这部分的扩展方向我在后面专门展开。6. 实操过程与踩坑记录6.1 训练流程的最终版本原本想把所有细节都放出来但字数有限这里只保留一个可以直接复用的流程骨架好让跟做的同学心里有个数。最终的训练流程大概是这个顺序先用一个小规模的 rollout 收集初始经验计算状态访问频率分布用于初始化势函数的先验。训练学生策略若干步同时维护两个 critic专家价值 critic、学生价值 critic和它们的异步更新时钟。每一步 rollout计算当前状态下的势函数 shaping reward叠加到环境奖励上。同时计算学生策略的动作分布熵映射成置信度结合价值差异估计得到最终的自适应监督权重。用策略梯度损失 加权模仿损失联合更新学生策略。每隔一定步数调整 shaping 退火权重让它逐渐衰减。训练收敛后把学生策略和环境交互一批额外数据做一次 finetune用来修复在训练过程中因为 shaping 退火带来的行为偏移。第七步是我最后补上的。当时发现一个现象训练收敛后如果直接把 shaping 关掉学生策略的短期性能会掉一点。后来在不改变 shaping 机制的情况下关掉 shaping 让策略在原始奖励下再微调几十步性能就能恢复甚至超过之前。这个 finetune 的步骤虽然小但对最终提交模型的效果影响很大。6.2 实验环境与硬件配置参考这里不推荐具体硬件品牌直接说我这组实验的配置供参考。训练环境是单机 8 卡 GPU每张卡显存 24G。三个任务组共享同一套环境代码并发开 32 个并行进程采样。学生策略是三层 MLP 加一个 GRU 的循环策略专家策略用了更大的网络。两个 critic 分别各自是一个两层 MLP。显存方面因为实验组 D 多了两个 critic残差网络的参数量比基线上了一个台阶。最初在 24G 显存下跑得比较吃力后来通过梯度检查点、以及减少 critic 网络层数的方法解决了。如果你跟我一样是在 8G 到 16G 显存的环境下跑建议优先省 critic 网络的规模不要省学生策略的容量——学生策略容量直接决定蒸馏效果上限。6.3 踩坑实录五个有价值的问题这里分享五个我在 6 到 9 月实际踩过的坑按“踩坑时间 问题表现 解决方案”的方式写方便检索。坑一势函数尺度偏离导致策略“激进化”。出现时间6 月中旬。表现训练前期 loss 下降很快但策略行为明显偏离合理范围动作幅度变大。排查后发现shaping reward 的数值尺度是环境奖励的十倍策略梯度算出来之后shaping 支路的梯度完全压过了环境奖励支路。解决方式把势函数幅度压到环境奖励的 0.2 到 0.5 倍重新训练问题立刻消失。坑二置信度加权导致“自满陷阱”。出现时间8 月上旬。表现学生策略熵快速下降训练中后期性能停滞。原因置信度低的时候监督权重高策略学得快、熵降得快于是监督权重降得更快形成恶性循环学生策略过早固化。解决方式给注意力系数加了上界不让学生策略“完全放飞”同时又用价值差异监督兜底。坑三critic 更新太频繁引发震荡。出现时间8 月下旬。表现训练曲线在中后期频繁波动没有任何单调性。查了一下更新频率发现学生策略和 critic 同步更新每步都在变。解决方式critic 改为延迟更新并加入滑动平均平滑波动立刻消失了一大半。坑四静态 shaping 在中期“拖后腿”。出现时间7 月上旬。表现中期训练曲线出现长期平台加训练步数也过不去。排查后发现静态 shaping 不断奖励旧路径阻碍策略探索新路径。解决方式换成退火权重平台期明显缩短。这个问题在 3.3 节已有详述。坑五专家策略生成的数据分布不平衡。出现时间9 月初。表现学生策略在高频状态上学得很好在低频状态上几乎不进步。原因是专家策略的 rollout 偏好访问某些区域导致监督信号分布失衡。解决方式在采样器里增加状态覆盖率控制让低频状态也有足够的采样概率。这个改动简单收益却很大。7. 关键参数速查与调参思路7.1 二次整理的调参清单整理一份速查表方便你对着调。这些参数没有通用的绝对最优值但要给一个安全范围。括号内是我自己在三个任务上最终使用的值。参数作用安全范围我的最终值势函数缩放系数控制 shaping 幅度0.1 ~ 0.80.35shaping 退火速率控制 shaping 衰减0.001 ~ 0.01 / 千步0.004 / 千步置信度注意力下界防止监督完全消失0.2 ~ 0.60.35置信度注意力上界防止监督过强0.8 ~ 1.20.95价值差异滑动窗口平滑价值差4 ~ 6432critic 延迟更新步数控制 critic 更新频率4 ~ 3216模仿损失最大截断防止梯度爆炸0.5 ~ 2.01.0这里有一个关于调参思路的提醒这些参数之间不是完全独立的。比如势函数缩放系数调大了shaping 退火速率往往也要加快不然训练后期 shaping 的负面影响会被放大。再比如价值差异滑动窗口调短了可以适当把模仿损失最大截断调高一点让监督信号更敏感但前提是策略容量足够大能消化更敏感的监督信号。7.2 压测时的注意事项如果你准备在更大规模环境下复现这套方案有几个和调参无关但影响工程的细节要特别注意。第一**奖励归一化优先级高于一切。**如果环境奖励本身数值变化很大必须先做归一化再做 shaping否则 shaping 的退火速率的标定一定会出错。我第一套分布式环境里就是忘了做归一化导致不同子环境的 shaping 退火曲线完全不同训练怎么调都怪。第二**采样并行度影响 shaping 退火的稳定性。**并行进程多的情况下同一时刻不同进程看到的策略版本也不完全一致shaping 退火曲线如果按全局步数算会和局部进程的步数对不上。后来我把 shaping 退火改成每个进程独立调度才算彻底解决了这个不一致的问题。第三**注意 critic 输入特征的一致性。**两个 critic 的输入如果一个是拼接观察值、一个是拼接动作值那么它们的 loss 曲线没有可比性排查问题的难度会指数上升。建议两个 critic 统一用同样的输入头只在网络内部做分支。8. 扩展方向与下一步计划8.1 非平稳环境下的专家策略更新问题前面已经说过冻结专家策略在非平稳环境下会遇到天花板。9 月中旬我设计了一个小规模实验模拟环境奖励分布偏移的场景。具体做法是每隔一定轮次修改环境奖励函数观察冻结专家策略的学生会怎么反应。结果不意外前两轮偏移还能跟上第三轮开始性能明显下滑蒸馏效率也随之降低。这个实验结果很清晰指向下一步工作的方向——需要设计一种“专家策略低速适应机制”让专家策略在保持稳定性的前提下适度跟随环境变化进行调整。当然这个机制必须和学生策略的自适应监督联动避免专家和学生同时漂移。8.2 自适应监督与大语言模型蒸馏的结合另一个正在探索的方向是把自适应监督的思路移植到语言模型的蒸馏任务中。语言模型蒸馏时教师模型通常是一个大规模稠密模型学生模型是一个参数量小很多的版本这跟强化学习里的专家-学生结构非常相似。目前初步的想法是用学生模型在不同 token 位置上的置信度作为监督权重的一部分同时用教师模型和学生模型在语义层面的“价值差”设计类似价值差异监督的信号。到目前为止只做了非常初期的验证结论还很初步但我倾向于认为这个方向值得在这个季度内深入下去。因为语言任务的监督信号比控制任务更稀疏、更依赖上下文而自适应监督天然为这类问题提供了结构化的解决方案。8.3 关于“监督信号应该长什么样”的一点思考9 月底的时候我停下来重新审视了自己这两个多月的工作发现一个有意思的转变。最开始做 reward shaping 的时候我把它当成“一个可以迅速让训练跑起来的 trick”做自适应监督的时候我把它当成“一个提升蒸馏效率的组件”。但做完之后回头再看这两件事本质上是同一件事——都在解决一个核心问题监督信号的形态应该随训练阶段动态变化而不是一股脑堆给策略网络。reward shaping 是改变外界反馈的分布自适应监督是改变算法对既有反馈的使用权重。二者最终都指向一个问题策略学习过程中什么样的监督信号在什么时间点是有用的、什么是有害的。这个问题没有一个通用的答案但它值得每个做策略学习的人在实践中持续观察和积累。这也是我接下来计划把这两个方向合并成一个统一框架去做进一步探索的原因。框架目前还只存在于笔记里等实践成熟一些再单独整理一篇文章出来。9. 写在最后的实操体会这篇梳理写到这里差不多是全部内容了最后说几句这段时间经验性的东西。第一**不要把 reward shaping 当成“小技巧”。**它是一个和主目标强耦合的变量设计不好会彻底改变策略的优化路径。我踩过的最痛的一个坑就是最开始对 shaping 的威力认识不足导致前两周的实验方向整体偏掉。第二**自适应监督不是越复杂越好。**价值差异监督在最简单的任务上几乎没有带来额外收益反而多花了显存和训练时间。如果你的任务不是特别复杂置信度加权蒸馏已经完全够用不用盲目追求全量机制。第三**调参顺序比调参本身更重要。**我花了很多时间在单独调 shaping 幅度和退火速率上后来发现只要先把 critic 的更新频率稳定住再回来调 shaping 参数要调的变量少了一大半。很多参数之间是耦合的一个个单独调只会让问题变得更难排查。第四也是最重要的一点**做这类实验一定要保证消融实验和最终结果的可复现性。**因为这类实验的随机性非常强稍微改一下采样方式和随机种子结果变化就很大。建议从一开始就固定实验配置、固定随机种子甚至固定环境版本否则到后面分析的时候会非常痛苦。如果这篇进展梳理能帮到正在做策略蒸馏或奖励塑形方向的同学哪怕只是少踩一个坑我也觉得这一大篇没白写。有更多细节问题可以在评论区交流我看到了会尽量回复。