diff --git a/assets/posts/distribution-matching-gail/gail_pipeline.png b/assets/posts/distribution-matching-gail/gail_pipeline.png new file mode 100644 index 0000000..4d1292e Binary files /dev/null and b/assets/posts/distribution-matching-gail/gail_pipeline.png differ diff --git a/blog/active-learning/index.html b/blog/active-learning/index.html index e72d587..c45e361 100644 --- a/blog/active-learning/index.html +++ b/blog/active-learning/index.html @@ -77,7 +77,7 @@

3. KL 散度

&=H[p,q]-H[p]. \end{aligned}

KL 散度非负,两个分布一致时为零。它一般不对称,因此不是通常意义上的距离。如果某个结果在 p 下概率非零、在 q 下概率为零,KL 散度会趋于无穷大。

-

这个工具会在 BALD 中再次出现:我们不仅关心预测是否模糊,也关心不同模型给出的预测有多不同。

+

这个工具会在 BALD 中再次出现:我们不仅关心预测是否模糊,也关心不同模型给出的预测有多不同。后续模仿学习笔记还会用 KL 比较专家与学习策略的动作分布,见 Behavior Cloning 与 PLID。

4. Query-by-Committee

单个模型的预测可能不够可靠。Query-by-Committee(QBC)使用一个包含 C 个模型的委员会,让它们分别预测同一个候选样本:

p(y\mid x,\theta_{1,t}),\ldots,p(y\mid x,\theta_{C,t}).
@@ -150,7 +150,7 @@

6. 两类不确定性

实际使用还需要留意三点。首先,BALD 的质量取决于后验或其近似是否可信;少数偏差相似的模型,并不一定能代表完整的参数不确定性。其次,信息增益不等于测试误差下降,三种方法都不保证选中带来最大性能提升的样本。最后,如果一次选择多个样本,直接取单点分数最高的若干个,可能获得大量重复信息;批量选样还需要考虑样本之间的关系。

这三种方法关注的对象不同:Uncertainty Sampling 看当前预测有多模糊,QBC 看委员会成员有多不一致,BALD 看标签预计能为参数带来多少信息。理解这个差别,比单独记住某个采集公式更有助于判断方法适合什么场景。

参考资料

- + diff --git a/blog/behavior-cloning-plid/index.html b/blog/behavior-cloning-plid/index.html new file mode 100644 index 0000000..fa194c3 --- /dev/null +++ b/blog/behavior-cloning-plid/index.html @@ -0,0 +1,210 @@ + + + + + + + + + + + + Behavior Cloning 与 PLID · Musicaldg + + + + + + + + +
+
+ Musicaldg + +
+
← 全部文章

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):环境转移概率。
+

专家策略记为:

+
\pi_E(a\mid s)
+

它表示专家在状态 s 下选择动作 a 的条件概率。待学习策略记为:

+
\pi_\theta(a\mid s)
+

其中 \theta 是模型参数。

+

所有示范组成数据集:

+
\mathcal D_E += +\left\{ +(s_n,a_n) +\right\}_{n=1}^{N}
+

这里还要区分策略和状态访问分布。策略 \pi(a\mid s) 描述给定状态下如何选择动作;d_\pi^t(s) 表示执行策略 \pi 后,在第 t 步处于状态 s 的概率。策略决定动作,动作又影响环境转移,因此策略也会间接决定未来访问哪些状态。

+

3. Behavior Cloning

+

3.1 训练目标

+

如果动作是离散的,可以使用最大似然或交叉熵损失:

+
\mathcal L_{\mathrm{BC}}(\theta) += +-\frac{1}{N} +\sum_{n=1}^{N} +\log \pi_\theta(a_n\mid s_n)
+

如果动作是连续值,也可以使用均方误差:

+
\mathcal L_{\mathrm{BC}}(\theta) += +\frac{1}{N} +\sum_{n=1}^{N} +\left\| +\hat a_\theta(s_n)-a_n +\right\|_2^2
+

两种损失表达的是同一个基本思想:在示范数据中的状态下,模型应该采取与专家相同或相近的动作。

+

3.2 状态分布

+

专家示范主要来自专家策略访问过的状态,因此 BC 实际优化的是:

+
\mathbb E_{s\sim d_{\pi_E}} +\left[ +\ell\bigl(\pi_\theta(s),\pi_E(s)\bigr) +\right]
+

BC 并不是在所有可能状态上学习专家策略,而是在专家访问过的状态分布上拟合专家动作。

+

4. 误差累积

+

4.1 状态偏移

+

专家执行任务时,状态来自 s_t\sim d_{\pi_E}^t;模型执行任务时,状态来自 s_t\sim d_{\pi_\theta}^t。一般来说:

+
d_{\pi_E}^t\neq d_{\pi_\theta}^t
+

训练时模型看到的是专家状态,部署时模型却会根据自己的动作进入新的状态。这就是 covariate shift(协变量偏移) 在序列决策中的表现。

+

4.2 状态递推

+

状态分布的递推关系为:

+
d_\pi^{t+1}(s') += +\sum_{s\in\mathcal S} + d_\pi^t(s) +\sum_{a\in\mathcal A} + \pi(a\mid s)P(s'\mid s,a)
+

右侧三项分别表示当前状态概率、动作概率和环境转移概率。改变策略不仅会改变当前动作,还会改变之后所有时间步的状态分布。

+

4.3 误差连锁

+

一次小动作误差可能使模型进入示范数据很少覆盖的状态;在新状态下,模型的预测更不可靠;新的错误又使它进一步偏离专家轨迹。这就是 compounding errors(误差累积)。

+

因此,较低的单步验证误差并不必然意味着较高的任务成功率。

+

5. PLID

+

5.1 核心直觉

+

PLID 的全称是 Policy Learning via an Interactive Demonstrator。它与经典 DAgger 的核心思想一致:不只学习专家走过的正确轨迹,还要让当前策略自己运行;当它进入偏离状态时,请专家告诉它在这些状态下应该采取什么动作。

+

训练过程如下:

+
  1. 使用专家示范训练初始策略 \pi_0;
  2. 让 \pi_0 自己与环境交互;
  3. 收集模型实际访问的状态;
  4. 对这些状态询问专家动作;
  5. 将新数据加入原始示范数据;
  6. 重新训练策略并重复上述过程。
+

5.2 交互标注

+

第 m 轮中,模型负责产生状态:

+
s\sim d_{\pi_m}
+

专家负责提供动作标签:

+
a\sim \pi_E(\cdot\mid s)
+

于是得到新数据集:

+
\mathcal D_m += +\left\{ +(s_{m,n},a_{m,n}) +\right\}_{n=1}^{N}
+

这里的关键不是让模型模仿自己的动作,而是让模型探索自己会访问的状态,再让专家在这些状态上提供正确标签。

+

5.3 数据聚合

+

PLID / DAgger 通常保留旧数据:

+
\mathcal D_{0:m} += +\bigcup_{i=0}^{m}\mathcal D_i
+

然后在聚合数据上重新训练:

+
\theta_{m+1} += +\arg\min_\theta +\sum_{(s,a)\in\mathcal D_{0:m}} +- +\log\pi_\theta(a\mid s)
+

保留旧数据的作用是让模型同时学习专家正常执行时访问的状态,以及模型偏离后需要恢复的状态。

+

6. 数学目标

+

在第 m 轮,理想目标是在模型实际访问的状态上,让学习策略接近专家策略:

+
\hat\theta_{m+1} += +\arg\min_\theta +\mathbb E_{s\sim d_{\pi_m}} +\left[ +D_{\mathrm{KL}} +\left( +\pi_E(\cdot\mid s) +\|\pi_\theta(\cdot\mid s) +\right) +\right]
+

根据 KL 散度 的定义:

+
D_{\mathrm{KL}}(p\|q) += +\mathbb E_{x\sim p} +\left[ +\log\frac{p(x)}{q(x)} +\right]
+

代入两个策略:

+
\begin{aligned} +&D_{\mathrm{KL}} +\left( +\pi_E(\cdot\mid s) +\|\pi_\theta(\cdot\mid s) +\right)\\ +&= +\mathbb E_{a\sim\pi_E(\cdot\mid s)} +\left[ +\log\pi_E(a\mid s) +- +\log\pi_\theta(a\mid s) +\right] +\end{aligned}
+

第一项只依赖固定的专家策略,与 \theta 无关。因此,最小化 KL 等价于最大化:

+
\mathbb E_{\substack{s\sim d_{\pi_m}\\a\sim\pi_E(\cdot\mid s)}} +\left[ +\log\pi_\theta(a\mid s) +\right]
+

换成最小化形式,就是:

+
-\mathbb E_{\substack{s\sim d_{\pi_m}\\a\sim\pi_E(\cdot\mid s)}} +\left[ +\log\pi_\theta(a\mid s) +\right]
+

这仍然是 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 的动作损失,但把训练状态分布从专家访问分布扩展到了模型访问分布:

+
\text{BC:}\quad s\sim d_{\pi_E}
+
\text{PLID:}\quad s\sim d_{\pi_m}
+

这也是从 Behavior Cloning 走向 Distribution Matching 的起点:当专家持续标注成本过高时,下一步是不再逐个纠正动作,而是直接让模型产生与专家相似的行为分布。下一篇笔记讨论 Distribution Matching 与 GAIL。

+

参考资料

+
+ +
+ + diff --git a/blog/distribution-matching-gail/index.html b/blog/distribution-matching-gail/index.html new file mode 100644 index 0000000..196b21a --- /dev/null +++ b/blog/distribution-matching-gail/index.html @@ -0,0 +1,215 @@ + + + + + + + + + + + + Distribution Matching 与 GAIL · Musicaldg + + + + + + + + +
+
+ Musicaldg + +
+
← 全部文章

Distribution Matching 与 GAIL

目录

Behavior Cloning 直接拟合专家动作,PLID 则让专家在模型实际访问的状态上补充标签。若不能持续询问专家,能否仍让模型产生与专家相似的轨迹或状态—动作分布?本文从轨迹概率、Forward KL 与状态—动作分布出发,说明 GAIL 如何用判别器间接完成分布匹配。

+

系列上一篇:Behavior Cloning 与 PLID。前置知识还包括 MDP、条件概率,以及 Active Learning 中的 KL divergence。

+

模仿学习如何匹配行为分布

+

1. 专家反馈成本

+

上一篇用 PLID 解决状态分布偏移:当前策略自己 rollout,专家再为实际遇到的状态提供动作标签。方法直接有效,但模型每探索一批新状态,就可能需要专家参与标注。于是产生了另一个问题:

+

如果只有专家轨迹,而没有专家对每个新状态的逐一纠正,能否仍然让模型学到整体上类似专家的行为?

+

Distribution Matching(分布匹配)改变了比较对象。BC 主要比较给定状态下的动作;Distribution Matching 则试图比较模型与专家产生的轨迹,或者比较它们访问状态—动作对的分布。

+

2. 轨迹分布

+

一条长度为 T 的轨迹写成:

+
\tau=(s_0,a_1,s_1,a_2,s_2,\ldots,a_T,s_T)
+

给定初始状态分布 p(s_0)、策略 \pi 和环境转移概率 P,轨迹概率可以按链式法则分解为:

+
p_\pi(\tau) += + p(s_0) + \prod_{t=1}^{T} + \pi(a_t\mid s_{t-1}) + P(s_t\mid s_{t-1},a_t)
+

每一项分别表示:初始状态的概率、策略选择动作的概率,以及环境完成状态转移的概率。

+

专家产生轨迹分布 p_E(\tau),学习策略产生轨迹分布 p_{\pi_\theta}(\tau)。最直接的目标是:

+
p_{\pi_\theta}(\tau)\approx p_E(\tau)
+

但“两个分布接近”仍然需要选择具体的 divergence。

+

3. Forward KL

+

3.1 最大似然

+

考虑专家轨迹分布与模型轨迹分布之间的 Forward KL:

+
D_{\mathrm{KL}} +\left( + p_E(\tau)\|p_{\pi_\theta}(\tau) +\right)
+

展开 KL divergence:

+
\begin{aligned} +&D_{\mathrm{KL}} +\left( + p_E(\tau)\|p_{\pi_\theta}(\tau) +\right)\\ +&= +\mathbb E_{\tau\sim p_E} +\left[ +\log p_E(\tau)-\log p_{\pi_\theta}(\tau) +\right] +\end{aligned}
+

第一项与 \theta 无关,所以最小化 Forward KL 等价于最大化专家轨迹在模型下的对数概率:

+
\hat\theta += +\arg\max_\theta +\mathbb E_{\tau\sim p_E} +\left[ +\log p_{\pi_\theta}(\tau) +\right]
+

有限样本下,这就是轨迹级最大似然。

+

3.2 与 BC 的关系

+

将轨迹概率代入:

+
\begin{aligned} +\log p_{\pi_\theta}(\tau) +={}& +\log p(s_0)\\ +&+\sum_{t=1}^{T}\log\pi_\theta(a_t\mid s_{t-1})\\ +&+\sum_{t=1}^{T}\log P(s_t\mid s_{t-1},a_t) +\end{aligned}
+

如果专家和模型使用相同的环境动力学,且初始状态分布不依赖 \theta,那么环境相关的两部分都是常数。剩下的优化目标是:

+
\hat\theta += +\arg\max_\theta +\sum_{n=1}^{N} +\sum_{t=1}^{T} +\log\pi_\theta(a_{n,t}\mid s_{n,t-1})
+

这正是专家轨迹上的 Behavior Cloning。

+

因此,必须保留一个重要结论:

+

把 BC 写成完整轨迹的 Forward KL,并不会自动解决状态分布偏移;如果期望仍然来自专家轨迹,模型仍然主要在专家状态上学习。

+

4. 状态—动作分布

+

4.1 联合分布

+

在某个时间步,状态—动作联合分布可以写成:

+
p_\pi(s,a)=d_\pi(s)\pi(a\mid s)
+

其中 d_\pi(s) 表示策略 \pi 诱导的状态访问分布。

+

对同一时间步的联合分布使用 KL divergence,可以得到链式分解:

+
\begin{aligned} +&D_{\mathrm{KL}} +\left( + p_E(s,a)\|p_\theta(s,a) +\right)\\ +&= +D_{\mathrm{KL}} +\left( + d_E(s)\|d_\theta(s) +\right)\\ +&\quad+ +\mathbb E_{s\sim d_E} +\left[ +D_{\mathrm{KL}} +\left( + \pi_E(\cdot\mid s)\|\pi_\theta(\cdot\mid s) +\right) +\right] +\end{aligned}
+

右侧第一项是状态访问分布匹配,第二项是给定状态下的动作匹配,也就是 BC 的核心。

+

这给出一个清晰的解释:

+

联合分布匹配 = 状态访问频率匹配 + 给定状态下的动作匹配。

+

4.2 Occupancy measure

+

在无限时域或不同时间步混合的场景下,更常用的是 discounted occupancy measure:

+
\rho_\pi(s,a) += +(1-\gamma) +\sum_{t=0}^{\infty} +\gamma^t +P_\pi(s_t=s,a_t=a)
+

它描述策略在整个执行过程中访问某个状态—动作对的总体频率,并使用 \gamma 对较晚时间步进行折扣。

+

需要注意:匹配每个时间步的边缘分布,不一定等价于匹配完整轨迹中的所有长程依赖。GAIL 更准确的理论对象通常是 occupancy measure,而不是简单地把每条轨迹当成一个独立分类样本。

+

5. KL 的方向

+

KL divergence 是有方向的(基本定义见 Active Learning)。Forward KL D_{\mathrm{KL}}(p_E\|p_\theta) 从专家分布出发,要求模型覆盖专家分布中的区域;如果模型遗漏了专家行为,惩罚会很大。

+

Reverse KL D_{\mathrm{KL}}(p_\theta\|p_E) 则从模型分布出发,更强地惩罚模型访问专家概率很低的区域。它常被解释为更偏向选择高密度模式,但在多峰分布和有限数据下也可能出现 mode-seeking 行为。

+

这两种 KL 的区别不能简单归结为“哪个更好”:选择哪种方向,取决于我们更关心覆盖专家行为,还是避免模型产生专家分布之外的行为。真实系统中还必须考虑分布支持、估计误差和 rollout 成本。

+

6. GAIL

+

6.1 二分类目标

+

当专家分布和模型分布只有样本、没有容易计算的密度函数时,可以训练一个判别器判断样本来自哪里。

+

令:

+
D_\psi(s,a)\in(0,1)
+

表示状态—动作对 (s,a) 来自专家的概率。判别器的二分类损失为:

+
\begin{aligned} +\mathcal L_D(\psi) +={}& +-\mathbb E_{(s,a)\sim p_E} +\left[ +\log D_\psi(s,a) +\right]\\ +&- +\mathbb E_{(s,a)\sim p_{\pi_\theta}} +\left[ +\log\left(1-D_\psi(s,a)\right) +\right] +\end{aligned}
+

专家样本的标签是 1,模型样本的标签是 0。最小化这个损失会让判别器越来越善于区分两种行为。

+

6.2 策略奖励

+

策略的目标与判别器相反:它希望生成让判别器难以区分的状态—动作对。

+

在固定判别器时,可以把判别器输出转化为策略奖励。例如采用:

+
r_\psi(s,a) += +-\log\left(1-D_\psi(s,a)\right)
+

当判别器认为 (s,a) 更像专家时,D_\psi(s,a) 较大,对应的奖励也较高。于是策略可以通过强化学习最大化:

+
\max_\theta +\mathbb E_{\tau\sim p_{\pi_\theta}} +\left[ +\sum_t r_\psi(s_t,a_t) +\right]
+

训练过程交替进行:

+
  1. 用专家数据和当前策略 rollout 数据训练判别器;
  2. 固定判别器,把它的输出当作奖励;
  3. 用 policy gradient、PPO 等方法更新策略;
  4. 让新策略继续 rollout,再更新判别器。
+

这也是 GAIL(Generative Adversarial Imitation Learning)的核心闭环。

+

6.3 密度比

+

固定策略分布,令 x 表示一个轨迹或状态—动作对。判别器在 x 上的损失贡献为:

+
\mathcal J_x(D) += +-p_E(x)\log D(x) +-p_\theta(x)\log(1-D(x))
+

对 D(x) 求导并令其为零:

+
D^*(x) += +\frac{p_E(x)}{p_E(x)+p_\theta(x)}
+

因此:

+
\log\frac{D^*(x)}{1-D^*(x)} += +\log\frac{p_E(x)}{p_\theta(x)}
+

这说明最优判别器的 log-odds 等于专家分布与模型分布的 log density ratio。我们不必显式计算两个高维分布的密度,只需训练一个分类器,就可以间接获得分布比值信息。

+

6.4 JS 散度

+

在理想判别器条件下,将最优判别器代回对抗目标,得到的是与 Jensen–Shannon divergence(JS 散度)相关的目标,而不是简单的 Reverse KL。

+

因此,GAIL 应理解为:

+
Distribution Matching
+        ↓
+Two-sample classification
+        ↓
+Adversarial training
+        ↓
+Occupancy measure matching
+

7. 训练边界

+

GAIL 不需要专家为每个新状态提供动作标签,但它并没有消除数据和交互成本:

+
  • 当前策略仍然需要在环境中 rollout;
  • 判别器需要同时看到专家样本和模型样本;
  • 策略更新通常需要强化学习算法;
  • 判别器可能过拟合有限的专家数据;
  • 判别器学到的信号可能被策略 exploit;
  • 离线专家数据与在线环境状态之间可能存在支持不匹配。
+

一个更完整的工程流程是:

+

GAIL 的交替训练闭环

+

GAIL 的交替训练闭环

+

还需要检查几个理论与实际不完全对齐的地方:

+
  1. 部分可观测性:如果状态没有包含必要历史,判别器可能把历史差异错误地归因于当前动作。
  2. 动作延迟:专家标签、观测和动作可能存在时间错位。
  3. 专家多样性:单一判别器可能把某一种专家风格误认为唯一正确行为。
  4. 奖励 hacking:策略可能找到让判别器失效的行为,而不是完成真正任务。
  5. 安全约束:探索和 rollout 不能无限制地尝试危险状态。
  6. 评估问题:判别器准确率下降不等于任务成功率提高。
+

8. 总结

+

Behavior Cloning 主要在专家访问过的状态上匹配动作。PLID 让模型主动探索,再由专家标注模型实际遇到的状态。Distribution Matching 则进一步尝试匹配专家和模型产生的状态—动作分布。

+

但直接最小化轨迹 Forward KL,在固定环境动力学下可能退化为专家轨迹上的 BC。因此,真正需要匹配的是策略诱导的状态访问分布或 occupancy measure。

+

GAIL 用一个二分类器区分专家与模型,再把判别器信号转化为策略奖励。它的关键数学事实是:最优判别器的 log-odds 等于两个分布的 log density ratio;在理想条件下,对抗目标与 JS divergence 相关。

+

如果说 BC 是“模仿专家在这个状态下做什么”,PLID 是“让专家纠正模型实际遇到的状态”,那么 GAIL 更接近于:

+

让模型产生整体上无法被判别器与专家区分的行为。

+

参考资料

+
+ +
+ + diff --git a/blog/index.html b/blog/index.html index ab6cf4e..fc7aef3 100644 --- a/blog/index.html +++ b/blog/index.html @@ -23,7 +23,7 @@ Musicaldg -

文章

约 12 分钟

Active Learning

介绍主动学习的基本流程,比较不确定性采样、QBC 和 BALD 三种选样方法。

阅读全文
+

文章

约 10 分钟

Distribution Matching 与 GAIL

从轨迹与状态—动作分布匹配出发,说明 Forward KL 为何可能退化为 BC,以及 GAIL 如何用判别器完成分布匹配。

阅读全文
约 10 分钟

Behavior Cloning 与 PLID

说明 Behavior Cloning 的状态分布偏移,并推导 PLID / DAgger 如何用交互式专家标签修正策略。

阅读全文
约 12 分钟

Active Learning

介绍主动学习的基本流程,比较不确定性采样、QBC 和 BALD 三种选样方法。

阅读全文
diff --git a/content/posts/active-learning.md b/content/posts/active-learning.md index 12ac17e..d82f80a 100644 --- a/content/posts/active-learning.md +++ b/content/posts/active-learning.md @@ -124,7 +124,7 @@ $$ KL 散度非负,两个分布一致时为零。它一般不对称,因此不是通常意义上的距离。如果某个结果在 $p$ 下概率非零、在 $q$ 下概率为零,KL 散度会趋于无穷大。 -这个工具会在 BALD 中再次出现:我们不仅关心预测是否模糊,也关心不同模型给出的预测有多不同。 +这个工具会在 BALD 中再次出现:我们不仅关心预测是否模糊,也关心不同模型给出的预测有多不同。后续模仿学习笔记还会用 KL 比较专家与学习策略的动作分布,见 [Behavior Cloning 与 PLID](/blog/behavior-cloning-plid/)。 ## 4. Query-by-Committee @@ -278,3 +278,4 @@ $$ - [课程讲义](https://github.com/enalisnick/enalisnick.github.io/blob/master/ML_with_Humans_Course_Notes.pdf) - [BALD 论文](https://arxiv.org/abs/1112.5745) +- 系列后续:[Behavior Cloning 与 PLID](/blog/behavior-cloning-plid/)、[Distribution Matching 与 GAIL](/blog/distribution-matching-gail/) diff --git a/content/posts/behavior-cloning-plid.md b/content/posts/behavior-cloning-plid.md new file mode 100644 index 0000000..1a64264 --- /dev/null +++ b/content/posts/behavior-cloning-plid.md @@ -0,0 +1,350 @@ +--- +title: Behavior Cloning 与 PLID +date: 2026-10-20 +summary: 说明 Behavior Cloning 的状态分布偏移,并推导 PLID / DAgger 如何用交互式专家标签修正策略。 +draft: false +--- + +Behavior Cloning 把专家示范当作监督学习数据,但模型部署后会访问训练时没有覆盖的状态。本文从模仿学习的基本形式化出发,说明 covariate shift 与 compounding errors,并推导 PLID / DAgger 如何通过当前策略 rollout、再由专家补充标签,逐步修正状态分布偏移。 + +前置知识:概率、条件概率、监督学习损失,以及基本的 Markov Decision Process(MDP)概念。KL 散度的定义见 [Active Learning](/blog/active-learning/#section-5)。 + +> 模仿学习为什么需要交互式纠错 + +## 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)$:环境转移概率。 + +专家策略记为: + +$$ +\pi_E(a\mid s) +$$ + +它表示专家在状态 $s$ 下选择动作 $a$ 的条件概率。待学习策略记为: + +$$ +\pi_\theta(a\mid s) +$$ + +其中 $\theta$ 是模型参数。 + +所有示范组成数据集: + +$$ +\mathcal D_E += +\left\{ +(s_n,a_n) +\right\}_{n=1}^{N} +$$ + +这里还要区分策略和状态访问分布。策略 $\pi(a\mid s)$ 描述给定状态下如何选择动作;$d_\pi^t(s)$ 表示执行策略 $\pi$ 后,在第 $t$ 步处于状态 $s$ 的概率。策略决定动作,动作又影响环境转移,因此策略也会间接决定未来访问哪些状态。 + +## 3. Behavior Cloning + +### 3.1 训练目标 + +如果动作是离散的,可以使用最大似然或交叉熵损失: + +$$ +\mathcal L_{\mathrm{BC}}(\theta) += +-\frac{1}{N} +\sum_{n=1}^{N} +\log \pi_\theta(a_n\mid s_n) +$$ + +如果动作是连续值,也可以使用均方误差: + +$$ +\mathcal L_{\mathrm{BC}}(\theta) += +\frac{1}{N} +\sum_{n=1}^{N} +\left\| +\hat a_\theta(s_n)-a_n +\right\|_2^2 +$$ + +两种损失表达的是同一个基本思想:在示范数据中的状态下,模型应该采取与专家相同或相近的动作。 + +### 3.2 状态分布 + +专家示范主要来自专家策略访问过的状态,因此 BC 实际优化的是: + +$$ +\mathbb E_{s\sim d_{\pi_E}} +\left[ +\ell\bigl(\pi_\theta(s),\pi_E(s)\bigr) +\right] +$$ + +BC 并不是在所有可能状态上学习专家策略,而是在专家访问过的状态分布上拟合专家动作。 + +## 4. 误差累积 + +### 4.1 状态偏移 + +专家执行任务时,状态来自 $s_t\sim d_{\pi_E}^t$;模型执行任务时,状态来自 $s_t\sim d_{\pi_\theta}^t$。一般来说: + +$$ +d_{\pi_E}^t\neq d_{\pi_\theta}^t +$$ + +训练时模型看到的是专家状态,部署时模型却会根据自己的动作进入新的状态。这就是 **covariate shift(协变量偏移)** 在序列决策中的表现。 + +### 4.2 状态递推 + +状态分布的递推关系为: + +$$ +d_\pi^{t+1}(s') += +\sum_{s\in\mathcal S} + d_\pi^t(s) +\sum_{a\in\mathcal A} + \pi(a\mid s)P(s'\mid s,a) +$$ + +右侧三项分别表示当前状态概率、动作概率和环境转移概率。改变策略不仅会改变当前动作,还会改变之后所有时间步的状态分布。 + +### 4.3 误差连锁 + +一次小动作误差可能使模型进入示范数据很少覆盖的状态;在新状态下,模型的预测更不可靠;新的错误又使它进一步偏离专家轨迹。这就是 **compounding errors(误差累积)**。 + +因此,较低的单步验证误差并不必然意味着较高的任务成功率。 + +## 5. PLID + +### 5.1 核心直觉 + +PLID 的全称是 **Policy Learning via an Interactive Demonstrator**。它与经典 DAgger 的核心思想一致:不只学习专家走过的正确轨迹,还要让当前策略自己运行;当它进入偏离状态时,请专家告诉它在这些状态下应该采取什么动作。 + +训练过程如下: + +1. 使用专家示范训练初始策略 $\pi_0$; +2. 让 $\pi_0$ 自己与环境交互; +3. 收集模型实际访问的状态; +4. 对这些状态询问专家动作; +5. 将新数据加入原始示范数据; +6. 重新训练策略并重复上述过程。 + +### 5.2 交互标注 + +第 $m$ 轮中,模型负责产生状态: + +$$ +s\sim d_{\pi_m} +$$ + +专家负责提供动作标签: + +$$ +a\sim \pi_E(\cdot\mid s) +$$ + +于是得到新数据集: + +$$ +\mathcal D_m += +\left\{ +(s_{m,n},a_{m,n}) +\right\}_{n=1}^{N} +$$ + +这里的关键不是让模型模仿自己的动作,而是让模型探索自己会访问的状态,再让专家在这些状态上提供正确标签。 + +### 5.3 数据聚合 + +PLID / DAgger 通常保留旧数据: + +$$ +\mathcal D_{0:m} += +\bigcup_{i=0}^{m}\mathcal D_i +$$ + +然后在聚合数据上重新训练: + +$$ +\theta_{m+1} += +\arg\min_\theta +\sum_{(s,a)\in\mathcal D_{0:m}} +- +\log\pi_\theta(a\mid s) +$$ + +保留旧数据的作用是让模型同时学习专家正常执行时访问的状态,以及模型偏离后需要恢复的状态。 + +## 6. 数学目标 + +在第 $m$ 轮,理想目标是在模型实际访问的状态上,让学习策略接近专家策略: + +$$ +\hat\theta_{m+1} += +\arg\min_\theta +\mathbb E_{s\sim d_{\pi_m}} +\left[ +D_{\mathrm{KL}} +\left( +\pi_E(\cdot\mid s) +\|\pi_\theta(\cdot\mid s) +\right) +\right] +$$ + +根据 [KL 散度](/blog/active-learning/#section-5) 的定义: + +$$ +D_{\mathrm{KL}}(p\|q) += +\mathbb E_{x\sim p} +\left[ +\log\frac{p(x)}{q(x)} +\right] +$$ + +代入两个策略: + +$$ +\begin{aligned} +&D_{\mathrm{KL}} +\left( +\pi_E(\cdot\mid s) +\|\pi_\theta(\cdot\mid s) +\right)\\ +&= +\mathbb E_{a\sim\pi_E(\cdot\mid s)} +\left[ +\log\pi_E(a\mid s) +- +\log\pi_\theta(a\mid s) +\right] +\end{aligned} +$$ + +第一项只依赖固定的专家策略,与 $\theta$ 无关。因此,最小化 KL 等价于最大化: + +$$ +\mathbb E_{\substack{s\sim d_{\pi_m}\\a\sim\pi_E(\cdot\mid s)}} +\left[ +\log\pi_\theta(a\mid s) +\right] +$$ + +换成最小化形式,就是: + +$$ +-\mathbb E_{\substack{s\sim d_{\pi_m}\\a\sim\pi_E(\cdot\mid s)}} +\left[ +\log\pi_\theta(a\mid s) +\right] +$$ + +这仍然是 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 的动作损失,但把训练状态分布从专家访问分布扩展到了模型访问分布: + +$$ +\text{BC:}\quad s\sim d_{\pi_E} +$$ + +$$ +\text{PLID:}\quad s\sim d_{\pi_m} +$$ + +这也是从 Behavior Cloning 走向 Distribution Matching 的起点:当专家持续标注成本过高时,下一步是不再逐个纠正动作,而是直接让模型产生与专家相似的行为分布。下一篇笔记讨论 [Distribution Matching 与 GAIL](/blog/distribution-matching-gail/)。 + +## 参考资料 + +- [课程讲义](https://github.com/enalisnick/enalisnick.github.io/blob/master/ML_with_Humans_Course_Notes.pdf) +- 系列上一篇:[Active Learning](/blog/active-learning/) +- 系列下一篇:[Distribution Matching 与 GAIL](/blog/distribution-matching-gail/) + diff --git a/content/posts/distribution-matching-gail.md b/content/posts/distribution-matching-gail.md new file mode 100644 index 0000000..733eafe --- /dev/null +++ b/content/posts/distribution-matching-gail.md @@ -0,0 +1,342 @@ +--- +title: Distribution Matching 与 GAIL +date: 2026-11-02 +summary: 从轨迹与状态—动作分布匹配出发,说明 Forward KL 为何可能退化为 BC,以及 GAIL 如何用判别器完成分布匹配。 +draft: false +--- + +Behavior Cloning 直接拟合专家动作,PLID 则让专家在模型实际访问的状态上补充标签。若不能持续询问专家,能否仍让模型产生与专家相似的轨迹或状态—动作分布?本文从轨迹概率、Forward KL 与状态—动作分布出发,说明 GAIL 如何用判别器间接完成分布匹配。 + +系列上一篇:[Behavior Cloning 与 PLID](/blog/behavior-cloning-plid/)。前置知识还包括 MDP、条件概率,以及 [Active Learning](/blog/active-learning/#section-5) 中的 KL divergence。 + +> 模仿学习如何匹配行为分布 + +## 1. 专家反馈成本 + +[上一篇](/blog/behavior-cloning-plid/)用 PLID 解决状态分布偏移:当前策略自己 rollout,专家再为实际遇到的状态提供动作标签。方法直接有效,但模型每探索一批新状态,就可能需要专家参与标注。于是产生了另一个问题: + +> 如果只有专家轨迹,而没有专家对每个新状态的逐一纠正,能否仍然让模型学到整体上类似专家的行为? + +Distribution Matching(分布匹配)改变了比较对象。BC 主要比较给定状态下的动作;Distribution Matching 则试图比较模型与专家产生的轨迹,或者比较它们访问状态—动作对的分布。 + +## 2. 轨迹分布 + +一条长度为 $T$ 的轨迹写成: + +$$ +\tau=(s_0,a_1,s_1,a_2,s_2,\ldots,a_T,s_T) +$$ + +给定初始状态分布 $p(s_0)$、策略 $\pi$ 和环境转移概率 $P$,轨迹概率可以按链式法则分解为: + +$$ +p_\pi(\tau) += + p(s_0) + \prod_{t=1}^{T} + \pi(a_t\mid s_{t-1}) + P(s_t\mid s_{t-1},a_t) +$$ + +每一项分别表示:初始状态的概率、策略选择动作的概率,以及环境完成状态转移的概率。 + +专家产生轨迹分布 $p_E(\tau)$,学习策略产生轨迹分布 $p_{\pi_\theta}(\tau)$。最直接的目标是: + +$$ +p_{\pi_\theta}(\tau)\approx p_E(\tau) +$$ + +但“两个分布接近”仍然需要选择具体的 divergence。 + +## 3. Forward KL + +### 3.1 最大似然 + +考虑专家轨迹分布与模型轨迹分布之间的 Forward KL: + +$$ +D_{\mathrm{KL}} +\left( + p_E(\tau)\|p_{\pi_\theta}(\tau) +\right) +$$ + +展开 KL divergence: + +$$ +\begin{aligned} +&D_{\mathrm{KL}} +\left( + p_E(\tau)\|p_{\pi_\theta}(\tau) +\right)\\ +&= +\mathbb E_{\tau\sim p_E} +\left[ +\log p_E(\tau)-\log p_{\pi_\theta}(\tau) +\right] +\end{aligned} +$$ + +第一项与 $\theta$ 无关,所以最小化 Forward KL 等价于最大化专家轨迹在模型下的对数概率: + +$$ +\hat\theta += +\arg\max_\theta +\mathbb E_{\tau\sim p_E} +\left[ +\log p_{\pi_\theta}(\tau) +\right] +$$ + +有限样本下,这就是轨迹级最大似然。 + +### 3.2 与 BC 的关系 + +将轨迹概率代入: + +$$ +\begin{aligned} +\log p_{\pi_\theta}(\tau) +={}& +\log p(s_0)\\ +&+\sum_{t=1}^{T}\log\pi_\theta(a_t\mid s_{t-1})\\ +&+\sum_{t=1}^{T}\log P(s_t\mid s_{t-1},a_t) +\end{aligned} +$$ + +如果专家和模型使用相同的环境动力学,且初始状态分布不依赖 $\theta$,那么环境相关的两部分都是常数。剩下的优化目标是: + +$$ +\hat\theta += +\arg\max_\theta +\sum_{n=1}^{N} +\sum_{t=1}^{T} +\log\pi_\theta(a_{n,t}\mid s_{n,t-1}) +$$ + +这正是专家轨迹上的 Behavior Cloning。 + +因此,必须保留一个重要结论: + +> 把 BC 写成完整轨迹的 Forward KL,并不会自动解决状态分布偏移;如果期望仍然来自专家轨迹,模型仍然主要在专家状态上学习。 + +## 4. 状态—动作分布 + +### 4.1 联合分布 + +在某个时间步,状态—动作联合分布可以写成: + +$$ +p_\pi(s,a)=d_\pi(s)\pi(a\mid s) +$$ + +其中 $d_\pi(s)$ 表示策略 $\pi$ 诱导的状态访问分布。 + +对同一时间步的联合分布使用 KL divergence,可以得到链式分解: + +$$ +\begin{aligned} +&D_{\mathrm{KL}} +\left( + p_E(s,a)\|p_\theta(s,a) +\right)\\ +&= +D_{\mathrm{KL}} +\left( + d_E(s)\|d_\theta(s) +\right)\\ +&\quad+ +\mathbb E_{s\sim d_E} +\left[ +D_{\mathrm{KL}} +\left( + \pi_E(\cdot\mid s)\|\pi_\theta(\cdot\mid s) +\right) +\right] +\end{aligned} +$$ + +右侧第一项是状态访问分布匹配,第二项是给定状态下的动作匹配,也就是 BC 的核心。 + +这给出一个清晰的解释: + +> 联合分布匹配 = 状态访问频率匹配 + 给定状态下的动作匹配。 + +### 4.2 Occupancy measure + +在无限时域或不同时间步混合的场景下,更常用的是 discounted occupancy measure: + +$$ +\rho_\pi(s,a) += +(1-\gamma) +\sum_{t=0}^{\infty} +\gamma^t +P_\pi(s_t=s,a_t=a) +$$ + +它描述策略在整个执行过程中访问某个状态—动作对的总体频率,并使用 $\gamma$ 对较晚时间步进行折扣。 + +需要注意:匹配每个时间步的边缘分布,不一定等价于匹配完整轨迹中的所有长程依赖。GAIL 更准确的理论对象通常是 occupancy measure,而不是简单地把每条轨迹当成一个独立分类样本。 + +## 5. KL 的方向 + +KL divergence 是有方向的(基本定义见 [Active Learning](/blog/active-learning/#section-5))。Forward KL $D_{\mathrm{KL}}(p_E\|p_\theta)$ 从专家分布出发,要求模型覆盖专家分布中的区域;如果模型遗漏了专家行为,惩罚会很大。 + +Reverse KL $D_{\mathrm{KL}}(p_\theta\|p_E)$ 则从模型分布出发,更强地惩罚模型访问专家概率很低的区域。它常被解释为更偏向选择高密度模式,但在多峰分布和有限数据下也可能出现 mode-seeking 行为。 + +这两种 KL 的区别不能简单归结为“哪个更好”:选择哪种方向,取决于我们更关心覆盖专家行为,还是避免模型产生专家分布之外的行为。真实系统中还必须考虑分布支持、估计误差和 rollout 成本。 + +## 6. GAIL + +### 6.1 二分类目标 + +当专家分布和模型分布只有样本、没有容易计算的密度函数时,可以训练一个判别器判断样本来自哪里。 + +令: + +$$ +D_\psi(s,a)\in(0,1) +$$ + +表示状态—动作对 $(s,a)$ 来自专家的概率。判别器的二分类损失为: + +$$ +\begin{aligned} +\mathcal L_D(\psi) +={}& +-\mathbb E_{(s,a)\sim p_E} +\left[ +\log D_\psi(s,a) +\right]\\ +&- +\mathbb E_{(s,a)\sim p_{\pi_\theta}} +\left[ +\log\left(1-D_\psi(s,a)\right) +\right] +\end{aligned} +$$ + +专家样本的标签是 1,模型样本的标签是 0。最小化这个损失会让判别器越来越善于区分两种行为。 + +### 6.2 策略奖励 + +策略的目标与判别器相反:它希望生成让判别器难以区分的状态—动作对。 + +在固定判别器时,可以把判别器输出转化为策略奖励。例如采用: + +$$ +r_\psi(s,a) += +-\log\left(1-D_\psi(s,a)\right) +$$ + +当判别器认为 $(s,a)$ 更像专家时,$D_\psi(s,a)$ 较大,对应的奖励也较高。于是策略可以通过强化学习最大化: + +$$ +\max_\theta +\mathbb E_{\tau\sim p_{\pi_\theta}} +\left[ +\sum_t r_\psi(s_t,a_t) +\right] +$$ + +训练过程交替进行: + +1. 用专家数据和当前策略 rollout 数据训练判别器; +2. 固定判别器,把它的输出当作奖励; +3. 用 policy gradient、PPO 等方法更新策略; +4. 让新策略继续 rollout,再更新判别器。 + +这也是 GAIL(Generative Adversarial Imitation Learning)的核心闭环。 + +### 6.3 密度比 + +固定策略分布,令 $x$ 表示一个轨迹或状态—动作对。判别器在 $x$ 上的损失贡献为: + +$$ +\mathcal J_x(D) += +-p_E(x)\log D(x) +-p_\theta(x)\log(1-D(x)) +$$ + +对 $D(x)$ 求导并令其为零: + +$$ +D^*(x) += +\frac{p_E(x)}{p_E(x)+p_\theta(x)} +$$ + +因此: + +$$ +\log\frac{D^*(x)}{1-D^*(x)} += +\log\frac{p_E(x)}{p_\theta(x)} +$$ + +这说明最优判别器的 log-odds 等于专家分布与模型分布的 log density ratio。我们不必显式计算两个高维分布的密度,只需训练一个分类器,就可以间接获得分布比值信息。 + +### 6.4 JS 散度 + +在理想判别器条件下,将最优判别器代回对抗目标,得到的是与 Jensen–Shannon divergence(JS 散度)相关的目标,而不是简单的 Reverse KL。 + +因此,GAIL 应理解为: + +``` +Distribution Matching + ↓ +Two-sample classification + ↓ +Adversarial training + ↓ +Occupancy measure matching +``` + +## 7. 训练边界 + +GAIL 不需要专家为每个新状态提供动作标签,但它并没有消除数据和交互成本: + +- 当前策略仍然需要在环境中 rollout; +- 判别器需要同时看到专家样本和模型样本; +- 策略更新通常需要强化学习算法; +- 判别器可能过拟合有限的专家数据; +- 判别器学到的信号可能被策略 exploit; +- 离线专家数据与在线环境状态之间可能存在支持不匹配。 + +一个更完整的工程流程是: + +![GAIL 的交替训练闭环](/assets/posts/distribution-matching-gail/gail_pipeline.png) + +*GAIL 的交替训练闭环* + +还需要检查几个理论与实际不完全对齐的地方: + +1. **部分可观测性**:如果状态没有包含必要历史,判别器可能把历史差异错误地归因于当前动作。 +2. **动作延迟**:专家标签、观测和动作可能存在时间错位。 +3. **专家多样性**:单一判别器可能把某一种专家风格误认为唯一正确行为。 +4. **奖励 hacking**:策略可能找到让判别器失效的行为,而不是完成真正任务。 +5. **安全约束**:探索和 rollout 不能无限制地尝试危险状态。 +6. **评估问题**:判别器准确率下降不等于任务成功率提高。 + +## 8. 总结 + +Behavior Cloning 主要在专家访问过的状态上匹配动作。PLID 让模型主动探索,再由专家标注模型实际遇到的状态。Distribution Matching 则进一步尝试匹配专家和模型产生的状态—动作分布。 + +但直接最小化轨迹 Forward KL,在固定环境动力学下可能退化为专家轨迹上的 BC。因此,真正需要匹配的是策略诱导的状态访问分布或 occupancy measure。 + +GAIL 用一个二分类器区分专家与模型,再把判别器信号转化为策略奖励。它的关键数学事实是:最优判别器的 log-odds 等于两个分布的 log density ratio;在理想条件下,对抗目标与 JS divergence 相关。 + +如果说 BC 是“模仿专家在这个状态下做什么”,PLID 是“让专家纠正模型实际遇到的状态”,那么 GAIL 更接近于: + +> 让模型产生整体上无法被判别器与专家区分的行为。 + +## 参考资料 + +- [课程讲义](https://github.com/enalisnick/enalisnick.github.io/blob/master/ML_with_Humans_Course_Notes.pdf) +- 系列上一篇:[Behavior Cloning 与 PLID](/blog/behavior-cloning-plid/) + diff --git a/feed.xml b/feed.xml index 87d6df4..b659527 100644 --- a/feed.xml +++ b/feed.xml @@ -1,2 +1,2 @@ -Musicaldghttps://musicaldg.github.ioMusicaldg 的机器学习笔记。zh-CNActive Learninghttps://musicaldg.github.io/blog/active-learning/https://musicaldg.github.io/blog/active-learning/介绍主动学习的基本流程,比较不确定性采样、QBC 和 BALD 三种选样方法。Tue, 29 Sep 2026 00:00:00 GMT +Musicaldghttps://musicaldg.github.ioMusicaldg 的机器学习笔记。zh-CNDistribution Matching 与 GAILhttps://musicaldg.github.io/blog/distribution-matching-gail/https://musicaldg.github.io/blog/distribution-matching-gail/从轨迹与状态—动作分布匹配出发,说明 Forward KL 为何可能退化为 BC,以及 GAIL 如何用判别器完成分布匹配。Mon, 02 Nov 2026 00:00:00 GMTBehavior Cloning 与 PLIDhttps://musicaldg.github.io/blog/behavior-cloning-plid/https://musicaldg.github.io/blog/behavior-cloning-plid/说明 Behavior Cloning 的状态分布偏移,并推导 PLID / DAgger 如何用交互式专家标签修正策略。Tue, 20 Oct 2026 00:00:00 GMTActive Learninghttps://musicaldg.github.io/blog/active-learning/https://musicaldg.github.io/blog/active-learning/介绍主动学习的基本流程,比较不确定性采样、QBC 和 BALD 三种选样方法。Tue, 29 Sep 2026 00:00:00 GMT diff --git a/generated-files.json b/generated-files.json index 810f5f8..c157bc2 100644 --- a/generated-files.json +++ b/generated-files.json @@ -2,6 +2,8 @@ "index.html", "blog/index.html", "404.html", + "blog/distribution-matching-gail/index.html", + "blog/behavior-cloning-plid/index.html", "blog/active-learning/index.html", "feed.xml", "sitemap.xml", diff --git a/index.html b/index.html index 4555e4d..5def6b4 100644 --- a/index.html +++ b/index.html @@ -28,7 +28,7 @@

Musicaldg 的机器学习笔记。

-
约 12 分钟

Active Learning

介绍主动学习的基本流程,比较不确定性采样、QBC 和 BALD 三种选样方法。

阅读全文
+
约 10 分钟

Distribution Matching 与 GAIL

从轨迹与状态—动作分布匹配出发,说明 Forward KL 为何可能退化为 BC,以及 GAIL 如何用判别器完成分布匹配。

阅读全文
约 10 分钟

Behavior Cloning 与 PLID

说明 Behavior Cloning 的状态分布偏移,并推导 PLID / DAgger 如何用交互式专家标签修正策略。

阅读全文
约 12 分钟

Active Learning

介绍主动学习的基本流程,比较不确定性采样、QBC 和 BALD 三种选样方法。

阅读全文
diff --git a/sitemap.xml b/sitemap.xml index 0b67849..ac5e410 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1,2 +1,2 @@ -https://musicaldg.github.io/https://musicaldg.github.io/blog/https://musicaldg.github.io/blog/active-learning/ +https://musicaldg.github.io/https://musicaldg.github.io/blog/https://musicaldg.github.io/blog/distribution-matching-gail/https://musicaldg.github.io/blog/behavior-cloning-plid/https://musicaldg.github.io/blog/active-learning/