Behavior Cloning 与 PLID
目录
Behavior Cloning 把专家示范当作监督学习数据,但模型部署后会访问训练时没有覆盖的状态。本文从模仿学习的基本形式化出发,说明 covariate shift 与 compounding errors,并推导 PLID / DAgger 如何通过当前策略 rollout、再由专家补充标签,逐步修正状态分布偏移。
前置知识:概率、条件概率、监督学习损失,以及基本的 Markov Decision Process(MDP)概念。KL 散度的定义见 Active Learning。
模仿学习为什么需要交互式纠错
1. 问题设定
假设我们要训练一个机器人完成导航任务。专家已经执行了许多次任务,我们记录下它在每个状态下采取的动作。最直接的做法是把这些记录当作监督学习数据:输入状态,预测专家动作。
这种方法叫做 Behavior Cloning(行为克隆,BC)。它的直觉很简单:模型不需要自己发现策略,只需要学习专家已经展示过的行为。
问题在于,模型真正执行任务时,并不会永远停留在专家访问过的状态上。只要模型在某一步出现一个小误差,它就可能进入训练数据中很少出现、甚至从未出现过的状态。
模仿学习的困难不只是预测正确动作,而是策略会通过自己的动作改变未来访问的状态分布。
2. 形式化
我们用一个 MDP(Markov Decision Process,马尔可夫决策过程)描述环境。设:
- \mathcal S:状态空间;
- \mathcal A:动作空间;
- s_t\in\mathcal S:时间 t 的状态;
- a_t\in\mathcal A:时间 t 的动作;
- P(s_{t+1}\mid s_t,a_t):环境转移概率。
专家策略记为:
它表示专家在状态 s 下选择动作 a 的条件概率。待学习策略记为:
其中 \theta 是模型参数。
所有示范组成数据集:
这里还要区分策略和状态访问分布。策略 \pi(a\mid s) 描述给定状态下如何选择动作;d_\pi^t(s) 表示执行策略 \pi 后,在第 t 步处于状态 s 的概率。策略决定动作,动作又影响环境转移,因此策略也会间接决定未来访问哪些状态。
3. Behavior Cloning
3.1 训练目标
如果动作是离散的,可以使用最大似然或交叉熵损失:
如果动作是连续值,也可以使用均方误差:
两种损失表达的是同一个基本思想:在示范数据中的状态下,模型应该采取与专家相同或相近的动作。
3.2 状态分布
专家示范主要来自专家策略访问过的状态,因此 BC 实际优化的是:
BC 并不是在所有可能状态上学习专家策略,而是在专家访问过的状态分布上拟合专家动作。
4. 误差累积
4.1 状态偏移
专家执行任务时,状态来自 s_t\sim d_{\pi_E}^t;模型执行任务时,状态来自 s_t\sim d_{\pi_\theta}^t。一般来说:
训练时模型看到的是专家状态,部署时模型却会根据自己的动作进入新的状态。这就是 covariate shift(协变量偏移) 在序列决策中的表现。
4.2 状态递推
状态分布的递推关系为:
右侧三项分别表示当前状态概率、动作概率和环境转移概率。改变策略不仅会改变当前动作,还会改变之后所有时间步的状态分布。
4.3 误差连锁
一次小动作误差可能使模型进入示范数据很少覆盖的状态;在新状态下,模型的预测更不可靠;新的错误又使它进一步偏离专家轨迹。这就是 compounding errors(误差累积)。
因此,较低的单步验证误差并不必然意味着较高的任务成功率。
5. PLID
5.1 核心直觉
PLID 的全称是 Policy Learning via an Interactive Demonstrator。它与经典 DAgger 的核心思想一致:不只学习专家走过的正确轨迹,还要让当前策略自己运行;当它进入偏离状态时,请专家告诉它在这些状态下应该采取什么动作。
训练过程如下:
- 使用专家示范训练初始策略 \pi_0;
- 让 \pi_0 自己与环境交互;
- 收集模型实际访问的状态;
- 对这些状态询问专家动作;
- 将新数据加入原始示范数据;
- 重新训练策略并重复上述过程。
5.2 交互标注
第 m 轮中,模型负责产生状态:
专家负责提供动作标签:
于是得到新数据集:
这里的关键不是让模型模仿自己的动作,而是让模型探索自己会访问的状态,再让专家在这些状态上提供正确标签。
5.3 数据聚合
PLID / DAgger 通常保留旧数据:
然后在聚合数据上重新训练:
保留旧数据的作用是让模型同时学习专家正常执行时访问的状态,以及模型偏离后需要恢复的状态。
6. 数学目标
在第 m 轮,理想目标是在模型实际访问的状态上,让学习策略接近专家策略:
根据 KL 散度 的定义:
代入两个策略:
第一项只依赖固定的专家策略,与 \theta 无关。因此,最小化 KL 等价于最大化:
换成最小化形式,就是:
这仍然是 BC 的负对数似然损失。真正发生变化的是期望所在的状态分布:
- BC:主要在 s\sim d_{\pi_E} 上学习;
- PLID:不断加入 s\sim d_{\pi_m} 的模型访问状态。
因此可以把 PLID 概括为:
不改变“如何拟合专家动作”的基本损失,而是改变“在哪些状态上获得专家标签”。
7. 训练流程
一个更接近工程实践的训练闭环是:
专家示范
↓
数据清洗与时间对齐
↓
初始化 Behavior Cloning
↓
当前策略 rollout
↓
记录失败状态与恢复状态
↓
专家接管或提供 correction
↓
数据聚合与重新训练
↓
离线评估 + 在线 rollout
理论中的“询问专家”在真实系统中可能对应:
- 人类实时接管;
- 对失败片段进行离线标注;
- 规则系统提供动作 correction;
- 更强模型生成辅助标签;
- 从日志中筛选高风险状态。
8. 适用条件
8.1 专家反馈成本
PLID 需要专家为模型新访问的状态提供标签。如果模型经常进入危险或复杂状态,标注成本可能很高。
8.2 偏离状态
专家不仅要能展示正常轨迹,还要能回答:模型已经犯错后,现在应该如何恢复。如果专家只提供理想轨迹,PLID 的优势会受到限制。
8.3 状态信息
如果当前观测无法判断正确动作,问题可能不是数据覆盖不足,而是部分可观测性、历史信息缺失或状态表示不充分。
8.4 评估指标
动作预测准确率只衡量单步模仿误差。实际部署还需要评估:
- 任务成功率;
- 长时间 rollout 稳定性;
- 偏离后的恢复能力;
- 高风险状态下的安全性;
- 专家接管率与数据回流效率。
9. 总结
Behavior Cloning 把专家示范转化为监督学习问题,但它默认训练数据覆盖了模型执行时会遇到的状态。这个假设在序列决策中通常不成立。
模型的一次小动作误差可能改变未来状态分布,并造成连续的误差累积。PLID / DAgger 的解决方案是让当前策略自己探索,再由专家在模型实际访问的状态上补充动作标签,最后通过数据聚合重新训练策略。
从数学上看,PLID 仍然使用类似 BC 的动作损失,但把训练状态分布从专家访问分布扩展到了模型访问分布:
这也是从 Behavior Cloning 走向 Distribution Matching 的起点:当专家持续标注成本过高时,下一步是不再逐个纠正动作,而是直接让模型产生与专家相似的行为分布。下一篇笔记讨论 Distribution Matching 与 GAIL。