跳到主要内容

抄专家的作业(上) — 把示范当数据用

这一章讲三件事: 「照着专家做」这句话的正式说法到底在优化什么; 为什么这个办法在训练时看起来完美、一部署就崩; 以及怎么把一份示范塞进强化学习里,才既省样本又不被示范限死。

它在全书链条里的位置:第 11 章那八个障碍的第一味药。 第 11 章说样本效率是头号障碍,并给了三条出路。 这一章和下一章走的是第一条:借人的示范。(第 14 章走第二条:借学出来的环境模型。) 这一章讲「不反推奖励」的那些做法,下一章讲「反推奖励」的。

顶层全景:一条五步的驾驶示范,以及照着它开出去会怎样

这一章从头到尾用同一个例子:有人开过一段路,把每一帧画面和当时的方向盘角度记了下来。 你拿这份记录训一个网络,然后让它自己开。

手上的示范:5 帧画面,每帧配一个方向盘角度。

训练时的成绩:5 帧全部预测准确,平均误差 2 度。★ 看起来很成功。★

实际开起来:

第 1 步 它比示范偏了 2 度 画面和示范里的很像 → 还能开
第 2 步 偏差累到 5 度 示范里最接近的画面已经差得远 → 输出开始不靠谱
第 3 步 车头压线 ★ 示范里根本没有这种画面 ★ → 输出没有任何意义
第 4 步 半个车身出界 更没见过 → 乱打方向
第 5 步 彻底出界 —— → 结束

★ 训练误差 2 度,五步之后车在沟里。这两件事不矛盾 —— 这一章要讲的就是为什么。★

图说:这就是本章的主走查。第 3 节讲第 3 步那个「示范里根本没有」是什么病,
第 4 节讲 2 度怎么变成出界,第 5 节让同一条轨迹重跑一遍、这次救得回来。
(2 度、5 度这几个角度是**为演示编的**,不是书里的数值;两个病名和机制都是书里的。)

1. 「照着专家做」的正式说法是什么

这一节回答:为什么要给一句大白话找一个数学说法。

先看现象

书里给这件事的定位很直接:为了缓解低样本效率的问题,可以利用专家示范来更快地优化策略1

这个思路书里叫模仿学习,也叫学徒学习1它的道理书里说得很朴素:人和动物天生就有模仿同类的能力2

而它省样本的机理书里也点了:相比强化学习,监督学习在数据使用上更高效, 因为它可以利用有标签的数据2「有标签」就是「这一帧的正确答案已经写在旁边了」。

但「照着做」这句话不够精确

问题在于:照着做,是照着每一步的动作做,还是照着最后走出来的样子做?

这两件事不一样,而后面每一类方法优化的到底是哪一个,就靠这个区分。

书里给的正式说法是这样的:先定义一个量,它记的是「按当前这个策略走, 每一个(局面, 动作)的组合会以多大的比重出现」——书里管它叫占用率度量3

一个策略走出来的占用率,可以想成一张很长的清单:

(直路画面, 方向盘 0 度) 比重 0.40
(左弯画面, 方向盘 −15 度) 比重 0.25
(右弯画面, 方向盘 +15 度) 比重 0.25
(压线画面, 方向盘 ??) 比重 0.00 ← ★ 示范里从来没出现过 ★
……
(这些比重是为演示编的;这个量的定义是书里的。)

★ 关键的一步:书里说策略和这张清单是一一对应的。★[^3]
也就是说:定死了这张清单,就等于定死了策略。

于是书里得出这一章的地基句:

★ 模仿学习的问题,等价于「我这张清单」和「专家那张清单」之间的一个匹配问题。★3

书里给的整体目标也是这个意思:增加「从当前策略采样得到的 (局面, 动作) 分布」和「示范数据中的分布」的相似度4

★ 这一句管着后面每一种方法。★ 它们的差别只在于「怎么量两张清单差多远」—— 这一章的做法是逐条对答案,下一章的做法是训一个裁判去分辨。

书里的五类方法

书里在开头画了一张全景图,把模仿学习分成五类5:

一句话在哪一章
行为克隆有答案就当监督学习,逐条对本章 §2–§5
概率性方法不用神经网络,用能给出把握程度的统计模型本章 §6
把示范塞进强化学习的缓存不单独训,直接混进经验里本章 §7–§9
逆向强化学习不学动作,反推奖励第 13 章
从观察量模仿示范里只有画面、没有动作第 13 章

2. 最朴素的做法:它就是监督学习

这一节走主走查的训练那一半。

做法

书里说得很干脆:如果示范数据有相应标签的话,利用示范的模仿学习可以自然地被看作是一个监督学习任务6

数据: {(第 1 帧画面, −3 度), (第 2 帧画面, −1 度), …, (第 5 帧画面, +2 度)}
训练: 让网络对每一帧的输出,尽量贴近那一帧记录下来的角度
损失: 两者之差的平方,加起来求平均

★ 到此为止,这里没有任何强化学习的成分 —— 没有奖励、没有价值、没有贝尔曼方程。★
书里管这个做法叫行为克隆。[^7]
(这五个角度是为演示编的;做法与损失的形式是书里的。)

书里还给了一处技术衔接:如果策略是随机的(比如第 08 章那种输出一组均值和浮动的), 可以用再参数化技巧来处理6 —— 就是第 08 章第 3 节那个「把抽签挪到网络外面」。

一个反直觉的性质:顺序可以打乱

这是这一节最值得记住的一句。

书里说:在满足马尔可夫假设的情况下(即最优动作只依赖于当前状态), 「状态-动作对的顺序在训练中可以被打乱」6

「马尔可夫假设」是第 03 章第 2 节那个词 —— 当前这一眼已经包含了所有该记的东西。

★ 这意味着:这份「五步的驾驶记录」在训练时根本不是一段路,是五张互不相干的图片。★

第 3 帧和第 4 帧是不是挨着的?训练时完全无所谓,打乱了照训。

★ 而这正是下面两个病的根源:训练时它是五张独立的图片,
用起来时它是一条一步接一步的路。★

3. 第一个病:训练见到的和用起来遇到的,不是同一批画面

这一节走主走查的第 3 步,并给出这一章第一个承重词。

先看现象:那张「示范里根本没有」的画面

回到主走查。第 3 步车头压线了。

现在网络看到的这张画面,示范数据里一张都没有 —— 因为那个人开得好,他从来没压过线。

★ 网络在这张画面上会输出什么?一个数。但那个数没有任何依据。★ 它不是「学得不好」,它是「压根没学过」。

书里的说法

这个病的名字来自统计学,先把它拆开: 喂进模型的那些输入,统计上叫变量(一个会变的数, 这里就是画面里的每个像素);而**「同一批输入,训练时的分布和用起来时的分布不一样」,就叫漂移**。

书里给这个病的完整名字是协变量漂移7,机理是:

尽管模仿学习对与示范数据集相似的样本有较好的表现, 「对它在训练过程中未见过的样本可能会有较差的泛化表现」, 因为示范数据集中只能包含有限的样本。7

书里举了一个非常直白的例子。先说「分类器」是什么:一个只负责回答「这张图属于哪一类」的模型。

书里说数据分布可能是分成好几个群集的, 而测试时的新样本可能来自另一个群集 —— 好比「在实践中将一个不同猫的分类器用于区分狗的种类」7

书里给它的定性也很硬:由于行为克隆把决策问题归结为一个监督学习问题, 这个在机器学习中众所周知的问题「可能使通过监督学习方法学得的策略很脆弱」7

为什么这个病在这一行特别毒

在普通的监督学习里,训练分布和测试分布不一样是个麻烦,但你至少管不着测试数据从哪来。

★ 在这一行,测试数据是你自己走出来的。★

普通监督学习: 数据集给你 → 你在上面训 → 拿另一批数据测
↑ 这批数据和你无关

行为克隆: 示范给你 → 你在上面训 → ★ 你自己开出去 ★
↑ 你走到哪儿,取决于你有多准
↑ 而你越不准,走到的地方越陌生
↑ 而越陌生,你就越不准

★ 训练分布和测试分布之间,有一条你自己造出来的正反馈。★

4. 第二个病:小误差沿着轨迹越滚越大

这一节走主走查的从第 1 步到第 5 步,并给出第二个承重词。

书里的说法

书里给这个病的名字是复合误差8,定义是: 「一种小误差可以随时间累积而最终导致显著不同的状态分布的现象」8

而书里点名了放大器是谁:

★「强化学习任务的马尔可夫性质是导致复合误差的主要因素,即连续误差的放大效应。」★8

书里还把两个病的关系写清楚了:在行为克隆里,每一个时间步上产生的误差, 「主要可能是由上面所述的协变量漂移所造成的」8

两个病怎么咬合

★ 这两个病不是并列的两条,是一个环:★

协变量漂移 → 这一步偏一点
↑ ↓
走到更陌生的画面 ← 偏了之后到达的地方,示范里更少见
↑ ↓
└────── 复合误差 ──────┘

主走查上就是这么走的:
第 1 步偏 2 度 → 画面还在示范覆盖的范围里 → 还能救
第 2 步偏 5 度 → 已经在示范的边缘 → 输出开始飘
第 3 步压线 → ★ 出了示范的覆盖范围 ★ → 输出毫无依据
第 4、5 步 → 越走越远,不可能回来

★ 注意第 3 步那个转折:前两步是「不够准」,第 3 步开始是「无从谈起」。★
(这些角度是为演示编的;两个病名与它们的因果关系是书里的。)

★ 这就解释了顶层全景那个悖论:训练误差 2 度,五步后车在沟里。★ 因为训练时那五帧是打乱了的独立图片,而开起来时它们是一条会自己滚下去的路。

5. 一条有效的解药,和它的账单

这一节让主走查重跑一遍,这次救得回来。

做法:在自己走出来的画面上,请专家补答案

病根是「训练数据只覆盖专家走过的地方」。那就把自己走到的地方也补进去。

书里介绍的方法叫数据集聚合,通常写作 DAgger9

一轮长这样:

① 用一个混合策略去开:一部分听专家的,一部分听自己的
(书里给的写法是「专家策略 × 一个系数 + 自己的策略 × 剩下的部分」[^11])
② 把这一轮实际走过的画面全部记下来 —— ★ 包括压线那张 ★
③ 把这些画面拿去问专家:「这时候你会打多少度?」
④ 把「这些画面 + 专家的答案」并进原来的数据集
⑤ 在扩充后的数据集上重新训一遍,回到 ①

书里对第 ② 步的说法是:数据集包含「当前策略在整个模仿学习过程中遇到的状态
和相应的专家动作」。[^10]

主走查重跑一遍

第 1 轮:和之前一样,第 3 步压线、第 5 步出界。
★ 但这一次,压线那张画面被记下来了。★
拿去问专家 → 他说「这时候要打 +12 度」→ 这一条进了数据集。

第 2 轮:重新训完再开。走到第 3 步、还是压线那张画面 ——
★ 但现在网络见过它了,输出 +12 度,车拉回来了。★
于是它走到了第 6、7 步 —— 那里又有新的没见过的画面,再记下来、再问专家。

★ 每一轮把「上一轮翻车的地方」变成训练数据。这就是它有效的全部原因。★
(+12 度是为演示编的;这套流程是书里的。)

书里说这个办法是「无悔的」迭代算法,并解释了它为什么更有用: 它主动选择策略,使得「在随后过程中有更大几率遇到示范样本」9

账单

书里当场把代价写出来了:

★「DAgger 同样有一个缺陷,即它需要不断地与专家交互,而这在现实应用中通常是一种苛求。」★9

★ 这句话要记住:它把「有一份录好的示范」这个廉价前提,换成了「专家得一直在旁边待命」。★ 在自动驾驶上这意味着一个司机全程陪跑;在机器人上意味着一个人全程遥控。

判断(我们的,不是书里的): 这一章列了七八种做法,而真正堵住那个环的只有 DAgger 一种。 §4 那个环之所以转得起来,根源是「训练数据只覆盖专家走过的地方」; ★ 而只有 DAgger 去改了这一条 —— 它把「我自己走到的地方」也变成训练数据。★ 其余的做法(预训练时随机丢弃、拿模仿当起点、把示范倒进缓存、用示范撒路标) 都不改这个覆盖范围,它们改的是「偏了之后还有没有别的信号把我拉回来」—— 而那个别的信号,来自强化学习本身的奖励。 ★ 所以这一章后半段的真实含义是:既然堵不住那个环,那就别指望模仿学到底。★ 如果错,会错在: 示范如果足够多、足够覆盖,那个环本来就不会启动 —— 那样这些做法都够用,DAgger 也就不必要了。 判据是:你的示范里有没有「专家犯了错又救回来」的片段 —— 有,覆盖范围就够宽;没有(而好的专家通常不犯错),那个环就一定会启动。

还有一个更便宜的缓解办法

书里给了另一个不需要专家在场的技巧:先用示范预训练, 但不是把权重原样搬过去,而是「把预训练得到的权重参数化为高斯分布」, 再按一条事先划死的界线(这种事先划死的界线叫阈值)随机丢掉一部分, 拿这个结果去初始化强化学习的策略10

书里说它比「直接往预训练的权重里加噪声」更高级,理由很具体: 它「可以减少对噪声大小选择的敏感性」10

★ 这条的用意和上一条不同:上一条是把示范补全,这一条是故意让克隆得没那么死,好给后面的学习留余地。★

6. 岔一句:不是只有神经网络这一条路

这一节讲书里专门留的一节,而它给了一个神经网络给不了的东西。

书里在这里列了一串统计学的方法(高斯混合回归、动态运动基元一类)11, 并且当场声明了自己讲得浅:因为本书主要介绍用深度神经网络参数化的方法, 所以「仅简单介绍这些概率性方法」11

书里还有一句很坦白的话:把这类方法和深度强化学习结合起来 「本身就不是平庸的」,不像本章其他方法那样直接11 —— 「不是平庸的」在这里的意思是「不容易」,不是「不普通」。

但它有三个真优点,书里逐条给了

优点书里的说法为什么有用
★ 它给的是分布,不是一个数 ★「不同于深度神经网络给出确定性的预测结果」,它算出来的协方差矩阵**「编码了预测轨迹的变化性」**12你能读出「它对这一步有多没把握」
有现成的解根据概率论的支持**「通常有解析解」**,这和深度网络那种黑盒优化不同12不必迭代,直接算
小数据下快「能够在数据量较小时用较短时间求解」12示范只有几条时更划算

★ 第一条是真正的差异。★ 书里给了它值钱的场合: 在机器人操作或车辆驾驶里,为了保证安全,每个指令的可行性和风险都需要以概率的方式来分析12

主走查上是这样:

神经网络: 第 3 步压线画面 → 输出「+7 度」 ★ 你不知道它是瞎猜的 ★
概率方法: 第 3 步压线画面 → 输出「+7 度,上下浮动 20 度」
★ 浮动这么大,等于它在说「我不知道」★

★ 这就是「有把握程度」值钱的地方:它把「没学过」这件事变成了一个能读出来的数。★
(+7 度与 20 度是为演示编的;这类方法给出协方差、因而带置信度,是书里的。)

书里还说,其中有一类结合了两种统计模型的方法,对没见过的输入点有快速的适应能力, 因为它把一边估出的多样化信息「封装到了另一边的不确定性估计中」13

7. 更实用的用法:拿模仿当强化学习的起点

这一节开始讲这一章后半段,而这才是这份示范在工程上真正的用法。

书里为什么转这个弯

书里的理由写得很实在:实际中,来自模仿学习的策略「通常没有足够的泛化能力」, 尤其是对于未见过的情况14 —— 就是前面那两个病。

所以书里换了个用法:不指望模仿学出最终策略,而是拿它去初始化强化学习。

★ 这一转弯还带来一个很松的要求,书里明说了:★

「我们并不需要模仿学习给出的策略是最优的, 而是通过一个相对简单的学习过程得到一个足够好的策略。」14

书里还说,更精致的模仿方法「毫无疑问会成为更好的初始化策略」, 但也会带来较长的预训练时间等缺点14 —— 所以它只挑了简单直接的几种。

两条路

书里给了两条15:

做法
策略替换直接拿模仿学到的策略当强化学习的初始策略,然后照常训
★ 残差策略学习 ★把模仿学到的策略整个冻住,在旁边学一个「修正量」;实际动作 = 初始策略给的 + 修正量

书里给第二条的理由是一个很常见的工程处境:机器人控制任务通常已经有一个 「较好但是不完美的控制器」,那就以它为底,只学修正16

书里对这条路的评价一句话:这种方式「能够尽可能地保持初始策略的表现」17

书里给了完整的接线图

这是全书少有的把网络数点清楚的地方。 书里以 DDPG(第 10 章那个)为底, 列出了一共六个网络18:

① 批判者 ② 目标批判者 ← 和普通 DDPG 一样
③ 残差策略 ④ 目标残差策略 ← ★ 只有这两个在学 ★
⑤ 初始策略 ⑥ 目标初始策略 ← ★ 模仿学来的,冻住不动 ★

两个关键细节:
· ★ 残差策略和它的目标网络,最后一层要零值初始化 ★[^20]
—— 这样一开始修正量恰好是 0,整个策略就等于那个模仿学来的策略,不会一上来就搞砸。
· ★ 存进缓存的动作是「修正量」,不是最终动作 ★[^21]
—— 批判者和策略都只针对修正量来学。

书里的收口句:对比一般的 DDPG,不同之处只是
「对残差策略的动作,而非智能体的整个动作,来学习动作价值函数和策略」。[^22]

8. 更省事的用法:把示范直接倒进回放缓存

这一节讲第三类做法,它连预训练都省了。

做法

书里介绍的一类方法直接把专家轨迹导入回放缓存,而不是预训练一个策略去初始化19

普通的离线策略算法: 缓存里全是自己采的经验
这一类做法: ★ 缓存一开始就装满专家的经验,然后一边跑一边往里加自己的 ★

离散动作那一版用的是 DQN(第 07 章),
它的损失是「一个监督式的折页损失」加上「一般的时间差分损失」;
抽样用的是第 07 章第 7 节那个按误差偏心抽样的做法。[^23]
连续动作那一版换成 DDPG(第 10 章),同一个思路。[^24]

书里对连续那一版还说了一句实话:它适合简单、易解决的任务;
而稀疏奖励一类的难任务,需要在训练中进行更积极的探索。[^24]

一个必须加的过滤条件

先看现象:如果示范本身不够好呢?

你把专家的经验混进去、还专门加一项损失去贴近它 —— 那策略就永远超不过这份示范了。

书里给的解法叫 Q-Filter,它的做法一句话说得完:

★ 行为克隆那一项损失只在一部分局面上生效 —— 那些「批判者判定示范者动作比演员动作更好」的局面。★20

书里给这一招的理由写得很直白:这「保证了策略能够探索到更好的动作, 而不是被示范数据所限制」20

主走查上是这样:

某个局面,批判者给示范里那个动作打 3.2,给策略自己的动作打 2.5
→ 3.2 > 2.5,★ 示范更好 → 这一项损失生效,把策略往示范上拉 ★

另一个局面,批判者给示范动作打 1.8,给策略自己的动作打 4.1
→ 1.8 < 4.1,★ 策略已经比示范强了 → 这一项损失关掉,不许往回拉 ★

(3.2 / 2.5 / 1.8 / 4.1 是为演示编的;这个开关条件是书里的。)

书里还提到另一个思路:有一个方法在预训练和强化学习两个阶段用完全相同的目标函数, 「这使得它对包含次优样本的示范数据也表现得很鲁棒」; 而且它是依次使用示范数据和交互样本,不是同时使用21

★ 把这两条放在一起看,它们治的是同一个病 —— 示范不完美时怎么不被它拖住。★ 一个靠开关(批判者说了算),一个靠统一目标(两个阶段用同一把尺子)。

9. 最后一种用法:拿示范去改奖励函数

这一节给出一个式子,而它到下一章会调头变成这一整条路上最大的麻烦。

先看现象:前面几种做法改的都是策略,这一种改的是价值

书里说这个方法**「专注于初始化强化学习中价值函数而非动作策略」**22

它要治的还是稀疏奖励:书里的说法是「给智能体提供了一个中间的奖励来丰富稀疏奖励信号」22

那个式子,以及它凭什么能加

先说凭什么能加,因为这才是关键。

书里在另一节里给了一条 1999 年的结论:有一类对奖励的改动,不会改变最优策略。 形式是这样的23:

新奖励 = 原奖励 + 折扣 × 下一个局面的「势」 − 这一个局面的「势」

「势」是你自己随便定的一个函数,输入一个局面、输出一个数。

★ 书里的结论:不管这个「势」你怎么定,最优策略保持不变。★[^28]

为什么直觉上说得通:沿着一条轨迹把这些加项累起来,
中间那些「势」两两抵消,只剩首尾两项 ——
所以它改变的是「分数怎么分摊到每一步」,不改变「整条路总共值多少」。
(这个抵消的说法是我们的解释;不变性的结论是书里的。)

★ 这就是一张空白支票:你可以在稀疏奖励的任务上随便撒路标,而不担心改坏了目标。★

拿示范来填这个「势」

书里的做法:让「势」在「离示范走过的局面最近」的地方最大24

书里的原话是:它**「被用来最大化最接近示范状态的状态的势值」24; 而优化后的势函数还被直接拿去初始化动作价值函数**24

主走查上是这样(奖励原本只在终点给 +10,中间全是 0):

当前局面离示范轨迹很近 → 势 = 0.9
走一步之后更贴近示范 → 势 = 0.95
这一步的额外奖励 = 0.99 × 0.95 − 0.9 = ★ +0.04 ★

如果走反了,离示范更远 → 势 = 0.7
这一步的额外奖励 = 0.99 × 0.7 − 0.9 = ★ −0.21 ★

★ 原本全是 0 的那一段路,现在每一步都有了正负分明的分数。★
书里对这件事的直观解释是:让探索到的样本「倾向于那些等于或接近示范数据的状态-动作对」,
从而加速训练。[^30]
(0.9 / 0.95 / 0.7 与折扣 0.99 是为演示编的;式子与做法是书里的。)

★ 记住这个式子。★ 它在这一章是一件工具:因为最优策略不变,所以可以放心撒路标。 而到第 13 章第 2 节,同一个式子会调头变成一个大麻烦 —— 正因为「怎么加都不改变最优策略」,所以从行为反推奖励时,你根本分不出是哪一个。 同一个数学形式,一次是解药、一次是病因。

作者的判断与证据

书里给了明确定义或引了具体工作的:

  • 模仿学习等价于两张「占用率」清单的匹配问题3 —— 这是这一章的地基,书里给了定义和一一对应的理由;
  • 两个病的名字、机理和因果关系78 —— 都引了 2010、2011 年的具体工作;
  • ★「马尔可夫性质是导致复合误差的主要因素」★8 —— 一句机理判断,书里没有给实验;
  • 奖励塑形下最优策略不变23 —— 引的是 1999 年那条结论;
  • 六个网络的完整接线与零值初始化18 —— 这是全书少有的实现级细节。

作者的坦白(三处,都值得记):

  • 「把概率性方法和深度强化学习结合起来本身就不是平庸的」11 —— 承认这条路不好走,所以只讲了个大概;
  • 「DAgger 需要不断地与专家交互,而这在现实应用中通常是一种苛求」9;
  • 「来自模仿学习的策略通常没有足够的泛化能力」14 —— 这是全章从「学到底」转向「只当起点」的理由。

书里没有给的:

  • ★ 这一章一个实验数字都没有。★ 哪种做法省下的样本更多、比不用示范快几倍,全书这一章零数据;
  • 五类做法之间怎么选,书里没有给判据 —— 只说了各自的原理和一两句适用场合;
  • 示范要多少条才够,书里没有讨论。

边界与局限

  • ★ 整章的前提是「你手上有一份示范」。★ 而第 11 章说过,示范本身往往就是最贵的那一项 (在机器人上意味着有人全程遥控);
  • 这一章的方法全部要求示范里有动作标签 —— 从视频里学(只有画面、没有方向盘角度)不在这一章, 在第 13 章;
  • 行为克隆那两个病,这一章只给了缓解,没有给根治。 DAgger 要专家常驻; 预训练加随机丢弃只是让克隆没那么死;
  • 残差策略学习依赖「已经有一个不错的初始控制器」 —— 没有它,这条路不成立;
  • 奖励塑形的「势」怎么定,书里只给了一个具体形式(离示范越近势越大), 没有讨论示范本身不好时会怎样;
  • 概率性方法那一节,书里自己说只是「简单介绍」 —— 想真用要去看它引的那六篇。

可带走的

全章那条走查,一行写完: 五帧驾驶示范,训练误差 2 度 → 开出去第 1 步偏 2 度(还在示范覆盖内) → 第 2 步偏 5 度(到边缘了) → 第 3 步压线,示范里根本没有这张画面,输出毫无依据 → 第 4、5 步出界 → 换成 DAgger 重跑:第 1 轮把压线那张画面记下来、问专家得到 +12 度、并进数据集 → 第 2 轮同一处能拉回来了,于是走到更远、再遇到新的没见过的画面。 (角度全部是为演示编的;两个病与这套流程都是书里的。)

  1. 模仿学习的正式说法是「让我走出来的(局面, 动作)分布,贴近专家那一份」 —— 这一句管着后面每一种方法,它们只在「怎么量两张分布差多远」上不同;
  2. 行为克隆就是监督学习 —— 没有奖励、没有价值、没有贝尔曼方程;
  3. ★ 训练时那些示范是可以打乱顺序的独立样本;用起来时它们是一条会自己滚下去的路。★ 这一句是后面两个病的总根源;
  4. 协变量漂移:你一偏,就走到示范里从来没有过的局面 —— 网络在那里不是学得差,是没学过;
  5. ★ 在这一行,测试数据是你自己走出来的 —— 越不准走得越陌生,越陌生就越不准。★
  6. 复合误差:小误差沿轨迹累积;而放大器就是「一步接一步」这个结构本身;
  7. DAgger = 在自己走出来的新局面上请专家补答案,一轮轮并进数据集。有效, 代价是★专家得一直在场★ —— 书里说这在现实中「通常是一种苛求」;
  8. 概率性方法给的是分布不是一个数 —— 你能读出「它对这一步有多没把握」,而神经网络给不了;
  9. 更实用的用法是拿模仿当起点,而不是当终点 —— 因为模仿出来的策略泛化不够;
  10. 两条初始化路线:直接替换策略,或者把它冻住、只学一个修正量;
  11. ★ 残差策略的最后一层要零初始化 —— 一开始修正量是 0,整个策略恰好等于那个模仿来的策略。★
  12. 也可以连预训练都省掉:把专家轨迹直接倒进回放缓存,和自己采的经验一起抽;
  13. ★ 但要配一个开关(Q-Filter):只有批判者认为示范动作更好时,那项克隆损失才生效 —— 否则策略永远超不过示范。★
  14. 奖励塑形:给奖励加上「折扣 × 下一步的势 − 这一步的势」,最优策略一个字都不变 —— 所以可以拿示范构造出势来给稀疏任务撒路标;
  15. ★ 记住第 14 条那个式子 —— 到第 13 章它会调头变成这条路上最大的麻烦。★

原文地图

主题原书章原文位置
模仿学习的定位与别名第8章 模仿学习text/13-ch08.txt:3(搜「或称学徒学习」) · text/13-ch08.txt:13(搜「有着低样本效率的问题」)
为什么省样本第8章 模仿学习text/13-ch08.txt:17(搜「这些专家示范依据先验知识而对策略选择有一定偏向性」) · text/13-ch08.txt:22(搜「监督学习在数据使用方面是一种更加高效的方法」)
占用率与分布匹配第8章 模仿学习text/13-ch08.txt:69(搜「模仿学习的概念可以用学徒学习的形式」) · text/13-ch08.txt:74(搜「学习的问题等价于」) · text/13-ch08.txt:84(搜「仿学习的整体目标就是增加从当前策略采样得到的」)
五类方法的全景图第8章 模仿学习text/13-ch08.txt:67(搜「模仿学习算法概览」)
行为克隆的做法与打乱顺序第8章 模仿学习text/13-ch08.txt:88(搜「如果示范数据有相应标签的话」) · text/13-ch08.txt:91(搜「在满足 MDP 假设的情况下」) · text/13-ch08.txt:93(搜「状态-动作对的顺序在训练中可以被打乱」) · text/13-ch08.txt:109(搜「这个使用监督学习直接模仿专家示范的方法在文献中称为行为克隆」)
协变量漂移第8章 模仿学习text/13-ch08.txt:114(搜「对它在训练过程中未见过的样本可能会有较差的泛化表现」) · text/13-ch08.txt:120(搜「区分狗的种类」) · text/13-ch08.txt:121(搜「的问题可能使通过监督学习方法学得的策略很脆弱」)
复合误差第8章 模仿学习text/13-ch08.txt:134(搜「这是一种小」) · text/13-ch08.txt:135(搜「误差可以随时间累积而最终导致显著不同的状态分布」) · text/13-ch08.txt:136(搜「任务的 MDP 性质是导致复合误差的主要因素」)
DAgger第8章 模仿学习text/13-ch08.txt:143(搜「是一种更先进的基于 BC 方法」) · text/13-ch08.txt:145(搜「在随后过程中有更大几率遇到示范样本」) · text/13-ch08.txt:148(搜「即它需要不断地与专家交互」) · text/13-ch08.txt:156(搜「πi ← βi π」)
预训练加随机丢弃第8章 模仿学习text/13-ch08.txt:165(搜「一种缓解模仿学习中泛化问题的方法是预训练并使用」) · text/13-ch08.txt:169(搜「它可以减少对噪声大小选择的敏感」)
概率性方法及其三个优点第8章 模仿学习text/13-ch08.txt:754(搜「本身就不是平庸的」) · text/13-ch08.txt:757(搜「不同于深度神经网络给出确定性的预测结果」) · text/13-ch08.txt:758(搜「编码了预测轨迹的变化性」) · text/13-ch08.txt:761(搜「通常有解析解」)
对新输入点的快速适应第8章 模仿学习text/13-ch08.txt:777(搜「被封装到 GP 的不确定性」)
转向「当起点」的理由第8章 模仿学习text/13-ch08.txt:793(搜「策略通常没有足够的泛化能力」) · text/13-ch08.txt:795(搜「我们并不需要模仿学习给出的」)
策略替换与残差策略第8章 模仿学习text/13-ch08.txt:801(搜「策略替换」) · text/13-ch08.txt:804(搜「基于一个较好但是不完美的控制器」) · text/13-ch08.txt:812(搜「残差策略学习能够尽可能地保持初始策略的表现」)
六个网络与零值初始化第8章 模仿学习text/13-ch08.txt:823(搜「进行零值初始化」) · text/13-ch08.txt:824(搜「一共是六个网络」) · text/13-ch08.txt:827(搜「的形式存储」) · text/13-ch08.txt:845(搜「使用残差策略学习的不同只是对残差策略的动作」)
把示范倒进回放缓存第8章 模仿学习text/13-ch08.txt:852(搜「通过直接将专家轨迹导入离线」) · text/13-ch08.txt:856(搜「监督式折页损失函数」) · text/13-ch08.txt:863(搜「优先经验回放被用来平衡两种训练数据」)
Q-Filter第8章 模仿学习text/13-ch08.txt:874(搜「它要求行为克隆损失函数只用于部分状态」) · text/13-ch08.txt:875(搜「判定示范者动作比行动者动作更好」) · text/13-ch08.txt:882(搜「这保证了策略」)
两阶段同一目标函数第8章 模仿学习text/13-ch08.txt:893(搜「这使得 NAC 对包含次优样本的示范数据也表现得很鲁棒」) · text/13-ch08.txt:894(搜「但是它依次使用示范数据和交互样本」)
奖励塑形不变性第8章 模仿学习text/13-ch08.txt:251(搜「这个概念描述了一类能保持最优策略的奖励函数变换」) · text/13-ch08.txt:256(搜「最优策略对任何函数」)
用示范做奖励塑形第8章 模仿学习text/13-ch08.txt:898(搜「它给智能体提供了一个中间的奖励来丰富」) · text/13-ch08.txt:903(搜「通过势函数」) · text/13-ch08.txt:915(搜「它被用来最大化最接近示范状态」) · text/13-ch08.txt:920(搜「奖励塑形的直观理解是使探索到的样本倾向于那些等于或接近示范数据的状态-动作对」)

Footnotes

  1. 出处:「第8章 模仿学习」第 3 段(text/13-ch08.txt:3,搜「或称学徒学习」)与第 13 段(text/13-ch08.txt:13,搜「有着低样本效率的问题」)。原书明说这一章是为了缓解第 7 章讨论的低样本效率问题。 2

  2. 出处:「第8章 模仿学习」第 17 段(text/13-ch08.txt:17,搜「这些专家示范依据先验知识而对策略选择有一定偏向性」)、第 20 段(text/13-ch08.txt:20,搜「人类和动物天生就有模仿同类其他个体的能力」)与第 22 段(text/13-ch08.txt:22,搜「监督学习在数据使用方面是一种更加高效的方法」)。原文用的说法是:这些「有效的偏见」可以通过一个适当的学习过程被提取或转移到策略里。 2

  3. 出处:「第8章 模仿学习」第 69 段(text/13-ch08.txt:69,搜「模仿学习的概念可以用学徒学习的形式」)、第 73 段(text/13-ch08.txt:73,搜「这是一个用当前策略估计的状态和动作的联合分布」)与第 74 段(text/13-ch08.txt:74,搜「学习的问题等价于」)。原书把这个量叫「占用率的度量」,并指出策略集合与它的取值集合是一一对应的。 2 3

  4. 出处:「第8章 模仿学习」第 80 段(text/13-ch08.txt:80,搜「之间的距离度量」)与第 84 段(text/13-ch08.txt:84,搜「仿学习的整体目标就是增加从当前策略采样得到的」)。原书给的目标里还有一项带权衡因子的正则项,用的是策略的因果熵。

  5. 出处:「第8章 模仿学习」第 67 段(text/13-ch08.txt:67,搜「模仿学习算法概览」)。这是原书的图 8.1,它把模仿学习分成五支;转码出来的文本里这张图的文字是错位的,分类要结合第 6 段那句总述一起读。

  6. 出处:「第8章 模仿学习」第 88 段(text/13-ch08.txt:88,搜「如果示范数据有相应标签的话」)、第 91 段(text/13-ch08.txt:91,搜「在满足 MDP 假设的情况下」)、第 93 段(text/13-ch08.txt:93,搜「状态-动作对的顺序在训练中可以被打乱」)与第 102 段(text/13-ch08.txt:102,搜「可以用再参数化技巧来处理」)。 2 3

  7. 出处:「第8章 模仿学习」第 113 段(text/13-ch08.txt:113,搜「尽管模仿学习可以对与示范数据集」)、第 114 段(text/13-ch08.txt:114,搜「对它在训练过程中未见过的样本可能会有较差的泛化表现」)、第 120 段(text/13-ch08.txt:120,搜「区分狗的种类」)与第 121 段(text/13-ch08.txt:121,搜「的问题可能使通过监督学习方法学得的策略很脆弱」)。原书引的是 Ross 等人 2010 年的工作。 2 3 4 5

  8. 出处:「第8章 模仿学习」第 134 段(text/13-ch08.txt:134,搜「这是一种小」)、第 135 段(text/13-ch08.txt:135,搜「误差可以随时间累积而最终导致显著不同的状态分布」)、第 136 段(text/13-ch08.txt:136,搜「任务的 MDP 性质是导致复合误差的主要因素」)与第 137 段(text/13-ch08.txt:137,搜「实际上在每一个时间步上产生的误差主要可能是由上面所述的协变量漂移所造成的」)。原书引的是 Ross 等人 2011 年的工作。 2 3 4 5 6

  9. 出处:「第8章 模仿学习」第 143 段(text/13-ch08.txt:143,搜「是一种更先进的基于 BC 方法」)、第 145 段(text/13-ch08.txt:145,搜「在随后过程中有更大几率遇到示范样本」)、第 147 段(text/13-ch08.txt:147,搜「这些数据集包含当前策略在整个模仿学习过程中遇到的状态」)与第 148 段(text/13-ch08.txt:148,搜「即它需要不断地与专家交互」)。原书引的是 Ross 等人 2011 年的工作,并称它是一种「无悔的」迭代算法。 2 3 4

  10. 出处:「第8章 模仿学习」第 165 段(text/13-ch08.txt:165,搜「一种缓解模仿学习中泛化问题的方法是预训练并使用」)、第 167 段(text/13-ch08.txt:167,搜「得到的权重被参数化为高斯分布」)与第 169 段(text/13-ch08.txt:169,搜「它可以减少对噪声大小选择的敏感」)。原书把这个方法叫 Variational Dropout,引的是 2018 与 2017 年两篇工作。 2

  11. 出处:「第8章 模仿学习」第 745 段(text/13-ch08.txt:745,搜「许多概率推理方法也可以被用于模仿学习」)与第 754 段(text/13-ch08.txt:754,搜「本身就不是平庸的」)。原书在这里列了六类概率性方法,并说明因为本书主要讲深度神经网络参数化的方法,所以只作简单介绍。 2 3 4

  12. 出处:「第8章 模仿学习」第 757 段(text/13-ch08.txt:757,搜「不同于深度神经网络给出确定性的预测结果」)、第 758 段(text/13-ch08.txt:758,搜「编码了预测轨迹的变化性」)、第 760 段(text/13-ch08.txt:760,搜「每个指令的可行性和风险都需要以概率模型的方式来分析」)、第 761 段(text/13-ch08.txt:761,搜「通常有解析解」)与第 762 段(text/13-ch08.txt:762,搜「能够在数据量较小时用较短时间求解」)。 2 3 4

  13. 出处:「第8章 模仿学习」第 777 段(text/13-ch08.txt:777,搜「被封装到 GP 的不确定性」)。原书说的是「基于高斯混合回归的高斯过程」这一类结合方法:一边的条件均值当另一边的先验均值,一边各组分的核叠加成另一边的核。

  14. 出处:「第8章 模仿学习」第 793 段(text/13-ch08.txt:793,搜「策略通常没有足够的泛化能力」)、第 795 段(text/13-ch08.txt:795,搜「我们并不需要模仿学习给出的」)与第 798 段(text/13-ch08.txt:798,搜「毫无疑问会成为更好的初始化策略」)。 2 3 4

  15. 出处:「第8章 模仿学习」第 800 段(text/13-ch08.txt:800,搜「它们被看作是对强化学习策略较好的初始化」)与第 801 段(text/13-ch08.txt:801,搜「策略替换」)。

  16. 出处:「第8章 模仿学习」第 804 段(text/13-ch08.txt:804,搜「基于一个较好但是不完美的控制器」)与第 805 段(text/13-ch08.txt:805,搜「初始控制器可以是一个模拟器中预训练的策略」)。原书引的是 2018、2019 两年的两篇工作。

  17. 出处:「第8章 模仿学习」第 812 段(text/13-ch08.txt:812,搜「残差策略学习能够尽可能地保持初始策略的表现」)。原书给的式子就是「动作 = 初始策略的输出 + 残差策略的输出」。

  18. 出处:「第8章 模仿学习」第 823 段(text/13-ch08.txt:823,搜「进行零值初始化」)与第 824 段(text/13-ch08.txt:824,搜「一共是六个网络」)。原书写明:批判者与目标批判者按一般方式初始化,残差策略与目标残差策略的最后网络层零值初始化,模仿学到的策略作为初始策略与目标初始策略并被固定住。 2

  19. 出处:「第8章 模仿学习」第 852 段(text/13-ch08.txt:852,搜「通过直接将专家轨迹导入离线」)与第 856 段(text/13-ch08.txt:856,搜「监督式折页损失函数」)。原书把这个方法叫 DQfD,引的是 Hester 等人 2018 年的工作;它用的是离散动作,底子是 DQN。

  20. 出处:「第8章 模仿学习」第 874 段(text/13-ch08.txt:874,搜「它要求行为克隆损失函数只用于部分状态」)、第 875 段(text/13-ch08.txt:875,搜「判定示范者动作比行动者动作更好」)与第 882 段(text/13-ch08.txt:882,搜「这保证了策略」)。原书还给了这个方法的整体损失:强化学习目标与行为克隆损失按两个系数加权。 2

  21. 出处:「第8章 模仿学习」第 892 段(text/13-ch08.txt:892,搜「使用完全相同的」)、第 893 段(text/13-ch08.txt:893,搜「这使得 NAC 对包含次优样本的示范数据也表现得很鲁棒」)与第 894 段(text/13-ch08.txt:894,搜「但是它依次使用示范数据和交互样本」)。原书把这个方法叫「标准化 Actor-Critic」。

  22. 出处:「第8章 模仿学习」第 897 段(text/13-ch08.txt:897,搜「用示范数据进行奖励塑形」)与第 898 段(text/13-ch08.txt:898,搜「它给智能体提供了一个中间的奖励来丰富」)。原书引的是 Brys 等人 2015 年的工作。 2

  23. 出处:「第8章 模仿学习」第 250 段(text/13-ch08.txt:250,搜「它始于奖励塑形」)、第 251 段(text/13-ch08.txt:251,搜「这个概念描述了一类能保持最优策略的奖励函数变换」)与第 256 段(text/13-ch08.txt:256,搜「最优策略对任何函数」)。这几段在原书的 8.3.2 节(讲逆向强化学习的两个挑战),不在 8.7 节;我们把不变性这条结论提到这里,是因为它正是 8.7.3 那个做法能成立的前提。原书引的是 Ng 等人 1999 年的工作。 2

  24. 出处:「第8章 模仿学习」第 903 段(text/13-ch08.txt:903,搜「通过势函数」)与第 915 段(text/13-ch08.txt:915,搜「它被用来最大化最接近示范状态」)。原书给的势函数具体形式是:在所有示范状态里,取与当前状态最接近的那一个,按一个高斯形式的相似度算出势值;优化后的势函数还被直接拿去当动作价值函数的初值。 2 3