枢纽
输入模态proprioception

GAIL:把模仿学习变成 GAN,让策略「骗过」判别器

Jonathan Ho, Stefano Ermon(Stanford)。NeurIPS 2016 / arXiv:1606.03476。 imitationadversarialpolicy learning

🧠 一句话心智模型:模仿专家太「老实」会失败——BC(行为克隆)只学每一步「看起来像不像」、IRL(逆向 RL)绕一大圈先学 reward 再学策略。GAIL 把这两步合并折叠:训一个「判别器」区分「这是专家还是你」,再训一个「策略」专门骗过判别器——两个网络对抗博弈,策略自然学会和专家一样的占用度(occupancy measure)。整个流程跟 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) 被访问的折扣概率分布」。

老路:IRL → RL(两阶段,慢) 专家轨迹 τE state-action pairs IRL:学 cost c̃ "专家为什么这么做" RL:解最优策略 "给定 c̃, 跑 RL" Prop 3.2:合起来 = 占用度匹配 新路:GAIL(一步到位) 判别器 D_w(s, a) 区分 τE vs τπ log-loss / 二分类 最优损失 = Jensen-Shannon divergence D_JS(ρπ, ρE) 对抗 策略 π_θ(a|s) 骗过 D_w cost = log(D_w) TRPO 梯度步 + entropy bonus
图 1:GAIL 的「降维打击」。把 IRL+RL 两阶段对偶成「直接占用度匹配」,再用 GAN 的判别器-生成器博弈去近似它。D 的最优损失等价于 Jensen-Shannon 散度——一个真度量。

关键是这个数学等价性:当 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 的输出就是「cost」?
判别器学的是 $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)
baselineBehavioral Cloning(BC)、Feature Expectation Matching(FEM)、Game-Theoretic Apprenticeship Learning(GTAL)
整体表现几乎总是超过所有 baseline,在 MuJoCo 上「几乎在所有数据集规模上都达到专家性能的至少 70%
Humanoid(高维最难)BC 最多到 60%;GAIL 在所有测试的专家数据规模上达到「exact expert performance」
AntFEM/GTAL 比「均匀随机策略」还差;GAIL 显著领先
BC 唯一胜场Reacher 任务(BC 因任务结构反而样本更高效;GAIL 在此用 λ=10⁻³ entropy 正则显著改进)
专家样本效率4 条轨迹起即可在多数任务达到 70%+ 性能
环境交互不特别高效——「与 TRPO 训练专家所需的样本量相当」(作者承认这是局限)
关键洞察:GAIL 不是「在某个任务上赢了」,而是在 9 个差异很大的任务上一致地赢。说明赢的不是 trick,而是「把模仿学习化简为占用度匹配 + GAN 对抗」这个范式选择本身。它把 IL 从「需要先验特征工程」解放出来,使高维连续控制(Humanoid 376 维观测)下做无模型 IL 成为可能。

🌐 在领域中的位置

BC(1990s-) IRL / Apprenticeship Learning(2000s-2014,需要 cost class / feature 工程) GAIL(2016,对抗占用度匹配)⭐ DAC / SQIL / PWIL / X-GAIL(2018-,改进稳定 / 跨体 / 离线) AMP(2021,把 GAIL 搬到运动风格)

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 没有这玩意儿。