2019年伯克利大学 CS294-112《深度强化学习》第2讲:监督学习和模仿学习(笔记)

在这里插入图片描述
在这里插入图片描述今天的课程中,我们将讨论模仿学习。我们首先来讲序列决策问题的定义。我们将从一般的监督学习讲到序列决策。我们将会讲解如何设定一个模仿学习问题?它本质上是对决策问题的监督学习。我们将会讨论直接模仿是否有效?它何时有效何时无效?以及我们如何使它能更频繁地有效等等。作为总结,我们将会讲解最近的相关工作,关于深度模仿学习、使用模仿学习来从图片中学习技能。最后如我们有足够的时间,我们将稍微讲解一下理论知识,分析一下某些模仿学习方法,然后我们将讨论模仿学习中缺少的东西,并驱使我们也去看看使用强化学习奖励函数的自动决策,这部分内容将会在下周开始讲解。所以今天课程的目标是理解定义和标记,理解基本的模仿学习算法包括行为复制和DAgger算法,它们将会在作业1中用到,并理解它们的优劣以及在何种场景下一种方法会比另一种合适,以及你可能会遇到的失败的模式,在你在实际中使用这些方法的时候。
在这里插入图片描述
好了我们开始讲解一些术语和记号。在这张幻灯片上有一个监督学习问题的解析,但这里使用了一些我们将会在强化学习中用到的符号。在一个监督学习任务中,假设一个图像识别任务,如果输入某种图片,然后获得某种你关心的输出。在这种情况下,输入包含了一张图片中的全部像素,输出是一个随机的分类值。在这个例子中输出是图像中物体的标签,所以你获得了一些像素,而你并不知道这些像素(组成的图片)到底是什么?它只是一个巨大的数组,然后你的任务是找出这张图片中的是一只老虎还是一个虎猫,还是一只美洲虎或山猫或别的什么类别。在幻灯片的中间,从左连到右的模型是你们将要学习的,所以在这个情境中,模型是去参数化一个概率分布的某种方法。它是一个条件概率分布,它根据输入也就是图像来决定输出,输出是一个分布,在这个场景中是在类别数值上的分布,所以我们需要将一些符号附加上去。我们将输入记为o代表观察Observation,这是你实际上观察到的信息。我们将输出记为a代表行为Action,在这个场景中是一个随机的分类值,它可以取一个1到n的值,而n是可能的图像标签数。我们将要学习的这个分布,我们将它叫做π,π是一个在o上的条件分布,它的分布有一些参数,我们记为θ。所以在这门课程的其他部分,如果你看到θ,它就表示某个参数化的分布中的参数。我们可以选择许多不同方法来参数化这个分布,所以举例来说,在观察中使用线性模型对图像来说不是个好主意,但你可以这么做,可以为每个像素附加一个权值,这就好像你知道,这个像素亮了所以它可能是个老虎,那个像素亮了他很可能是只猫,这并不是一个建立稳健分类器的好方法。如果你想要一些现代的好的计算机视觉,我们就需要一些更强大的函数来拟合这个表示,比如一个深度神经网络。在这种情况下,θ表示神经网络中的连接权值,每一层的连接矩阵。但作为重点,请记住神经网络真正做的事情是将概率分布参数化,同时也有其他的方式来将概率分布参数化,所以如果我们想要。

从这种监督学习问题到序列化的决策问题,我们将需要加入一些序列化的内容以进行决策。所以首先来处理序列部分,将一个下标t放在所有的符号里面,表示这些符号是一个时序过程,所以你观察每个o于时标t,同时你的行为a于时标t,这是一个过程的组成部分。所以输出的行为将会影响下一步你的观察结果,所以如果你没有成功认出老虎,那么也许会在下次它更靠近你的时候,看到一个更愤怒或者更大的老虎,而如果你识别成功了,也许会看到一些更满意的东西,然后就可以改变这个输出,不再是识别老虎,而是输出一个分类随机变量,用以表示实际发生的行为。当你看到这种场景时,有许多事可以做,挑选出正确的选项是重要的,但到目前为止关于这个学习问题,我们还什么都没做,我们刚更改了这些问题的含义,所以如果你有一些行为并且它们是离散的,与分类问题一样具有分类的随机变量,同时要输出关于该变量的分布,给定你对它们的观察,那么所有的问题就都顺理成章了。但请记住这个网络是在参数化一个分布,所以你也可以使用其他分布,比如也许有一个连续的行为,而不是在一个目录中进行挑选,实际上是选择虎口逃生的路线,而你的输出也许是一个实数数值来决定选哪条路,只需要选择一个对π的表征,只要它可以参数化连续随机变量。关于这两个例子有许多的选择,比如可以让π输出一个高斯分布的参数,即它的期望与方差,这是一个完美而合理的方式,用以输出一个关于连续行为的分布,因此我们也可以这样做。

到目前为止我们讲解了,我们所使用的符号,我们用下标t来表示我们的变量是时序性的。在此,我们的策略它组成了决策的基础,我们记行为为at,你需要选择一个时标t。我们将策略记为π,并用下标θ标记参数。给定ot来求at的分布,因此我们的策略是给定o求条件分布,其中的θ是另一个参数。我们目前还未曾谈及的问题,理解(状态)序列决策问题是很重要的,所以你的策略,在一般的序列决策问题中,是去获得一个观察,但是在这些观察背后,有种东西叫做“状态”,记作s,它同样拥有时序。你不会总是去观察状态,尽管有时我们会简化问题,设定o总是和t相等的,所以你实际上有一个策略,它取决于s,有时我们认为它是被完全观察的,所以在这门课中,你会看到我写“给定s”时,请记住在很多情况下,也可能时给定o求a,如果你知道一个部分观察。但一般来说,在s和o之间有个重要区别,你需要去观察s是这个世界背后隐含的状态。那么什么是世界背后隐藏的状态呢?让我们看一副图片,图中可见一只瞪羚在被追逐。当一台电脑看这张图片时,它看到的不是追逐瞪羚的动物,它接收到的是一个巨大的2维数组,它“看”到的是这张图片中的像素,而当你在看这张图片时,你看到其中有一只猎豹,另一个地方则有一只瞪羚,而你对物理世界的理解,告诉你它们有位置、动量及各种物理属性,但是这些都是隐含在图像中的,你需要实际地对图像进行处理,而你的大脑恰好擅长于此,而计算机需要学习如何去做,所以这里的观察,并不是猎豹和瞪羚的位置和动量。这里的观察时图片中的像素,但是在这观察背后有一些状态,某种对物理现象的简要总结,而使之成为一个状态的是图片中的像素,即这个观察是一个状态序列。因此你看到猎豹形状的像素组合的原因,是因为这个动物定位于此,而非其他地方。

我们可以更形式化一点,状态和观察的区别在于,状态的本质是当你看到这个图像模型时,状态实际上是一个充分的概要,关于正在发生的事情,你可以用它来预测未来,而观察则是状态相关的一个序列,但它可能是一个有损的序列。我简单解释下有损和部分观察,如果在猎豹前面有这样一辆汽车,它挡住了猎豹的像素,你也许没法仅凭观看图片就辨认出猎豹在哪里,但猎豹的状态并没有真的改变,状态仍然是一样的,尽管无法从观察中推测出它,这是非常重要的区别。
在这里插入图片描述
因此更正式的描述,以将行为关联到观察,如图所示,这里有一个动态贝叶斯网络,沿着时间前进,每一步都有一个o、s、a,一个从o到a的映射,它代表了以特定策略描述的给定o之后a的分布。因此基本上它是该图模型中的一个条件概率分布,这些从s到a和下一个s的边有时被叫做转移函数、转移动力学或动力学函数。它们告诉你当前状态和行为如何影响下一个状态,以及观察如何从状态中产生。因为这些状态隐含地引出了行为,它通过一个随机和有损的映射进行。这就是我们从o得到的分布。你们还知道图模型中的独立性,通过观看这些图片,你可能已经开始怀疑,也许存在一些有趣的独立性联系在状态和观察之间。因此在这个序列决策问题中,一个最重要的独立性联系是如果你观察到了st,比如说s2,你观察到了这个节点,有人告诉你这就是这个状态,这就是猎豹及瞪羚的精确的位置和动量,然后s3变成条件独立于s1,尤其是这表明如果你只知道当前,而没有任何关于过去的信息来告诉你未来会怎样,如果你精确的知道s2,那么知道s1并不能帮助你预测s3。这在序列决策中是非常重要的,因为这意味着如果你试着去做一个决策,如果你试着选择a2,并且你已知s2,那么关于s1或更早的信息都不会有助于改进你的决策,因为s2的知识就是你进行预测所需要的全部,这就是由于该条件独立性造成。

(学生提问)一般的序列决策问题中,你从来不会真的去观察状态,我们有时会使用一些算法,这将在下节课中讨论,届时将有一些有完全观察的问题,所以如果你看到类似的东西,这表示我讲一个完全观察的问题。但在一般情况下总是会有部分观察的设定,而且实际上你总会用一些算法,它们本来是设计来处理完全观察问题,但你仍然会将其运用到部分观察问题中。技术上来说这是正确的,但它可能会该你带来一些麻烦,但这取决于观察信息的完整程度,因此如果你有一个关于猎豹和瞪羚的问题,且不会有一辆车挡在它们前面,如果你总是可以分辨出它们在哪,那么使用这种方法就是可行的。但重点是请记住,如果你想要技术上正确的方式来识别你所面对的问题性质以及哪个问题你的算法适合解决,那么我们今天将要讨论的模仿学习算法,它适合于部分观察问题。稍后我们会讨论一些需要完全观察的算法,如Q学习。所以下一个状态取决于前一个状态,但是给定当前状态,下一条观察并不取决于上一条观察,所以如果你观察了o2,而你并不精确地知道s2,所以你仅仅观察了o2,那么关于前一个观察的知识很可能是有帮助的。因此有可能如果你观察了o2和o1,你可以更明智的选择a2相比你只观察了o2来说。这是非常有用的。如果你面对一辆挡住了猎豹的汽车,如果o2的状态是汽车在猎豹前,你不知道猎豹在哪里,也许你无法做出一个好的决策。但如果你同时也看了前一帧画面,其中汽车还没有挡住猎豹,你就可以获得一些额外的信息。所以如果你能直接观察状态,那么知道当前状态就足够了,知道过往状态对问题并无助益。但如果你在获得观察,那么之前的观察结果就可能给你额外的信息。因此这个依赖属性,即s3仅仅条件依赖于s2,这个属性被叫做马尔可夫性质。我们将会在下周详细讲解马尔可夫链的定义。
在这里插入图片描述
如果你们中的某些人有控制论或者机器人学的背景,也许会看到一个标记,它不用s而用x来表示状态,并用u来表示行为。这个s和a的标记在马尔可夫决策过程中很流行,它是有意义的,我们使用s、o、a是用了对应单词的首字母(state, observation, action)。在控制论中,有时用x 更流行,用x 来表示状态是因为它常被用来表示未知量,而用u来表示行为是因为它是俄语中“控制”一词的首字母,所以这类标记在控制论中很流行,但不要迷糊了,它表示完全同样的含义。如果你读一些论文并看到u和x,它跟a、o、s是一样的。课程中将会用这一套标记,但有时偶尔滑倒另一边去。
在这里插入图片描述
现在开始讲模仿学习。我们刚讲解了用到的标记,讲解了观察和行为如何转换。我们将问题切换到也许稍显实际的数值,而不是谈论老虎以及如何虎口逃生。看一个简单的驾驶例子,将会看到的观察是汽车挡泥板上的摄像头拍摄的图片,而行为是汽车的操作命令,因此你就可以操纵汽车转向,向左或向右。这样我们就可以真正地来训练模型π。在此我们做的事情跟我们在监督学习中完全一样,它仍然是序列化的,只是去收集数据并进行监督学习训练。特别是,你可以让一位人类司机来驾驶这辆车,并同时拍摄图片从挡泥板摄像头上,并在方向盘上加装一个编码器,并录制方向盘的控制信号,这样就可以得到一个数据集。在每一个点上都录下了观察o,同时记录下了行为a,并将它们作为训练数据存储在你的硬盘里。然后使用它,利用喜欢的监督学习算法,利用一个卷积网络,执行随机梯度下降并使用一些类似动量的方法,给定o2,输出你的策略π、θ。这类算法有时被叫做行为克隆,因为本质上是在克隆人类行为。但是如你们所知,有一种算法,本质上跟普通的监督学习一样。这是一种非常可行的方法来训练策略,它是最简单的方法之一,如果从监督学习开始。
在这里插入图片描述
那么我们就可以提出这个问题:如果你精确地按照我所描述的去做,那么一般情况下它是否能行得通?没有人能想象得出,为什么这可能是行不通的?所以答案是,也许你会看到一些训练数据中未出现过的东西,也许从未看过巨大白色卡车,而现在突然看到一辆,因此这个策略无法知道怎样应对,那么还有其他情况吗?对的。人也会犯错,所以训练数据中的行为,也可能一些行为不是好行为,可能有些坏的行为在训练数据中,而你的策略会基本上照搬这些坏的行为。

在数据中,你可能有两个不同的行为、不同动作,因为对于驾驶人来说他做的决定基于他过去看到的东西,而策略智能根据当前看到的来决策。我们会讨论这个问题,讨论一些解决方案。梯度下降为什么很难?在这种设定下可以在所有的策略学习的问题都有这个问题,你也可以争论所有监督学习中都有这个问题。当你用超多参数函数来近似的时候,比如大的神经网络,你就知道有非凸优化的问题,比如马鞍点,你必须在监督学习的算法中解决这个问题,同样在其他的监督学习也是这样。有时候并不直接尤其是你在做非常复杂的模型,类似RNN,这也有可能发生。

事实上,对于这种序列决策的问题,经常会出现的一个更基础的问题,用一张图来解释一下这个问题。如果结束还有时间用公式推导说明这个问题。先形象的说一下,有一个简单的设定,有一个一维的状态,这样就可以画出来,X轴代表时间,黑色的曲线表示一个轨迹,可以想象有人在一个一维的线上控制着一个代理,他只能向左或者向右,然后就可以产生这个轨迹。熟悉物理的同学会知道这其实就是世界线,它就是一个轨迹。现在让我们把这个轨迹作为样本训练策略,这是一个很小的训练集,但我们也可以认为我们训练的策略也很简单,所以我们不会过拟合太多,基本上可以在每个时间点复制它的动作,即使在训练集数据上也没有一个算法能够做到完美,总会有一点点误差,这个误差很小,可以认为你做了一个很好的学习算法,所以有些小步上有一点微小的误差。现在要做的是用学到的策略把整个过程进行一遍,直接运行它,看这个红线,在最初的20 个step中,它只有极小的误差,它离黑线偏离的很小,但确实偏离的一点点,因为它有误差,非常小的误差。现在看下发生了啥事,因为它偏离的一点点,所以它处于一个之前的训练的数据中没有出现的状态,它们只是很小的不同,如果只是很小的误差,这个状态和训练数据很接近,所以误差开始加大,越偏离训练数据,误差越大。经过长时间的决策后,误差已经非常大,我们会遇到之前从没有涉及到的状态,这将导致越来越大的误差和越来越多没有想到的状态,这个策略将会和测试样本的动作偏离的非常大。你可以想象在这种驾驶中的情况,如果车在路中间行驶,策略使得它左转了一点点,这时候它看到照片已经跟训练的数据不一样了,汽车一点点滑动已经跟车道线不平行了,然后它就会有更大的误差,也许会左转更大一点。当车跟车道线45°时,它也许就会干一些完全超出预计的动作,最终偏离车道。这节课的最后会用概率分布再讲一下这个问题。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
但是在实际情况下,它能工作吗?答案是实际情况下,这是Nvidia研究工作放出来的视频。最开始他们利用模仿学习,也就是前面提到的有监督学习。他们的车会做出一些非常差劲的动作,但是他们认为到2016年3月他们会收集足够多的数据,不用太过于担心这个问题。
在这里插入图片描述
对于模仿学习,这听起来有点合理。只要收集足够多的数据,就能覆盖所有的情况和道路,看起来不用考虑数学的推论。因此只需要在布满车辆,找一些勇敢的司机,然后期待一切都好。为什么偏移问题在这里,这不是一个问题?有一些不同的办法是可以解决这个问题,有一些确保能解决这个问题,有一些虽然不能保证解决,但是通过一些特殊的技巧可以解决。这个论文中的方法不能保证解决这个问题,但实际中是一个非常精巧简洁的方法。
在这里插入图片描述
如果你读一下这篇论文,这个方法非常简单,控制转向命令来自一个处理照相机拍的图片的CNN神经网络,但是有意思的地方是,有三个照相机,左边、中间和右边。如果你仔细读下会发现,他们在处理偏移问题用了一个非常简单的技巧。他们的做法如下:在车上有一个正前方的照相机,把这个照相机的照片转换成实际的转向命令。对于左边的那个相机,处理方法是把正常的转向命令稍微往又骗一点,用这些转向数据对应这些照片来做训练,把司机的转向命令稍微往右调一点是一个合理的做法。因为当车稍微偏左的时候,你需要往右调一点。同样的对于右边的相机的照片,我们把对应的转向命令稍微往左调一点。这样就能训练一个稳定的策略,当它看到往左偏一点的时候,你需要把转向往右一点来补偿,所以这需要一点领域知识。你必须了解当你看到有一点往左的时候,你就要将转向往右一点,这样你就能比较稳定驾驶,不至于偏离车道。在这个项目中确实是比较特殊的技巧,但是总结来说你所做的是需要教会网络如何纠正自己的误差。
在这里插入图片描述
我们可以做一个更通用的版本。比如我们可以这样考虑,如果我们不仅仅考虑那些引起偏移的数据,或许可以获得整个轨迹的分布,这样就知道在一些噪音出现的时候对应纠正的动作,所以如果引入这些噪音,让专家来纠正这些噪音,这样就能得到完整的分布,这样即使策略在选择动作发生了一点点偏离。因为我们的训练数据集包含了相当数量的这样的样本,能让我们学习到如何纠正。总体来讲,在学习人类专家的课题中构建这样的全分布是困难的,因为人不能写出各种情况下的动作。我们可以完成任务,我们给不出全分布。
在这里插入图片描述
如果是一个能够进行规划算法的代理,我们可以人工引入噪音,让它去纠正噪音,用这些作为训练数据,就可以利用一些其他的技巧模仿一个优化的控制训练,得到一个稳定的策略。这是一种方法可以处理这个问题,可以得到一系列的状态和动作,这是轨迹的一个标记,这样就可以构造轨迹的分布了,也可以用一些规划控制算法。课程后面会提到怎么来做,用线性二次调节器这种稳定的控制权,你也可以构造分布的采样,这些样本出现误差时会去纠正误差,通过使用模仿学习和这些采样数据,可以训练稳定的策略。你可以控制相当复杂的动态系统。这是一个人类行走的模拟器,通过模仿学习学会跑,同样是通过相近动作来构造稳定的控制来获取数据,以此来生成轨迹的分布。会在后面的课程中继续讲这些。
在这里插入图片描述
到目前为止,这些办法的启发就是,如果能够获取左右的照片并且告诉它如何纠正自己或者通过引入噪音生成分布,这样有时候能解决问题。但能不能构造一种至少在理想环境可以确定的能解决问题的模仿学习算法。需要对前面一个场景为什么会出现问题做一个更深的理解,才能知道怎么做。当在跑策略πθ时,需要知道采样时怎么来的,πθ的策略其实是一个叫Pdata分布中训练的,这个Pdata集是人类正常开车在观察的时候生成的数据集,所以当你从你的训练数据中采样的时候,其实是采样Pdata。或许有一个固定规模的训练数据,但这个数据都是来自于Pdata。总体来说,如果你有足多得数据,你基本上可以覆盖Pdata。监督学习得泛化告诉我们如果我们的数据都是来自Pdata,那么我们的误差和Pdata是一个有界的,但我们跑的是πθ的策略,我们实际的观察数据是一个完全不同的分布,就是因为π的变化引入误差,这将使偏离越来越大。因此在πθ的策略执行下的所有的观察并不等于Pdata的观察,所以导致问题存在的原因就是Pdata不等于πθ数据。我们想解决这个问题,解决方案之一就是我们也许可以改变算法让Pdata等于πθ数据。
在这里插入图片描述
我们怎样才能让Pdata等于πθ数据呢?很明显如果我们训练的策略完美无缺,从来不会犯错,永远不会偏移,这个问题当然不会发生,Pdata肯定也等于πθ数据。但是训练一个没有误差的测试基本上是不可能的,因此我们要做的是与其把πθ数据改的完美无缺,不如改变Pdata。或许可以改变我们的数据集,可以消除数据集的分布和滑动的分布不一致。与其让πθ更聪明,不如让Pdata,让我们的数据集自己更聪明。这就是Gration算法或DAgger(Dataset Aggregation)算法的思想,这也是作业1中需要实现的算法。这是一个很简单的算法,还有一个好事情是如果你跑的时间足够长,而且你的设定正确,它确实有效。当然实际中需要深度神经网络和复杂的优化算法,不能说这是一定的,但是如果是在凸优化的设定下一定可以。算法的步骤一就像行为克隆,写下目标,算法的目标是把收集Pdata的数据变成收集πθ的数据,所以他们就相等了。我们怎么做呢?跑一下πθ,采样,然后给采样的数据打上标签,需要我们得到标签。我们收集数据是一个互动的过程,所以我们跑一下策略,然后每次跑完策略让专家为所有的观察打上标签。这确实有点烦,但是我们能解决不匹配的分布问题,所以第一步跟行为克隆是类似的,收集专家的最初的行为数据,这个专家的数据集D包括从o1、a1到最后的on、an,然后利用这个数据集在给定的观察下训练你的最初的πθ,这跟行为克隆是一样的,所以这就是行为克隆。会在第二步的时候加上一些我们跑πθ得到一个新的数据集Dπ。基本上就是让计算机来开车,看看它干了啥,我们并不在乎它做的动作,只是记录它的观察,这样就获得一个新的数据集,然后让专家看。这个策略控制看到的录像,要求他给每一个图片打上标签。这有一点奇怪,因为我们知道人类很擅长开车,但是并不擅长仔细看一部录像,然后说出车应该怎么开。假定我们可以这么做,然后我们就得到标签,这样我们就有一个混合数据集,观察数据来自πθ策略,但动作是专家打上的。现在有了打上标签的数据集Dπ,现在开始聚合数据,把旧的D数据集和新的Dπ的数据合在一起,然后重复这个过程,重复增加策略下的数据以及专家最优控制的标签,然后加入旧数据。这样一直让网络进行,如果你持续这么做,只有跑的时间足够长,我们的数据样本就是从π这个策略下的采样。因为你不增加专家的观察数据,而是一直增加在π策略下的观察数据,最终所有的数据就都是从π的采样。这就意味着分布不匹配问题已经解决了,当然需要跑很长时间。

(学生提问)你的意思是跳过这步,直接把Dπ的数据代替D的数据,实际上可以试一下,这种方法的效果不会太好。使用一个相当大的数据集,好处要超过一个有偏差的数据集。这种算法收敛的基础是在线学习,如果你不想跑很长时间,可以这样做,只需要增加样本到数据集中。实际我发现聚合的做法总是更好一点,事实上据我所知,没有一个实验中仅仅靠数据集D就能工作很好的,但最根本的原因是在线学习算法。我推荐你去读一下Ross的论文,在这节课的最后会给出完整的引用。(学生提问)你想做的是你在最开始完全用随机策略算法。理论上这个算法会收敛,但是很难。想象为什么要这样做,简单来说,如果我让车随机动作,肯定会有一个恶劣的事情发生,但是有一些例子中你或许想这样做,算法能保证收敛。我只是划掉了人类这个词。(学生提问)目标的优化会在这节课最后会讲讲优化的目的是什么,这个比较微妙,因为需要引入奖赏函数,后面会讲一点。
在这里插入图片描述
基本上描述了算法的实际过程,非常简单。这里有一个例子,就是论文中讲的四旋翼飞机实现dagger算法,做法如下,动作空间只是一维的转向命令,他们按照我们想的那样收集了专家遥控无人机飞行的数据,用它来初始化策略,然后让无人机自己飞,然后让人在实验室看这些录像,然后重新给无人机的动作打标签,最终无人机在树林飞行躲避树木非常合理,表现很好。
在这里插入图片描述
那么dagger算法有什么问题吗?有人对dagger算法可能得缺点有看法吗?(学生提问)是的,你需要很多人为这些数据打标签,而且我们知道,需要产生比第一步产生的数据多很多的数据,需要更多的资源。(学生提问)人有时候不能通过观察就能给出正确的动作,因为我们喜欢开车或者遥控飞机,我们其实不怎么做类似马尔科夫这类事情。这需要我们看一眼世界的快照,然后给出动作,因为我们知道在交互过程中的某个时刻,我们的大脑也处于持续交互的过程之中,因此这对于人来说这是一个非常不自然的状态,所以你知道,如果你喜欢下棋,那么或许一个好棋手只是看一眼棋盘的快照,就可以说这是一步好棋,但对于其他系统,比如开车,事情就不同了,它非常依赖于任务本身。总的来说,大多数问题非常依赖第三步,要求人打标签。有时候这很自然,有时候不。实践中,这是非常耗资源的一步,这个算法的兼容程度。在这里插入图片描述
我们能让模仿学习不需要增加很多数据也能表现很好吗?我们能让人不坐下来看策略观察到的图像也可以工作的很好?我们回过头来看看问题,dagger想解决的问题是分布偏移的问题,就是图中说明的问题。你开始有误差的时候,误差会越来越大,最后偏移到一个新的分布或者观察。那么如果一个模型足够好,它不会偏移。之前也说过一个完美的模型,它从来不会有误差,这个问题就不会有。现实中的动态系统都会有一些平滑或许只是很小的误差也足够了,所以我们不需要十分完美。这需要结合动态系统如何工作,需要一些技巧和设定,但是或许只需要一个好一点的模型就可以解决问题。实践中这经常是有效的,所以你可以改进你的模型,只要模型的误差小到可以让行动克隆能有效工作就可以了。为了达到目标你要能非常精确的模仿动作,需要理解有一些路径,也就是什么样的特性使得人类的行为难以模仿?当然在任务完成以前,得确保不会过拟合,所以你不能仅仅让模型变成现在得一千万倍大,因为你还需要在正确得同时让模型有很好得泛化性能。比较的是,这里确实有很多可以做到得事情,在我们设计模型得过程中,可以通过一些比较好得选择来让模型具有更好的性能,而避免不必要的使模型变得灾难性地过拟合。我们将讨论一些比较实用得小技巧来达到我们的目标。
在这里插入图片描述
为什么我们会在拟合专家数据的时候失败呢?有哪些人们的操作使得这些模型对数据复现变得困难?其中一点就是非马尔科夫行为。假若在一个场景下,我们知道一个图像或者观察已经包含了所有我们做最优决策所需要的信息,但一个真正的人类,仍可能重复自己在过去决策中的选择。大家都知道,人类的运作和计算机是有些不同的,可能是因为人们有一个固定的理性来限制大脑的计算量,又或许他们就是比较懒,不想努力思考,例如他们仍旧选择朝左转,即使是在观察范围中有某些障碍的情况下,或者是现在他们被暗示不要向右转,但他们仍旧这么做了。因为他们早已认定了这个计划,所以即使是在马尔可夫行动规则足以应对的情况下,人们仍旧会选择以非马尔可夫的形式来运作。第二点,通常情况下人们还表现出多模型的行为,这事实上和第一点不同。例如即使人们表现出近似于马尔可夫的行为决策,他们也可能就是想要在相似的情况下做些不同的事情,就像今天他们觉得开心了,就多做一些,但明天他们却感到悲伤,再者他们可能今天喜欢多用左手,所以在转方向盘的时候,他们让轮子多向右转了一点,但明天可能他们对多用右手感兴趣,所以他们就让轮子多向左转了一些。所有这些随机原因都不会被决策规则观察到,因而可能造成一些在看上去没有差别的情况下,人们却表现出不同的行为。

首先让我们来讨论非马尔可夫的行为,之后再将多模型的行为。如果你担心你的人类示范者所表现出的行为,不仅仅依赖于现在,还依赖于过去,可以尝试通过使决策规则变得也不仅取决于现在,还取决于过去。一般来说,一个标准的前向神经网络通常被用于仅依赖于当前观察数据的图像分类问题。如果人们看见相同的东西两次,那这个决策规律也将面对相同事务两次,并且两次都将做出同样的决策。如果这不是你想要的人类示范者的做法,那你可以通过训练一个依赖于所有先前观察数据的网络。可以通过利用不同的神经网络结构来做到这一点,但最简单且最大众的方法不外乎是使用递归神经网络。
在这里插入图片描述
那么我们如何使用所有的历史呢?即使我们可以用到所有的历史观察数据,我们也不想将所有的数据都传输到前向卷积神经网络中,因为这样一来我们将会面对巨量的数据通道:首先,我们可能会有过多的权值;其次,先前数据帧的数量一直在发生变化,所以我们应该做的是去设计一个新的网络架构。在这里插入图片描述
这里有很多不同的设计方法,这幅图阐述了最简单的一种。对每一帧,用卷积编码器来进行处理,并且所有的卷积编码器的权值将共享,最后在所有的编码器之上布置一个递归神经网络,来提取卷积编码器的输出并在时间进行前向的积累,这样一来你就得到了编码器的共享权值和递归的状态。一些类似于LSTM cell的结构通常能做到这一点,如果对这个方法感兴趣的话,可以看一些和LSTM相关的东西,实现是比较简单的。大体上来说,优化这些模型会比较费力,毕竟优化本身也具有挑战性,这中间可能存在一些调整来得到正确的模型。在长的递归序列上传播是很困难的,但是从原则上来讲,这个方法是能给你的模型带来记忆功能的,因而使得模型可以应付非马尔可夫的行为示范数据。在今天的课上,将会一篇论文来讲解这个方法。在这里插入图片描述
第二点,多模型行为。这一点会更微妙一些,现在已经有好几个可能的解决办法了对于这个问题。对于多模型行为,举个例子,假设需要绕过一棵树。走左边绕过,这完全没问题;要是从右边绕过,也同样可行。但现在最重要的一点是,当我站在这棵树前,可以向左也可以向右,但是不能综合这两个方法,因此就有了多模型的行为。多模型行为在某些情况下非常重要。如果你进行的是离散的动作行为,多模型的方法完全没有问题。典型的做法是放置一个softmax函数在你的网络结构的最后,这将允许你呈现一个基于随机变量类别的完整分布,包括多模型行为分布,所以如果是离散决策行为的话,可以把分布集中在向左和向右的决策上,把中间的决策空出来,这样就可以了。但如果你面对的是连续的行为决策,事情会变得复杂一点。最普遍的做法是训练能输出连续行为决策的决策规则体系,我们使用高斯分布来实现它。如果你使用了平均平方损失函数,那你就是在用高斯分布,因为平均平方误差是高斯分布的对数概率。在这里插入图片描述
但如果你输出了高斯分布的均值或者均值和方差,这将会是一个蛋模型分布,所以这样用模型拟合数据的话,会得到绝对不想要的结果。你将得到和图中类似的结果,所以得小心地在输出的地方对你的分布再做一些调整,来使得它能应对多状态的情况。

对于这个问题,我们有一些选择,它们各自有其优点和不足。第一个选择是输出混合的高斯分布而不是单个的高斯分布,这事实上是最简单的方法。第二个方法是使用隐型变量模型。这个大体上在数学上很优雅的选择,但是它在实现上可能会有一定困难。第三个选择是利用自动回归离散化,这个方法可能在形式上不太工整,但是实现起来相比隐变量模型,会简单一些。在这里插入图片描述
首先,讨论混合高斯分布。就像听起来一样,需要让你的模型输出的不是一个均值和方差,而是输出N个均值和N个方差以及对所有的选项都需要有一个标量权重,所有标量的总和应该是1,所以应该在这里使用一个softmax函数,然后均值和方差。从理论上来讲就会在你的网络中起相应的作用,这样一来,就有了一个很大的神经网络,并且理论上来讲它将输出混合高斯分布模型的参数,这个方法被称为混合密度网络,它是一个对多模型分布的简单设计。如果有足够数量的分布,就可以表示相当复杂的分布,在设计的过程中最重要的限制是必须选择混合分布的元素数量。大致上来说,不能用有限数量的分布元素来表示任意的分布,所以在实际中这意味着,在低维度的情况下,假设有一个或者两个维度的行为决策,这个方法将会非常奏效。但如果有非常高维度的行为决策,那么N个选择的机制可能会变得很脆弱。在这里插入图片描述
接下来讨论下隐变量模型,这可说是一个复杂一些的方法,但也是一个用于学习多模型分布的应用比较广泛的方法。最近的隐变量模型不要求对输出进行改动,输出仍然以一种像单高斯分布模型的简单形式存在。但是我们将给神经网络在底部接入额外的输入,这些额外的输入是一些随机数,这个随机数可能是从高斯分布或者均匀分布中采样得到的。要点是给神经网络一些随机源,这样就可以尝试去用这些随机性来训练网络,以实质地改变输出的分布。这种方法可以被理解为:如果面对向左向右的问题,网络将会在噪声进入的时候进行学习,如果是一维的噪声,如果是负向的噪声,网络的输出将会向左;如果是正向的噪声,网络的输出将会向右。这听起来不错,但实际上从原理来说,这是一个极端的利用神经网络表现能力的技术,因为神经网络是一个普适的函数逼近器,所以它可以把噪声转换为在输出时的任何分布。这个方法很强大,但是需要在某种程度上使得你的网络利用噪声,但在实际上会出现存在很多挑战和困难。

如何让神经网络去利用这些噪声来有效地呈现复杂的分布?很多文献提出了相关技术。如果只是将噪声引入了网络并且用最大似然来训练,这样做的效果一般不会理想。但如果你对这个问题感兴趣,我会建议你们去找一些关于如何让神经网络有效地利用噪声的技术文献,你可以查找conditional variational auto-encoder normalizing flow或者real NVP以及stein变分梯度下降。在这节课后将覆盖各种自动编码器的变分推断的内容。

(学生提问)这些列举的内容是接下来操作,如果只是在训练的过程中将噪声引入神经网络,神经网络并没有任何特殊的理由要去利用这些噪声,因为噪声并没有和输出相关联。例如这里有一些自动编码器,它们将做的事情实际上是在训练的过程中,对噪声使用一个不同的分布,然后得到一个结果。这个过程并没有用到噪声,之后在测试过程中,也只是从前边对噪声进行了采样,normalising flows所做的就是使用了对神经网络的一个可逆转换,这使得你能够通过对变量公式的改变来计算对数概率。Stein variational\gradient descent则是另外一种很复杂的方法,不在深入探讨了,但如果感兴趣,可以课下讨论。这里给一些关键词,如果感兴趣可以自己去看。在这里插入图片描述
第三点,自动回归离散化。幸运的是这个方法简单得多,但它却需要对网络作多种改变。自动回归离散化的思想如下:对于离散的动作决策基本没有问题,有一些方法是可以使用softmax函数来表示复杂的多模型分布;对于连续动作决策就不那么简单了,如果采取了连续行为决策,并且对连续的决策离散化得很好,这也没问题。但是如果离散化的是一个高维的连续变量,那么你就得面对维数灾难。比如有两个维度得决策,这很好离散化,但要是10个维度呢?将面对很多不同维度的离散化数值,很有可能会用尽内存。自动回归离散化的提出正是为了解决这个问题,它通过一次只离散化一个维度来实现。它的核心就是:首先处理行为决策的第一个维度。假设行为决策一共有5个维度,首先处理第一个维度,对其进行离散化并使用softmax,然后从分布中采样就得到了行为决策的第一个维度结果动作的维度。现在需要做的是给别的神经网络这个离散化的采样,然后让它结合从第一个维度的所有采样以及第二个维度的条件来预测一个离散化的结果,之后只要重复这个过程就可以了。也就是说从第二个维度采样并得到相应的具体数值,之后把第一和第二维度的数据给到另一个将离散化第三个维度的神经网络。通过重复这个过程直到对所有的维度都完成了采样。在训练过程中,这是非常容易的,因为训练时所有动作决策的数值,所以不必在训练的过程中采样。在训练时只要知道所有的softmax和交叉熵损失,并赋予它们真实的行为决策的数值。但是在测试的时候,需要进行一次一个维度上的采样,然后将它们的数值输入神经网络。基本上,这将使得你可以表示任意的高维度行为决策的分布。当然可能会发现去离散化每一个维度都将带来一些离散化的误差,但这并不会随着维度的增加而带来指数级的爆炸,bits的数量。有人需要对自动回归离散化或者任何其他技术提问吗?

(学生提问)对于前边的维度,可以基本上从两个方面来做,严格意义上来说,最正确的方法是你得输入并保留所有得先前维度,这个神经网络得到了第一个维度的数据,接下来的这个神经网络得到了第一和第二这两个维度的数据,只需要一次输入一个维度即可。从技术上来说,不同维度之间的依赖关系并不是严格意义上正确的,但是如果输入了全部,这样就没问题了。

(学生提问)一般来说是的,会有一定的下滑,已经表示在这里了。

(学生提问)所以对于自动回归离散化来说最主要的不足是:首先,这个方法可能不太容易实现,因为你不得不从大量地改动神经网络,并且你知道这不仅仅是像混合冗余网络一样只要有更多的输出就可以了,你还得确确实实地构建这些神经网络并且搞清楚如何把每一件事连接在一起,这里会有更多的架构设计在里边。其次,还有面对一些离散化的误差,所以如果你特别想要非常精确的结果数值,需要选择正确的离散化的粒度,那可能会比较复杂。

(学生提问)它们没有共享参数,但是你也可以共享参数,可以用一个RNN来实现,但是其实并不必要。

(学生提问)这里的维度仅呈线性增长,维度灾难则是指维度的指数性增长,但这里只是线性增长,虽然神经网络变得更大了,但是是线性的增大。

(学生提问)这个整体会被端对端地训练,因为在一次训练里不会去做采样,在一次训练中,你知道这些动作决策的数值,所以困难点是不能很简单的实现对采样的反向传播,但你不必要在训练的过程中这么做。在训练时,你知道每一部分应该被接受的数值,在这里有一个交叉熵损失,这里还有一个交叉熵损失。

(学生提问)在我所知的范围中,人们总是会做一些补偿。
在这里插入图片描述
回顾一下关于模仿学习的讨论。通常但并不是所有情况,模仿学习都会存在不足。如果只是做一些很简单的事,通常它不会很有效果,可能会遇到分布不匹配问题,但有时候它却很有效,因为突破了一些难关。比如发现如果你给它一个向左和向右倾斜角度的相机,并且改变了行为决策,这将会提高它的稳定性。你可能发现一些方法能采样到一个稳定的行进路线分布。可能通过一些操作来让你向示范性数据引入一些噪声,或者你可以模仿一些计划或是最优的控制器来迫使它接受正确的噪声,那将教会你如何修复错误。也可以添加更多数据,如使用DAgger或者可以设计更好的模型来更正确地拟合数据。但是切记去理解一些通常应用这些方法带来的潜在危险以及模仿人类的数据,这样的话,你应该能使得它运行的很好。在现实中,通过应用模仿学习来得到比较满意的结果。
在这里插入图片描述
现在将通过一些材料来介绍很多技术,展示一些论文中的例子,这些例子用到了今天讲到的一些技术来做一些有趣的事情。首先,将介绍这篇machine learning approach top visual perception of forest trails from mobile robots。
在这里插入图片描述
这些人想做一件什么事呢?他们想让一个四旋翼机器人飞过一片森林小径,目标是得跟随道路而不是远离路径,也不是撞到树上以及一些别的糟糕的事。他们将使用模仿学习来做这件事,这里就是他们的四旋翼快乐飞行的视频。它自动跟随森林小径,当然他们也得解决分布不匹配的问题,干扰使得问题不匹配,他们使用的方法是仅仅用了一个单目的RGB相机,我不认为这是一个主要的挑战,但它确实是一个挑战。
在这里插入图片描述
他们将面对来自瑞士风光优美的乡村的复杂图像。
在这里插入图片描述
他们的动作决策仅是离散化的向左、向右、向前。这使得问题变得简单,不必面对多模型问题,只有三个标签输出。但是比较酷的是他们如何去解决漂移问题。
在这里插入图片描述
他们实际上在这里,另外的分类器很值得注意,实际上他们并没有使用遥感来控制四旋翼的飞行,事实上他们的训练材料甚至都不是来自于一个四旋翼,他们通过让一个人来生成训练数据,这也给他们应对漂移问题带来了非常简洁的解决办法。
在这里插入图片描述
他们让一个带着头盔以及三个相机的人来收集训练数据,然后他们到达了想要的效果。这里左边的相机被标注为右,右边的相机被标注为左,正前方的相机被标注为向前。这是一个头戴三个相机的行走的人收集到的情景。因为收集到的数据中左边的图像被标注为右,右边的图像被标注为左,这确实能让神经网络自己变得更稳定在森林小道的中间。这甚至比Nvidia的工作还有简单很多,因为动作行为本来也是离散化的,但是不好的地方大概是当你在收集数据时看起来会比较傻。这很简洁,这是一些工程上的解决方法,但确实是非常简单的方法,甚至于每个人都可以做到。
在这里插入图片描述
这是另一个我想要描述的例子,这是一个机器人控制的工作,它用到了上节课讲的东西,最后的解决方法是来设计一个足够强大的模型,所以它基本不受类似于漂移一类问题的影响。特别的他们还应用了递归神经网络来应对示范数据中非马尔可夫的本质。他们使用了一些额外的密度神经网络,用这些混合高斯模型来处理多模型的问题。
在这里插入图片描述
他们所做的工作是机器人控制任务。需要让机器人识别人类的操作,这就是这里的决策规则。决策规则是通过找到一些物体,移动一些物体,类似的事情,这是一些确实会要求你得到大量的坐标,因为你不得不确认机械手指实际上能足够近地落在物体上,所以需要达到一定精度。比较好一点是研究者可以故意地要求人类示范者不要那么完美,而是犯一些错误。这样一来就能向机器人描述如何纠错,这也是为什么你可以看到机器人并没有放下盒子,而是去再次把它捡起来,然后再把它抓起来。因为在训练的时候,他们会要求人故意放一些错误,这样它们就能看到如何纠正这些错误,然后它们就能在真实的机器人上运行。
在这里插入图片描述
机器人会先探索一阵子,但是最后会抓住盒子,然后经过数次失败尝试之后,将盒子放在台子上。
在这里插入图片描述
这个时候是没有在图片上操作的,但后面也会讲到,也有关于操作图片的后续工作,在这之前先看一下网络结构。看上去好像很复杂,但是实际上也就是由三层LSTM组成,输出是多维高斯分布的参数,所以这种网络结构既有循环的性质,也能用多维高斯分布处理多模态的情况。于此同时,他们还展示了几种别的网络结构用来作比较。一种是前馈神经网络(没有循环)。一种是LSTM(有循环),但是不能处理多模态。还有一种是能够处理多模态但是没有循环。经过比较后发现,同时具有循环性和多模态性质的网络结构,最后的结果最好,那种具有多模态性质的前馈神经网络结构,在一个任务中做的还可以,但是另一个的效果很差,这是对网络多模态性质和循环性质的影响分析。
在这里插入图片描述
然后这是他们的后续工作,包括图片处理的部分。他们把相机拍摄的图片作为卷积神经网络的输入,我最喜欢这篇文章的地方就是实现成本很小。
在这里插入图片描述
比如这个动作臂大概只要三百美元,然后这是一个游戏控制器用来控制这个机械臂。初始化之后,这个人就用这个游戏控制器来操作这个机械臂,用来产生大量数据,数据中的每一个任务都会操作数百次,然后大概有十几个任务。他们就用这些数据来训练他们的模型。
在这里插入图片描述
这里首先是一个卷积神经网络来处理摄像头拍到的图片,用循环神经网络来处理非马尔可夫决策的问题,用多维高斯分布的输出来处理多模态问题。
在这里插入图片描述
然后他就可以做这种拿起抹布擦螺丝刀盒子的任务。最有意思的事情是当你看这个视频的时候,你会注意到当他擦这个盒子的时候,它会擦不止一次,好像它觉得自己没擦干净一样。实际上人在做演示的时候就会擦个四五次,所以它也会擦个好几次。这个例子很好的地方是机器人的动作看上去是连续的,所以这是一个模仿学习在机器人领域的应用例子。而且是这个例子能成功的重要原因。
在这里插入图片描述
除了刚刚讨论过的做这种控制相关的任务之外,模仿学习以及相关的dagger算法在结构化预测领域也应用的很多。结构化预测问题就是类似于机器翻译这种输出是保持某种结构的问题。

假设你现在要做一个问答系统,输入是一个问题,比如你在哪儿?,那么输出可能是:我在工作。如果要构建这样一个输出,可能会用到循环神经网络,不会想一个一个词的输出,因为单个词之间会有依赖关系存在,所以如果当你已经输出了I am at的时候,那接下来的词就应该是work,但是如果你的第二个词,输出的是in,那么第三个词输出work就不是很好。虽然这么说从逻辑上讲也没啥问题,但是和从语法上讲,和第二个词不是很搭配,所以输出I am at work的概率是很小的,因为输出的词之间的关系和输入不匹配,那么着就会和语音模型的定义不符合,所以对于机器翻译任务来说这种问题就很重要。比如这里如果第二个词是in,那么可能就不会想在后面放一个work,你可能就想放一个别的词,比如school放在这里就比较合适,但是也不见得是一个很真实的回答,但是问题是当你输出有这种潜在关系的时候,实际上你需要把这类问题看成顺序决策问题,然后像dagger这类的算法就能帮助你更好的解决这种结构化预测的问题,通过事先从人类的示范或者训练数据中得到的信息来告诉你,当你在句子的之前某一部分犯错的时候你应该怎样应变。

实际上像dagger这样的技术已经在顺序决策问题上应用很广泛了,这些在最初提出dasgger的文章中都有讨论到。另一个关于模仿学习的事情是今天讨论的所有东西实际上都是关于策略的学习,目标就是通过训练数据学到在输入某个观测值的时候,怎样输出正确的行为(action),但是也可以用他们来做其他事情,比如可以用人的示范来学到他的目标是要干什么,然后用常规的强化学习方式来学如何达到这个目标。逆向强化学习就是用来处理这类问题的,它不仅仅是通过示范找出目标是什么,还会用其他算法来学到如何达到这个目标,可能你可以做的比示范者更好。在后面的课程中会讲到逆向强化学习,到时候会有很多有意思的东西可以分析讨论。
在这里插入图片描述
所以模仿学习还存在什么问题呢?人们需要给模仿学习提供训练数据,而这种数据是有限的。一百万的投入就有一百万能够得到的数据,但是深度学习在数据非常充足的情况下效果是最好的。我们已经看到深度学习在计算机视觉和语音识别领域取得了很大的成就,但是都是因为数据量的大幅度增加,比如CIFAR ImageNet。深度学习在数据量充足的时候效果最好,这句话的意思是很多时候,数据量的多少实际上就决定了系统的性能瓶颈,但是如果我们的系统性能瓶颈不会由这种很需要钱的因素决定就会很棒,这就是其中一个比较深层次的原因。

但是还有一个很实际的问题是虽然人们在某些任务上很擅长提供示范,但是在另外一些任务上就不是很擅长。比如人们很擅长走这种山路,告诉你什么情况下向左走什么情况下向右走,操作小车也没啥问题,或者操作四旋翼也是可以的,但是一些偏底层的东西就不是很擅长了,比如告诉电机应该转多快,如果他们用遥控器控制一个四旋翼的时候,实际上四旋翼是有更底层的控制结构来计算应该给电机加多少电压之类的,但是人们并不能手动调节这个电压。如果你要操作一个像这样的无线控制的机器人,你可能需要一套很贵的衣服或者盔甲之类的,但是如果这个机器人有八条腿、二十只手,那就需要一整个团队的人来操控他,而且如果要让机器人做一些人们并不很擅长的事情,比如让机器人打败世界冠军,那么依靠模仿学习很可能就做不到,所以如果是人们非常擅长提供示范的事情,那么这种方法就很适用,但是反之的话这种方法用起来就很困难。

当然对于这种问题有更理想的方式,出发点是人们可以自动学习,人们能从别人身上学到很多,但很明显也可以通过反省自己学到很多,所以如果构建的机器能够做类似的事情的话,岂不是很棒!如果用这种思路构建智能,那么就能通过自身的经验得到无限的数据,我们不需要依赖别人,如果我们能够自主学习的话,就能持续改善,不需要像别人获取帮助,取得越来越好的效果,所以下周会开始讲自主学习和强化学习。
在这里插入图片描述
今天简要介绍下(在自主学习中)目标的概念,在模仿学习中,目标就很简单,只需要复制人们示范的,但是如果你是自主学习的话,那么目标就不一样了。回到之前的例子,我现在在丛林中看到一只老虎,那么目标就不仅仅是参照我朋友的做法。现在先不考虑策略问题,或许目标就是最小化我不想发生的不好的事情(被吃掉)的概率,可能我想最小化被吃掉概率的对数概率。这是一个很自然的目标,但是在模仿学习中并不会考虑到这种事情,所以一般情况下,当你在自主学习的时候,需要构造一个这样的成本函数或者奖励函数来描述想要的目标是什么,所以这个被老虎吃掉的对数概率就是成本函数,或者可以把它当成负的奖赏函数,所以要介绍下这两个术语C(st, at)就是成本函数,而r(st, at)就是奖赏函数,实际上它们的意思是一样的,只是在数值上互为相反数。
在这里插入图片描述
实际上这种命名的差别和这两人有关。在控制理论中,经常会看到人们讨论的是成本函数,用l或者c表示。在强化学习中,通常用奖赏函数,目标是最大化奖赏或者最小化成本。可能这样从一定程度上反应出,不同国家的人的偏好,美国人想的是得到更好的奖赏,而亚洲人想的是怎么减少成本,但是意思是一样的,所以如果看到c,不要担心,它只是r的相反数而已,所以现在知道了奖赏函数和成本函数的概念,那么关于模仿学习我们可以做更多分析,比如在模仿学习中,这种成本函数或者奖赏函数的值会是多少,我们不能得到一个最优结果,还有我们说dagger解决了(分布不匹配)的问题,这对于总的损失有什么影响?
在这里插入图片描述
所以在模仿学习的例子中,对于成本函数或者奖赏函数,有一些不错的选择,比如可以定义奖赏函数为符合专家行为的对数概率,这么定义奖赏,可解释性是比较好的,有了这样一个对数概率,你可以把成本函数定义成负的对数概率,也可以定义成和0-1损失函数类似的样子。比如当你犯错的时候成本就是1,如果结果符合专家的行为那成本就是0,或者你可以以此定义奖赏函数,如果符合的话奖赏就是0,犯错奖赏就是1。这和0-1损失函数是类似的,那么dagger就能用来最小化这样的损失函数,选择什么样的损失函数取决于训练的时候用的什么损失函数,后面的分析用了这个0-1损失。因为它的表示会更简洁一些,也可以对其他的凸的损失函数进行同样的分析。
在这里插入图片描述
接下来做一些分析,这部分分析不会特别硬核,只是一些简单的代数,首先回到这个分布不匹配的问题上来,我们已经讨论过为什么。没有用dagger算法的模仿学习会带来什么问题,问题就是会有两条观测值曲线,分别是红色和黑色的,它们是不一样的,所以这个问题会有多严重,已经说过。为什么一旦开始犯错就会犯更严重的错,这种问题会变得多严重?我们能不能有定量的指标去衡量。用T来表示这条路径的长度,T是水平的是我们考察的长度。一般情况下T是无限长的,但是因为要做一些代数运算,所以这里暂且假设T是一个有限大小的数字,比如你要开一个小时的车,这里考虑0-1损失的情况,也就是在某个时间点的时候出现不匹配的情况损失就为1,反之就为0,这样事情就会变得很简单。现在要做的事情是构建一个问题,就是如果直接做模仿学习的话就会出现的问题。

现在要做一些假设,实际上就是如果做直接的模仿学习的话就会很自然的出现的事情。一般会假设在训练集上效果会比较好,也就是说你的算法不是完全不能用。我们假设出现不匹配的概率小于或等于一个epsilon,对于那些在训练集中出现过的状态,这个假设是很自然的,这个意思就是算法遇到训练集中出现过的状态,输出的结果不会表现得很差,会比较接近期待值,只是会有一定的概率犯错,但是对于没有遇到过的状态,假设就不成立了。

这种不受控制的情况就会带来很多问题。比如这里的走钢丝的例子,如果走钢丝的人走的很稳的话,那就没啥问题,但是如果一旦错了一点点,那么他就可能掉下去到某个完全不同的地方(意思是偏离钢丝的路径)而且没法恢复,但是这是一个非常特殊的走钢丝的人,因为他不用担心掉下去,他感受不到痛,他能感受到的是0-1损失,意思就是这个走钢丝的人最担心的事情就是和专家的行为不匹配(意思是没有沿着钢丝),而唯一导致他掉下去的原因就是当偏离钢丝的时候他该怎么办,因为专家是不会偏离钢丝的。

这里有一个示意图来描述这个走钢丝的例子。从这个红色格子出发,可以上下左右移动,如果能沿着灰色的格子走是最好的,如果走到红色格子,那么就没有对应的数据可以参考,所以要做的是一直向右走,如果你一旦向上或者向下了,你会发现你到达了这些红色的格子,而他们并没有在你的训练集中出现过,你就不知道该怎么办,从而你就会有1的损失,因为大概率下你会做出错的选择。现在就来分析下事情会变得多么糟糕,也就是损失会达到多少?

我们关心的一个指标是总损失的期望值。总损失就是从1到T的所有时刻的损失之和。那么在第一个时刻,你犯错的概率是多少。假设你现在已经在钢丝上了,就是小于或者等于epsilon。这里考虑最坏的情况,小于或者等于epsilon那就是epsilon,也就是可能发生的最坏情况,所以在第一个时刻你犯错的概率是epsilon,而且如果你一旦犯错,你就会在这个红色的状态,然后会一直在这个状态。因为你不能再回到钢丝上了,然后你还有T个时刻要走,所以会在后面T个时刻一直犯错,所以如果你在第一个时刻犯错,损失就是T,也就是1乘以T,然后乘上犯错的概率epsilon,但是如果你没有犯错的话,那么损失的期望就是1-epsilon乘以剩下的所有时刻的总损失。这个1-epsilon是你到达下一个状态的概率,在这个状态,仍然有epsilon的概率犯错,犯错的话就会到红色的状态,然后在接下来的T-1个时刻持续犯错,那么后面的项就是1-epsilon乘以epsilon乘以T-2…以此类推,最后展开之后会有T项。因为一共有T个时刻,其中每一项都代表数量级为T的损失,实际上是T、T-1、T-2等等,但是数量级都是T,所以一共有T项,每项都是T乘以一个系数epsilon,这就意味着总的损失的数量级就是epsilon乘以T的平方。epsilon乘以T的平方的损失是非常非常大的,因为一般情况下,如果我们想要扩展这个问题的规模,但是扩大规模之后,相应的损失也会增加,对应规模扩大部分的平方,所以即使epsilon非常小,但是如果这个轨迹的长度很长,那么损失就会很大。
在这里插入图片描述
以上是对于简单的离散环境的非常简单的分析,但是更一般的,我们不想做这样的假设(如PPT所示)。因为这样的假设,即把概率上界限制为epsilon,只对于在训练集中出现的状态成立,所以这是非常弱的假设。但是我们知道的并不止于此,我们知道对于能够work的监督学习算法,我们知道只要提供足够的训练数据,那么就能泛化到其他的来自同一个分布的数据,所以我们可以做一个更强的假设。

我们假设对于和训练集同分布的数据(状态),犯错的概率的上界为epsilon,即使没有和训练集中的某个状态严格相等(意思是在训练集中出现过)。这样的假设很重要,因为在很多实际问题中,比如你在依靠图片来开车,你通常不会遇到一张图片两次,但是你会看到来自同一个分布的图片,他们会在某种程度上相似。我们现在就做这样的假设,即假设对于任何来自和训练集同分布的样本,犯错的概率都小于epsilon,然后就可以做和上一张幻灯片中类似的分析,会有一点点变化。

下周会讨论关于最坏的情况的讨论。现在想做的是,对于使用dagger的情况下做一点简短的讨论,所以如果有dagger的话(公式见PPT),所以分布的不匹配现象就会消失。如果数据足够多的话,分布不匹配的现象消失,意思就是说所有看到的样本都是和P_train中的类似的。这就意味着每一个时刻出错的概率总是,可以用一个epsilon作为上界,所以谁能试着猜一下,在用了dagger的时候,总的成本(损失)的收敛值会是多少?所有你能达到的状态都是来自训练集同分布出错的概率上界,总是epsilon,水平时间线的长度是T。

数量级应该是epsilonT,因为你有T个时刻,每个时刻有epsilon的概率犯错,所以总的损失的上界就是epsilonT。这是在你有T个时刻,每个时刻犯错概率为epsilon 的时候能够达到的最好的结果,不可能做到比这种情况更好的了。所有的问题也就不是问题了,但是如果我们要来分析分布不匹配的情况呢?事情也会变得很有意思,下周会讲到,当分布不匹配的时候,总的损失上界的完整推导,类似于上一张幻灯片,可以推出结果也为epsilon*T^2,但是在这种情况数学推导就会更复杂一些。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44356285/article/details/86665320
今日推荐