From db474760c4c6ed14c9817627ab5ee3899e26bca7 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 3 Nov 2026 04:50:59 +0000 Subject: [PATCH 1/2] Publish Behavior Cloning / PLID and Distribution Matching / GAIL notes. Migrate the two Notion imitation-learning posts into site Markdown with KaTeX-safe formulas, short section titles, series links, and the GAIL pipeline figure. Co-authored-by: Jingwei Yuan --- .../gail_pipeline.png | Bin 0 -> 120711 bytes blog/behavior-cloning-plid/index.html | 210 +++++++++++ blog/distribution-matching-gail/index.html | 215 +++++++++++ blog/index.html | 2 +- content/posts/behavior-cloning-plid.md | 350 ++++++++++++++++++ content/posts/distribution-matching-gail.md | 342 +++++++++++++++++ feed.xml | 2 +- generated-files.json | 2 + index.html | 2 +- sitemap.xml | 2 +- 10 files changed, 1123 insertions(+), 4 deletions(-) create mode 100644 assets/posts/distribution-matching-gail/gail_pipeline.png create mode 100644 blog/behavior-cloning-plid/index.html create mode 100644 blog/distribution-matching-gail/index.html create mode 100644 content/posts/behavior-cloning-plid.md create mode 100644 content/posts/distribution-matching-gail.md 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 0000000000000000000000000000000000000000..4d1292e727b06c02750cf025509fc67eb95eef72 GIT binary patch literal 120711 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ν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�)V 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 + + + + + + + + + + + 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。

+

参考资料

+
+
© 2026 MusicaldgRSS
+
+ + 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 更接近于:

+

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

+

参考资料

+
+
© 2026 MusicaldgRSS
+
+ + 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 三种选样方法。

阅读全文
© 2026 MusicaldgRSS
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 三种选样方法。

阅读全文
© 2026 MusicaldgRSS
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/ From e72e332ec9233f7421a8536a60492fbf1f9b34ef Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 3 Nov 2026 04:50:59 +0000 Subject: [PATCH 2/2] Link Active Learning into the imitation-learning note series. Point the KL section and references to the new BC/PLID and GAIL posts so shared divergence material is redistributed across the series. Co-authored-by: Jingwei Yuan --- blog/active-learning/index.html | 4 ++-- content/posts/active-learning.md | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) 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/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/)