抄专家的作业(下) — 不学动作,反推奖励
这一章讲三件事: 为什么有些任务只能反推奖励、不能照着动作学; 反推这件事本身为什么是个死结,以及绕过它要付什么代价; 以及示范里连动作都没有(只有一段视频)时,还剩哪些办法。
它在全书链条里的位置:第 12 章的下半场。 两章治的是同一个障碍(样本效率),用的是同一份资源(人的示范); 分界线只有一条:要不要把奖励函数反推出来。 第 12 章不反推,这一章反推 —— 以及反推不成时怎么办。
顶层全景:一段「拉开抽屉」的视频,判别器的三次打分
这一章从头到尾用同一个例子:一段人拉开抽屉的视频。 只有画面,没有记录他的手往哪个方向使了多大劲。
第 12 章那套办法在这里全部失效 —— 它们都要求「这一帧配一个动作」。
做法:训一个裁判,让它去分辨「这一帧是那个人做的,还是我的策略做的」。
裁判越说不清,说明我做得越像。★ 裁判的打分,就当我这一步的奖励。★
裁判输出一个 0 到 1 的数,越接近 1 表示它越认为「这是专家做的」。
第 1 轮 给专家的帧打 0.9 给策略的 帧打 0.3 → 策略这一步的奖励 = ln(0.3) = **−1.20**
★ 差得远,一眼就分出来了 ★
第 2 轮 给专家的帧打 0.7 给策略的帧打 0.45 → 奖励 = ln(0.45) = **−0.80**
★ 涨了 0.40,说明策略在变像 ★
第 N 轮 ★ 对谁都打 0.5 ★ → 奖励 = ln(0.5) = **−0.69**
★ 对专家和策略给出同一个数 ★
┌── 好消息:策略确实学会了 —— 裁判分不出来,就是「做得一样」的定义。
└── ★ 坏消息:这时候你手上什么都没有。裁判对所有输入都输出 0.5,
从它身上提不出任何一个「什么样算好」的函数。换个抽屉、换个房间,一切重来。★
图说:这就是本章的主走查。第 4 节推出这套做法,第 5 节说明那个 0.5 意味着什么,
第 6、7 节讲怎么把奖励函数捞回来。
(三组打分是**为演示编的**;「最优时对所有输入收敛到 0.5」是书里的结论,
三个奖励值是我们按那三个打分算的。)
1. 有些任务的奖励根本写不出来
这一节回答:上一章那套已经能用了,为什么还要往回推一层。
先看现象:一个你写不出公式的目标
书里举的例子非常好,而且一句话就能说明白。 这里的注意力指的是字面意思:有限的算力该多分给哪一路输入。
对于一个基于视觉的自动驾驶车辆,「多少注意力应当被分配到处理不同的反光镜上」—— 这难以通过奖励函数工程的方式来定义。1
你知道「看后视镜」是对的,但你写不出「左后视镜值 0.3 分、右后视镜值 0.2 分」这种公式。 更麻烦的是这些目标之间要权衡,而权衡的系数你也说不出来。
书里给的定位就是这句:逆向强化学习对某些应用是有用的, 比如「难以写出显式的奖励函数来实现在不同的目标之间权衡」的情况1。
做法:从行为里把奖励倒推出来
书里给这件事的名字是逆向强化学习,定义一句话: 从观察到的最优行为中提取奖励函数2。
正着走(前十章): 给你奖励函数 → 学一个策略
★ 倒着走(这一章): 给你一份好行为 → 反推出「他在最大化什么」★
而它实际怎么跑?书里说这类方法「反复地在两个过程中交替」2:
外循环: 拿示范去推断一个隐藏的奖励(或者它的负数,代价)函数
↓
内循环: ★ 拿这个推断出来的奖励,跑一遍完整的强化学习,学出一个策略 ★
↓
看这个策略和专家差多远,回到外循环改奖励
书里给挑奖励函数的原则也写死了:选一个奖励函数,让专家的动作最优,
并且「使得任何脱离于专家策略的单步选择尽可能产生更大损失」。[^2]
★ 翻译:选那个「让专家看起来最像天才」的奖励。★
那个「最大熵」是怎么进来的
书里说典型的做法要加一个正则项,用的是熵3。
「熵」是第 05 章第 5 节那个词 —— 一组机会「有多说不准」的一个数。
为什么要加它:因为不加的话答案不唯一。 书里在写代价函数那一版时说得很直白: 熵这一项「可以被视作实现最优解的唯一性的正则化项」4。
★ 记住这个动机 —— 下一节会看到「不唯一」到底有多严重。★
2. 这件事本身是个死结
这一节回收第 12 章第 9 节那个式子,而这是这一章的转折点。
书里的判词
书里对这条路的第一个挑战写得毫不含糊:
★「逆向强化学习的函数搜索是病态的,因为示范行为可以由多个奖励或代价函数导致。」★5
「病态」在这里是数学上的说法:这个问题的答案不唯一,而且不是「差一点」的不唯一。
为什么不唯一:就是那个式子
书里给的理由,正是第 12 章第 9 节那个奖励塑形的变换5:
新奖励 = 原奖励 + 折扣 × 下一个局面的「势」 − 这一个局面的「势」
★ 第 12 章:这个「势」你怎么定都行,最优策略保持不变。★
→ 在那里这是好消息:所以可以放心撒路标。
★ 这一章:这个「势」你怎么定都行,最优策略保持不变。★
→ 在这里这是坏消息:★ 那我看着这份示范,怎么知道他用的是哪一个?★
书里的结论句:「只用示范数据通过 IRL 方法学到的奖励函数,
是不能消除上面一类变换下奖励函数之间分歧的。」[^5]
★ 同一个数学形式,第二次出现,这次是病因。★ (第一次在第 12 章第 9 节是工具;第三次在本章第 7 节会变成解药。)
书里给的补救,以及它的代价
书里的办法是加限制,把答案逼唯一5:
| 限制加在哪 | 具体怎么加 |
|---|---|
| 限制奖励函数的形状 | 只允许它是「一些局面特征的加权和」这种简单形式 |
| 限制策略的形状 | 要求学出来的策略满足最大熵那一类规则 |
★ 但书里当场说了代价:「这些显式的限制对所提出方法的通用性有一定潜在限制。」★5
换句话说:唯一性是买来的,买它的钱就是「这个方法能用在多少种任务上」。
3. 第二个死结:它太贵了
这一节讲这条路的第二个挑战,而它解释了下一节那个方法为什么存在。
贵在哪
回到第 1 节那张图:外循环走一步,内循环要跑一遍完整的强化学习。
书里把这笔账写得很清楚6:
① 在推断出来的奖励下优化策略,★ 要求智能体与环境交互 ★
—— 而第 11 章说过,交互本身就是最贵的那一项(时间、设备损耗、安全)
② 更要命的是结构:书里说 IRL 的步骤
★「主要要求智能体在迭代优化奖励函数的内循环中解决一个 MDP 问题」★[^6]
—— 也就是说,你每改一次奖励的猜测,就得把整个强化学习问题从头解一遍
书里的评价:「这从计算的角度也可能是有极大消耗的。」[^6]
★ 把两个挑战放在一起看:答案不唯一,而且求每一个候选答案都很贵。★ 这就是下一节那个方法的全部动机 —— 它干脆不求这个答案了。
4. 干脆跳过奖励:训一个裁判
这一节走主走查的前半段,是这一章最实用的一节。
那个结构你已经见过
第 08 章第 9 节埋了一处伏笔:书里专门写了一节,说生成对抗网络和演员-批判者 「结构十分类似」——一个负责生成,一个用一个分数评估。
★ 那一节读着像闲笔,它就是为这一节铺 的路。★
书里介绍的这个方法叫 GAIL,它的做法一句话: 用一个生成对抗网络里的判别器,来给出基于示范数据的动作价值估计7。
生成对抗网络里的那两个角色:
生成器 造出一个东西 ←→ ★ 这里是:策略,它「造出」一条轨迹 ★
判别器 判断这是真的还是造的 ←→ ★ 这里是:裁判,它判断这一步是专家的还是策略的 ★
★ 关键的一步:判别器的打分,直接被当成策略这一步的奖励。★[^7]
不再有「反推出一个奖励函数」这个中间产物 —— 分数直接来自裁判。
判别器怎么学:书里给的损失有两项 —— 一项来自策略探索到的样本,一项来自专家示范的样本7。 两项一起把它往「能分开这两堆」的方向推。
主走查的前半段
第 1 轮 裁判给专家的帧打 0.9、给策略的帧打 0.3
→ 策略这一步的奖励 = ln(0.3) = **−1.20**
→ 这个很低的分逼着策略往「看起来更像专家」的方向改
第 2 轮 策略改过之后,裁判没那么容易分了:专家 0.7、策略 0.45
→ 奖励 = ln(0.45) = **−0.80** ★ 比上一轮涨了 0.40 ★
→ 注意:★ 裁判本身也在同时变强 ★,所以这是一场追逐
(三组打分是为演示编的;奖励取判别器打分的对数,是书里式 8.11 的形式。)
判断(我们的,不是书里的): 书里把这个量写成「动作价值」, 而判别器往哪个方向训,取决于损失里两项的摆法 —— 有的写法让输出越大表示「越像策略造的」,有的反过来。 我们全章统一按「输出越大表示越像专家」来讲。 如果错,会错在: 照着某个具体实现抄的时候符号可能反了。 判据是:策略的目标永远是「让裁判分不出来」—— 顺着这一条去定符号,不会错。 而这一节的两个结论(省算力、拿不回奖励函数)与符号方向无关。
它省下的两笔钱
书里列了两条好处8:
| 好处 | 书里的说法 | 对照谁 |
|---|---|---|
| 省算力 | 相比于使用逆向强化学习的方法**「有较低的计算消耗」** | 对照 §3 那个内外循环 |
| ★ 不需要专家在场 ★ | 「它也不需要在训练中跟专家进行交互」 | ★ 对照第 12 章第 5 节那个 DAgger ★ |
第二条要专门记:第 12 章那个办法有效,但要一个专家全程待命。 这一条不用 —— 一段录好的示范就够。
5. 但它有一个硬缺陷:训到最后,你什么也拿不回来
这一节走主走查的后半段,并给出这一章最要紧的一个判断。
那个 0.5
书里把这件事说得很清楚9:
「这种方法的缺点是,我们绕过了生成奖励的中间步骤,即我们不能从辨别器中提取奖励函数, 因为判别器对于所有的(局面, 动作)将收敛到 0.5。」9
第 N 轮:裁判对专家的帧打 0.5,对策略的帧也打 0.5
★ 这是好消息:0.5 意味着「五五开、完全分不出来」,也就是策略学成了。★
★ 这是坏消息:一个对所有输入都输出同一个数的函数,不携带任何信息。★
奖励 = ln(0.5) = −0.69 对专家这一步
奖励 = ln(0.5) = −0.69 对策略这一步
奖励 = ln(0.5) = −0.69 对随便哪一步
★ 你得到了一个策略,但没有得到「什么样算好」。★
这为什么要紧
书里没有展开,我们补一段:
判断(我们的,不是书里的): 拿不回奖励函数,意味着这份学习成果不能复用。 抽屉换个位置、房间换个光线,你只能重新收集示范、重新对抗训练一遍。 而如果你手上有奖励函数,那它是一个可以搬走的东西 —— 换个环境,拿它当奖励重新跑一遍强化学习就行,示范不必再收。 ★ 所以第 6、7 节那两个方法花的力气,买的是「这份成果能不能带走」。 ★ 如果错,会错在: 反推出来的奖励函数未必真能跨环境复用 —— 第 7 节里书里自己就说了,奖励函数「从环境动态的变化中不能被鲁棒地恢复出来」。 判据是:换一个环境之后,拿这个奖励函数训出来的策略还合不合理。
6. 第一次尝试捞回来:把奖励和轨迹的机会挂钩
这一节讲一个绕圈子的做法,而它的死结值得记住。
思路
要把奖励捞回来,得先让「奖励」和「能观测到的东西」挂上钩。
书里给的挂钩方式是一条分布:奖励越高的轨迹,越可能被专家走出来10。
一条轨迹被走出来的机会 ∝ e 的(这条轨迹的总奖励)次方 ÷ 一个归一化的数
★ 直觉:好的轨迹机会大,差的轨迹机会小,而且是指数级地拉开差距。★
有了这条挂钩,反推奖励就变成了一个标准问题:
★ 调整奖励函数的参数,让「专家那些轨迹」出现的机会最大。★[^10]
这就是书里说的:逆向强化学习可以被理解为解决一个极大似然估计问题10 —— 「似然」就是「按现在这套参数,手上这批数据出现的机会有多大」。
死结在那个除数上
上面那个式子里有一个「归一化的数」,它的作用是让所有轨迹的机会加起来等于 1。 书里管它叫配分函数11。
要算它,得把「所有符合环境规律的轨迹」的那一项全部加起来。
★ 轨迹有多少条?在连续动作、上百步的任务里,是无穷多条。★
书里的说法:对于大规模或连续空间的情况,「准确估计配分函数会很困难」, 因为精确估计只适用于小规模离散的情况11。
绕过去的办法:又是重要性采样
书里的解法:不精确算,采样估计 —— 而用的正是重要性采样12。
「重要性采样」是第 09 章第 4 节那个词 —— 拿另一个分布采的样,乘一个新旧机会的比值,来估这个分布下的量。
★ 而这里被拿来当「采样用的那个分布」的,就是当前的策略本身。★[^12]
于是形成一个来回:
策略采一批轨迹 → 用它们估那个 除数 → 更新奖励函数的参数
↑ ↓
└──── 策略再照新的奖励更新 ←───────────┘
书里对策略那一步的目标写明了:让它去贴近「按代价函数算出来的那个分布」。[^12]
书里说,把这一套写成生成对抗网络的形式,就得到了一个能把奖励函数捞回来的方法13 —— 它和上一节那个方法「类似但是有不同的具体形式」13。
关键差别在判别器的写法上:它的分子分母里显式地含着代价函数, 所以训完之后能从里面把奖励读出来14。