提交 97b9df6f 编写于 作者: W wizardforcel

2019-07-16 10:18:44

上级 b0273356
......@@ -23,13 +23,13 @@
这个就是由深度学习的特性决定的:我们采用深度学习的基本逻辑就是它能进行端到端 (end-to-end) 的训练,做出一个复杂的多层的具有很强表达能力的模型。以目前深度学习最成功的领域,机器视觉为例,深度学习可以训练出一个模型,从像素级别的图像经过卷积神经网络的若干线性和非线性变化最终产生出一个分类输出,来说明这个图片是一个什么。以下的图形就被分类成一只老虎:
<figure>![](img/c59126c3f91d4e1a8d572f47341ec77d.jpg)</figure>
![](img/c59126c3f91d4e1a8d572f47341ec77d.jpg)
我们关注深度模型,是因为目前我们认为深度模型能够让我们的增强学习算法来端到端地解决非常复杂的问题。将两者结合,我们期望深度模型能提供给增强学习算法解决非常复杂的决策问题的能力。
那么端到端的学习手段对这样的**序贯** (sequential) 决策问题有什么好处?绝大多数的机器学习系统都会通过看到的东西来以某种形式影响着世界。智能体通过机器学习的分类输出来决定其行动。上面的例子,照片的大部分面积是一只老虎。智能体在收到这是老虎的结论之后,通过一些决策过程得到逃跑这一行动,进而影响了整个环境。这样就构成了一个从感知到行动的交互过程。当然,前者的结论可能很难被“标签化”,譬如一只饱腹睡着的老虎和一只饥肠辘辘的老虎的意义就相差很大,很难说是一个分类标签那么简单,因此决策过程可能也会变得相当复杂。一个端到端的决策就刨除了这个标签,使得能从输入直接得到行动决策输出,如下图:
<figure>![](img/c9ce0d61a85d13c4917d5adffee01423.jpg)</figure>
![](img/c9ce0d61a85d13c4917d5adffee01423.jpg)
这样做有利于我们把我们要做的整件事情通盘考虑,而**不需要人为去设定一些中间点**。如我们可以从整个库存系统的收益的角度来制定决策,可以从跑速度最快的角度来制定 Baymax 的运动,可以从最大化食物的角度来决定狗的肌肉应该做些什么事情。
......@@ -40,7 +40,7 @@
这样每一个阶段都被抽象化,立足于解决一个比较简单的问题,并将结果传递给下一个阶段。但是事实上这样做每一个阶段都会损失掉很多信息,必须保证每一次抽象都足够正确。这个通常很难做到,如机器人是否成功做出第一步状态估计,决定了之后的行动是否可靠。有点像很多综艺节目里面的“动作传话”这样的自编码器 (autoencoder),第一个人看了成语后表演,经过多个人传递后要从最后一个人的表演中还能保留有正确的信息。在多年前的机器视觉实践中,一个比较常见的流程就是先提取 HOG (Histogram of Oriented Gradient) 特征,再提取器 DPM (Deformable Part Model) 特征 (Felzenszwalb, 2008),最后送给一个支持向量机来做分类。深度学习的最大革命就是它可以自动定基,无需自行设计这些抽象层,无需做特定的接口,目标直达分类问题。这样端到端的训练机制避免了对特征提取和层次设计的长期探索,大大拓宽我们能做的事情范围。
<figure>![](img/8dd6a431a284795b9969551243d2a6b1.jpg)</figure>
![](img/8dd6a431a284795b9969551243d2a6b1.jpg)
一个基于深度增强学习的机器人控制系统如上图。机器人摄像头为深度神经网络提供像素图像输入,深度神经网络提供马达扭矩级别的控制输出,形成一个序贯决策循环。一个形象但不确切的的理解方式是,这个神经网络的前几层卷积层可以认为是视觉皮层,而后几层全连接层认为是马达皮层,两者都是高度专业化的,我自己感觉类似于生物组织中大脑区域的分化。想要做这样的事情,有两个很大的挑战。第一点是它不像监督学习,通常没有人告诉它看到什么图像就应该做什么样的马达指令。第二点是它的行动会产生影响后果,不能只关注一个决策是不是做对了,而更应该关注整个序贯决策的正确性,直到产生我们想要的结果。因此深度增强学习的实践很多是一个试错的过程:系统尝试去做一件事情,观察结果后调整策略。
......
......@@ -10,11 +10,11 @@
在这一篇中,我们将探讨通过基于模型的增强学习算法来训练策略,如何像 v2.0 版本一样使用策略来做决策。获得一个策略有很多好处,首先使用策略来进行在线行动选择是一个轻量级的方法,远比 v1.5 的每步在线重新使用规划方法求解快;此外更重要的是,**训练策略可能有比训练模型有更好的泛化能力**(但不一定,取决于问题)。举个例子,考虑到(譬如在棒垒球中)我们去接一个球,基于模型的算法考虑物体的飞行轨迹,譬如如何受重力和风力影响,然后求解运动问题,确定落地点,然后过去接球;而事实上人类去解这个问题更简单,如我们只需要追赶这个球,保持一定的速度使得球在视野里面就行了,我们没必要关注具体的物理动态,也能接住这个球。这个例子说明了有可能使用策略的话,观测和行动之间会是一个比较简单的关系,从而训练一个不错的策略比搞清楚模型具体是什么更容易泛化,更容易提炼出某种意义上的“知识”作为策略以适应新情况:人类的接球策略可以在物体不是球的时候也通用,而根据物理模型规划计算则需要做很大变化了。
<figure>![](img/50bdb2fb29c1e6c7e821f1c61cfa810f.jpg)</figure>
![](img/50bdb2fb29c1e6c7e821f1c61cfa810f.jpg)
我们继续祭出之前多次使用过的计算图。这个计算图本质上体现了**策略函数****模型动态**影响**代价(收益)**的形式(包含了三个重要组成部分,注意这里换成最小化代价了,其实是一样的)。在 v2.0 版框架中,我们考虑使用反向传播的方法来优化策略函数**![](img/3fb4a0a3d10d54fda62b86560346c0ee.jpg)**:如果这三个东西都是可微的,那么我们就可以求出代价关于![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg)的梯度(对于确定性策略更容易,对于有些随机策略也是可行的,如之前所讲的[PILCO 方法](https://link.zhihu.com/?target=http%3A//mlg.eng.cam.ac.uk/pub/pdf/DeiRas11.pdf)匹配前两阶矩),从而反向传播是可以做到的。但不幸的是,直接这样简单的做法通常并不可行。
<figure>![](img/493e5eae0dbf745d2b4cc2e892bdd5ad.jpg)</figure>
![](img/493e5eae0dbf745d2b4cc2e892bdd5ad.jpg)
考虑最早期的行动,最早期的行动通常对整个轨迹有非常大的影响(如上图,第一个动作变化可能会使得整条轨迹有很大的晃动),可能会影响所有后续的状态和动作,因此关于它的梯度应该是非常大的;而在后期的行动,在整个序贯决策问题中关于总代价起到的作用就比较小了,因此关于它的梯度就小:从而,这个梯度会相当病态。这个**参数敏感问题**在射击法 (shooting method) 中也同样存在,在射击法中我们同样也不使用一阶算法而使用类似 LQR 的二阶算法,但是在这里我们就不再有一个类似 LQR 的容易的二阶方法来求解这个问题了:因为引入了含参的复杂的策略函数,这些参数在整个问题中将非常纠结,因此不再能用简单的动态规划方法求解了;我们会发现,其实这样的求解序贯问题和训练 RNN 非常相似,而训练 RNN 的一个重要方法就是 BPTT:因此,训练这个问题所遇到的问题和 BPTT 中**梯度爆炸/消失的问题**本质上非常相似,但是 RNN 我们可以通过选择类似 LSTM 的表达结构来使得梯度变好,而对于我们的问题来说,系统动态![](img/dad139946fdd1363ecd86d20700a53a6.jpg)是外生的客观存在的,我们只能去学习而并不能自主选择。因此我们遇到的问题相对来说更棘手。
......@@ -44,17 +44,17 @@
本质上只是之前算法的推广泛化,第一步修改代价函数以加入增广拉格朗日函数的两项,第二步不需要考虑原始代价函数因为原始代价函数只与轨迹有关,而与策略参数无关。我们需要选择的是**轨迹分布![](img/ba215edcde8fcafcde3af8b054c6c7df.jpg)的形式**(或者干脆确定性的![](img/5111a38eb8cde8aa0e0ba490e4ad4d4b.jpg),确定性形式比较容易,而随机形式一般需要使用比较简单的分布类如高斯分布去近似)、**分布**![](img/ba215edcde8fcafcde3af8b054c6c7df.jpg)**或者**![](img/5111a38eb8cde8aa0e0ba490e4ad4d4b.jpg)**的优化算法**(第一步的轨迹优化算法)、**修改后的代价函数**![](img/197f111118da7cac5aa7a366d59e47e2.jpg)**用来训练**![](img/3fb4a0a3d10d54fda62b86560346c0ee.jpg)**监督学习的目标函数**。举例来说,确定性形式其他部分就跟我们刚才所说一致,问题为![](img/944bed48d9482ee25a9138392b9fd5a7.jpg),我们的第一步中修改的目标函数就是![](img/3dd2e44fa1672425fb5951385ac2a89f.jpg)
<figure>![](img/33a886d276c4d9ffed3f3b7d2fbfd53e.jpg)</figure>
![](img/33a886d276c4d9ffed3f3b7d2fbfd53e.jpg)
我们有时候也会遇到需要从多条轨迹中学习策略的问题。以上图为例,我们从小红点出发,想走到小绿叉位置。然而从一个点出发的路径容易规划,但是这样一条单一的路径可能对策略学习不太好,所以我们想从多个不同的出发点开始学习策略以提高策略的泛化能力。这样的问题又可以被表述为![](img/b3d8b4f2ad4d077d79aa47f014faa1f9.jpg),同时优化一组轨迹,减少它们的共同代价,并将它们限制在同一策略之下。这个时候 GPS 算法的第一步只需要改成对所有的![](img/31df9c730e19ca29b59dce64b99d98c1.jpg),关于![](img/61616de1801a9677c387f72db1d82758.jpg)进行轨迹优化:这一步其实可以并行完成,因为它们只与被固定下来的![](img/1bd05854f73537385ab1d87151f20ba1.jpg)有关,而互相之间其实没有联系。第二步需要把这些数据全部拿过来放在一起进行监督学习。Mordatch et al. (2015) 发表在 NIPS 上的文章"[Interactive Control of Diverse Complex Characters with Neural Networks](https://link.zhihu.com/?target=http%3A//papers.nips.cc/paper/5764-interactive-control-of-diverse-complex-characters-with-neural-networks)"就利用了这一并行(在多台机器上训练,然后合起来)的约束下的轨迹优化的方法来训练神经网络策略,在 MuJoCo 模拟器上完成了复杂生物(如类似蝙蝠翅膀,更复杂的如人形机器人的步态)的运动 (locomotion) 学习,可以做到向某一目标移动的实时控制。在训练策略之外,这样的介入策略的做法还提高了轨迹优化本身:策略的介入迫使行动成为状态的函数,使得轨迹优化会做出**周期性的稳定控制**,而不仅仅是一个不稳定的只为了到达目标的控制。在这里,不同的轨迹意味着不同的起点和终点。
对于随机 GPS 问题![](img/6b7d043a23d33b04179acbdedc804ba4.jpg),控制器从单一策略变成了一个策略分布。我们仅以最简单的(局部)线性均值加高斯噪音的控制器为例,![](img/b847640ee1f0f9e65cd3797b679c025d.jpg),这类形式比较容易求解。第一步优化![](img/ba215edcde8fcafcde3af8b054c6c7df.jpg),目标函数我们上一篇中在一个信赖域中拟合局部模型相似,![](img/3494464458ae60cfb23ba33d9b58c5a5.jpg)。使用这样的方法训练策略,相当于在原来的结构上多出一块训练![](img/b78351a3a805b0eed3d271eb38fb40dc.jpg)的部分。
<figure>![](img/4146f60d00703b2aeddbfe64af69ad05.jpg)</figure>
![](img/4146f60d00703b2aeddbfe64af69ad05.jpg)
首先第一步使用我们现在的线性-高斯控制器来运行机器人,以收集一些轨迹样本;第二步去用这堆轨迹去拟合模型动态(一些回归的方法),然后在信赖域中更新线性-高斯控制器。在信赖域中找新控制器的时候,我们同时使用上了用这堆轨迹数据训练的神经网络策略。在机器人学的背景下,Levine et al. (2016) 等人投稿于 JMLR 的"[End-to-End Training of Deep Visuomotor Policies](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1504.00702)"一文提供了一种端到端的策略训练机器人做事情的方法。此时我们的神经网络不再训练![](img/3fb4a0a3d10d54fda62b86560346c0ee.jpg),而改为训练![](img/b78351a3a805b0eed3d271eb38fb40dc.jpg),也就是以机器人的视觉图像为一段,输出直接为策略函数,这样的端到端学习,下图即为端到端的 CNN 结构。
<figure>![](img/ed28ff1a15a549058b3d5c09829601db.jpg)</figure>
![](img/ed28ff1a15a549058b3d5c09829601db.jpg)
因此我们的 GPS 问题变为了![](img/7f4cc8af7cdd2ce14e3367972fabf390.jpg)。我们使用局部模型进行(低维度的)轨迹优化作为老师来得到策略,但是我们在真正训练神经网络的时候则把输入替换为机器人看到的图像,然后进行监督学习,重复这个过程。在训练神经网络时候我们把输入从状态偷偷替换成了原始图像,这样的技巧叫做**输入重映射** (input remapping trick):在轨迹优化的时候我们采用状态,而在训练策略的时候我们使用图像,这种方法有助于我们训练从**传感器(如摄像机)直接得到的高维输入的策略**。比如说在移动方块的任务中,在训练的时候,机器人可能可以通过某种方法知道木块在哪里(也就是知道状态是什么),但是在测试的时候则只能通过图像来确定策略,这样的方法就可以用上了。
......@@ -66,11 +66,11 @@
Kahn et al. (2016) 在"[PLATO: Policy Learning using Adaptive Trajectory Optimization](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1603.00622)"提出的 PLATO 算法正为解决这个问题而存在。该算法将 MPC 思想引入到 DAgger 算法中,而 MPC 的每步重新规划正是为了克服误差的。DAgger 算法的第二步尝试执行监督学习训练出来的![](img/b78351a3a805b0eed3d271eb38fb40dc.jpg)来获取数据集,就是我们学出来什么策略就运行什么策略,来克服分布不匹配问题;而事实上 PLATO 算法告诉我们,我们可以稍微做一点妥协,且同样也能得到收敛性保证:我们尝试使用一个近似的策略![](img/f8522d3da635383bc47465f500926bb3.jpg),而这个策略出自使用 LQR 来求出![](img/59e0bc14e4494fd218a9c42e6564e35a.jpg),和之前一样,结果是一个线性均值的高斯分布。譬如在驾车过程中,如果发生碰撞就会得到一个很高的代价,这样的策略就会以降低代价函数为目标,同时也保证新策略不与就策略差别过大。我们在每一步中执行这样的新策略作为校正,均衡长期代价和与当前策略的接近程度。注意到,我们的策略![](img/93650e97dd680d264a8d636dcb099907.jpg)在每一步最小化的是**长期的期望代价****当前阶段的 KL 散度**(两者的一种权衡),因此它实际想做到的是做出一个不背离当前阶段策略太远的长期期望代价最低的决策。因此,我们将该算法结合 MPC 进行使用,在每一步就需要重新规划。
<figure>![](img/3bb9bad2b3bc96239009f033c7d5b01c.jpg)</figure>
![](img/3bb9bad2b3bc96239009f033c7d5b01c.jpg)
在这里,我们和前面 GPS 中所提到的一样,使用了输入重映射的技巧,控制![](img/b03a2efdc6ceb6433989465aa3ed57fe.jpg)和 ![](img/c06e9d534cda839ae39c8ebcfe18e92f.jpg)之间的 KL 散度,这是因为我们学到的策略可能只是关于观测到的图像,而我们实际发生的控制策略则需要根据状态得到。PLATO 算法想做到的是,在训练阶段,我们可以有一些外部的观察者来给出车辆的状态信息,使![](img/b03a2efdc6ceb6433989465aa3ed57fe.jpg)相对来说比较聪明,以避免很多不必要的损失;但是![](img/c06e9d534cda839ae39c8ebcfe18e92f.jpg)还是要根据原始的传感器等信息来学的,这个可能比较难学,但是我们在真实测试环境中还是要靠![](img/1bd05854f73537385ab1d87151f20ba1.jpg)。我们知道观测是由状态决定的,但是我们的模型是用来预测未来的状态的,如果我们有模型的话我们可以知道![](img/39e0c1687c6b5063ee6c20328748f07a.jpg),但是观测的分布![](img/96c9d62d90ce1279ddf00c820d22735c.jpg)是不知道且极难的:相对预测下一帧图像而言,我们更容易弄清楚下一个状态是什么。因此我们也不是对未来的观测做规划,而是对未来的状态做规划。我们知道下一阶段的状态是什么,但是不知道下一帧观察是什么:因此我们执行一步操作后,我们就能得到下一阶段的观测,然后重新规划,进行这样的循环。
<figure>![](img/c7eb76d568f40a6973a8e85ed8ffc420.jpg)</figure>
![](img/c7eb76d568f40a6973a8e85ed8ffc420.jpg)
这样一个训练四旋翼躲避障碍物的任务中,在训练过程中,四旋翼被监视器等设备所控制(或者使用激光测距仪等),因此它能很好地得到自己的状态进行重新规划,同时也使用输入重映射技巧,端到端地训练直接的从观测到行动的策略;在实际测试中,则使用原始观测图像。总体来说,这种 DAgger 的变种算法中,我们代价函数中的![](img/3204ef1222946547d995c14aa3a98ff8.jpg)使得我们能去学习改进策略,直到最后变成一个完全在线的行为,这意味着分布不匹配问题得到了解决;![](img/2ffd09689b73ce51d5343429bde37b0e.jpg)使得我们能避免高代价(如碰撞损毁),即便我们的策略和原始策略有差异,哪怕产生分布不匹配的问题,我们也不想产生太高的代价。
......@@ -86,6 +86,6 @@ Kahn et al. (2016) 在"[PLATO: Policy Learning using Adaptive Trajectory Optimiz
我们也对基于模型的方法和无模型的方法进行综合比较。因为要进行增强学习,我们必须要收集数据,要么是在廉价的模拟器上,要么是在昂贵的真实物理系统,所以首先比较样本效率。通常样本效率最低的是**不基于梯度的算法**(如 NES (Natural Evolution Strategies)、CMA-ES 等),这类算法是无模型的算法,且不计算神经网络的梯度,但依赖于随机优化。**完全在线的算法**(如 A3C 算法)虽然比前者要好一些但是样本效率还是较低,这类算法在线学习,不使用基于策略的回放缓冲池,依赖大规模的并行。**策略梯度法**(如 TRPO 等)的样本效率较前者再进一步,虽然也是在线但是使用批量处理的方法提高效率。样本效率更好一些是**基于回放缓冲池的值函数方法**(如 Q 学习、DDPG、NAF 等),这类方法是离线的。**基于模型的深度增强学习算法**(如 GPS)和**基于模型的“浅度”增强学习算法**(如 PILCO,不使用深度神经网络)则递进提高了样本效率,但在这块也意味着引入了越来越严格的假设。这边差不多每一级基本上是样本效率差了 10 倍。Salimans et al. (2017) 的"[Evolution Strategies as a Scalable Alternative to Reinforcement Learning](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1703.03864)"一文说明 cheetah 任务中进化算法样本效率比完全在线的算法低十几倍。Wang et al. (2017) 的"[Sample Efficient Actor-Critic with Experience Replay](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1611.01224)"一文训练 A3C 算法约需一亿步(完全真实时间 15 天)。Schulman et al. (2016) 使用 TRPO+GAE 方法约需一千万步(完全真实时间 1.5 天),十倍的效率提升。Gu et al. (2016) 的"[Continuous Deep Q-Learning with Model-based Acceleration](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1603.00748)" 使用 DDPG 方法(完全真实时间 3 小时)达到十倍的效率提升,使用 NAF 完全真实时间 2.5 小时。到了基于模型的增强学习,计算的时间可能比数据收集时间更多,因此瓶颈重点转移到了计算。Chebotar et al. (2017) 的"[Combining Model-Based and Model-Free Updates for Trajectory-Centric Reinforcement Learning](https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1703.03078)"一文体现了对于真实控制问题 GPS 比 DDPG 有 10 倍的样本效率提升。对于浅层方法,效率提升大约也是 10 倍,但是相对来说问题更简单了。注意到有很多时候我们不能只看真实时间,模拟器可能非常快,因此如果我们能并行得到很多计算资源,那么可能样本效率低的算法反而更快,都是一些权衡。
<figure>![](img/ff8206295fb2581f9083f2554118578b.jpg)</figure>
![](img/ff8206295fb2581f9083f2554118578b.jpg)
最后我们来讨论如何根据问题选择合适的增强学习算法。最重要的问题可能是我们是否是从模拟器中学习,因为这决定了算法样本效率的重要性。如果是的话,我们要看模拟成本是不是相对训练成本是可以忽略不计的(决定样本效率有多不重要):如果是,我们会考虑样本效率较低的算法如策略梯度法 TRPO/PPO,和完全在线的算法如 A3C,这样实际运行时间可能较少,而且如策略梯度法可能更容易调参;如果模拟成本不低,那么我们可能希望使用如 Q 学习/DDPG/NAF 的基于值函数的方法来提高样本利用率。值得一提的是,如果使用模拟器,另一个问题是我们某种意义上可以用模拟器来算出梯度,哪怕不能直接得到也可以得到一个数值解(尤其是如果我们在求解连续问题)我们可能不是在需要无模型的算法,而是需要 MCTS 或者轨迹优化这样的方法;也并不总是这样,有时如策略梯度法的无模型方法可能比这些规划算法要效果好,但无论如何是值得讨论的。回到我们不使用模拟器的情形,此时样本效率可能很重要,取决于我们有多少时间(或者能否自动收集数据,是否需要在工作时有人监督)。如果我们没什么时间,那么可能会倾向于诸如 GPS 的基于模型的算法,此时对模型的选择和假设很重要;如果我们时间还是很充裕的,那么可以使用可能更有效的值函数法。
\ No newline at end of file
......@@ -12,7 +12,7 @@
比如说有一项实验,使用果子奖励刺激猴子把场景里一个物体移动到某个指定位置。我们知道最优的移动轨迹必然是两点连线的直线段,但是猴子可能不会走这样的直线,总会多多少少有一些弯曲,但同样能完成任务。这是因为,猴子的决策基本总不是完美的,反正目标能完成就能拿到奖励,所以**在某些领域有一些误差其实影响并不大**(走了一条较长的路线差了几秒钟猴子可能觉得无所谓,而如果没有把物体移动到指定位置那么就没果子吃了,差别很大)。对于猴子来说,行为是随机的,但是“好的行为”总是有一定相似度的。现在的问题是,如何使用数学的方法来表达,次优的路径也是可以的但是不达目标的路径是不行的这个界限,以及如何刻画这个随机行为。
<figure>![](img/994cc5fd2c0dbff5aca2c66d2a9192b3.jpg)</figure>
![](img/994cc5fd2c0dbff5aca2c66d2a9192b3.jpg)
我们考虑使用概率图模型来表达这个“近似最优的”行为:与之前我们只采取最优策略不同,我们也需要让一些次优行动有非零概率存在。在之前,我们知道了状态![](img/33c815432ff85d6f9342f1abc64af657.jpg)和行动![](img/d700c80f3e82735a63b228ea4417a460.jpg)通过系统动态![](img/b1ed7836f0192b89cb8e977adf2ef018.jpg)共同决定了下一个状态![](img/d2683f5b20dac211246c30b1e0a7c2dd.jpg)。对于这样的一串![](img/4d1a76192fc6cb3386633223c7e74d95.jpg),我们应有出现概率![](img/ba215edcde8fcafcde3af8b054c6c7df.jpg),但是只有真实物理场景对猴子进行限制(如猴子不能飞),但没有对猴子试图做的最优行为或者意图进行假设。为了对猴子的意图进行建模,我们加入了![](img/f947b05e8c3e9490dbcccfbd807f6c89.jpg)元素来代表最优性,也就是说,代表猴子尝试使用一些最优手段来完成(阶段性)目标。简单起见,我们假设![](img/f947b05e8c3e9490dbcccfbd807f6c89.jpg)元素是一个 0-1 变量,如果猴子没在完成意图就是 0,反之是 1,也可以理解成一个事件。接下来我们要做的事情就是来描述![](img/8c0dbed8e0fc267d90b7aad094a57ceb.jpg)。在这里一个重要假设是![](img/b01c8e38cb7bff34721444a3ee417b45.jpg),那么条件概率![](img/c39e2eb8bb6c7ab081391af21dedc447.jpg),也就是正比于该轨迹实际的发生的概率乘上轨迹总收益的自然指数。因此,收益最大的(可行)轨迹就变得可能性最大;如果有一条轨迹收益也一样大,物理可能性相同,那么它同样也很可能发生:如有多条它们将平分可能性。注意在这里,![](img/ba215edcde8fcafcde3af8b054c6c7df.jpg)只是用于评判给定了所有状态和行动后,这样一个序列的可能性,并不去决策。
......@@ -40,7 +40,7 @@
最后一个推断问题是**前向信息** (forward messages) ![](img/1b9a195d55c95114edbf220e74bc6b96.jpg),给定之前的所有最优性变量,得出在当前时点到达某状态的概率。这个对策略来说并不重要,但是在逆增强学习中非常重要。前向信息的边界![](img/20cf282dbeed065f247f1cb553ce09a3.jpg),通常认为初始分布是已知的。将该概率进行展开,变成一个二重积分![](img/1194a3644d49d0e255c252e515519caf.jpg)。其中第一项![](img/e4dbf712991f240f340bdaad4400b152.jpg)我们假设是已知的系统状态转移,第三项![](img/b76ac03c37765558105efda7de15064c.jpg)。第二项略微复杂,使用贝叶斯定理得到![](img/4733c70abec259d8e2bddea6152a2410.jpg),其中![](img/f9035569746fe6d571e3e926bb402013.jpg),我们假设![](img/ca25a0d5e57cd7d390a08f52ac909d10.jpg)是均匀分布,分母也是一个归一化常数,因此![](img/f2c02db563cef292837f97e55aff67ee.jpg)。于是就得到一个正向的递推关系了。
<figure>![](img/4ea95e76ac3dc2f7a91720740736f633.jpg)</figure>
![](img/4ea95e76ac3dc2f7a91720740736f633.jpg)
有了前向消息和后向信息之后,给定所有最优性变量,求某时刻的某状态的发生概率就比较容易了。![](img/1a7da2bb060b7fccc98e45f517c65ba5.jpg),其中![](img/ac539e694189a47efa5de3fe30f47772.jpg),![](img/90359accf3239cd186fe4395acf4e6b6.jpg),其他可以看作归一化常数,因此![](img/d2b635e0f9431ce4740bd90932781ab7.jpg),这整个理论和 HMM 很像。注意到这个概率是前向消息和后项消息的乘积,可以说是一个交汇。考虑上图左边圆点是起点,右边叉叉是终点的路径。黄色锥区域是能够有高概率到达终点的状态,蓝色锥区域是有高概率从初始状态以高收益到达的状态,然后基本上就是两者的交(概率上相乘)。Li and Todorov (2006) 做了人和猴子类似从一个点到另一个点的实验,记录空间位置变化,基本上也是中间部分方差最大。
......@@ -56,7 +56,7 @@
总体来说,软化方法的好处主要是有以下几点。首先毫无疑问地,它**增加了探索(类似 Boltzmann 探索)且防止了熵的坍塌**。软化方法**对状态的覆盖面更广****鲁棒性增强**,也**更容易对特定的任务进行调参(预训练)**。对于**并列最优**的情况,软化 max 得到的是一个分布,几个选项将等概率选择,**通过调整温度参数和收益尺度可以使得软化 max 变成硬 max**。在之后我们也将体现这个模型**更适合对人类行为建模**
<figure>![](img/ecb23654c8a4959c2dfc6ce5b1b980b8.jpg)</figure>
![](img/ecb23654c8a4959c2dfc6ce5b1b980b8.jpg)
Haarnoja et al. (2017) 的"[Reinforcement Learning with Deep Energy-Based Policies](http://link.zhihu.com/?target=https%3A//arxiv.org/abs/1702.08165)" 使用软化的 Q 学习方法来进行成功的实践。用策略梯度法来学习 MuJoCo 小人跑步的任务,超参数稍微进行调整,可能虽然得分都很高但是跑步形态完全不同,这是因为增强学习算法一旦发现一块比较好的区域,就会去加强这块区域的利用率,很容易达到局部最优。如上图中,机器人想到达这个蓝块,代价函数为到这个蓝块的距离。机器人可以选择黄色或绿色路线,初始看起来可能效果差不多,但是黄色路线实际上是走不通的:软化的方法可以让两条线路有更均衡的被选择概率,防止某一块被过度增强,不错失可能性。这个方法被称为随机的基于能量的策略 (stochastic energy-based policy)。要保证所有假设都被验证,就是用之前介绍过的软化 Q 学习算法,问题是如何实现从分布中采样。为了实现这个目标,它们训练一个随机网络来根据状态和某高斯随机噪音来得到行动(类似[模仿学习](https://zhuanlan.zhihu.com/p/32575824)中提到过的隐性密度模型),使用[均摊的 SVGD (Stein Variational Gradient Descent)](http://link.zhihu.com/?target=https%3A//arxiv.org/abs/1611.01722) (Wang and Liu, 2017) 来训练以符合![](img/c10e10c1ee3bf28f39f615bf160cade1.jpg),和 GAN 的想法非常接近。
......
......@@ -18,7 +18,7 @@
一个早期的逆增强学习算法叫做**特征匹配逆增强学习** (Feature matching IRL),可以给我们一些启发。这里先假定收益函数是若干特征函数的线性组合,![](img/f09d59a3711ff7dc15a1c0419379be2b.jpg)。如果这些特征选得比较好,我们只需要选权重的话,我们就会考虑去匹配最优策略下的期望。具体来说,如果对于一个收益函数![](img/11835dbe89196ca9f676882d65abdd90.jpg),最优策略为![](img/cb967a79f0aabf8e1c0ce206845436ff.jpg),那么我们就希望去找到一组参数,使得![](img/62f072df24ac664479628b68423070c6.jpg),后者是未知的最优专家策略。左边是边缘化的期望,或者我们就直接运行![](img/cb967a79f0aabf8e1c0ce206845436ff.jpg),然后抽样估计特征的期望。最优策略下特征的期望是要用专家给出的样本来算的。事实上,参数并不是唯一的,我们可以从支持向量机 (SVM) 中借鉴最大间隔 (maximum margin) 原理来得到一个比较靠谱的解,如![](img/bd1470d811451a8a38fa7ecb19491b2f.jpg),也就是找一个分割超平面把最优解下的期望收益和策略簇![](img/5bf4bb781dd2d49d92ccf59eed28ec0f.jpg)内其他所有策略的期望收益相区分开,并且使得间隔![](img/20ddd8181c2e0d0fb893637e8572d475.jpg)最大。这个问题与原问题不同,只是尝试去这么做。然而不难发现,如果![](img/93d5e62f3f8bb71a16e6164e362aa87b.jpg),那么最优解落在分割超平面上,这个![](img/20ddd8181c2e0d0fb893637e8572d475.jpg)总是 0,这个间隔就不起效果了。因此,可能这样一刀切的间隔是不好的,我们有必要去体现策略不同下期望收益和专家策略有差异(专家策略就应该间距为 0),使得和专家策略相差得越多,策略越糟糕。定义两个策略的距离为![](img/cbc9a7b7fa2984784634b8e9694021e0.jpg),那么使用一个与 SVM 类似的技巧,![](img/9bd4cf30921b1124cf60ebae2f96d5c6.jpg)。距离可以定义为两个策略的期望特征的差异。整体来说,这个方法还是问题多多。首先,为了解决不唯一性,做最大间隔的方法看上去不能说不奇怪,**很难说明为什么间距大就代表收益大**,有点随便。正如很多分类问题根本不是线性可分的一样,我个人看到这个模型时想到的第一个问题这边也提到了,**如果专家的策略不是最优的**,可能这个最优化问题根本就无解。如果要强行处理的话,可以通过增加一些带惩罚的松弛变量来某种程度上缓解这个问题(这也是 SVM 里面的思路了),但这样做还是很随意,对专家的非最优行为并没有清晰的建模,解释并不能令人满意。从计算上看,这个带约束的优化问题也是非常复杂的,即便右边这个 max 好求(_ 离散的话就是把约束拆开,如果右边这个 max 问题是强对偶的那么就使用对偶方法转成 min,就变成了存在性问题 _),**很难应用扩展性好的**如基于随机梯度等**方法推广到复杂的非线性神经网络**。关于这类比较古老的方法,可以参考 Abbeel and Ng (2004) 发表在 ICML 的"[Apprenticeship Learning via Inverse Reinforcement Learning](http://link.zhihu.com/?target=http%3A//robotics.stanford.edu/%7Eang/papers/icml04-apprentice.pdf)"和 Ratliff et al. (2006) 发表在 ICML 的"[Maximum Margin Planning](http://link.zhihu.com/?target=https%3A//www.ri.cmu.edu/pub_files/pub4/ratliff_nathan_2006_1/ratliff_nathan_2006_1.pdf)"。
<figure>![](img/994cc5fd2c0dbff5aca2c66d2a9192b3.jpg)</figure>
![](img/994cc5fd2c0dbff5aca2c66d2a9192b3.jpg)
另一种想法的出发点是我们上一篇中讲到的对人类次优行为使用概率图模型建模,使用人类行为数据进行拟合,并推测出收益函数。继续假设![](img/b01c8e38cb7bff34721444a3ee417b45.jpg),那么轨迹条件概率![](http://latex.codecogs.com/gif.latex?p%28%5Ctau%7C%5Cmathcal%7BO%7D_%7B1%3AT%7D%29%5Cpropto+p%28%5Ctau%29%5Cexp%5Cleft%28%5Csum_tr%28%5Cmathbf%7Bs%7D_t%2C%5Cmathbf%7Ba%7D_t%29%5Cright%29),正比于该轨迹实际的发生的概率乘上轨迹总收益的自然指数。根据我们的假设也不难看出,使用这个模型去做逆增强学习,本质上是去学习最优性变量![](img/c6ffa945f08cc4c82a72f59be87d2af0.jpg)的分布。我们把参数化的收益函数的参数![](img/492b92e8089c848702efed7c983570ce.jpg)放进来, ![](img/2fe1796212fa4ffcc7f2892ba1b1779d.jpg),我们要学习的就是这个收益参数,且最优变量取决于![](img/492b92e8089c848702efed7c983570ce.jpg);类似地,轨迹条件概率![](img/b092165953df179ee6cc8c0a24ed5082.jpg)。我们现有的数据是从最优策略下的轨迹分布![](img/b3231b48ae5c4a7d4d638b72a0983eac.jpg)中抽样得到的轨迹样本![](img/f8ea1f6106e897927d76e12c43546ec4.jpg)。我们的学习可以做最大似然学习,也就是最大化对数似然函数:![](img/60a1ee34bed9a7b2a701445d9554ce57.jpg)。代入上面的条件概率,在这个最大化问题中![](img/ba215edcde8fcafcde3af8b054c6c7df.jpg)是常数可以忽略;如果我们令轨迹收益![](img/9dd1aff83b1e81060a1929c72632443d.jpg),那么![](img/4576230229ae64d2ca4ce89d938a1abb.jpg),后面多了一项归一化项![](img/d0caa47722f79c70119340661c7c3dc6.jpg),称为 partition function。
......@@ -37,7 +37,7 @@ Ziebart et al. (2008) 发表在 AAAI 上的"[Maximum Entropy Inverse Reinforceme
Wulfmeier et al. (2015) 的"[Maximum Entropy Deep Inverse Reinforcement Learning](http://link.zhihu.com/?target=https%3A//arxiv.org/abs/1507.04888)"及其应用,Wulfmeier et al. (2016) 发表在 IROS 上的"[Watch This: Scalable Cost-Function Learning for Path Planning in Urban Environments](http://link.zhihu.com/?target=https%3A//arxiv.org/abs/1607.02329)"也使用了类似的方法,还是使用了表格的形式,但是收益函数的设置更复杂,是一个**用神经网络来对若干人工特征进行非线性组合**的形式,算法本质上和最大熵逆增强学习没有区别,只是需要用神经网络来计算收益,最后需要用梯度去更新的也是神经网络。注意这个问题中状态空间只是一个二维平面,行动空间是离散的方向。该方法的主要局限性是**仍然需要迭代求解 MDP**,而且还**需要假设系统动态是已知的**
<figure>![](img/034d8c0587560aae5aa9224af7c916a6.jpg)</figure>
![](img/034d8c0587560aae5aa9224af7c916a6.jpg)
## 深度逆增强学习
......@@ -45,7 +45,7 @@ Wulfmeier et al. (2015) 的"[Maximum Entropy Deep Inverse Reinforcement Learning
假设我们不知道系统动态,但可以像普通增强学习一样抽样。注意到我们前面对数似然函数的梯度![](img/192b1d0f2e9ddc0702efd1dda0faea3e.jpg),前者是专家样本数据中得到的,后者是当前收益函数对应最优策略下的。要做到后者,一个比较直接的想法是使用任何最大熵增强学习方法学习出策略![](img/593252a209f1f57ab6aa8df7496f504c.jpg),然后根据这个策略来采集![](img/7376870ec6366122615ec0defd600fea.jpg)。此时,就用专家样本的结果减掉新抽样本的结果,![](img/bceea97f16b954c1fa220bac1d58736d.jpg)来做无偏估计。然而事实上这种学习的做法是代价很高的,因为我们不假定有模型,所以可能要用无模型的增强学习算法,这将使得每一步都花掉很多很多时间。这里我们可以采用一些小技巧,我们可以不用完全地把对应的最优策略学出来,而只是**每次把策略改进一点点**,然后用这个不准确的策略去近似估计梯度。然而现在多出来一个问题,由于我们使用的策略是不正确的(不是最优的策略),因此我们的估计量将不再无偏。对于分布错误的问题,一个有力武器是重要性抽样(我们在[策略梯度法部分](https://zhuanlan.zhihu.com/p/32652178)有过介绍),用其他分布下抽样结果来得到正确分布下的无偏估计:![](img/9f9aa2bf03a498d72bfdd3415c5e2ae4.jpg),其中权重为 ![](img/023c5a434c2fdba6ec87e7e5404a136d.jpg),分子正比于收益的指数(_ 我觉得 Levine 教授原文![](img/7ab644944bf5756474a40d56ee2a49db.jpg)少了一个概率,无法推导成下面的形式,或者是可能它的定义和我上面说的不同了,请评论区大神帮忙研究下 _),分母是现在分布的概率。因为我们前面会除以权重之和,就不需要关注![](img/336aa2078ea3bfe3e6fc1516ade078c9.jpg)归一化的问题。使用之前策略梯度法一样的展开,对同一条![](img/f124a74ff959930ae4c0a1dd94e9c8cd.jpg),我们得到![](img/52cb99d6ff6ad9c5955bb0d0fe589507.jpg)这样比较简单的形式。进一步,最优下![](img/8262e953bccac30cd2526e0b70727f2c.jpg),无需做 IS。每一步策略迭代都使我们更接近最优分布,因此事实上是在逐步改进的。
<figure>![](img/0caf5c9e1169acc95f605b3216099b56.jpg)</figure>
![](img/0caf5c9e1169acc95f605b3216099b56.jpg)
Finn et al. (2016) 发表在 ICML 上的文章"[Guided Cost Learning: Deep Inverse Optimal Control via Policy Optimization](http://link.zhihu.com/?target=http%3A//proceedings.mlr.press/v48/finn16.html)" 提出了**引导代价学习** (guided cost learning) 算法。需要给定一些人工的示范,然后算法从一个随机的策略![](img/868db68e71ec9cabbe333cb77dd676bc.jpg) 开始,通过运行策略![](img/868db68e71ec9cabbe333cb77dd676bc.jpg)去生成随机样本,然后使用重要性抽样和人工示范的方式来更新收益函数,根据收益函数稍微更新一下分布,然后下一阶段的分布更好。最后,我们得到了最终的类似于专家的收益函数和对应的策略。事实上,这个文章中使用了基于模型的算法中的 GPS 算法来做策略更新,然而事实上任何改进策略的方法应当都是适用的。她们的文章中使用这样的方法来“教”机器人完成人工动手的操作如摆放盘子和往目标杯子里倒水。这项工作相对更早期的逆增强学习算法,如 Kalakrishnan et al. (2013) "[Learning Objective Functions for Manipulation](http://link.zhihu.com/?target=https%3A//pdfs.semanticscholar.org/2732/9bc3b6c5a25aeadd3503d01064570b8a4a5c.pdf)" 的路径积分 IRL (path integral IRL) 和 Boularias et al. (2011) "[Relative Entropy Inverse Reinforcement Learning](http://link.zhihu.com/?target=http%3A//proceedings.mlr.press/v15/boularias11a.html)" 的相对熵 IRL (relative entropy IRL) 的思路的改进主要在于,早期的算法虽然使用了重要性抽样,但是没有下面的那个箭头,**没有对策略进行更新**,也因此只得到收益函数而不产生最终的策略。但是早期算法如果在初始分布不错的情况下(要求可能较高),也是可以得到一些不错效果的。她们比较了手工设计的收益函数,相对熵 IRL 和 GCL 算法的效果。
......
......@@ -8,17 +8,17 @@
在这里我们先假设大家都已经对监督学习 (Supervised Learning) 的基本概念非常熟悉了。我们在这里先介绍一下今后要使用到的记号:
<figure>![](img/353e3c72c51418d8afc3d1dc22e2c4d0.jpg)</figure>
![](img/353e3c72c51418d8afc3d1dc22e2c4d0.jpg)
跟上一篇一样,这只是一个有监督学习的例子,把图像通过某种方式进行分类,譬如在这个例子中将左边的图片分类成老虎。我们把图像![](img/85b06aa39fe239c2ada7f9e124d05bcc.jpg)称为**观测** (observation),而把输出的结果![](img/d700c80f3e82735a63b228ea4417a460.jpg)称为**行动** (action):系统要做的行动无非是给观测到的图像贴上属性变量的标签。在从![](img/85b06aa39fe239c2ada7f9e124d05bcc.jpg)到![](img/d700c80f3e82735a63b228ea4417a460.jpg)的过程中有一个**策略** (policy) 函数![](img/608d47dd1d38da0451828afaad540e1b.jpg),这个函数确定了给定观测![](img/85b06aa39fe239c2ada7f9e124d05bcc.jpg)之后,行动![](img/d700c80f3e82735a63b228ea4417a460.jpg)的概率分布,这个分布比较常见的方式是通过一个 Softmax 函数来确定。这个策略里面有一个参数![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg),而如果![](img/868db68e71ec9cabbe333cb77dd676bc.jpg)是一个神经网络,那么这个参数![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg)就是神经网络的权重。在监督学习中,我们的目标是找到一组很好的参数![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg),使得它能很好地完成任务。
<figure>![](img/ef504946d38568070bf2f96cc263c369.jpg)</figure>
![](img/ef504946d38568070bf2f96cc263c369.jpg)
我们将这一设定进一步延伸到序贯决策问题中去,这一问题是由很多时间点的决策问题组成的。首先我们给之前的所有变量都打上下标![](img/654b00d1036ba7f7d93e02f57fc00a75.jpg),以说明这是![](img/654b00d1036ba7f7d93e02f57fc00a75.jpg)时刻的决策问题:在![](img/654b00d1036ba7f7d93e02f57fc00a75.jpg)时刻,我们观测到![](img/ab0308a7c7fd0b36c63ca97415b12edb.jpg),然后做出行动![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)。不同于监督学习的独立同分布假设,在序贯决策问题中认为当期的行动![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)会影响到下一期的观测![](img/9f6c6e381426eddd13a467493fcbc5fa.jpg)。所以当你看到老虎的时候,你需要做出合适的动作,说不定你下一期就不会再看到老虎了;而如果你的动作不正确,也许就会发生惨剧。在这个问题中,我们要做的行动![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)就不再是把它标注为老虎了,而是采取的某项真正意义上的动作。这种动作可以是离散意义的,譬如跑掉、忽略或者去抚摸它等,在数学表达上和之前的类似,可以使用 Softmax;也可以是连续的,譬如选择往哪个方向跑,可能会去用一个高斯分布的均值和方差来表示;当然混合起来也是可以的。
在这边还出现了一个**状态** (state) 的概念,通常指真实环境的相关配置全貌,包含了我们去了解这个世界所需要的一切信息,但这些信息不见得能从单一的观测中得出来。以一个猎豹追逐羚羊的图片作为例子,这个图片作为观测,本身是一个很大的张量;而在图片背后,其实潜藏着一个真实的物理系统,包含了譬如猎豹和羚羊的坐标、速度以及其他各种量。这样的系统构成了我们所真正关心的状态本身。究竟是使用状态还是观测,取决于我们能否完全了解到整个情况:我们看到的感受到的,不见得就是整个环境本身,往往是不充分的。如果我们的图片上猎豹正好被一辆车挡住,此时虽然我们在观测中看不见猎豹,但它依然是真实存在的;但是对于下围棋这种例子,棋盘上所有情况都是非常清楚的,因此观测就是状态本身了。
<figure>![](img/2347d8951026652c80b5552867b44aba.jpg)</figure>
![](img/2347d8951026652c80b5552867b44aba.jpg)
用一个图形来表示它们的关系。我们从状态![](img/c4af7d8e59380f621826e58208e79448.jpg)中获得了观测![](img/ab0308a7c7fd0b36c63ca97415b12edb.jpg)(这里假设观测不完全),并根据策略![](img/cfef52b3e3e4ed53073ad6a097a05e00.jpg)来得出行动![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)。这里有一个转移概率函数![](img/dbc5fb456ec98abcf4b92d28764aa198.jpg)(很多文献中的 dynamics 也通常指的是这类转移概率),表明了在状态![](img/c4af7d8e59380f621826e58208e79448.jpg)下执行行动![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)所得到的下一个观测![](img/6f1879550aee78e4a3f8af859b64171c.jpg)的概率分布。这里有一个性质,也就是![](img/6f1879550aee78e4a3f8af859b64171c.jpg)被认为仅由![](img/c4af7d8e59380f621826e58208e79448.jpg)和![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)影响,而与之前的状态和行动无关:也就是之前的所有后果全部被包含在状态![](img/c4af7d8e59380f621826e58208e79448.jpg)之中了,你可以忘掉过去所有的东西,此谓 Markov 性,也是序贯决策问题的重要假设。注意到对于观测来说,这个性质是不成立的,观测序列不具有 Markov 性。![](img/698f49ad5ae10dc2e930d7fc2093b1aa.jpg)的记号最早来源于著名动态规划开山鼻祖的 Richard Bellman,取 state 和 action 的首字母;在机器人和最优控制领域则常见使用![](img/a19ca0b4a8843a49943f2aaae73fd48d.jpg)来作为记号,来源于最优控制的鼻祖 Lev Pontryagin。
......@@ -28,17 +28,17 @@
那么这样做是否有很好的效果?事实上并不然。我们可能不能得到非常充足的数据,以至于很难泛化到新的情形中去。但即便我们的数据已经充足,这个做法也可能会导致很大的问题。下面给一个直观的例子。图的黑色线条是我们的训练轨迹,假设状态是一维的位置信息。
<figure>![](img/aa4199c96ff1b10a292351b444560b99.jpg)</figure>
![](img/aa4199c96ff1b10a292351b444560b99.jpg)
如果我们训练完毕,期望能够重新生成这条黑色轨迹。我们的训练误差可能被控制得很小,但这种函数的近似手段通常不会是非常完美的。我们使用红色的线来描绘根据之前策略得到的期望轨迹。如我们在第一个拐弯处出现了一个非常小的失误(第一次出现夹角处),这时我们的状态是和训练轨迹有一个非常小的差距的。这个失误本身并不严重,而麻烦的是,这个失误导致进入了一个新的状态,在这个状态中可能会犯的错误比之前的失误更大。虽然可能只大一点点,但是会导致这个轨迹偏离越偏越大,最后发散到一个很离谱的地方。这本质上是因为序贯决策的特性才导致了这样的问题:如果只是一个单独的问题,也许会犯点小错误,但这个错误是有限的;而这里的决策并不是独立同分布,每个行动都会影响下一个状态,这样错误就会被累积起来。
即便前面充满了对这样简单粗暴算法的批判,但是这样的做法事实上也有人在使用,如 NVIDIA 的一项关于自动驾驶的研究,Bojarski et al. (2016) 收集了 3000 英里的数据后效果一样不差。他们成功的秘诀主要是使用了一些“黑科技”,下图是其原理图。
<figure>![](img/b73e8aa9bdfc9bf4fb48f498aa5fbb91.jpg)</figure>
![](img/b73e8aa9bdfc9bf4fb48f498aa5fbb91.jpg)
如上图所示,他们不仅在车正前方装上了摄像头,还在车的偏左偏右的两侧同样装上,通过这样获得增强的训练数据。这个小技巧就是,收集到了向前的图像,并将其标注上司机的实际操作方案。与此同时,你也获得了向左一个角度和向右一个角度的图像数据:我们可以将左摄像头得到的图像所对应的司机操作稍微加一个向右的角度,右摄像头向左,作为一个简单的补偿。从更广泛的意义上理解,这样的做法本质上是一个稳定控制器 (stabilizing controller),对于漂移的情况给出了对于偏差的补偿校正方案。即便我们单条的轨迹可能偏离很大,但是整体轨迹的分布还是比较稳定的:不关于一个特定的有界的区域偏离太多。
<figure>![](img/ce956379b786e6e3efddb5d7b85b0cd0.jpg)</figure>
![](img/ce956379b786e6e3efddb5d7b85b0cd0.jpg)
对于一个轨迹分布![](img/ba215edcde8fcafcde3af8b054c6c7df.jpg),其中轨迹![](img/0e496530e9d6f5451cc50d149f93aa53.jpg),之后的课程中我们可以使用一个类似迭代 LQR 的算法构建一个高斯分布来描述它。转而从一个概率的角度来看这个问题的话,我们使用策略![](img/cfef52b3e3e4ed53073ad6a097a05e00.jpg)来确定行动,训练的是根据输入![](img/ab0308a7c7fd0b36c63ca97415b12edb.jpg)来输出![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)的分布的这样一个监督学习算法。我们的训练数据中其实是符合一个特定的分布的,称为![](img/8c290d09ef57dedc870ad2970d760954.jpg)。当我们真正运行我们的策略时,因为行动会对将来的观测产生影响,实际上轨迹路线上看到的数据分布将和训练数据的分布不同,称为![](img/701c6620ae08adb9e0c2e001157d7f81.jpg),通常与![](img/8c290d09ef57dedc870ad2970d760954.jpg)不同,除非我们的训练是完美的,且看到了与训练数据一模一样的初始观测。如果两个分布不同,那么这将意味着我们将在一个与训练集有很大差异的测试集上进行测试,这在监督学习中也称为域转移 (domain shift),通常机器学习不能保证在测试集有任何的效果。
......@@ -57,7 +57,7 @@
第一个是非 Markov 行为,意思是专家所做的行为可能不完全依赖于当前所看到的东西。我们在前面学习的假设中,给定的策略形式![](img/cfef52b3e3e4ed53073ad6a097a05e00.jpg)假设行动只依赖于当前的观测。在这样的假设下,如果我们看到同样的东西两次,那么我们也做同样的行动两次,和之前是否看见过是没有关系的。这在一些情况下并不合理,是因为我们只能得到部分观测 (partially-observed),当前的状态不能被这个观测所完全推断出来。还有一点就是即便是人类,看到同样的事情两次会做出一模一样的行动,通常也是非常不自然的:譬如开车,每次行为都会有些差异,我们也很难理解我们为什么这么做,也不理解到底发生了什么。要想解决这个问题,一个想法是把之前所有的观测都提供出来,变成![](img/65091bbebb08870dab7408cbc86e13be.jpg):行动依赖于过去所有的观测,这样就能处理非 Markov 行为了。那么怎么使用整个历史呢?在自动驾驶的例子中,如果历史帧数多的话,权重参数的个数就会增长得很快。在这个时候,通过权重共享等手段,循环卷积神经网络就可以大显身手了。训练的目标是让输出的行为概率分布更接近人工操作。对于 RNN 的选择,通常使用 LSTM 的效果是比较好的。
<figure>![](img/6f80e04336e3155d0b0c2467ecc5176a.jpg)</figure>
![](img/6f80e04336e3155d0b0c2467ecc5176a.jpg)
第二个是多峰 (multimodal) 行为。当我们要驾驶无人机躲避一棵树的时候,我们可能会向左绕或者向右绕,但如果将这些决策进行平均的话就变成向前飞然后撞上去了,就悲剧了。如果我们采用离散的概率分布,其实问题不大:如果离散成(向左飞,向前飞,向右飞),那么肯定向左向右有一个很大的概率而向前飞概率很低。而如果我们使用连续的概率分布,或者我们将它离散化得非常细,那么概率分布将会一团糟。如果我们使用高斯分布这样的单峰分布,显然是不合理的。这只是一个比较简单的例子,是这类问题的冰山一角,实际中经常发生。那么我们怎么去解决这类问题呢?
......@@ -71,15 +71,15 @@
第一个案例是 Giusti et al. (2016),使用一个四旋翼在森林小道里飞。他们的策略与之前 NVIDIA 的相似,也使用了左右摄像头进行补偿。实际上,他们遇到的问题比 NVIDIA 的自动驾驶更为困难:因为森林小道通常是非常凌乱的,很难进行清晰的感知,有些时候给一个图应该往哪儿飞都得仔细分析一会儿。首先,他们将动作的输出离散为向前、向左、向右三个;然后训练深度卷积神经网络来从图片得到动作。在这个问题中,收集数据可能是比较困难的,因为四旋翼本身非常续航时间很短,经常需要充电;他们的解决方法是用人头上绑三个 GoPro 摄像机来收集数据,并认为左中右三个相机拍摄到的图像应该被分别标为右前左。事实上,这样做的效果非常好:虽然这样做会非常尴尬,但每个人都能做到。
<figure>![](img/59c8d4ad4428914b5168af7fbe123065.jpg)</figure>
![](img/59c8d4ad4428914b5168af7fbe123065.jpg)
第二个案例是 Daftry et al. (2017),同样是四旋翼控制问题,使用 DAgger 来规避分布不匹配的问题。在 DAgger 的第三步,需要人工参与标注。人类通常比较难看着某些动画来拉控制杆,因为人类需要一些反馈信息。他们编了一个更直观的接口,使用了画图中红线的方式,来计算出四旋翼应该调整的角度,这样对于人工标注的难度就大大降低了。同样,他们建立了一个深度神经网络,从一个图片入手输出四旋翼指令。他们的数据中有夏天的数据和冬天的数据(两者看起来差异很大),引入了一个对抗域适应机制,设计一个通用的神经网络来解决两个季节问题和不同四旋翼的问题。
<figure>![](img/dad3a6a5bee8c41dac0d47b9d21ec25d.jpg)</figure>
![](img/dad3a6a5bee8c41dac0d47b9d21ec25d.jpg)
第三个案例是 Rahmatizadeh et al. (2016),使用游戏手柄和模拟器训练机械臂的运作,把一个盒子(标志物)夹起来放到某个地方去。使用 LSTM 来处理非 Markov 问题,使用混合高斯分布来处理多峰问题。他们在训练时候也故意会犯一些错误,来阐述一些更正手段。当机器人成功后人会把盒子移开,机械臂会再去夹。有趣的是这没有一个阶段性任务的说法,事实上只是一个 LSTM 不停地在运转而已。Levine 教授推测 LSTM 之所以有意义,很可能是因为人的指导过程会产生非 Markov 的偏差。
<figure>![](img/c21944e091bba28f733241a217827943.jpg)</figure>
![](img/c21944e091bba28f733241a217827943.jpg)
模仿学习在很多其他领域也有应用。如结构预测问题,不仅仅是输出一个标签,而是更结构化的输出。这种预测问题在自然语言处理,如机器翻译或问答机器人中尤为重要。比如人家提问“Where are you”,回答“I'm at work”。如果像 RNN 一样一个词一个词输出,如果第二个词 at 变成了 in,那么第三个词可能就不能是 work 了,即便和数据本身比较接近,可能说 school 会好一些:第二个词的选择会影响第三个词。因此在结构预测问题中,答案的一部分会影响另一部分,有点类似一个序贯决策问题。因此一些模仿学习方法已经在这个领域中流行了起来:因为通常有训练数据所以会比较像模仿学习,而且是序贯的。其他的诸如交互和主动学习,要从人的反馈中学习;再就是逆增强学习。
......
......@@ -20,7 +20,7 @@ Markov 决策过程 (MDP) 是将 Markov 链放在一个决策环境的扩展产
现在我们来说明增强学习的目标是什么。在这里我们假设的策略函数是清楚的,![](img/6406ca8c8101cbfa51992c6fd878ace5.jpg)可以由一个参数为![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg)的深度神经网络确定(这里先假设完全可观察)。我们将状态![](img/33c815432ff85d6f9342f1abc64af657.jpg)输入到深度神经网络之中,得到行动![](img/d700c80f3e82735a63b228ea4417a460.jpg),共同输入给环境。环境通过某些转移概率函数![](img/b1ed7836f0192b89cb8e977adf2ef018.jpg)(一般我们假设这个是不知道的),得到新的状态![](img/d2683f5b20dac211246c30b1e0a7c2dd.jpg),形成一个循环。
<figure>![](img/e1790d12e391c32a971e7a67d40fd760.jpg)</figure>
![](img/e1790d12e391c32a971e7a67d40fd760.jpg)
我们考虑一个有限长度的(状态, 行动)轨迹 (trajectory),![](img/2b9a2a42ce080e40e5cded3e76cf40eb.jpg)。对于这样的轨迹,发生的概率为![](img/4ae3bb9b9987b4e735031eea8f5168e4.jpg)。我们通常不能控制初始状态![](img/9852aef9c75200eca15057b3188c038e.jpg),而后面每一期的行动都由当前状态和策略函数决定,转移概率具有 Markov 性,故可以表现为这样乘积的形式。而我们想做的是,选出一组最优的神经网络参数![](img/bb46e1fd7a4111c77093b2d8e742cff7.jpg),使得![](img/184af7ec8dde19e852920210992ae355.jpg),即最大化总收益函数的关于轨迹期望。收益可以非常稀疏,如打一场篮球赛,如果最后时点赢了那么得到收益为 1,此外其他时间的收益都是 0;如果想减少自动驾驶中车祸的数量,也可以设置成一旦发生车祸就给予-1 的收益;总体来说,如何使用收益函数是非常灵活的。
......@@ -32,7 +32,7 @@ Markov 决策过程 (MDP) 是将 Markov 链放在一个决策环境的扩展产
## 增强学习算法的一般步骤
<figure>![](img/5e147a50ea1ba42d1da197f820f7bd11.jpg)</figure>
![](img/5e147a50ea1ba42d1da197f820f7bd11.jpg)
几乎所有的增强学习算法都会由以上三部分组成,即便可能特定算法会退化掉其中的一部分。
......@@ -44,7 +44,7 @@ Markov 决策过程 (MDP) 是将 Markov 链放在一个决策环境的扩展产
哪些步骤昂贵,哪些步骤廉价,实际上取决于选取的算法和要处理的实际问题。就生成样本而言,如果我们运行诸如汽车、机器人等,需要用到真实物理系统的话,我们只能以 1 倍速度实时收集数据(除非有了时间穿梭手段);当然如果我们有多个物理系统我们可能可以进行并行的数据收集。而如果我们使用诸如 MuJoCo 之类的模拟器,那么我们可以期待有 10000 倍速度的加速。因此取决于我们的具体问题,生成样本的难度可能会是效果的主要限制因素,当然也可能微不足道。同样,绿色方块第二步策略梯度法计算求和很容易,而 Q 学习方法的拟合神经网络则代价较高而且很难并行。但是,在蓝色方块第三步中,Q 学习方法对应的找到使得 Q 函数最大的行动却非常容易,而基于模型的方法的反向传播优化策略则相对很困难。
<figure>![](img/18e5e113ec8b81912961f55d50dcabf0.jpg)</figure>
![](img/18e5e113ec8b81912961f55d50dcabf0.jpg)
让我们来考虑如上的有点像基于模型的增强学习中,用反向传播来训练增强学习模型的玩具例子。假设环境![](img/dad139946fdd1363ecd86d20700a53a6.jpg)是确定性的(非随机),策略![](img/1bd05854f73537385ab1d87151f20ba1.jpg)用一个神经网络表示,给定状态,输出一个行动。整体形式类似于一个 RNN,优化策略的方法是反向传播收益函数的梯度。要做这件事情,我们要收集数据(第一步橙色方块),也要更新模型![](img/dad139946fdd1363ecd86d20700a53a6.jpg),保证模型和实际发生状态转移情况一致(第二步绿色方块)。前向传播用于计算收益函数,也属于第二步绿色方块之中。唯一属于第三步蓝色方块的是计算梯度并将其反向传播。当然这个过程也是非常不足的,譬如只处理确定性的环境和策略,只处理连续的状态和行动,且优化问题也是非常难以求解的。
......@@ -85,7 +85,7 @@ Markov 决策过程 (MDP) 是将 Markov 链放在一个决策环境的扩展产
在橙色方块中,我们主要关心样本效率。样本效率意味着我们要得到一个好的策略,需要收集的样本数量:这决定了我们需要在模拟器或者真实世界运行我们的策略多久才能让它到一个稳定状态。最重要的一点是,我们的算法是否是**离线** (off-policy) 的。离线的意义是我们可以在不用现在的策略去生成新样本的情况下,就能改进我们的策略。其实就是能够使用其他策略生成过的历史遗留数据来使得现在的策略更优。**在线** (on-policy) 算法指的是每次策略被更改,即便只改动了一点点,我们也需要去生成新的样本。在线算法用于梯度法通常会有一些问题,因为梯度算法经常会走梯度步,些许调整策略就得生成大量样本。
<figure>![](img/0a2ccfdf4c05691db6c3e0c7a6bdaed1.jpg)</figure>
![](img/0a2ccfdf4c05691db6c3e0c7a6bdaed1.jpg)
上图是一个算法间的样本效率比较图(是非常粗糙的,具体效果如何其实非常依赖于特定的问题)。以竖线为分界点,离线算法有较高的样本效率,在线算法则较低。如最右侧的进化算法,甚至都不使用梯度信息,只是把参数当成一些黑盒子,使用一些不可微函数的方法来作用在参数上:它们需要最多的样本,因为它们没有利用梯度信息。在线的策略梯度法也是在线算法,每次策略更改后需要重新收集数据,但它利用了梯度信息所以会高效一些。演员-评论家算法在两侧都可以有。离线的 Q 学习法,通常学习 Q 函数可以是完全离线的,样本效率较高。基于模型的深度增强学习方法更有效,更极端的基于模型的浅度增强学习方法不去拟合神经网络,使用一些更加高效的贝叶斯方法,但通常会引入一些很强的假设来作用于一些特定的问题。
......
......@@ -32,11 +32,11 @@
策略梯度法通常会有一些问题。第一个问题下一节会讲,第二个问题我们会在将来讨论怎么去缓解。
<figure>![](img/e8c8bc1d275d59049af46c9d54d40f10.jpg)</figure>
![](img/e8c8bc1d275d59049af46c9d54d40f10.jpg)
第一个问题:在两个图中,x 轴代表轨迹,而 y 轴代表轨迹对应的收益。蓝色实线是我们选取策略的分布密度。我们从分布之中抽取了三个样本,在(a)图中,可以发现最左边的样本的收益是一个很大的负数,而右边两个都是很小的正数。我们想做的就是把我们的策略右移到右边的虚线,使得在坏的位置密度更低,好的位置密度更高。实际上,正负的数值对这个算法影响很大:两个小正数和一个大负数可能把步伐拉得比较大。而我们(b)图中,只是把收益都加上了一个很大的常数,收益之间的相对差不变。如果我们**把所有情况的收益都增减同一个常数**,我们可以把这个常数从这个期望中提出来,作为一个与参数无关的部分,因此**整个期望关于参数求梯度的结果是不发生变化的**。此时,策略梯度法就会想增加第一个样本的概率(行为发生了根本性变化),但更想增加后两个的概率。这个情况下,移动的步伐就小了很多,取而代之的是可能方差就增大了,变得更平缓了。这一点被称为“**高方差**”问题。一个更极端的情形是,有很好的样本,但是它的收益函数是 0(其他的样本收益为负数),那么如何动完全依赖于我现在的策略在什么位置。我们只需要把奖励函数整体上下移动,就可以完全改变策略梯度法的行为。这个问题主要是因为如果我们选取无数个样本的话,那么这些差异互相会被抵消掉;但是对有限个样本的选择会很有偏差,就会导致这样的问题:对于这样的高方差问题,当然增加样本总是能缓解的,但是增加样本也使得学习效率降低。
<figure>![](img/760f12bcd418f6afd1815df3ee070840.jpg)</figure>
![](img/760f12bcd418f6afd1815df3ee070840.jpg)
第二个问题:让我们考虑一个一维的连续状态和行动的增强学习问题。参数是![](img/206a9e0ac4413b94fc214ad070e155f9.jpg)。对数策略函数是一个高斯分布,由这两个参数确定,整个簇的形式是![](img/8d1af87454e638a1efc984d22e2a55ee.jpg),依赖于行动和均值之差的平方,其中均值是当前状态的![](img/a1c2f8d5b1226e67bdb44b12a6ddf18b.jpg)倍。收益函数![](img/1c5e017926041e9184016bf9fb765e7f.jpg),前一部分表明最终状态希望是 0,后一部分说明我们希望行动大小尽量小:这在机械中是很合理的,如果我们的行动是电动机指令的话,通常不希望让电动机运转过强。在最优控制领域,这是一个 LQR 问题,可以用解析方法求出最优解,也很容易分析。但是在策略梯度法中,有趣的是,因为收益函数希望行动尽量小,梯度法总会倾向于减小![](img/2469b2bd2a1ab19ebfcee223dcb52bb1.jpg)(见上图,蓝色箭头为梯度,总在降低![](img/2469b2bd2a1ab19ebfcee223dcb52bb1.jpg)的方向),用于减少很大的![](img/40b3e823d3ff0b56dea56098705fa25f.jpg)的概率:因为概率来源于高斯分布,而高斯分布的支撑集非常大。事实上,更小的![](img/2469b2bd2a1ab19ebfcee223dcb52bb1.jpg),更倾向于让我们进一步减少![](img/2469b2bd2a1ab19ebfcee223dcb52bb1.jpg)。即便我们的梯度总是指向正确的方向,它在![](img/2469b2bd2a1ab19ebfcee223dcb52bb1.jpg)上的分量更长些:在![](img/2469b2bd2a1ab19ebfcee223dcb52bb1.jpg)很小时候,![](img/a1c2f8d5b1226e67bdb44b12a6ddf18b.jpg)分量的大小可以忽略不计了。因此一个结果是,我们会快速下降![](img/2469b2bd2a1ab19ebfcee223dcb52bb1.jpg),然而逐渐地![](img/a1c2f8d5b1226e67bdb44b12a6ddf18b.jpg)就不动了,所以最终得到一个正确结果的速度奇慢无比。这也导致了策略梯度法的收敛速度很慢,而且选择学习率也是一个很难的问题:如果因为收敛速度慢而使用了较大的步长,反而更快地进入了一个让![](img/a1c2f8d5b1226e67bdb44b12a6ddf18b.jpg)难以动弹的状况。
......
......@@ -64,11 +64,11 @@
现在我们来研究批量和在线的演员-评论家算法的实现细节。首先第一点是算法中的神经网络结构设计。相对于之前的模型我们只有一个从状态![](img/33c815432ff85d6f9342f1abc64af657.jpg)映射到演员策略![](img/6406ca8c8101cbfa51992c6fd878ace5.jpg)的神经网络,在这里我们还需要去近似评论家函数,因此会有一个从![](img/33c815432ff85d6f9342f1abc64af657.jpg)映射到![](img/efeeadbb1751057ffcd45eb68a1869a4.jpg)的神经网络。一个非常直观的做法是,我们可以将两个网络分别训练,成为两个独立的网络。这样做法的主要好处是简单而稳定,也是在一开始上手的时候非常建议使用的。但是一个很大的不足是,在演员和评论家之间并没有建立起共享的特征,譬如如果特征是非常高维的图像,那么如果在图像的低级别特征(也就是经过多层卷积)进行共享还是有意义的。因此一个替代的解决方案是使用同一个输入,构建一个同时输出演员策略和评论家函数的输出。这在网络特别大的时候更有效,但是缺点在于训练起来可能会比较恶心,因为会有两个不同的梯度(策略梯度和回归梯度)往不同的方向推动共享的参数,数据类型也不太一样,因此让这个网络稳定下来需要很多技巧,如初始化数值和学习率的选择。Levine 教授的建议是,如果模拟器(如 Atari 模拟器和 MuJoCo)很快的话,不妨使用双网络结构,这样比较容易。
<figure>![](img/3a73bab0c6c55d51a7173fff12f29829.jpg)</figure>
![](img/3a73bab0c6c55d51a7173fff12f29829.jpg)
在上一节的末尾我们提到了在线演员-评论家算法,其中第四步只用一个样本去估计梯度,第二步也只用一个样本去更新评论家函数。这样做多少是有点困难的,因为方差会相当高。问题主要出在它依然是一个在线 (on-policy) 算法,在线意味着在第五步更新![](img/51b8359f970d2bfe2ad4cdc3ac1aed3c.jpg)之后,所有的样本需要推倒重来。如果我们能做出一个批量的样本,那么效果可能会明显变好。一个方法是我们尽量少去更新策略,将这个算法弄成拟在线 (quasi-online) 的形式,做多步之后再去更新策略。如果我们可以假设样本可以由多个智能体(多辆汽车,多个机器人等)来收集的话,一个更好的方法是并行训练,如下图。第一种是采用左边图形的**同步法** (synchronized),多个智能体各走一步得到训练数据,用样本数据去计算梯度,先完成的需要等待(因此是一个同步点);然后用多个智能体的梯度加总起来更新演员策略参数网络,大家再去根据新网络执行下一步。每次可以是不同的状态,不同的行动,然后到不同的下一个状态,但这都是不相干的:每次采样完毕后可以继续运行,可以重启,也可以其他操作。一种更先进的方法是**异步法 ** (asynchronous),基本上就是移除这些同步点,每个智能体完成操作以后就去用自己的梯度去更新中央服务器参数,中央服务器积累了一定的步数,就把更新信息发送回所有的智能体。有点像闭着眼走路,但是实际上运行得不错。移除同步点后通常实现简单,更快,基本上哪儿都好;但希望模拟本身要非常快。
<figure>![](img/3849fe5e6780265cb8b31ea0d8f04624.jpg)</figure>
![](img/3849fe5e6780265cb8b31ea0d8f04624.jpg)
我们进一步想看基准线方法如何更好地应用于演员-评论家方法。对于演员-评论家算法,我们的策略梯度估计为![](img/356c92f362f5be02499925d26079485b.jpg)。这个方法的主要优点是我们采用了评论家函数,因此希望有一个更小的方差;然而这个估计并不是无偏的,因为评论家函数总不能被完美拟合;而且在训练的前期评论家函数通常非常不准确,因此不管方差有多小因为评论家函数的无意义导致怎么都不会得到一个很好的值。另一个极端是策略梯度法完全的蒙特卡洛抽样,![](img/3a573d2fab49b547c4653a318c6cb3e6.jpg),其中![](img/6872867a863714d15d9a0d64c20734ce.jpg)是任意常数。这个做法的主要是之前我们已经证明了的无偏性,也提到了主要缺点是单样本估计的极高方差使得本身并不怎么有意义。这边评论家函数的另一种正确用法是,将评论家函数(根据当前状态的)作为基准线![](img/6872867a863714d15d9a0d64c20734ce.jpg),从而得到![](img/2a3a44e4fb4e9ae6125b6c30cfdfc50d.jpg)。与之前的常数不同,这个基准线是依赖于状态的;但是这样做依然是无偏的(类似之前的推导展开),而且事实上改为任何只与![](img/45b65e7000ee1796b17b2aef5e7c9e86.jpg)相关的函数都是无偏的。因此无偏性得到了保留,但是如果基准线接近真实收益,那么方差就会大大降低。依赖于状态的基准线能更敏感地解决问题,比一个常数的降方差功效更好。
......@@ -76,9 +76,9 @@
在之前我们适用的演员-评论家算法的估计都是一步的,即![](img/6205cdeb5570e0f41234db16faacbb81.jpg)。下标 C 的意思指的是评论家 Critic。这个估计的优点主要在于方差较低,但是缺点也很明显,如果值函数是错的的话,那么就会引起很大的偏差(当然肯定总是错的)。另一个极端就是纯粹的蒙特卡洛而不使用评论家,![](img/ed9b611a03efec2fbf8a3c1c730de705.jpg)。我们也知道了它是一个无偏估计,但这样的单样本估计的方差非常高。现在我们考虑一个方法,中和两者的优缺点,得到一个折中方案。一种方法是对两者进行混合,如果发现方差或者偏差过高,那么就提高或者降低组合系数。另一个是,我们发现由于贴现因子的作用,这样指数下降的函数,随着时间往后推移,收益的贡献比例将非常低。
<figure>![](img/684cadc604f93609aa2aa7ab4bde711f.jpg)</figure>
![](img/684cadc604f93609aa2aa7ab4bde711f.jpg)
<figure>![](img/d049a2c2e2a1f50b6da4ea25bee478b1.jpg)</figure>
![](img/d049a2c2e2a1f50b6da4ea25bee478b1.jpg)
在上图,从一个状态出发,不同的轨迹的效果随着时间后移而渐行渐远,因此是一个从小方差到大方差的过程,贡献逐渐下降而方差逐渐上升。单个样本很容易被淹没于未来轨迹的汪洋大海之中,遥远的未来的可能性如此之多,如果我们看 50 年以后会怎么样基本上是做白日梦。我们要做的是在轨迹上在方差变得太大前切一条线,因为后面的步骤可能性太多,效用实在太低;而我们用评论家函数 V 去替代后面的部分,作为一个平均情况:![](img/b4b0b321dbb9a9a7ea64b932895b1632.jpg)。这样的表达式允许我们通过调整![](img/493731e423d5db62086d0b8705dda0c8.jpg)来控制偏差方差的权衡,通常选择一个大于 1 的值如 4、5 会运行得较好。这也称为![](img/493731e423d5db62086d0b8705dda0c8.jpg)步收益。
......
......@@ -66,11 +66,11 @@
使用算子![](img/ae087b2ee711b4d242670c584abd0bc9.jpg),我们可以把每一步的值函数迭代算法写成![](img/3a9f0b75a95784adb8f853ccc7b7f059.jpg)。为了把 Q 函数用神经网络表示,现在我们来看拟合值函数迭代算法。拟合值函数迭代需要做一个回归,它的本质是从神经网络能表示的所有函数的簇![](img/c20ff3270833f8171a7cb01cc34dc280.jpg)里面,找到一个函数![](img/a46e048aab0e2f1215f939e9f2b1a66f.jpg),使得![](img/be9df62849d35ab4e4e72871e181d09a.jpg)。虽然在理论上,一个无限大的深度神经网络可以拟合任意函数,但是在实际使用中,我们一般只能使用一个有限大小的神经网络,因此它能表示的只是所有函数的一个子集。
<figure>![](img/6ba1bed963fee0917976ed361b8c812b.jpg)</figure>
![](img/6ba1bed963fee0917976ed361b8c812b.jpg)
如上图,蓝色的线代表该神经网络能代表的函数的全集,我们从一个函数出发,进行一次备份操作,然后使用最小二乘回归来投影到这个函数集合。我们定义投影算子![](img/bea8259ddc81b502185ea944dd0ec451.jpg),那么我们的拟合值函数迭代算法可以写成![](img/80c0b820c3e1ebf9ee38fd666ac99c15.jpg)这样的复合映射。注意到投影算子最小化的是欧几里得距离,是 2 模下的收缩映射。![](img/ae087b2ee711b4d242670c584abd0bc9.jpg)是一个无穷模下的收缩映射,![](img/a0d76431d0746be878aae0cf9e2af4b3.jpg);![](img/5bf4bb781dd2d49d92ccf59eed28ec0f.jpg)是一个 2 模下的收缩映射,![](img/7a12b9ec1f617907f55f18046e1a93e7.jpg),但问题在于如果我们将这两个映射进行复合,那么![](img/8103c32cbdfc5697b6d3808151f6f7bf.jpg)并不是一个收缩映射,因为它们不是在同一个模下收缩的。
<figure>![](img/ebbebc713ddf745becd38ed5d382533f.jpg)</figure>
![](img/ebbebc713ddf745becd38ed5d382533f.jpg)
上图是一个该算法发散的例子。假设最优解![](img/1ce7177a602efa817624ed92ea889be9.jpg)在那个五角星处,然后我们从![](img/21ec2ab32d1af3e766487093bb20cf22.jpg)开始一脚走到了![](img/9c4501554984db58ca4414c592e22347.jpg),然后被投影回归扯回了![](img/a46e048aab0e2f1215f939e9f2b1a66f.jpg)。从图上看,我们的解到最优解的距离越来越远了。注意到,不用无穷模的原因是当状态空间很大或者无限的情况下,无穷模下的投影问题极其难解。我们只能寻求找到最优解的一个投影(同样对于策略梯度法我们也只能期望找到最优策略的一个投影),但是事与愿违的是,反复进行拟合值函数迭代算法,可能使你从较好的解开始越来越差。因此我们的结论是,值函数迭代法在表格中是收敛的,但是拟合值函数迭代法在一般意义下是不收敛的,在实践中也通常不收敛,但是有一些方法来缓解这些问题。
......
......@@ -15,7 +15,7 @@
我们之前已经说明过,它**不是一个梯度下降算法**,因此,梯度法的收敛性在这里不适用。第二点很关键的问题是,在普通的 SGD 中,我们常常认为每一次拿到的数据之间都有一定的不相关性;而在第一步收集的数据中,**数据通常都是非常相关的**:下一步的观察数据可能和这一步非常相关。因此,梯度也会非常相关。因此,我们会尝试去使用一些手段来缓解这些问题。我们考虑解决的问题主要有两个:序贯状态的强相关性,以及目标值总是在变动。
<figure>![](img/1b744935c9b978bd95bfdcd86a4b4df0.jpg)</figure>
![](img/1b744935c9b978bd95bfdcd86a4b4df0.jpg)
序贯样本为什么会成为痛点?让我们先考虑一个简单的回归问题,这个回归问题尝试去拟合一堆数据,而这堆数据是一个正弦波。一般我们希望数据是独立同分布的,而我们在序贯问题中先得到了开始的几个样本,然后逐渐得到后面几组,每得到一组我们就走一个梯度步。这样我们就很难去学习整个正弦波,而更容易在局部形成过拟合的同时,忘掉了其他样本的信息。在演员-评论家算法中,可以采用一些并行学习的方法,这里 Q 学习也可以:使用多个独立的智能体进行独立的数据收集,然后使用同步或者异步的方法进行梯度更新,这样可以使得样本的相关度减轻,但是这样的做法可能是相当“繁重”的。
......@@ -23,7 +23,7 @@
这给了我们一个启示,我们可以构造一个样本池![](img/ae087b2ee711b4d242670c584abd0bc9.jpg),然后每次从里面抽出一批样本,进行梯度更新: ![](img/025861dbd6577265884153627bdc1fdd.jpg) 。这样做的好处不仅在于这样抽出的样本不再具有很强的相关性了,同时我们每次可以用的样本量也从 1 个变成了很多个,可以使用多样本来降低梯度的方差(有点类似于 mini-batch SGD 的做法)。现在我们想要知道的是,高覆盖面的数据到底从哪里来。在实践中,对于很大的状态空间,我们通常很难去很好地覆盖;我们能做到的最好情况的可能也只是覆盖我们所可能到的沧海之一粟。因此,我们在 Q 学习的过程中,还是需要同时去为样本池补充新鲜血液。这也要求我们使用一些探索策略向外界环境输出一些不同的策略,然后得到样本进入样本池。训练过程有点像某些抽奖箱子里每次抽一张卡,抽完丢回去再抽。因为我们投入的数据会被反复使用到,有点类似于回放,因此被称为**回放缓冲池** (Replay Buffer)。
<figure>![](img/e85ee9bf098bd0b36f08c9348b2053b6.jpg)</figure>
![](img/e85ee9bf098bd0b36f08c9348b2053b6.jpg)
从而,一个(同步的)使用回放缓冲池的 Q 学习算法是这样的:
......@@ -45,11 +45,11 @@
小批量样本的特性是,其中第三第四步是可以并行的。
<figure>![](img/b8ccda82b58beb66a62c2abfffd962ab.jpg)</figure>
![](img/b8ccda82b58beb66a62c2abfffd962ab.jpg)
关于目标网络,也有另一种实现策略。看上图,我们在第一个绿色方块更新了目标网络,此后若干个步骤,我们都将以这个目标网络为基础进行迭代,然后逐渐误差越来越大,直到下一个目标网络更新点,就形成了一个断点。这样其实对于步骤和步骤之间并不公平,有些步骤访问的延迟很高,有的步骤则很低。为了使得延迟公平化,可以使用一个类似于指数平滑的方法(随机优化中的 Polyak Averaging),不再是若干步执行更新而是每一步都做一个小变动:![](img/c3069f9353fcc9a7455ec2315b0f8855.jpg)。实践中![](img/687ea19aad79c360559598d48aca6a87.jpg)效果不错。从优化的角度,可以对这样的做法有一些理论解释。
<figure>![](img/f36ae0213ed9569290f29c557905cc87.jpg)</figure>
![](img/f36ae0213ed9569290f29c557905cc87.jpg)
现在,让我们对在线 Q 学习、拟合 Q 迭代、DQN 算法进行一个比较。我们可以发现,对于有回放缓冲池和目标网络的 Q 学习算法来说,最外层循环是更新目标网络的参数,内层循环是使用同一个策略收集若干数据集丢进缓冲池后,迭代若干次从池中抽样然后做小批量样本的梯度步;而对于拟合 Q 迭代算法,最外层循环是使用同一个策略收集若干数据集丢进缓冲池,而内层循环则是更新目标网络的参数,然后迭代抽样做梯度步。外面两层操作顺序是相反的。DQN 是其中的一个特例。
......@@ -57,19 +57,19 @@
## 让 Q 学习更好的技巧
<figure>![](img/f67d6aeebdb21eeffd49b493b8711cd8.jpg)</figure>
![](img/f67d6aeebdb21eeffd49b493b8711cd8.jpg)
我们在前面已经知道,Q 函数本身是有意义的:在某个状态下,我们进行了某种操作,今后会带来的期望收益。那么我们使用之前估计得到的 Q 函数值是否能准确反映呢?Mnih et al. (2015) 在 Nature 上的论文做了一系列正面实验。上面四个图中,上面两个是平均收益,下面两个是平均 Q 值,我们发现当估计的 Q 值上升的时候,总体来说收益也呈一个上升的趋势;但是在训练片段中收益波动相当大,Q 值虽然不能很好去拟合收益,但是波动相对小,相对光滑。下面举两个 Atari 游戏的例子来说明这些值函数的意义。
<figure>![](img/11a80f69132567f5bda493eee62ce4db.jpg)</figure>
![](img/11a80f69132567f5bda493eee62ce4db.jpg)
在打砖块 (breakout) 游戏中,我们知道每当球撞到一个砖块,就会产生一个小小的收益,因此,值函数就会有一个小型的峰出现。上面四个图每次都是要打掉一个砖块时的画面,正好对应了下面的四个峰。更进一步地,我们一个很好的策略是让这个砖块里面产生一个小孔,然后让球进去那个基本封闭的区域里面跳来跳去,打掉很多砖块产生大量得分:这个判断正好和图 3(成孔前夕)-图 4(成孔后进入)一致,从而值函数给予了很高的评分:图 3 是一个希望,而图 4 美梦成真。这说明我们的值函数的局面评估定性上是合理的。
<figure>![](img/ff6a6440da9636e83e28f4750f392e23.jpg)</figure>
![](img/ff6a6440da9636e83e28f4750f392e23.jpg)
在弹球游戏 (pong) 中,我们控制右边的板子上下移动来接球。操作有三种:无操作、向上、向下。在图 1 和图 4 中,三种操作都可以接受,尤其是在图 4 中我们不管做什么样的操作都已经获胜了;而图 1 中接小球还有足够的容错可能。而在图 2 则接小球有了很强的紧迫性,而图 3 紧迫性更强几乎没有容错机会了,所以向上的 Q 值很高,向下和不动的 Q 值很低。
<figure>![](img/107e95babf8363ef499e6a2a7b1d5cf2.jpg)</figure>
![](img/107e95babf8363ef499e6a2a7b1d5cf2.jpg)
我们说了很多使用值函数评估局面、Q 函数来做决策的合理性。因为我们只需要按照 Q 函数最大的准则来进行行动,似乎只有 Q 的相对数值大小才有决定性作用。那么这些绝对数值是否准确?很遗憾,van Hasselt et al. (2015) 这些数值是被高估的。我们只看上图的红色部分(DQN estimate 和 DQN true value)。红色的波动很厉害的那条折线代表了神经网络所估计出来的 Q 值,而下面那条红色直线是根据 DQN 的策略行动实际所能得到的期望收益:所以理想情况下,在很多步估计之后,红色折线应该和红色直线有一个相切关系。但是事实上,我们在不同的游戏中都发现估计出来的红色曲线明显比真实值红色直线要高,呈现一个系统性趋势。这说明了 DQN 实际上严重高估了 Q 值。事实上 DQN 的表现还是不错的,尽管这个 Q 值可能估计得很离谱:实际上对于两个不同的操作![](img/ebc140645dd4bd2a91ca78746a11ccf0.jpg)和![](img/5a64c9c517e630bfa1cf82c078c51d17.jpg),只要让估计的![](img/a1e8ba82b43c795cf1dfd8b4c06d32fb.jpg)差和真实值差不多或者长得像就能让 DQN 工作起来。
......@@ -88,7 +88,7 @@ van Hasselt et al. (2010, 2015) 的**双重 Q 学习** (Double Q-learning) 技
春季课程中,Schulman 还请他的同事 Szymon Sidor 总结了一些经验,和 Levine 教授这边混在了一起:
<figure>![](img/bcf39b8869877165446c3f29834e3cbf.jpg)</figure>
![](img/bcf39b8869877165446c3f29834e3cbf.jpg)
1. 上图显示了几个问题的几种不同 Q 学习的效果 (Schaul et al., 2015)。发现对于不同的问题,Q 学习在有些问题上很可靠,在有些问题上波动很大,需要花很多力气来让 Q 学习稳定下来。因此发现几个能让 Q 学习比较可靠的问题来试验程序,譬如 Pong 和 Breakout。如果这些例子上表现不好,那就说明程序有问题。
2. 回放缓冲池的大小越大,Q 学习的稳定性越好。我们往往会用到上百万个回放样本,那么内存上怎么处理是决定性的。建议图像使用 uint8 (1 字节无符号整型) 存储,然后在存储![](img/d8952012d5ece7e22b010e0116c03ad0.jpg)的时候不要重复存储同样的数据。
......@@ -106,7 +106,7 @@ van Hasselt et al. (2010, 2015) 的**双重 Q 学习** (Double Q-learning) 技
第一种想法是直接做优化。在最内层循环做基于梯度的优化算法(如 SGD)相对来说是比较慢的。注意到我们的行动空间通常都是比较低维的(相对整个系统而言),不使用梯度信息的随机优化也许能有用武之地。最简单的方法是使用离散随机踩点:![](img/fa1a5cb07364baeb6b25682fff09054d.jpg),其中行动是从某些分布(如均匀分布)中得到的。这个方法是最简单的,而且还比较容易并行,但是这样得到的结果是不准确的,尤其是在维度增加的情况下看起来就不像是能找到一个效果很好的解;不过有些时候,我们也不真正在乎优化求解的精度。此外,还有一些更好的方法,譬如交叉熵方法 (Cross-entropy Methods) 这样的迭代随机优化算法,或者如 CMA-ES (Covariance Matrix Adaptation Evolutionary Strategies) 这样的进化算法。这些通常在不超过 40 维的决策问题中有效。
<figure>![](img/3eed1d55204dd10d4c9558aa86dc5cd3.jpg)</figure>
![](img/3eed1d55204dd10d4c9558aa86dc5cd3.jpg)
第二种方法是,我们选取一个比较容易优化的函数簇来拟合我们的 Q 函数。在此之前,我们适用的都是通用的神经网络来拟合 Q,有些情况下我们不必要这么做。譬如在 Q 函数是二次函数的时候,![](img/7a334093dedb7fdbe31a820786ed10fd.jpg),我们就训练一个神经网络或者其他结构,输入状态,输出![](img/d7ce41750efb7325a3191507939507d2.jpg),其中![](img/4e4d506c887c843f43a8fbcbe1884ffd.jpg)和![](img/21ec2ab32d1af3e766487093bb20cf22.jpg)都是向量,![](img/f0481b76bd881625dd55f21f6d81bbc8.jpg)是矩阵(可以用如低秩形式表示)。这样的方法称为 NAF (Normalized Advantage Functions),它的天然特性就是![](img/7fb380bd0ed15a070ded59f007529699.jpg)和![](img/26edd775c418202315443dd9794ef3d7.jpg)。这个很容易和高斯分布建立起联系;当然,这样的 Q 函数中行动是没有界限的。我们这么做的话,算法上不需要做任何改变,非常容易,而且和原来的 Q 学习一样高效。但是缺点就在于 Q 函数只能是固定的形式(如这里的二次函数),非常受限,Q 函数的建模泛化能力将大大降低。
......
......@@ -14,7 +14,7 @@
让我们先忘记策略这个东西的存在。类似[之前](https://zhuanlan.zhihu.com/p/32575824)人在老虎面前的决策问题,我们需要给出一连串决策,使得被老虎吃掉的概率最小:![](img/f3134fb3fb3a2bec340c2d13d90e5064.jpg),这类问题通常能转化为一个最小化代价的问题:![](img/99e7c00db12760ebac7cb5d47fadfbcc.jpg),或者是最大化收益。我们假设环境![](img/dad139946fdd1363ecd86d20700a53a6.jpg)是确定的,目标是最大化收益问题,那么问题的结构就变成了环境向智能体给出了初始状态![](img/9852aef9c75200eca15057b3188c038e.jpg),然后智能体做出一系列的行动决策![](img/0a98b6bf6f718b534b8d03cf9d11d8ff.jpg),直接交给环境。在确定性环境下,我们上面做的就是一个最优控制了;而对于环境是随机的情况下,轨迹条件概率为![](img/04cf23f3661fd33654067b566eaacd34.jpg)(注意是我们给定行动决策序列之后,状态序列的概率),我们一下子做好的期望收益最大的**开环** (open-loop) 控制系统![](img/f6be7aeb28531cb23c3fd8140b3ac9c9.jpg)就不见得是最优的了:因为我们通常没有必要一下子把所有的决策全部做了,可以通过做第一个决策来观察之后是什么样的随机情况这样的反馈机制,来继续做后面的决策,使得接下来的决策做得更好。这样的机制通常被称为**闭环** (closed-loop)。下图说明,区别在于开环系统在一开始就把所有决策单向传递给环境,因此不接受反馈;闭环系统则每次只传递单次行动,并接受下一个状态作为反馈。
<figure>![](img/7f98d9b4acd9808e59803f2bd42817e1.jpg)</figure>
![](img/7f98d9b4acd9808e59803f2bd42817e1.jpg)
在一个闭环控制系统中,我们就需要一个策略![](img/89eb2e91be70247f33a5542dcaf0f42b.jpg)了,在策略的加持下,我们的轨迹概率就变成了![](img/c015f10519ede8c9ab477ed0bda43078.jpg);我们需要做的是得到一个最优的策略![](img/89eb2e91be70247f33a5542dcaf0f42b.jpg),使得期望收益最大:![](img/14c39dca3d6bf161e27afa0e837c3702.jpg)。关于这个策略簇,我们在之前提到的主要是用一个神经网络来确定,此外在这一篇中我们还将提到使用经典的轨迹优化 (trajectory optimization) 方法来训练一个(时变的)线性策略簇![](img/2c4f7fec75101287c6d7da0e2fc23849.jpg),基本上就是主要执行![](img/0e3b2539d37a16b811786a3550a06d05.jpg),并使用当前给定状态做出一些线性修正。因此,根据我们限定的策略簇不同,策略的学习可以从非常简单到非常复杂。
......@@ -22,7 +22,7 @@
我们的第一类规划算法是随机优化,通常用于时长比较短的问题。让我们先将之前的控制问题进行一些抽象,如![](img/35c93e80fa2055096ee664bcc3f51dd2.jpg),其中![](img/5f02066e4afc0ab06a7109b2ccd06e89.jpg)是某种函数,我们并不关心具体是什么,只是想把它最大化;再进一步把决策序列写成![](img/bab4ec68a5669018a9f1c8a043f6d825.jpg)。(_ 因为在这边我们的决策只能决策行动,决策和行动是一码事,在后文中,我们将 action 行动和 decision 决策混用 _)在上一篇讲 Q 学习的连续控制中,我们也提到了这类算法中最简单的是从某种分布(如均匀分布)中挑选若干个决策序列![](img/008f6438536c3fdc55c7ad12a772b371.jpg),然后选取![](img/1dd7aa3ec2a7edbcab062793eaffb026.jpg)。这样的算法在低维问题中还是有一定效果的,有时候被称为随机打靶法 (random shooting method)。
<figure>![](img/ae50dc9b4f172f3c2bf99154d73b8a60.jpg)</figure>
![](img/ae50dc9b4f172f3c2bf99154d73b8a60.jpg)
这种方法的一个改良版本称为**交叉熵方法** (Cross-entropy Method, CEM),对 30 到 50 维这样的问题效果不错。在之前的随机打靶法中,我们需要从某种分布中选取决策序列,但是关键问题是,我们使用哪一种分布?在一开始,我们对于如何选择![](img/4853ca095c827306fda5063deb28f83e.jpg)没有任何先验知识,所以采用某种均匀的先验分布![](img/c9a0072723ebe428c218adc2f3b1aefa.jpg)。经过一把采样之后(如上图的四个采样),我们发现有一些样本效果比较好,于是我们选出几个较好的样本,来拟合一个分布(如采用图中的高斯分布),作为下一次采样的先验分布。通常认为这样的分布抽样效果会比之前的要好,但是对于很病态的问题我们也没什么太好的办法。第二次采样(下图)进一步更新分布。对于连续值输入的交叉熵方法,算法可以描述成以下步骤的循环:
......@@ -37,7 +37,7 @@
在离散决策问题中,**蒙特卡洛树搜索** (Monte Carlo Tree Search, MCTS) 是用于求解闭环控制的复杂问题的更先进的工具。这一方法在离散问题中非常通用,它也在 AlphaGo 的早期版本中承担很重要的作用。
<figure>![](img/a7dcfc76be2217a0e6105a56f2017b09.jpg)</figure>
![](img/a7dcfc76be2217a0e6105a56f2017b09.jpg)
在上图中,我们假设初始状态![](img/21ada23d4152305a43f59b6fdf76009c.jpg)已知,每一步的行动有 0 和 1 两种。每次执行完毕一个操作![](img/7617c5f412d8ba08311c56a7e3032fcb.jpg)以后,就会进入一个新的状态![](img/728a11c3b11e1b323358ada0345f8c98.jpg),然后继续往复。这样我们随着时间展开成一棵非常庞大的树,要想去对这棵树做一个彻底的搜索(哪怕展开的层数一多)显然是非常不切实际的。在之前我们采用了“树搜索”的思想,这个时候我们对其加一些“蒙特卡洛”。我们搜索到一定程度后,树就不再展开:把此时的叶子节点作为叶子来看待,使用一些启发式策略(也可以是随机策略)来评估这些叶子节点的好坏。即便这个策略并不好也没关系,我们只需要继续对每个叶子节点出发继续执行这个策略若干步来看最后结果怎样,来大概给这个叶子节点的效果打个分。注意,此时打分的复杂度不再是指数级别的,而是**叶子的个数**乘上**启发式策略运行长度**。这个方法的基本思想是,如果当前已经进入了一个优势很大的局面(或者已经赢了),那么一些比较菜的策略也应该能把优势保持到最后;如果我们已经进入了一个怎样都会输的不利局面,那很多人的选择也是乱玩把游戏结束了。因此不会对我们的启发式策略要求很高。因此,在实际中,大家做 MCTS 的时候通常选择的就是随机策略,选一个很好的策略通常是次要的。
......@@ -52,7 +52,7 @@ MCTS 的一般结构为:
TreePolicy 有很多,其中一个很流行的 UCT (Upper Confidence Bounds for Trees) TreePolicy(![](img/ac38b18cffeff5d93b3e1f9a9cd11281.jpg))为:如果![](img/ac38b18cffeff5d93b3e1f9a9cd11281.jpg)没有完全被展开(也就是从状态![](img/ac38b18cffeff5d93b3e1f9a9cd11281.jpg)有行动没有被评估过),那么选择一个没有评估过的新行动![](img/1b2a8b7cd624ff7839851d7f32259ca9.jpg);否则就选取一个得分最大的儿子![](img/a3cb5df87811ac506b987dbaaf8fb566.jpg),其中得分公式为![](img/5e713e4099000503539ed5c767c4ab21.jpg),越大越好,![](img/b44c973ab5625e97f17e92687c1206ae.jpg)为该节点为跟的子树的所有已经被展开过的节点的评分之和,![](img/2ecb1ec4cf404627b7f1db2e1f72ece9.jpg)为该节点为根的子树中已经被展开过的节点个数,因此![](img/214f2479a81528899936fd8bcd4c4223.jpg)就是![](img/ac38b18cffeff5d93b3e1f9a9cd11281.jpg)的平均评分了;后者则是用来评估稀有性。我们使用一个例子来解释该算法。
<figure>![](img/6052bd4d21855b25473236810616e913.jpg)</figure>
![](img/6052bd4d21855b25473236810616e913.jpg)
假设每个节点的行动都是 2 个。在一开始,我们只有一个节点![](img/21ada23d4152305a43f59b6fdf76009c.jpg),没有被展开,根据 UCT TreePolicy(![](img/21ada23d4152305a43f59b6fdf76009c.jpg))策略,我们应该展开![](img/21ada23d4152305a43f59b6fdf76009c.jpg)的所有行动,得到新节点后进行评分。我们经过某种随机策略得到![](img/74d2211bbd012f5e5cece449d0be8b6a.jpg)下的新状态评分为 10,因此 Q 值和 N 值分别更新为 10 和 1;同样![](img/e273d67d5cbd2ca8e731810395fa74f3.jpg)下的新状态评分为 12,由此得到图(1)。此时,节点![](img/21ada23d4152305a43f59b6fdf76009c.jpg)的所有行动都已经完全展开,因为两棵子树展开程度一致,通过 Q/N 的比值,我们决定展开右侧子树一步,得到(2)中的节点,根据随机策略评估得分为 10。此时右侧的![](img/728a11c3b11e1b323358ada0345f8c98.jpg)的 Q/N 比值为 11,仍高于左侧,但是差距不大,我们假设得分公式中第二项左侧明显占优势(因为右侧已经访问过了,左侧还没访问过),此时左侧![](img/728a11c3b11e1b323358ada0345f8c98.jpg)得到展开,得到图(3),接着继续迭代两次得到图(4)。
......@@ -64,11 +64,11 @@ TreePolicy 有很多,其中一个很流行的 UCT (Upper Confidence Bounds for
在实践中,这样的一阶算法通常效果并不是很好,使用二阶微分信息通常是非常有帮助的:原因是,考虑到第一次行动![](img/46153327395220b1e7d56d80a5025c78.jpg),在整个式子里面出现了很多次,因此![](img/46153327395220b1e7d56d80a5025c78.jpg)的值是非常敏感的,相对来说最后一次行动的影响则非常小,这样得到的梯度是非常病态 (ill-condition) 的,容易梯度爆炸或者梯度消失。因此使用一阶算法在实践中往往不太可行,但是好消息是这样的问题结构事实上容易得到一些非常有效的二阶算法。注意这些算法并不去训练一个神经网络,但对解决这一类的或者相关的增强学习问题很有帮助。
<figure>![](img/493e5eae0dbf745d2b4cc2e892bdd5ad.jpg)</figure>
![](img/493e5eae0dbf745d2b4cc2e892bdd5ad.jpg)
关于轨迹优化,有两类思想有所区别的算法(_ 注:我不知道这两个名词应该怎么翻译,就随便写一个意译了 _)。一类是**射击法** (shooting method),这类方法只关注去优化每一个时刻的行动![](img/73c613b5fd668889d500bfc284cbc5ca.jpg),而把状态![](img/f0017ba74157ab6dcc71add24224bad2.jpg)看作是行动产生的结果。本质上就是![](img/1d23ede5053008d7db880a180b7f7cff.jpg),之所以叫做射击法是因为如上图,动作稍稍一晃就会打出差别很大的轨迹来。
<figure>![](img/9551ac9f9c9c8f4b9e4e03e9e52326cd.jpg)</figure>
![](img/9551ac9f9c9c8f4b9e4e03e9e52326cd.jpg)
另一类叫做**搭配法** (collocation method),同时优化每个时刻的状态![](img/f0017ba74157ab6dcc71add24224bad2.jpg)和行动![](img/73c613b5fd668889d500bfc284cbc5ca.jpg),同时使用约束来将状态和行动维系起来(甚至有时候只优化状态,而把行动看成状态转移的手段)。本质上就是![](img/2a6fa79a1da8041096c475ca21765631.jpg)。搭配法有点像上图,一条轨迹上由很多钉子确定,然后可以通过移动钉子来改变这条轨迹。它相对射击法来说更加稳定,但是问题更难求解(需要引入约束条件);如果我们不想引入约束,那么就会遇到如射击法一样稍微一晃差异很大的问题。
......@@ -97,7 +97,7 @@ LQR 在随机系统中也能起到一定作用。在某些高斯随机过程中
这个方法事实上是一种近似的牛顿法来求解![](img/1d23ede5053008d7db880a180b7f7cff.jpg)。牛顿法求解的过程也是每一步![](img/fc4951180627f83da0765ea266e6b18d.jpg),而 iLQR 的想法也跟牛顿法一样,局部近似一个复杂的非线性函数。但是 iLQR 并不等价于牛顿法,而确切使用牛顿法需要将动态系统 f 展开到二阶:![](img/3b9fa0f5fd5834ea978f395dcac5d7d6.jpg),这样的方法也被称为**差分动态规划** (Differential Dynamic Programming, DDP)。在实际中我们通常不这样使用,因为 f 通常是一个向量值函数,做二阶微分以后会变成一个张量,会比较复杂。在实践中,一阶微分就效果不错了,虽然它需要更多步数才能收敛,但是考虑到计算二阶微分的成本,还是值得的(iLQR 只是 DDP 方法去掉了 f 的二阶微分)。
<figure>![](img/1c08ff63758ab19dfd35c24181fb0d60.jpg)</figure>
![](img/1c08ff63758ab19dfd35c24181fb0d60.jpg)
在使用牛顿法来求解非常复杂的非线性函数时也有一些技巧。如,如果我们每一步都执行![](img/fc4951180627f83da0765ea266e6b18d.jpg),不见得是好的。这是因为梯度和 Hessian 阵都是局部的,而实际函数并不是一个二次函数。如实际函数是蓝色曲线,在蓝色点上近似展开到二阶,便“认为”该函数是红色的二次函数,然后尝试去找这个函数的最低点。然而,这个解可能在实际中并不好(在红叉位置,走得太远了),甚至比原来的解更大了,实际最优解在五角星位置。所以一个比较好的处理方法是做一些线搜索 (line search),也就是把 iLQR 的第三步中,![](img/9845666762ee0a2ca62338790529bd65.jpg)改为![](img/d6609e668dbe1a9022dffecb50120404.jpg),其中![](img/82005cc2e0087e2a52c7e43df4a19a00.jpg)是一个较小的系数。注意如果![](img/82005cc2e0087e2a52c7e43df4a19a00.jpg)是 0,那么在迭代中轨迹不会发生变化。因此![](img/82005cc2e0087e2a52c7e43df4a19a00.jpg)决定了如何关于旧轨迹和新轨迹的插值比例系数。一个比较简单的方法是搜索![](img/82005cc2e0087e2a52c7e43df4a19a00.jpg),直到它提高了预期设定的一个比例。关于这块文献,Mayne and Jacobson (1970) 最早提出了 DDP 算法,Tassa et al. (2012) 给出了做 iLQR 的实践指导意见,Levine and Abbeel (2014) 给出了不用线搜索的另一种信赖域方法。
......
......@@ -16,7 +16,7 @@
第一步的策略对于驾驶汽车来说可能是随便转方向盘,显然不是什么好策略,但是也可以用这个来得到一些数据。第二步是去构建一个损失函数并最小化用模型预测出来的状态和真实发生的状态来拟合。第三步则是使用上一篇中的方法来进行计划。这样简单的方法在有些时候也可以起作用。本质上,这正是经典机器人学中系统识别 (system identification) 问题中在使用的方法:现在已经有一个参数形式的![](img/77cff52584c80e30470b34d9850cbee3.jpg)了,如已经有了机器人的运动方程,但是很多参数譬如质量和长度什么的不知道,而需要通过回归等方法去估计(有点像待定系数法)。此外,这样的方法中,这个“基本策略”还是要有所讲究的:譬如说不能总是执行一个行动,因为这样我们学习到的模型可能无法适应很多从来没见过的行动;即便基本策略执行各种情况,但是执行它可能错过重要的状态空间部分,这样也是不行的(当然这个说法本身就很玄学了)。总体来说,这个 v0.5 版本对于我们有一个利用物理知识手工推导的模型系统动态方程(我们有丰富的先验知识),只有个别(如 10-30 个)参数不知道的情况下还是很好用的:这时候随机策略可能足够好。
<figure>![](img/1b0ab2765caf207a07e5194ca55a0e6a.jpg)</figure>
![](img/1b0ab2765caf207a07e5194ca55a0e6a.jpg)
但在一般情况下,v0.5 版本明显是有缺陷的。如现在智能体在这样一个斜坡坡面上训练,我们的目标是到达山顶。我们第一步进行一些随机走动,训练数据如红色曲线;然后我们需要拟合一个模型,来预测行动如何影响智能体的高度(因为我们的目标是尽可能往高处爬):我们通过红色部分的数据,得到的结论可能是越往右走,高度越大;最后一步,我们使用这个模型去进行规划,得到的结果就是如黄色轨迹一般坠落山崖。这里出现的问题主要就是如我们之前在[模仿学习](https://zhuanlan.zhihu.com/p/32575824)一篇中讲到的**分布不匹配** (distribution mismatch) 问题:我们的训练数据分布和实际遇到的情况不匹配。在这里,我们通过分布![](img/9d2788b87afa62cdb2e42b5e2be64b35.jpg)来收集数据,但是实际用于规划行动时,我们不再执行![](img/92546131c30d45daa7f1ce8eeba04c9a.jpg)下的分布,遇到的是![](img/b4015417e4fab132708d8ac1d66690b8.jpg),与之前遇到的分布是不同的。即便我们训练了一个在分布![](img/9d2788b87afa62cdb2e42b5e2be64b35.jpg)下很好的模型,但这个模型在![](img/b4015417e4fab132708d8ac1d66690b8.jpg)所遇到的状态下可以任意差。值得一提的是,这样的分布不匹配问题在使用越具表达力的模型簇时越严重。因为如果像我们跟前面所说的一样只缺少几个待定参数,而模型具体形式已经知道了,那么其实对数据要求还是不高的;而使用如深度神经网络这样具有高表达力的模型,则会把红色部分的数据拟合得相当好(_ 我觉得是一种过拟合 _),然后尝试去遵循这个模型,就掉下去了。因此,越具有表达能力的模型事实上能越好地拟合![](img/9d2788b87afa62cdb2e42b5e2be64b35.jpg)分布下的数据,而这并不代表我们更加了解实际面对的分布![](img/b4015417e4fab132708d8ac1d66690b8.jpg)
......@@ -31,11 +31,11 @@
前三步与 v0.5 版无异,而 v1.0 版增加了第四步,收集新数据加入样本中并重新学习模型动态,希望藉此消除分布不匹配的问题。这个算法和 DAgger 不同,因为 DAgger 是为了适应策略的改进,而这里只是一些独立的强化学习步骤。
<figure>![](img/2f570252a319a6a6c3238154007beb0f.jpg)</figure>
![](img/2f570252a319a6a6c3238154007beb0f.jpg)
现在我们再对这个算法进行一些改进。考虑到如果我们犯了一个错误如何纠正:如果智能体失足坠落山崖,那么它就牺牲了,没什么进一步好做的了,这个是致命错误;但并不是所有错误都是致命的。如我们驾驶一辆车,每次问我们的模型,如果我们方向盘朝正前方,那么汽车会往什么方向走?然后模型总是回答,会稍微往右一点点:实际答案是我们的车会往正前方开,但是稍微往右一点点这个答案也相当接近正确答案了。但是麻烦在于,如果我们按照这个模型去行动,每一个时刻开车我们都以为需要加一些向左方向进行补偿,每一时刻方向盘都向左一点点的话,加起来很快这个车就会开出道路了。因此,即便我们的模型只有些许错误,我们在每个时刻尝试进行一些补偿,那么最后这些补偿加起来会成为很严重的错误。
<figure>![](img/3824deac3edc513457b08d1fcc3ee89f.jpg)</figure>
![](img/3824deac3edc513457b08d1fcc3ee89f.jpg)
基于模型的增强学习 v1.5 版跟上一篇中的稳健算法类似,进行一些 MPC。如果我们发现根据我们的规划走,这个车却向左偏了,当误差到一定程度时,我们就可以重新进行规划,希望这个重新规划的方法可以补偿。框架如下:
......@@ -49,7 +49,7 @@
在这个 v1.5 版本中,最难的一点是做规划。越精密的模型和方法,计划未来行动的代价越大,使得在线进行越困难。如玩 Atari 游戏,然后使用 MCTS 的方法,那么计算代价就会相当高。而 Guo et al. (2014) 使用模仿学习训练策略,则能更好地实现在线进行游戏。
<figure>![](img/268607a1c845c0f027feb229d3b8ba9e.jpg)</figure>
![](img/268607a1c845c0f027feb229d3b8ba9e.jpg)
MPC 方法可能很好,但是计算代价有可能会很大。我们之前的想法是构造一个策略函数![](img/4c5d89d0f9cec3ce2096ec064da2efd1.jpg)来得到具体的行动。为了得到策略函数,我们可以写出如上图的计算图来表明策略函数![](img/4c5d89d0f9cec3ce2096ec064da2efd1.jpg)如何影响收益,从而我们将梯度或者什么东西进行一系列反向传播。这个做法对确定性策略非常容易,也能拓展到随机策略。基于这种想法吗,我们有了基于模型的增强学习算法 v2.0 版:
......@@ -95,7 +95,7 @@ Nagabandi et al. (2017) 最近的"[Neural Network Dynamics for Model-Based Deep
现在我们只来关心![](img/b1572ffc28875eceb6bdfc9339d151ee.jpg)。知道了这些信息之后,我们就可以用 iLQR 等方法来进行轨迹优化了。因此,我们的想法不是去拟合模型动态,而仅仅是去拟合关于当前轨迹或者策略的![](img/b1572ffc28875eceb6bdfc9339d151ee.jpg),譬如使用线性回归的方法。注意到 LQR 很好的特性是它是线性的,而且这个策略是可以在真实环境中运行的。
<figure>![](img/4df7ca93c58705962903e09c6811ab76.jpg)</figure>
![](img/4df7ca93c58705962903e09c6811ab76.jpg)
我们尝试对一个增强学习过程进行拆解(_ 注:这边图里![](img/868db68e71ec9cabbe333cb77dd676bc.jpg)也变成![](img/648811253cdbfe19389964c25be56518.jpg)了,但我还是尝试把它区分开 _)。首先我们通过运行策略函数![](img/32ddbd60dbeab3d395ebfec5f1a8167c.jpg),来收集轨迹![](img/0077275f50d1e428aa93f877d54b69ae.jpg)。然后我们拟合模型动态![](img/39e0c1687c6b5063ee6c20328748f07a.jpg):为了简单起见,我们假设模型动态是一个高斯分布![](img/97f31cbcb5130521427b30a4667a9040.jpg),均值可能是比较复杂的非线性函数,然后有一个方差,基本上比较确定但是稍微有一些噪音。这个假设对连续系统还是比较合理的。我们假设在每个时刻,都有一个线性化表达式![](img/0f01f2cb77ec97dd1df26e4b6b3bc41e.jpg),对于不同时刻矩阵是不同的。这样近似其实已经很有表达力了,因为在不同的时间,前面的系数矩阵可能完全不同,但在给定时间下只是线性而已。这样近似更是因为我们通常只会用到![](img/dad139946fdd1363ecd86d20700a53a6.jpg)的一阶导,![](img/22c2fa35492148fabae560cf4dfa3e88.jpg):因此如果我们能拟合![](img/ae4366cfbd033baff1d82fc2b97b17b0.jpg),那么我们就能得到这两个微分结果。从而,我们可以用这个来使用 iLQR 方法改进我们的策略函数![](img/32ddbd60dbeab3d395ebfec5f1a8167c.jpg),然后重新下一个循环。
......@@ -107,7 +107,7 @@ Nagabandi et al. (2017) 最近的"[Neural Network Dynamics for Model-Based Deep
当然,学习全局难度的模型需求量远比局部模型高,因为局部模型的矩阵形式比诸如神经网络全局模型简单很多,但是局部模型的难点在于每次策略更新之后,局部模型就得推倒重来,以收集更好的样本(也可以说是在线 (on-policy) 的基于模型的增强学习):两者是有权衡的,在一个盈亏平衡点后可能学习全局模型的代价相对更小了。具体代价和具体问题紧密相关,有些问题很容易去拟合全局模型,但是有些问题则很难。
<figure>![](img/b294bfc678e4edaa5c943deb8639dd61.jpg)</figure>
![](img/b294bfc678e4edaa5c943deb8639dd61.jpg)
第三个问题是,我们更新策略函数总是希望让它能与现在有所不同,那么**如果策略函数变化太大会怎么样**?在上图中,真实模型是绿色线的非线性函数,我们使用一个蓝色线的线性模型去拟合(因此在中部一点相切)。我们进行一步更新的时候,可能到达一个比较远的位置(红色竖虚线投影),此时蓝色拟合模型和绿色真实模型有很大的差别。在蓝色线性模型下,我们认为轨迹只会是蓝色的虚线;而我们实际运行时,由于蓝色拟合模型完全是错误的,实际上我们拐到了红色虚线这样很远的地方,就完全在计划之外了。我们之所以叫蓝色模型为局部模型,是因为它只能告诉我们在局部范围内如何改进策略,而如果我们策略变动过大,则这样不见得是一个改进(甚至可能是完全错误的),因为我们的局部模型太只关注局部了。我们要做的事情,是去限制每次迭代中,策略函数改变了多少,使得每一步走得不远。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册