[控场AI]
· 5 分钟阅读· 2,648 字

先蒸馏再微调:起身控制器成功率从71%提升到94%

先蒸馏再微调:起身控制器成功率从71%提升到94%

先拆块训练子策略,再用DAgger蒸馏整个控制器,最后PPO微调,成功率从71%跃升至94.2%。

本文分享了一个2D布娃娃起身控制器的训练经验。直接端到端训练单个策略完全失败(160次测试0成功),开发者转而将任务拆分为四个子策略(仰卧、俯卧、手部交接、站立),并用规则控制器串联,成功率约71%后停滞。关键突破在于:先用DAgger将整个规则控制器(含切换逻辑)蒸馏进一个512x512网络,再用PPO在站立奖励上端到端微调,成功率跃升至94.2%(仰卧97.7%,俯卧90.7%)。实验表明64x64小网络也能达85%,收益不依赖模型容量。开发者通过多项防作弊检查排除了仿真漏洞,并指出仅限仿真2D场景、单次训练等局限。该方法为多阶段任务提供了一种绕过探索难题的实用范式。

从零训练一个网络为什么失败

强化学习社区经常讨论“端到端训练”的理想,但实际落地时,直接从零训练一个大网络解决多阶段任务往往并不可行。一位开发者在 Reddit 上分享了他用 MuJoCo 训练 2D 布娃娃起身控制器的经历:单个策略从未真正完成过起身——在 160 次测试中成功起身 0 次,甚至学到策略抬头的频率比随机 bang-bang 动作还低。

reddit source: Distill-then-finetune took my get-up controller from 71% to 94% (and why training one network from s

这个结果并不意外。起身任务包含多个物理阶段:从仰卧或俯卧状态启动、翻身、手部交接支撑、最终站立并保持稳定。每个阶段的最优动作分布差异很大,单一奖励函数很难同时引导所有阶段。开发者的尝试也印证了这一点:大网络从零训练在地板任务上反复失败。

拆分任务:四个策略加规则控制器

面对端到端训练的失败,他选择了工程化的拆解思路:把起身任务分成四个独立策略,各自拥有专属的奖励函数和课程设计——仰卧地板、俯卧地板、手部交接、站立。然后用一个基于规则的控制器把它们串联起来,处理策略之间的切换时机和条件。

这个组合方案让成功率逐步爬升到约 71%,但随后长期停滞。奖励微调、重新训练站立策略、调整交接时序门控,所有尝试都落在噪声范围内,没有带来实质突破。这是典型的“模块化系统瓶颈”:每个子策略单独看都在工作,但规则控制器的切换逻辑成了性能天花板。

DAgger(Dataset Aggregation) 是一种模仿学习算法,用于将专家策略(此处为规则控制器)的行为蒸馏到神经网络中。其核心思想是:在训练过程中,让当前学习到的策略与环境交互,产生新的状态分布,然后由专家在这些状态上给出动作标签,并将这些新样本加入数据集重新训练。相比简单的行为克隆,DAgger 能缓解“协变量偏移”问题——即学习策略偏离专家轨迹后遇到未见过状态导致的错误累积。具体流程为:初始化策略网络,运行当前策略收集轨迹,用专家标注这些轨迹上的动作,聚合数据并重新训练策略,迭代多次直至收敛。在本文中,开发者用 DAgger 将包含切换规则的完整控制器压缩进一个 512x512 网络,使网络不仅模仿子策略动作,还学会了何时切换策略,为后续 PPO 微调提供了高质量的初始策略。

蒸馏加微调:把整个控制器压进一个网络

转折点来自一个不同寻常的思路:不直接训练端到端策略,而是先用 DAgger 把整个规则控制器(包括切换规则)蒸馏进一个 512x512 的网络。蒸馏后的网络在规则同等水平上达到 74%,相当于复制了规则控制器的行为。

真正带来跃升的是下一步:用 PPO 在 20 秒“站立”奖励上对这个网络做端到端微调。成功率从 71% 跳到 94.2%,其中仰卧场景 97.7%,俯卧场景 90.7%,每侧用 600 个全新起始状态测试,规则控制器在相同随机种子上只有 70.8%。

更说个细节网络规模的实验:即使 64x64 的小网络也能达到 85%,256x256 就已经匹配 512x512 的表现。这说明蒸馏加微调的收益并不依赖模型容量,而是来自“先学会规则行为,再整体优化”的训练路径。

PPO(Proximal Policy Optimization) 是一种基于策略梯度的强化学习算法,因其稳定性和易用性成为连续控制任务的主流选择。PPO 通过限制每次策略更新的幅度来避免训练崩溃:它最大化一个裁剪后的替代目标函数,该函数约束新策略与旧策略的概率比在 [1-ε, 1+ε] 区间内(通常 ε=0.2),从而防止过大的策略变化。同时,PPO 使用广义优势估计(GAE)计算优势函数,结合值函数损失和熵奖励来平衡探索与利用。在本文中,开发者以蒸馏得到的网络为初始策略,用 PPO 在 20 秒“站立”奖励上进行端到端微调。由于初始策略已具备合理的起身行为,PPO 无需从随机探索开始,避免了稀疏奖励下的探索难题,从而快速将成功率从 71% 提升至 94.2%。

防作弊检查:结果不是假象

成功率大幅提升后,开发者主动做了一系列捷径排查。未物理的根力执行器从未被激活;把对手身体移开对结果没有影响;起身后施加 150-500 N 的推力也不改变表现;站立状态保持平稳,躯干高度标准差约 1 厘米。这些检查排除了策略利用仿真漏洞或外部辅助的可能性。

不过他也明确列出了局限:仅在仿真环境中验证、2D 场景、每个配置只跑了一次训练、起始状态来自环境自带的躺姿生成器,其他姿态尚未测试。这些诚实的边界说明让结论更可信,也提示读者不要过度外推。

捷径学习(Shortcut Learning) 指强化学习智能体在仿真环境中利用物理引擎的漏洞、奖励函数的设计缺陷或环境中的虚假关联,以非预期方式达成目标的现象。常见形式包括:利用未物理化的执行器施加外力、通过抖动或卡bug获得高奖励、依赖特定初始状态而非真正学会任务等。在本文中,开发者通过多项检查排除捷径:确认根力执行器从未激活(防止非法外力)、移开对手身体不影响结果(排除依赖外部物体)、施加 150-500 N 推力后仍保持稳定(验证鲁棒性)、站立时躯干高度标准差约 1 厘米(确认姿态稳定)。这些措施确保了成功率提升源于策略真正学会了起身,而非利用仿真瑕疵。

这套方法能复用到哪些场景

开发者在帖子最后提出了一个开放问题:是否有人在其他多阶段任务中见过同样的“先拆块、再蒸馏、最后端到端收尾”模式成功或失败。从工程角度看,这个模式的价值在于它绕过了端到端强化学习最困难的部分——探索。规则控制器提供了可靠的初始行为分布,蒸馏把这个分布迁移到单一网络,PPO 微调则在此基础上做全局优化。

对于机器人操作、多阶段导航、复杂装配等任务,这种思路可能比纯端到端训练更实用。但它的前提是你能先设计出一个可工作的规则系统——如果连规则方案都搭不出来,蒸馏也无从谈起。代码、文档和所有失败实验都开放在 GitHub 与 Hugging Face 上,开发者还提供了一个约 1.5 分钟即可运行的演示脚本,方便社区复现和验证。

#强化学习#蒸馏微调#MuJoCo#PPO#DAgger#端到端训练#布娃娃起身控制器
分享:

相关推荐