对应:Stanford CS234 Lecture 8(Imitation Learning) 配套代码:
code/lecture08/(只需 numpy) 预计阅读时间:4 小时
0. 本讲导航
0.1 本讲要回答的问题
如果写不出一个好的奖励函数,但有专家可以示范,能不能直接从示范中学会怎么做?
前七讲的所有算法都依赖一个奖励函数,智能体通过试错来最大化它。但在很多真实问题中:
- 奖励很难写。怎么用一个数字描述”开车开得好”?安全、舒适、守规矩、不妨碍他人……写漏一项,智能体就会钻空子(第 1 讲 3.3 节、第 2 讲第 10 节的奖励投机)。
- 试错很危险、很昂贵。自动驾驶不能靠撞车来学,手术机器人不能靠失误来学。
- 但示范很容易获得。人类司机每天开几亿公里;医生的操作可以录下来;人写的文字无穷无尽。
模仿学习(imitation learning):从专家的示范中学习策略。
本讲也是后面几讲的引子:第 9 讲的 RLHF 从人类的偏好中学习,第 10 讲的离线 RL 从历史数据中学习——它们和模仿学习一样,都要面对同一个核心难题:分布偏移。
0.2 学完本讲,你应该能够
- 写出行为克隆的形式化定义,说明它为什么”在训练数据上几乎完美,一上路就出问题”。
- 解释复合误差和分布偏移,理解 误差界的直觉。
- 写出 DAgger 算法,解释它为什么能把误差降到 ,以及它在实践中的困难。
- 说出**噪声注入(DART)**等不需要交互式专家的替代方法。
- 解释逆强化学习的动机(奖励比策略更容易迁移)和根本困难(奖励的不可辨识性)。
- 理解特征期望匹配,推导最大熵 IRL 的目标与梯度,知道软价值迭代是如何计算它的。
- 大致了解 GAIL 等对抗式模仿学习的思想。
0.3 先修知识
| 知识点 | 用在哪里 | 最低要求 |
|---|---|---|
| 监督学习(分类)的基本概念 | 第 2 节 | 知道”在训练集上拟合、在测试集上评估” |
| 第 2 讲:价值迭代、有限视界 | 第 5 节 | 必须 |
| 第 5 讲:线性函数逼近、特征 | 第 4、5 节 | 知道 |
| 第 6 讲:softmax、对数似然与梯度 | 第 5 节 | 必须 |
| 概率:独立事件、并集界 | 第 2.3 节 | 会用即可 |
0.4 本讲地图
第1节 问题设定:专家示范,没有奖励
│
├──► 学策略 ────► 第2节 行为克隆:简单,但有复合误差
│ │
│ 第3节 DAgger:在学习者自己的分布上收集标签;DART 噪声注入
│
└──► 学奖励 ────► 第4节 逆强化学习:动机与不可辨识性;特征期望匹配
│
第5节 最大熵 IRL
│
第6节 对抗式模仿学习(GAIL)
│
第7节 模仿学习与强化学习的结合;分布偏移——贯穿后面几讲的主题
1. 问题设定
1.1 我们有什么?
- 环境(状态、动作、转移),但没有奖励函数(或者奖励函数存在,但我们不知道);
- 一个专家的策略 ,我们看不到它的内部,只能看到它的示范;
- 一批示范数据 ,每条轨迹 由专家产生。
目标:学一个策略 ,在(未知的)真实目标下表现得和专家一样好。
1.2 两条路线
| 路线 | 学什么 | 代表方法 |
|---|---|---|
| 直接学策略 | :在每个状态做专家会做的事 | 行为克隆、DAgger |
| 先学奖励,再求策略 | 或 :专家在最大化什么 | 逆强化学习(IRL)、GAIL |
1.3 本讲的实验环境
车道保持(代码 lane_env.py):
撞车 | . . . . . . . . [中心] . . . . . . . . | 撞车
-8 -3 -2 -1 0 1 2 3 +8
└──── 车道 ────┘
- 状态 是车相对车道中心的横向偏移(−7 到 +7), 冲出路面;
- 动作:向左打方向(−1)、不动(0)、向右打方向(+1);
- 每一步有侧风,以 0.1 / 0.2 / 0.4 / 0.2 / 0.1 的概率把车吹动 −2 / −1 / 0 / +1 / +2 格——风有时比方向盘的修正能力更强;
- 代价:每一步不在车道内()代价 +1;冲出路面后剩下的每一步都算代价 +1。
- 专家:永远往中心打方向。
专家开车时车在哪里(代码 01_behavior_cloning.py 演示 1):
| −4 | −3 | −2 | −1 | 0 | +1 | +2 | +3 | +4 | ||
|---|---|---|---|---|---|---|---|---|---|---|
| 概率 | 0.002 | 0.013 | 0.103 | 0.204 | 0.358 | 0.204 | 0.100 | 0.013 | 0.002 | ≈ 0 |
专家几乎只出现在 的地方。它的示范里,“车被吹到 该怎么办”的数据几乎为零——这就是后面一切问题的根源。
2. 行为克隆
2.1 把模仿当作监督学习
最直接的想法:把示范中的每一个 当作监督学习的 (输入, 标签),训练一个分类器(或回归器):
其中 是专家的状态分布, 是分类损失(如交叉熵)。这叫行为克隆(Behavior Cloning, BC)。
它简单、稳定,只需要标准的监督学习工具,而且在数据充足时效果可以很好。历史上著名的例子:1989 年卡内基梅隆大学的 ALVINN 用一个小神经网络从摄像头画面学开车;2016 年 NVIDIA 的端到端自动驾驶也是行为克隆。今天大语言模型的”监督微调(SFT)“阶段,本质上也是行为克隆。
2.2 看起来几乎完美
用 5 个专家回合(每个 50 步,共 250 个样本)训练一个表格型学习者(每个状态记住专家最常做的动作,没见过的状态默认”不打方向”):
-7:? -6:? -5:? -4:? -3:→ -2:→ -1:→ +0:· +1:← +2:← +3:← +4:? +5:? +6:? +7:?
在专家的状态分布上衡量,它的错误率 只有 0.38%。按监督学习的标准,这是一个近乎完美的分类器。
2.3 复合误差
但让它自己开车(代码 01 演示 3,每个 跑 3000 个回合):
| 回合长度 | 专家代价 | BC 代价 | BC / 专家 | 专家撞车率 | BC 撞车率 |
|---|---|---|---|---|---|
| 25 | 0.78 | 1.00 | 1.29 | 0.00% | 0.87% |
| 50 | 1.57 | 2.43 | 1.54 | 0.03% | 2.40% |
| 100 | 3.15 | 6.49 | 2.06 | 0.03% | 5.70% |
| 200 | 6.37 | 18.42 | 2.89 | 0.03% | 11.33% |
| 400 | 12.83 | 57.87 | 4.51 | 0.03% | 21.20% |
专家的代价与 成正比,BC 的代价增长得比 快得多:两者之比随 从 1.3 增长到 4.5。
发生了什么? 在 的地方,BC 和专家的行为完全相同。但每一步都有一点点概率被风吹到 ——这是 BC 从没见过的状态。专家在这里会把车拉回来;BC 不知道该怎么办,于是不再修正方向,车随风漂移,接下来的每一步都在付出代价,最后常常冲出路面。
最直接的对比(演示 4):3000 个 的回合中,有 1872 个回合曾经被吹到 (专家和 BC 在这之前的行为完全一样,所以这个数字相同)。这些回合中,专家 0% 冲出路面,BC 33.7% 冲出路面。 同一次”失误”之后,专家能恢复,BC 不能。
2.4 分布偏移与 误差界
问题的根源:训练时的状态分布(专家的 )与测试时的状态分布(学习者自己的 )不同。这叫分布偏移(distribution shift),也叫协变量偏移(covariate shift)。
- 监督学习的基本假设是训练数据和测试数据同分布。行为克隆违反了这个假设:学习者自己的决策决定了它会到达哪些状态(第 1 讲 2.3 节:“数据由自己的决策产生”)。
- 在 BC 自己的状态分布上衡量,它的错误率从 0.38% 升到 1.24%(演示 4)——而且这个数字还被低估了,因为冲出路面后回合就结束了,那之后的”时间”没有被计入分布。
误差界(Ross & Bagnell, 2010):设每步代价在 之间,学习者在专家状态分布上的错误率为 。那么在最坏情况下
直觉:
- 在专家的分布上,每一步犯错的概率是 。 步中至少犯一次错的概率最多是 (并集界)。
- 一旦犯了错,学习者进入陌生的状态,最坏情况下之后每一步都付出代价——最多 步。
- 两者相乘:。
这个界是紧的:存在一些问题,BC 真的会差这么多。对比一下,普通监督学习的误差是 (每个样本独立),序贯决策让它放大了 倍——“做决策”和”做预测”的本质区别,就在于决策会影响未来的输入。
2.5 多收集数据有用吗?
(代码 01 演示 5, 时的代价,每种设置 5 次独立收集;专家代价 12.73)
| 专家回合数 | 数据量 | 覆盖范围 | BC 代价 |
|---|---|---|---|
| 1 | 50 | 187.14 | |
| 5 | 250 | 48.62 | |
| 20 | 1,000 | 24.98 | |
| 100 | 5,000 | 17.83 | |
| 500 | 25,000 | 13.62 |
数据越多越好,但代价很大:要接近专家的水平,需要约 500 个回合、25000 个标注。原因是专家本来就很少去 的地方,绝大部分数据都是车道中心附近的重复示范,真正有用的”恢复”数据只占极小一部分。问题不在于数据的量,而在于数据的分布。
3. DAgger:在学习者自己的分布上收集标签
3.1 算法
既然问题是”训练分布 ≠ 测试分布”,最直接的解决办法是:在测试分布上收集训练数据。DAgger(Dataset Aggregation,Ross, Gordon & Bagnell, 2011):
算法:DAgger
D ← 专家示范数据
π_1 ← 在 D 上训练
对 i = 1, 2, ..., N:
π_mix ← β_i π* + (1 - β_i) π_i (常用:β_1 = 1,之后 β_i = 0)
用 π_mix 运行,记录访问的状态 {s}
请专家标注:{(s, π*(s))} ← 专家只需说"这里该怎么做",不需要亲自去开
D ← D ∪ {(s, π*(s))} ← 聚合(不丢弃旧数据)
π_{i+1} ← 在 D 上训练
返回表现最好的 π_i
关键在于:由学习者自己开车,于是它会到达自己会犯错的地方;专家在这些地方提供”正确答案”——正是行为克隆缺少的”恢复”数据。
3.2 理论保证
DAgger 可以看作一个在线学习问题:每一轮的”损失函数”是在当前策略的状态分布上的分类误差。用一个”无遗憾(no-regret)“的在线学习算法(比如”在所有聚合数据上重新训练”这种 follow-the-leader 式的方法),可以保证存在某一轮的策略满足:
其中 是在学习者自己的状态分布上能达到的最小错误率, 衡量专家从一次失误中”恢复”的能力(每次偏离后专家要多付出多少代价)。 变成了 :因为学习者在自己会去的地方都有数据,犯错后知道怎么恢复,错误不再复合。
3.3 实验
一个重要的建模细节:01 文件中的表格型学习者在见过的状态上从不犯错。真实的学习者(比如神经网络)做不到这一点。代码 02_dagger.py 用”执行时以概率 随机换成另一个动作”来模拟这种分类误差——这个 就是误差界中的 。
DAgger 的迭代过程(,共 2500 个标注,分 5 次迭代;带同样 5% 失误率的”专家”代价为 23.88):
| 迭代 | 累计标注 | 覆盖范围 | 的代价 |
|---|---|---|---|
| 1(= 行为克隆) | 500 | 141.26 | |
| 2 | 1000 | 29.40 | |
| 3–5 | 1500–2500 | 29.40 |
从第 2 次迭代开始由学习者开车,它(因失误和风)到达的偏远状态都得到了专家的标签,代价从 141 骤降到 29。
同样的标注预算,行为克隆 vs DAgger(8 次独立实验的平均):
| 学习者失误率 | 标注预算 | 行为克隆 | DAgger | 下限(带同样失误率的专家) |
|---|---|---|---|---|
| 0 | 500 | 45.2 | 28.9 | 13.0 |
| 0 | 1000 | 33.8 | 24.3 | 13.0 |
| 0 | 2500 | 20.6 | 18.6 | 13.0 |
| 0.05 | 500 | 117.0 | 57.1 | 25.2 |
| 0.05 | 1000 | 91.0 | 51.9 | 25.2 |
| 0.05 | 2500 | 60.7 | 28.6 | 25.2 |
| 0.10 | 500 | 190.3 | 71.0 | 41.9 |
| 0.10 | 1000 | 156.9 | 77.4 | 41.9 |
| 0.10 | 2500 | 113.7 | 54.1 | 41.9 |
解读:
- (学习者完美记忆):DAgger 比行为克隆好一些,但差距不大——学习者只在罕见的”被风吹远”时才会偏离专家的分布。
- (学习者会犯错,这才是真实情况):行为克隆急剧变差——学习者自己的失误不断把车带到专家没示范过的地方。DAgger 的代价常常只有行为克隆的一半,并随预算增加逐渐接近下限。
- 这正是理论的预言:行为克隆 ,DAgger 。 越大,差距越明显。
3.4 DAgger 的实践困难
DAgger 在理论上很漂亮,但实践中有两个麻烦:
- 需要交互式专家。专家要能随时给学习者访问到的任意状态打标签。对人类专家来说这很不自然:看着一段”车快要冲出路面”的录像,说出”此刻方向盘应该打多少度”——而不是自己去开——既困难又不准确。
- 安全性。让一个还没学好的学习者去开车(收集数据),本身就可能是危险的。
实践中的变体包括:HG-DAgger(人类专家只在觉得危险时接管,只标注接管的片段)、在仿真器中用”特权专家”(能看到完整状态的规划器)来标注,等等。
3.5 不需要交互式专家的替代:噪声注入
DART(Laskey et al., 2017)的思路:既然问题是专家的示范缺少”恢复”数据,那就在专家示范时故意加入噪声——让专家以一定概率执行一个随机动作(被动地”失误”),但记录的标签永远是专家本来想做的动作。专家会被自己的”失误”带到偏离中心更远的地方,并示范如何恢复。
(代码 02 演示 3,,1000 个标注,8 次实验):
| 示范时的噪声 | 学习者代价 |
|---|---|
| 0(= 行为克隆) | 98.5 |
| 0.1 | 48.1 |
| 0.3 | 25.3 |
| 0.5 | 24.9 |
适量的噪声让代价从 98.5 降到约 25,接近下限;在这个例子里甚至比 DAgger(同样预算约 52)更好——噪声恰好模拟了学习者会犯的那种错误,专家直接示范了”犯错之后怎么恢复”。它只需要离线收集专家示范,实践中常常更容易实现。代价是噪声太大时,示范者自己可能陷入危险(在这个例子里标签总是正确的,所以没有体现出来)。
另一个著名的例子:NVIDIA 2016 年的端到端自动驾驶,在车的左右两侧也装了摄像头。侧面摄像头的画面看起来就像”车偏离了车道”,再给这些画面配上”往回打方向”的标签——这是一种数据增强,本质上和噪声注入是同一个思想:人工制造”偏离后如何恢复”的数据。
4. 逆强化学习
4.1 为什么要学奖励?
行为克隆学的是”在每个状态做什么”。**逆强化学习(Inverse Reinforcement Learning, IRL)**换一个问题:专家为什么这样做——他在最大化什么奖励?
学奖励有三个好处:
- 奖励比策略更容易迁移。“水很危险、终点很好”这样的偏好,换一张地图、换一个起点依然成立;而”在第 3 行第 2 列往右走”这样的策略,环境一变就毫无意义(第 5.4 节的实验)。
- 奖励比策略更简洁。一个复杂的驾驶行为,背后可能只是几条简单的偏好。
- 理解行为本身。在认知科学、经济学中,“从行为推断偏好”本身就是研究目标。
4.2 根本困难:奖励的不可辨识性
IRL 是一个病态(ill-posed)问题:许多不同的奖励都能解释同样的行为。
- 平凡解:(所有状态奖励都是 0)。此时任何策略都是最优的,当然也包括专家的策略。
- 缩放: 和 ()的最优策略完全相同。
- 平移:给所有状态的奖励加同一个常数,在固定视界下所有轨迹的总奖励都加同一个数,最优策略不变。
- 势函数塑形(Ng, Harada & Russell, 1999):对任意函数 ,把奖励改为 ,最优策略不变(这些额外项沿轨迹望远镜求和,只剩下与起点有关的常数)。
所以 IRL 不能指望恢复”唯一正确”的奖励。不同的 IRL 方法,本质上是用不同的原则从众多候选中挑一个。
4.3 线性奖励与特征期望
设奖励是特征的线性函数 。一个策略的价值可以写成
叫策略的特征期望(feature expectations):平均而言,这个策略”累积”了多少各种特征。
一个关键观察(Abbeel & Ng, 2004,学徒学习):如果学到的策略的特征期望与专家的足够接近,,那么对任何 的奖励:
(柯西–施瓦茨不等式。)也就是说:不必知道真正的奖励是什么,只要匹配了特征期望,在所有可能的线性奖励下都和专家一样好。 这绕开了不可辨识性。
但仍然有一个问题:匹配同一组特征期望的策略可能有很多,该选哪一个?
5. 最大熵逆强化学习
5.1 最大熵原则
Ziebart et al.(2008)用信息论中的最大熵原则(Jaynes, 1957)来回答:在所有满足约束(特征期望匹配)的轨迹分布中,选择熵最大的那一个——它满足约束,但”不做任何多余的假设”。
可以证明,这样的分布具有如下形式(对确定性转移):
直觉:总奖励越高的轨迹,出现的概率指数级越高;但奖励差不多的轨迹,出现的概率也差不多。这把专家建模为一个”玻尔兹曼理性”的决策者:大体上追求高奖励,但不是完美地、确定性地选最优,而是带有一定随机性。这比”专家总是完美最优”的假设现实得多——人类示范本来就有噪声。
它还自动排除了 4.2 节的平凡解 : 时所有轨迹等可能(均匀随机游走),显然不能解释一个有明确目标的专家。
5.2 极大似然与梯度
给定示范 ,最大化对数似然:
对 求导( 的导数是指数族分布的标准结果:):
专家的平均特征计数减去当前模型的期望特征计数。如果专家比模型更常待在终点,就提高”终点”的权重;如果模型比专家更常下水,就降低”水”的权重。梯度为 0 时,特征期望恰好匹配——最大熵 IRL 自动实现了 4.3 节的特征期望匹配。
而且 是凹函数( 是凹的, 是线性的),梯度上升一定能找到全局最优。
5.3 怎么计算 和期望特征计数?
对所有轨迹求和是指数级的,但可以用动态规划高效计算:
反向——软价值迭代(第 2 讲价值迭代的”软”版本):
把价值迭代中的 换成 (“软最大值”)。 恰好就是 , 就是最大熵模型下的策略。
前向——状态访问量:
期望特征计数 。
算法:最大熵 IRL
计算专家的平均特征计数 μ_E
w ← 0
重复:
反向:用 R = w·φ 做软价值迭代,得到 π_t(a|s)
前向:计算状态访问量 D_t(s),得到期望特征计数 μ_w
w ← w + α (μ_E - μ_w)
5.4 实验
代码 03_maxent_irl.py:6×6 网格,特征 = [是否终点, 是否水, 是否沙地],真实奖励 ,回合长度 20。专家是真实奖励下的最大熵策略,从左下角出发示范 100 次。
训练地图 新地图(没有任何示范)
. . . . . G G . . . . .
. W W . . . . . . W W .
. W W . s . . s . W W .
. . . . s . . s . . . .
s s . . . . . . . . s s
A . . . . . . . . . . B
学习过程:
| 迭代 | (终点, 水, 沙地) | 对数似然 | 梯度范数 |
|---|---|---|---|
| 0 | [0, 0, 0] | −32.19 | 9.338 |
| 50 | [2.03, −1.42, −0.65] | −19.63 | 0.101 |
| 150 | [2.03, −1.97, −0.66] | −19.59 | 0.031 |
| 300 | [2.03, −2.26, −0.66] | −19.59 | 0.012 |
恢复的 ,真实 。专家示范的平均特征计数 , 下模型的期望特征计数 :终点和沙地已经匹配,水还差一点。
- 终点的权重几乎完全准确。
- 似然在”水”这个方向上非常平:从第 50 轮到第 300 轮,水的权重从 −1.42 走到 −2.26,对数似然只变了 0.04。300 轮时梯度上升还没有收敛。
- 水和沙地的惩罚都比真实值小。原因不是 IRL 有系统性的偏差,而是下面几件事。
为什么和 不一样?(演示 5)
| 情形 | (终点, 水, 沙地) |
|---|---|
| 本组 100 条示范,跑 300 轮(上表) | [2.03, −2.26, −0.66] |
| 本组 100 条示范,跑到收敛(2144 轮) | [2.03, −2.53, −0.66] |
| 无穷多条示范(直接用 拟合) | [2.00, −3.00, −1.00] |
| 另外 30 组、每组 100 条示范,各自收敛后的均值 ± 标准差 | [2.02 ± 0.08, −2.93 ± 0.51, −1.02 ± 0.11] |
- 优化没有收敛:只影响水,从 −2.26 继续走到 −2.53。
- 这批示范的运气:专家真正的期望特征计数是 ,这 100 条示范却是 ,恰好更常踩沙地、更常下水。极大似然忠实地匹配这批数据,于是认为沙地和水”没那么差”。数据无穷多时恢复了 :专家确实是”线性奖励下的玻尔兹曼理性”时,最大熵 IRL 的估计随数据增多而趋于真值。
- 专家很少做的事,对应权重的估计方差很大:换 30 组示范,终点和沙地的估计都集中在真值附近,水的标准差却有 0.51(最小 −3.48,最大 −1.97)。专家的一条轨迹下水的概率只有 1.6%,“水有多差”只能靠寥寥几次下水来推断。
- 专家从不做的事,极大似然解不存在:100 条示范全都不下水的概率是 0.208(40 组中实际有 10 组)。这时任何有限的 都会让模型偶尔下水,梯度永远指向”更负”:跑 300 轮,水的权重是 −2.69;跑 3000 轮是 −4.61,对数似然仍在缓慢上升。只要”足够差”,任何值都同样能解释数据。这才是”专家从不做的事,我们无法知道它有多糟”的准确含义,也是 IRL 的普遍现象。
迁移到新地图(真实奖励下的期望总奖励):
| 策略 | 训练地图(从 A) | 新地图(从 B) |
|---|---|---|
| 最优(用真实奖励规划) | 20.00 | 20.00 |
| IRL(用恢复的奖励规划) | 20.00 | 20.00 |
| 行为克隆(照搬”格子 → 动作”) | 20.00 | −1.00 |
| 均匀随机 | −7.09 | −7.09 |
在训练地图上,IRL 和行为克隆都达到了最优。换到新地图:
- 行为克隆照搬”这个格子该往哪走”,从 B 出发一路向上、踩过沙地,最后停在右上角不动——那正是训练地图中终点的位置!它学会的是”去右上角”,而不是”去终点”。
- IRL 恢复的是”终点好、水差、沙地差”,在新地图上重新规划,与最优完全一样。
奖励比策略更容易迁移——这是逆强化学习最重要的动机。
不可辨识性的演示(演示 4):给特征加一个常数 1,常数特征的权重一直停在初始值 0。每条轨迹恰好 20 步,常数特征的计数永远是 20,专家和模型完全相同,梯度恒为 0——从行为中原则上无法区分”所有奖励都加一个常数”的两种奖励。
6. 对抗式模仿学习(GAIL)
最大熵 IRL 的每一步梯度都要完整地求解一次(软)RL 问题(软价值迭代)。在大规模问题中这太贵了。
GAIL(Generative Adversarial Imitation Learning,Ho & Ermon, 2016)借鉴生成对抗网络(GAN)的思想,跳过显式地恢复奖励:
- 判别器 :一个分类器,试图区分”专家的 “和”学习者的 ”;
- 策略(生成器):用 RL(通常是 PPO / TRPO)训练,奖励是”骗过判别器的程度”,例如 ;
- 两者交替训练。当判别器再也分不出来时,学习者的状态–动作占用分布就和专家的一样了。
它可以看作最大熵 IRL 的一种高效近似:同样是在匹配专家的行为分布,但判别器提供了一个”随学随用”的奖励信号,不需要每一步都完整求解 RL。GAIL 需要与环境交互(它是在做 RL),但不需要交互式专家。
7. 模仿学习的位置
7.1 模仿学习 + 强化学习
模仿学习和强化学习经常组合使用:
- 用模仿学习初始化,再用 RL 微调:AlphaGo 先用人类棋谱做行为克隆,再用自我对弈的 RL 提升;大语言模型先做监督微调(SFT,即行为克隆),再做 RLHF(第 9 讲)。模仿提供一个”合理的起点”,避免 RL 从随机策略开始漫无目的地探索;RL 让模型超越示范者。
- 用示范加速 RL:把专家示范放进经验回放缓冲区(如 DQfD),或在 RL 损失中加入模仿项。
7.2 贯穿后面几讲的主题:分布偏移
本讲的核心困难是:学习者的行为改变了它会遇到的数据分布,而它只在另一个分布上受过训练。接下来的两讲会一再遇到它:
- 第 9 讲(RLHF):奖励模型是在”初始模型的回答”上训练的;用 RL 优化之后,模型的回答分布变了,奖励模型在新分布上可能很不准——于是出现”奖励投机”。解决办法之一是用 KL 惩罚让模型不要离初始分布太远。
- 第 10 讲(离线 RL):只有历史数据,学出的新策略会访问数据中很少出现的状态和动作,价值估计在那里可能严重偏高。解决办法是”悲观”——对数据覆盖不到的地方保持怀疑。
8. 本讲总结
8.1 核心概念清单
- 模仿学习:从专家示范中学习,不需要奖励函数;两条路线:学策略(BC、DAgger)、学奖励(IRL、GAIL)。
- 行为克隆:把模仿当作监督学习;简单有效,但受分布偏移影响。
- 复合误差:一次失误把学习者带到陌生状态,错误不断累积;误差界 ,而监督学习只有 。
- 多收集专家数据帮助有限:问题在于数据分布,不在于数据量。
- DAgger:由学习者运行、专家标注、聚合数据;误差界降到 ;需要交互式专家。
- 噪声注入(DART)/ 数据增强:人为制造”偏离后如何恢复”的数据,不需要交互式专家。
- 逆强化学习:学奖励而非策略;奖励更容易迁移;但奖励不可辨识(平凡解、缩放、平移、势函数塑形)。
- 特征期望匹配:匹配 就能在所有线性奖励下与专家一样好。
- 最大熵 IRL:;梯度 ;软价值迭代 + 前向访问量计算;专家很少做的事,对应权重的估计方差大;从不做的事,极大似然解不存在(无法知道有多糟)。
- GAIL:判别器区分专家与学习者,策略用 RL 去”骗过”判别器。
- 分布偏移是模仿学习、RLHF、离线 RL 的共同难题。
8.2 公式速查表
| 名称 | 公式 |
|---|---|
| 行为克隆 | |
| BC 误差界 | |
| DAgger 误差界 | |
| 线性奖励 | |
| 特征期望 | , |
| 特征匹配保证 | |
| 势函数塑形 | 不改变最优策略 |
| 最大熵轨迹分布 | |
| 对数似然 | |
| 最大熵 IRL 梯度 | |
| 软价值迭代 | |
| 最大熵策略 | |
| GAIL 奖励 |
8.3 中英术语对照表
| 中文 | 英文 | 中文 | 英文 |
|---|---|---|---|
| 模仿学习 | Imitation learning | 专家示范 | Expert demonstrations |
| 行为克隆 | Behavior cloning (BC) | 监督微调 | Supervised fine-tuning (SFT) |
| 分布偏移 | Distribution shift | 协变量偏移 | Covariate shift |
| 复合误差 | Compounding error | 数据集聚合 | Dataset Aggregation (DAgger) |
| 无遗憾在线学习 | No-regret online learning | 噪声注入 | Noise injection (DART) |
| 数据增强 | Data augmentation | 逆强化学习 | Inverse reinforcement learning (IRL) |
| 不可辨识性 | Unidentifiability | 病态问题 | Ill-posed problem |
| 势函数塑形 | Potential-based reward shaping | 特征期望 | Feature expectations |
| 学徒学习 | Apprenticeship learning | 最大熵原则 | Principle of maximum entropy |
| 玻尔兹曼理性 | Boltzmann rationality | 配分函数 | Partition function |
| 软价值迭代 | Soft value iteration | 状态访问频率 | State visitation frequency |
| 生成对抗模仿学习 | Generative Adversarial Imitation Learning (GAIL) | 判别器 | Discriminator |
| 占用分布 | Occupancy measure | 奖励迁移 | Reward transfer |
9. 练习题
练习 1(概念):为什么说”行为克隆在训练集上的准确率很高”不能说明它学得好?用车道保持的例子说明。
参考答案
训练集的状态来自专家的分布,而测试时学习者在自己的分布上运行。车道保持中,BC 在专家分布上的错误率只有 0.38%,但专家的数据几乎不包含 的状态;学习者一旦被吹到那里就不知道怎么办,代价随回合长度超线性增长( 时是专家的 4.5 倍)。监督学习的”训练 / 测试同分布”假设在序贯决策中不成立。
练习 2(误差界):某个行为克隆策略在专家分布上的错误率为 ,回合长度 ,每步代价在 之间。按 的误差界,最坏情况下它比专家多付出多少代价?如果用 DAgger 达到同样的 ,误差界大约是多少?
参考答案
BC:——等于回合长度,意味着最坏情况下每一步都付代价,界失去意义。DAgger:约 ,即多付出约 的代价( 为恢复代价)。长回合中两者的差距是天壤之别。
练习 3(DAgger):DAgger 为什么要”聚合”所有轮次的数据,而不是只用最新一轮收集的数据训练?
参考答案
如果只用最新一轮的数据,新策略只会在”上一个策略访问的状态”上表现好,而新策略访问的状态可能又不同,于是在不同的分布之间来回振荡,永远不收敛。聚合所有数据相当于在”所有历史策略的状态分布的混合”上训练,对应在线学习中的 follow-the-leader 策略,是无遗憾的,从而保证了理论界。
练习 4(不可辨识性):在一个 3 状态的确定性链上(, 为终点),专家总是向右走。写出三个不同的奖励函数,使专家的策略都是最优的。
参考答案
例如:(1) ;(2) (缩放);(3) (每步都有代价,越快结束越好)。还有平凡解 (此时任何策略都最优)。这说明仅凭行为无法唯一确定奖励。
练习 5(特征期望):特征 ,专家的特征期望 ,学到的策略 。如果真实奖励满足 ,两者的价值之差最多是多少?
参考答案
。由柯西–施瓦茨不等式,。
练习 6(软价值迭代):某状态有两个动作,,。计算软价值 和最大熵策略。与普通的 相比如何?如果 呢?
参考答案
,略大于 。,。 若 :,两个动作各 0.5。“软最大值”在两个动作一样好时比 max 大 ,体现了”有两条路可走”。
练习 7(动手)★:在 03_maxent_irl.py 中把示范数量从 100 改成 10。恢复的权重有什么变化?迁移到新地图的效果还好吗?
提示
数据少时,特征计数的估计噪声大,恢复的权重会偏离得更多——尤其是”水”这个专家很少接触的特征。10 条示范很可能一次都没下水(概率 ;默认种子下的前 10 条正是如此),这时水的极大似然解不存在(5.4 节第 4 点),300 轮时停下的值只反映”跑了多久”。只要权重的符号和相对大小大致正确,规划出的策略往往仍然不错。可以观察:权重偏离多少时,新地图上的策略开始出错?
练习 8(思考题):大语言模型的”监督微调(SFT)“本质上是行为克隆。根据本讲的分析,SFT 可能出现什么问题?RLHF(下一讲)的哪些设计可以看作是在缓解这些问题?
参考答案
SFT 只在人类写的回答(专家分布)上训练,模型生成时一旦偏离了”人类会写的样子”(比如开头就犯了错),后面可能越写越偏——这就是复合误差(在文本生成中也叫”曝光偏差 exposure bias”)。RLHF 让模型在自己生成的回答上获得反馈(人类或奖励模型对模型自己的输出打分),这和 DAgger”在学习者自己的分布上收集标签”的思想是一致的。
10. 延伸阅读
- CS234 Spring 2024 Lecture 8 录像与课件。
- Pomerleau (1989),ALVINN: An Autonomous Land Vehicle in a Neural Network:最早的行为克隆自动驾驶。
- Ross & Bagnell (2010),Efficient Reductions for Imitation Learning:复合误差的分析。
- Ross, Gordon & Bagnell (2011),A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning:DAgger。
- Laskey et al. (2017),DART: Noise Injection for Robust Imitation Learning。
- Ng & Russell (2000),Algorithms for Inverse Reinforcement Learning;Abbeel & Ng (2004),Apprenticeship Learning via Inverse Reinforcement Learning。
- Ng, Harada & Russell (1999),Policy Invariance under Reward Transformations:势函数塑形。
- Ziebart et al. (2008),Maximum Entropy Inverse Reinforcement Learning。
- Ho & Ermon (2016),Generative Adversarial Imitation Learning。
11. 下一讲预告
模仿学习要求专家示范怎么做。但有些事情人类很难示范、却很容易评判:写一首好诗很难,但读两首诗说出”哪首更好”很容易;写出一段完美的回答很难,但比较两段回答的好坏很容易。
下一讲讨论从人类偏好中学习——这正是 ChatGPT 等大语言模型对齐的核心技术:
- Bradley–Terry 模型:如何把”A 比 B 好”变成一个可以学习的奖励;
- RLHF:监督微调 → 奖励模型 → 带 KL 惩罚的 PPO;
- 奖励过度优化:为什么奖励模型的分数越来越高,真实质量反而下降;
- DPO:一个优美的推导,跳过奖励模型和 RL,直接用偏好数据优化策略。
下一讲之前,建议你:跑通 code/lecture08/ 下的 3 个脚本,完成练习 2、4、6,并思考练习 8。