GAIL:把模仿学习变成 GAN,让策略「骗过」判别器
🎯 为什么重要:模仿学习的「两条老路」都有硬伤
2016 年前,从专家演示学策略有两条主路:
- 行为克隆(BC):把策略当天 Supervised Learning 训。问题:covariate shift 导致 compounding error——稍微偏一点点轨迹,进入训练时没见过的状态,接下来步步崩。
- 逆向强化学习(IRL):先推断 expert 的 cost function,再用 RL 解出最优策略。问题:极慢——内层要跑一遍 RL(论文原话:"extremely expensive to run, requiring reinforcement learning in an inner loop"),在 (state, action) 都高维的连续控制上根本跑不动。
作者的灵魂一问:「既然我们最终目标是学到策略,为什么非要绕道去学一个 cost function?」 这一问直接催生了 GAIL。
💡 核心思想:IRL+RL 的对偶,正好是「占用度匹配」
论文的数学关键洞察(Prop. 3.2)是这样的:
把「先 IRL 学 cost、再 RL 解策略」合起来看,它等价于一个直接的优化问题:
$$ \text{RL} \circ \text{IRL}_\psi(\pi_E) \;=\; \arg\min_{\pi \in \Pi} -H(\pi) + \psi^*(\rho_\pi - \rho_{\pi_E}) $$
其中 $\rho_\pi$ 是策略 $\pi$ 的占用度(occupancy measure)——也就是 agent 跑起来后「每个 (s, a) 被访问的折扣概率分布」。
关键是这个数学等价性:当 cost regularizer $\psi = \psi_{GA}$ 时(论文公式 13),$\psi^*$ 正好等于「最优二分类 log-loss」,也就是 Jensen-Shannon divergence。所以 GAIL 在最小化一个真正的度量,不像 apprenticeship learning 用线性 cost class(不能保证匹配任意复杂专家)。
🛠️ GAIL 算法的关键设计(论文 Algorithm 1)
| 步骤 | 心智 | 为什么必要 |
|---|---|---|
| ① 采样当前策略轨迹 | 用 π_θ 在仿真器跑一批 τ_i | 获得「假样本」给判别器训练 |
| ② 更新判别器 D_w | 梯度上升:让 D 给专家高分、给当前策略低分 | 训练一个「能区分真假」的分类器,它的 log 输出就是 cost function |
| ③ 更新策略 π_θ(TRPO) | 把 $\log D_w(s,a)$ 当 cost function,TRPO 步下降 | TRPO 的 KL 约束防止策略突变(对抗训练梯度噪声大) |
| ④ 可选:entropy 正则 λH(π) | 鼓励策略保持随机性 | 避免 mode collapse;论文在 Reacher 上 λ=10⁻³ 显著有效 |
判别器学的是 $D(s,a) \in (0,1)$,含义是「这个 (s,a) 来自专家的概率」。如果策略生成的 (s,a) 让 D 输出 接近 0,意味着 D 觉得「这肯定不是专家干的」——也就是 cost 高。所以 $\log D$ 是负数,越负 cost 越高。策略想骗过 D,等价于「让生成的 (s,a) 落在 D 给高分的位置」,也就是「让占用度向专家靠拢」。
📊 结果:在 9 个 MuJoCo 任务上一致优于 BC / FEM / GTAL
| 维度 | 数字(出自 PDF) |
|---|---|
| 评测任务 | 9 个物理控制任务:3 经典控制(cartpole / acrobot / mountain car)+ 6 MuJoCo(HalfCheetah / Hopper / Walker / Ant / Humanoid / Reacher) |
| baseline | Behavioral Cloning(BC)、Feature Expectation Matching(FEM)、Game-Theoretic Apprenticeship Learning(GTAL) |
| 整体表现 | 几乎总是超过所有 baseline,在 MuJoCo 上「几乎在所有数据集规模上都达到专家性能的至少 70%」 |
| Humanoid(高维最难) | BC 最多到 60%;GAIL 在所有测试的专家数据规模上达到「exact expert performance」 |
| Ant | FEM/GTAL 比「均匀随机策略」还差;GAIL 显著领先 |
| BC 唯一胜场 | Reacher 任务(BC 因任务结构反而样本更高效;GAIL 在此用 λ=10⁻³ entropy 正则显著改进) |
| 专家样本效率 | 4 条轨迹起即可在多数任务达到 70%+ 性能 |
| 环境交互 | 不特别高效——「与 TRPO 训练专家所需的样本量相当」(作者承认这是局限) |
🌐 在领域中的位置
GAIL 是「对抗式模仿学习」的开山之作。它把 GAN 思想引入决策学习,催生了一大批后续:AMP(Adversarial Motion Prior,NVIDIA 把 GAIL 用到角色动画 / 机器人步态)、DepthAware GAIL、Demo-Augmented RL(DAGR)等。在机器人灵巧操作、角色动画、自动驾驶领域都能看到 GAIL 的变体。关联线索:T11 灵巧操作、T04 运动先验(AMP→BFM)。具体后续方法可看 AMP。
❓ 常见误区
GAIL 是强化学习吗?
是,但「不直接」用环境 reward。GAIL 没有 reward signal,只有专家演示。它把「判别器的输出 log(D)」当作伪 cost,再用 TRPO 去 minimize。所以它「内部用了 RL 算法(TRPO)」,但「外部信号」是专家演示而非环境奖励——属于无 reward 的模仿学习。
为什么不直接用 BC?
BC 有covariate shift + compounding error:策略稍微走错一步,进入没见过的状态,后面步步崩。GAIL 直接匹配「整条轨迹的占用度」(命题 3.2),是 trajectory-level 而非 step-level 的目标,本质规避了 compounding error。论文 Fig.1 实验里,BC 在 Humanoid 上最多到 60%,GAIL 在所有数据规模下都达到 exact expert performance。
训练稳定吗?
不如 BC 稳定,是 GAIL 的主要短板。论文用 TRPO 的 KL 约束来抑制对抗训练的噪声。后续工作指出 GAIL 容易mode collapse(学到专家分布的一个 mode),所以后续如 DAC、SQIL、PWIL 都在改进稳定性。这也是为什么 AMP 在 motion 领域需要加大量先验约束。
它和 GAN 的对应关系是什么?
几乎一一对应:GAN 的「生成器 G」对应 GAIL 的「策略 π」;「判别器 D」对应 GAIL 的「D_w」;「真实数据分布」对应「专家占用度 ρ_E」;「假数据分布」对应「策略占用度 ρ_π」。唯一额外的是 GAIL 加了entropy 正则(鼓励 π 随机,避免崩到一个 mode),GAN 没有这玩意儿。