来自系列:加强学习
布莱恩道格拉斯
本视频介绍驻留在代理中的算法。我们将讨论为什么要使用神经网络来表示函数,以及为什么要在强大的称为“行为-批评”的方法家族中建立两个神经网络。
在上一个视频中,我们主要关注环境的设置环境包括什么以及如何使用环境的奖励来指导agent的行为。在本视频中,我们将重点介绍设置代理——具体来说,就是RL工作流的最后三个步骤。
现在,要完全涵盖这些步骤很容易几个学期的材料。幸运的是,这不是这个17分钟的视频的目标。相反,我想在高层介绍一些主题,这将为您提供对发生的事情的一般性,以便在您潜入其他更完整的来源时更有意义。因此,在这段视频中,我将解决这两个主要问题:
第一,为什么用神经网络来表示函数而不是其他东西,比如表格或传递函数?第二,为什么你可能需要建立两个神经网络,以及它们如何在一个强大的叫做演员-评论家的方法家族中相互补充。让我们开始吧。我是Brian,欢迎来到MATLAB技术讲座。
上节课结束时,我们解释了政策是如何接收状态观察并输出行动的函数。然后我简要介绍了为什么表格和特定定义的函数在很多情况下不是很好的解决方案。这是因为当状态和操作空间变得非常大时,表是不切实际的,也因为很难为复杂的环境设计正确的函数结构。然而,使用神经网络可以解决这两个问题。
神经网络是一组节点或人工神经元,其以允许它们是通用函数近似器的方式连接。这意味着给定节点和连接的正确组合,我们可以设置网络以模拟任何输入和输出关系。这对我们有好处,因为我们可以使用,例如,机器人视觉系统中的数百个像素值作为输入到该功能,并且输出可以是驱动机器人的臂和腿的执行器命令。即使这个功能可能非常复杂,我们也知道有一种可以实现的某种神经网络。
如果你不熟悉神经网络的数学,我强烈推荐由3 Blue 1 Brown编写的关于这个主题的四部分系列文章。他对网络中正在发生的事情提供了一个奇妙的可视化描述,所以在这里我将跳过大部分讨论。然而,我想强调几件事。
在左侧是输入节点,一个用于函数的输入,右侧是输出节点。介于以下是名称的节点列,称为隐藏图层。该网络具有2个输入,2个输出和3个3个节点的2个隐藏图层。利用完全连接的网络,有一个箭头,或者从每个输入节点到下一个图层中的每个节点的加权连接,然后从那些节点到图层之后,然后再次到输出节点。节点的值等于其各自加权因子加上偏差的每个输入节点乘数的总和。我们可以对图层中的每个节点进行此计算,并以紧凑的矩阵形式将其写出作为线性方程的系统。
现在,如果我们像这样简单地计算节点的值,然后将它们作为输入输入到下一层,以执行相同类型的线性操作,并再次输入到输出层,那么您可能会有一个问题。一堆线性方程怎么能作为一个通用函数近似器呢?具体来说,它如何表示一个非线性函数?那是因为我漏掉了一个步骤,这可能是人工神经网络最重要的方面之一。在计算节点的值之后,将应用激活函数以某种方式更改节点的值。两种常用的激活函数是sigmoid函数,它将节点值压缩到0到1之间,以及ReLU函数,它基本上将所有负节点值归零。有许多不同的激活函数,但它们的共同之处在于它们都是非线性的,这对于构建一个可以近似任何函数的网络至关重要。
至于为什么会这样。我非常喜欢Brendon Fortuner和Michael Neilson的解释,他们分别展示了如何用ReLU和s形激活来证明。我在描述中链接到了他们的博客。
好了,现在我们来回顾一下。我们想要找到一个函数,它可以接受大量的观察,并将它们转换成一系列的行动,将控制一些非线性环境。由于这个函数的结构往往过于复杂,我们无法直接求解,所以我们想用一个神经网络来近似它,这个神经网络会随着时间的推移学习这个函数。我们很容易认为,我们可以把任何网络放进去,然后释放一个强化学习算法,来找到权重和偏差的正确组合,然后我们就完成了。不幸的是,和往常一样,情况并非如此。
我们必须提前对我们的神经网络做出一些选择,以确保它足够复杂,能够接近我们要寻找的函数,但又不会太复杂,以至于训练不可能或非常慢。例如,正如我们已经看到的,我们需要选择一个激活函数,隐藏层的数量,以及每一层的神经元数量。但除此之外,我们还可以控制网络的内部结构。它应该像我画的网络一样完全连接,还是应该像剩余神经网络一样跳过层?它们是否应该通过循环神经网络循环自己来创造内部记忆?神经元群应该像卷积神经网络一样一起工作吗?等等。
我们有很多选择,但与其他控制技术一样,没有一个正确的方法。很多时候,这归结为从一个网络结构开始,这个网络结构已经适用于你试图解决的问题类型,并从那里进行调整。
现在我一直说我们使用这些神经网络代表代理人中的政策,但对于那种意味着什么,我们需要查看一些不同类别的加强学习算法的高级描述:基于策略功能,基于价值函数和演员 - 评论家。以下肯定会是一种过度简化,但如果您只是试图了解RL的方式可以接近RL的方式,我认为这将有助于您开始。
在高水平,我认为基于政策函数的倾斜算法产生了很大的意义,因为我们试图培训采用国家观察的神经网络并输出动作。这与控制器在控制系统中正在做的是密切相关的。我们将称这个神经网络称为演员,因为它直接讲述了代理商如何采取行动。
结构看起来非常简单,所以现在问题是,我们如何逼近这种类型的网络?为了获得一般的感受,让我们来看看Atari游戏突破。
如果你不熟悉《Breakout》这款游戏,你将尝试使用球拍来控制一个弹跳的球来消除砖块。这款游戏只有三个动作:向左、向右或完全不移动球拍,以及一个近乎连续的状态空间,包括球拍的位置、球的位置和速度,以及剩余砖块的位置。
在这个例子中,我们会说观察是游戏的屏幕截图,每次输入一帧,因此每个像素都有一个输入到我们的神经网络中。现在,有了网络,有很多方法来训练它,但我要强调一个广泛的方法,有很多变体,那就是策略梯度方法。政策梯度方法可以用于随机政策,这意味着政策将输出选择左或右的概率,而不是确定性的选择左或右。随机政策关注的是勘探/开发问题,因为勘探是建立在概率中的。现在,我们知道了,行动者只需要更新概率。向左走比向右走更好吗?在这个状态下往左走的概率稍微高一些。然后随着时间的推移,代理将推动这些概率向能够产生最多奖励的方向移动。
那么它怎么知道这些行为是好是坏呢?这个想法是这样的:执行当前的政策,一路收集奖励,并更新网络以增加增加奖励的行动的概率。如果球拍向左,没有击中球,导致负奖励?然后改变神经网络,以增加下一次agent处于该状态时右移桨的概率。从本质上说,它是对每个权重和偏差对奖励的导数,并将它们调整为正向奖励增加的方向。通过这种方式,学习算法将网络的权重和偏差向上移动到奖励斜率。这就是为什么在名称中使用了梯度这个术语。
这件事背后的数学是我想进入这个视频,但我鼓励你读到政策渐变定理,看看它是如何找到渐变而没有实际采取衍生物的渐变。我在描述中留下了一个链接。
政策梯度方法的一个缺点是,单纯的方法只是沿着最陡上升的方向,可以收敛于局部极大值,而不是全局。由于它们对噪声测量的敏感性,它们也可以缓慢地收敛,例如,当它需要大量连续的行动来获得奖励,而由此产生的累积奖励在不同事件之间有很大的差异时,就会发生这种情况。想象一下,在代理获得单个奖励之前,必须将数百或数千个连续动作串联在一起。你可以看到,用这种极其稀疏的奖励系统训练一个特工是多么耗时。记住这一点,在这个视频的最后,我们会回来讨论这个问题。
让我们继续超值函数的学习算法。为此,让我们从一个使用流行的网格世界作为我们的环境开始的例子。在此环境中,存在两个离散状态变量:X网格位置和Y网格位置。网格世界中只有一个州,具有积极的奖励,其余的有负奖励。这个想法是我们希望我们的代理收集最奖励,这意味着在最少的奖励中可以实现这一奖励。代理只能一次向上,向下,向左或向右移动一个平方,向我们强大的人类,很容易看到究竟要去奖励的方式。但是,我们必须记住,代理人对环境一无所知。它只知道它可以采取四种动作中的一个,它可以在采取动作后从环境中获得其位置和奖励。
对于基于值函数的代理,函数将接受状态和来自该状态的一个可能的操作,并输出采取该操作的值。这个值是这个状态的总折现奖励的总和就像我们在第一个视频中讲的那样。在这种情况下,策略就是检查每个可能行动的价值,然后选择价值最高的行动。我们可以把这个函数看作是一个批评家,因为它观察可能的行为,并批评行为人的选择。因为在网格世界中有有限数量的状态和动作,我们可以使用一个查找表来表示这个函数。这称为q表,其中每个状态和动作配对都有一个值。
那么代理是如何学习这些值的呢?首先,我们可以将它初始化为零,这样在代理看来,所有动作都是一样的。这就是探索率的作用,它允许代理采取随机行动。在它采取行动后,它会进入一个新的状态,并从环境中收集奖励。代理使用这个奖励,这个新信息,来更新它刚刚采取的行动的价值。它使用著名的贝尔曼方程。
Bellman方程允许代理通过将整个问题分解为多个更简单的步骤来随着时间的推移来解决Q-Table。因此,而不是在一步中解决状态/动作对的真值,而是通过动态编程,代理将每次访问时更新状态/动作对。让我试着用文字描述这个等式,以便希望它有所了解。
代理人采取行动后,它会收到奖励。价值超过行动的即时奖励;这是预期的最高返回未来。因此,国家/行动对的价值是代理刚收到的代理商的奖励,以及代理人预计会收集的奖励。我们享受伽玛未来的奖励,以便在我们谈论的情况下,该代理人在未来的奖励中并不依赖太多。现在这是国家/动作对,s,a的新价值。因此,我们将此值与Q-Table中的内容进行比较以获取错误,或者代理的预测有多远。误差乘以学习速率,并将结果增量值添加到旧估计中。
当代理在第二次发现同一状态时,它会有这个更新的值,它将在选择相同的操作时再次调整它们。并且它会一遍又一遍地这样做,直到充分已知每个州/动作对的真实值来利用最佳路径。
我们把这个想法扩展到一个倒立摆,它仍然有两种状态,角和角速率,除了现在这些状态是连续的。值函数可以处理连续状态空间,但查找表除外。所以我们需要一个神经网络。道理是一样的。我们输入状态观测值和动作,神经网络返回一个值。
您可以看到此设置不适用于连续操作空间,因为您如何尝试每个无限的动作并找到最大值?即使对于大的动作空间,这也变得昂贵,但我正在领先自己。目前,让我们说行动空间是离散的,并且代理可以选择5个可能的扭矩值中的一个。这似乎合理。
所以这是想法。当您馈送网络时,观察状态和返回值的操作,我们的策略再次是检查每个可能的操作的值,并将其具有最高值的值。就像网格世界一样,我们的神经网络最初将被设置为垃圾值,并且学习算法将使用Bellman方程的一个版本来确定新值应该是什么和更新网络中的权重和偏置。一旦代理探索了足够的状态空间,那么它将具有良好的值函数的近似值,并且可以选择任何状态的最佳动作。
很简洁,对吧?但我们确实遇到了一个缺点,即动作空间需要相对较小。但通常在控制问题中我们有一个连续的动作空间能够应用一个连续的力矩范围来解决倒立摆问题。
这让我们将这两种技术合并为一类称为“演员/评论家”的算法。演员是一个网络,试图采取它认为什么是最好的行动在当前状态,就像我们与政策函数法,批评是第二个网络,是试图估计的价值状态和演员的动作,就像我们与价值取向的方法。这适用于连续的动作空间,因为评论家只需要关注一个动作,即演员所采取的动作,而不是通过评估所有动作来寻找最佳动作。
这是它基本上它的工作原理。actor以与策略函数算法相同的方式选择一个操作,并且它将应用于环境。评论家估计它认为该状态和行动对的价值是什么,然后它使用环境中的奖励来确定其价值预测的准确性。误差是前一个状态的新估计值与来自批评网络的前一个状态的旧值之间的差异。新的估计价值基于所接收的奖励和当前国家的折扣价值。它可以使用错误作为事物是否比评论家更好或更糟糕的感觉。
评论家用这个错误来更新自己,就像价值函数一样,这样它就能更好地预测下一次处于这种状态时的情况。行动者也会根据评论家的回应更新自己,如果可能的话,还会更新错误项,这样它就可以调整未来再次采取该行动的概率。
也就是说,现在的政策是按照评论家建议的方向提升奖励斜率,而不是直接使用奖励。
所以演员和评论家都是试图学习最佳行为的神经网络。演员正在使用评论家的反馈来了解正确的行动,以了解一个好的行动以及什么是坏的,而且评论家正在从收到的奖励中学习价值函数,以便可以妥善批评演员所采取的动作。这就是为什么您可能必须在代理人中设置两个神经网络;每个人都扮演一个非常具体的角色。
运用行动者-批评者方法,代理可以充分利用策略和价值函数算法的优点。演员评论家可以处理连续状态和动作空间,并在回报有很大差异时加速学习。在下一个视频中,我将展示一个使用基于演员评论的算法让一个两足机器人行走的例子。
在结束本视频之前,我想简要讨论一下RL工作流的最后一步:在目标硬件上部署算法。到目前为止,代理通过与模拟环境交互进行离线学习。但一旦策略足够优化,学习就会停止,静态策略就会部署到目标上,就像你开发的任何控制律一样。然而,我们也有能力部署强化学习算法与政策,并可以继续学习目标与实际环境。这对于那些很难精确建模或随着时间缓慢变化的环境非常重要,因此agent需要偶尔继续学习以便适应这些变化。
好了,这节课就讲到这里。如果你不想错过任何未来的Tech Talk视频,别忘了订阅这个频道。此外,如果你想看看我的频道,控制系统讲座,我也涵盖了更多的控制主题。感谢收看,我们下期节目再见。
你也可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。