带Agent的项目跑了一个多月,模型在仿真环境里已经能像模像样地完成仓储拣选任务,一换到真实机器人上就开始原地转圈,动作延迟忽高忽低,连最基本的抓取都频繁失败。我盯着终端里飘红的reward曲线,第一反应是参数没调好,第二反应是传感器噪声太大,折腾了三天,最后才意识到问题不在强化学习本身,而在源域和目标域之间那道看不见的鸿沟——仿真里的物理引擎、光照、摩擦系数和真实世界差了不止一个量级。那会儿手头正好有之前另一个项目训练好的导航模型,我试着用迁移学习把那个模型的中间层特征拿来初始化当前Agent的策略网络,才真正把训练拉回正轨。
迁移学习在Agent里的作用,说白了就是别让Agent每次从零开始学。现实中的Agent任务往往数据昂贵,采集一次交互轨迹要花费大量人力物力,尤其是在机器人、自动驾驶这类安全敏感的场景里,随机策略产生的探索动作很可能直接撞墙。而迁移学习的关键在于,我们能不能把在源任务(比如仿真、或者另一个相似任务)中学到的表示、策略、甚至奖励函数的结构,搬到目标任务上来,让Agent少走弯路。但这里坑很深,绝不是把预训练权重加载进来就万事大吉。
先说行为克隆那类最直接的迁移。拿一个专家模型(无论是人类演示还是已经训练好的策略)生成的数据集,用监督学习让Agent模仿动作分布。我在做机械臂插孔任务时试过这种路数,源域是同一个机械臂在A工位上的示教数据,目标域是B工位,视觉角度和零件公差稍有变化。直接行为克隆的结果是,Agent在源域数据分布内表现完美,一旦遇到分布外的状态就彻底懵掉,动作变得非常僵硬。后来我加了一个适应性模块,用域随机化在源域里模拟B工位的各种变化,再在少量真实目标域数据上微调最后的动作头,效果立刻好了。这里踩过的坑是:微调时别把学习率设太高,否则之前学到的良好流形直接被几个样本带偏,我见过loss爆炸到NaN的