公司动态

第307篇 模仿学习——从示范中学习

📅 2026/8/31 7:00:50
第307篇 模仿学习——从示范中学习
前面六篇把强化学习的核心算法过了一遍。RL的核心问题是需要大量的试错和奖励信号来学习。但在机器人领域试错成本很高可能损坏硬件奖励信号也很难设计。有没有一种方法让机器人看看专家怎么做的直接学会这就是模仿学习Imitation Learning的思路。不设计奖励函数让机器人通过观察专家的示范来学习行为策略。人类学开车、学做饭、学打球很多技能都是这么学会的。行为克隆最直接的模仿行为克隆Behavior Cloning, BC是最简单的模仿学习方法。它的思路跟监督学习一模一样收集专家示范数据(s_t, a_t)训练一个网络从状态s预测动作a。# 行为克隆的训练流程 # 1. 专家示范数据集: {(s_1, a_1), (s_2, a_2), ..., (s_N, a_N)} # 2. 训练策略网络: loss ||π_θ(s) - a||^2 (MSE) # 3. 部署时: a π_θ(s_current)行为克隆的优点是简单。数据收集、训练、部署整个流程跟监督学习没区别。你可以用任何监督学习的技术来改进它——数据增强、正则化、更好的网络结构。对于简单的任务比如车道保持、直线行走行为克隆的效果就够用了不需要更复杂的方法。数据收集是行为克隆中最关键的环节。专家示范要覆盖足够多的场景和边界情况。如果专家只在晴天开过车策略遇到雨天就抓瞎。实践中一般要求示范数据覆盖任务中可能遇到的大部分状态。对于机器人操作任务通常收集200到1000次示范每次示范包含几百到几千步的数据。网络结构的选择也很重要。对于低维状态输入关节角度、IMU数据几层全连接网络就够了。对于视觉输入CNN或者Transformer做特征提取后面接MLP输出动作。动作的表示方式也有讲究直接回归连续值MSE loss简单但可能不够精确离散化后用分类loss交叉熵效果更好因为分类任务比回归任务更容易学。RT-1就是把动作离散化成token然后用类似语言模型的方式预测。但行为克隆有个致命的问题分布偏移distribution shift。训练时状态数据是专家产生的。部署时策略的微小误差会导致机器人偏离专家的轨迹进入从未见过的状态。在这些状态上策略的预测不可靠误差越来越大最终完全失控。想象一下学开车。教练专家开的时候一直在道路中间。你策略学了一个大致正确的策略但稍微偏了一点。偏离后你看到的路边景象是教练从没展示过的你不知道该怎么处理越偏越远最后开到了沟里。DAgger修正分布偏移DAggerDataset Aggregation是2011年的工作专门解决行为克隆的分布偏移问题。它的核心思想是既然问题是部署时遇到的状态跟训练时不一样那就在部署时收集新状态的数据加到训练集里重新训练。DAgger的迭代流程是这样的。第一轮用专家策略收集数据训练初始策略π_1。第二轮用π_1在环境中执行同时专家在每一步给出正确的动作或者纠正π_1的动作。把新收集的数据加到训练集里重新训练得到π_2。重复这个过程策略越来越好遇到的状态也越来越多训练集越来越全面。DAgger的关键假设是每一步都需要专家在线给出指导。这在某些场景下不现实——比如你让一个机器人学做手术不可能每步都请个外科医生在旁边纠正。有些变体可以缓解这个限制。比如用仿真中的最优策略作为虚拟专家或者用预训练的策略来自动标注。QB-DaggerQuery Batch DAgger减少了对专家实时响应的要求——策略先自己跑一段轨迹然后让专家批量标注关键决策点。还有Self-Dagger用策略自身的历史最优版本作为伪专家来标注完全不需要人类参与。DAgger的理论保证比BC强很多。在一定的假设下专家是Lipschitz连续的DAgger的遗憾界是O(1/√N)其中N是迭代轮数。而BC的遗憾界是O(H²·N)其中H是轨迹长度——随H指数增长。这个理论差距在实践中非常明显BC在长horizon任务上几乎不可用DAgger能处理更长的轨迹。GAIL对抗模仿学习GAILGenerative Adversarial Imitation Learning是2016年的工作把GAN的思路引入了模仿学习。GAIL不直接预测动作而是训练一个判别器来区分专家的行为和策略的行为。判别器输入(s, a)对输出这是专家示范的概率。策略的目标是骗过判别器——让自己的行为看起来像专家。# GAIL的训练框架 # 判别器D: 输入(s, a)输出像专家的概率 # 策略π: 输入s输出动作a # D的目标: 正确区分专家数据和策略数据 # π的目标: 让D判断策略数据为专家 # 类似GAN的minimax博弈GAIL的好处是不需要逐步匹配专家的动作而是从全局上让策略的行为分布接近专家。这在一定程度上缓解了分布偏移的问题。但GAN的训练 notoriously 不稳定GAIL也有这个问题。判别器和策略的博弈可能不收敛或者收敛到一个不好的平衡点。GAIL的一个有趣副产品是训练好的判别器本质上就是一个奖励函数——它告诉策略这个行为有多像专家。这意味着你可以先用GAIL学到一个奖励函数再用标准RL来优化策略。这种方式结合了模仿学习和RL的优点不需要手动设计奖励函数又能利用RL的强大优化能力。从GAIL发展出来的一系列工作还包括AIRLAdversarial Inverse Reinforcement Learning和FAIRL。AIRL改进了判别器的结构让学到的奖励函数具有更好的可迁移性——在一个任务上学到的奖励可以迁移到类似的任务上。FAIRL则解决了GAIL中判别器梯度消失的问题训练更稳定。模仿学习在机器人中的应用模仿学习在机器人领域有很多成功应用。自动驾驶中Waymo早期就探索过用行为克隆来学习驾驶策略——收集人类驾驶员的数据训练端到端的控制策略。机器人操作中BCRL的组合越来越流行——先用行为克隆从少量人类示范中学习一个初始策略再用RL微调。Google的RT系列模型RT-1, RT-2本质上也是模仿学习——用大量的机器人操作示范数据训练一个大规模的策略模型。这些模型能执行多种操作任务展示了模仿学习在大规模数据下的潜力。在机器人抓取任务中行为克隆仍然是最常用的方法之一。收集几百次成功抓取的示范数据训练一个从图像到关节角度的映射网络就能得到一个不错的抓取策略。简单、有效、工程上容易实现。面试要点行为克隆的分布偏移问题。这是模仿学习面试必考的内容。你要能解释为什么分布偏移会发生训练和测试的状态分布不同以及DAgger和GAIL分别怎么解决这个问题。模仿学习vs强化学习。面试中经常被问到什么时候用模仿学习什么时候用RL。如果专家示范容易获得且任务明确用模仿学习如果需要自己探索最优行为或者奖励信号容易定义用RL。很多实际项目是两者结合——先用模仿学习获得初始策略再用RL优化。示范数据的质量。专家示范的质量直接影响模仿学习的效果。噪声大的示范专家也不是每次都成功会导致策略学到错误的行为。解决办法包括只选成功的示范、用加权的方式降低失败示范的权重、或者用逆强化学习从次优示范中推断真实的奖励函数。给你的建议入门模仿学习建议从行为克隆开始。在自动驾驶的CARLA仿真器或者机器人的Gym环境中收集一些专家示范数据训练一个简单的MLP策略。跑通之后你会对分布偏移有直观的感受。然后实现DAgger对比跟纯BC的效果差异。如果你想挑战自己可以试试GAIL或者它的改进版本AIRL。在实际项目中模仿学习通常不是孤立使用的。最常见的组合是先用行为克隆从人类示范中学一个初始策略然后用RL比如PPO在仿真中进一步优化最后用Sim2Real迁移到真实机器人。这个pipeline在工业界非常普遍面试时能讲清楚这个流程会让人觉得你有实际项目经验。代码方面imitation库github.com/HumanCompatibleAI/imitation提供了多种模仿学习算法的实现基于Stable-Baselines3用起来很方便。上一篇第306篇 强化学习在机器人控制中的应用下一篇预告第308篇 逆强化学习——从行为中推断目标