本文为 AI 研习社编译的技术博客,原标题 :
Reinforcement Learning from scratch
作者 |Emmanuel Ameisen
翻译 | AI小山编辑 | 酱番梨、Pita
https://blog.insightdatascience.com/reinforcement-learning-from-scratch-819b65f074d8
一部关于深度DL最著名应用之一的纪录片
最近,我在北京的O'Reilly AI大会上做了一个演讲,是关于我们在NLP世界里学到的一些有趣的经验。当时,我很幸运地参加了Unity Technologies举办的关于“从头开始深度强化学习”的课程。我觉得这个由Arthur Juliani主讲的课程,干货极多,下面我把主要内容分享出来。
在与各公司的交流中,我们发现有趣的深度RL应用、工具和成果在增多。同时,深度RL的运作机制和应用,比如上图所示的AlphaGo,通常深奥而晦涩。在本文中,我将对此领域的各个核心部分做出一个任何人都可以读懂的概述。
很多图片都是来自那个演讲的幻灯片,也有新的。所有的解释和观点都是我自己的。有任何不清楚的,可以通过这里联系我。
深度强化学习的兴起
人们对深度RL领域有着极大的研究兴趣,例如学习玩Atari游戏,击败Dota 2职业选手,战胜围棋冠军。传统的深度学习侧重于识别(这张图片里有“停车”标志吗?),与之相反,深度RL增加了影响环境的动作的维度(目标是什么?我如何达成?)。例如在对话系统中,传统的深度学习关心的是对给出的问题如何学到正确的回答。但是,深度强化学习则着眼于一系列正确的语句,并从中得到一个积极的结果,比如,一个满意的客户。
这使得深度RL对于那些需要计划和应变的行业,如制造业或自动驾驶,格外有吸引力。然而,行业应用落后于飞速发展的技术研究成果。一个主要原因是深度RL通常需要一个代理进行无数次摸索后才能学到有用的东西。速成的办法是使用模拟环境。这个教程使用Unity来建立一个训练代理的环境。
这个由Arthur Juliani和Leon Chen主持的研习会,其目标是让每个一学员在4小时内成功训练多个深度DL算法。简直是天方夜谭!以下是对深度RL主要使用的许多算法的一个全面总结。更完整的教程可参见Arthur Juliani写的8个部分的系列,通过原文可开始阅读。
从老虎机到电子游戏:RL综述
深度RL能用来击败人类围棋顶尖高手。但要想知道如果实现的,你必须先从简单问题入手,掌握几个基本概念。
1、一切始自老虎机
作为第一个游戏问题,我们能不能知道哪个箱子里最有可能有奖品
假设每一轮你有4个箱子可选,每个箱子都有不同平均回报。你的目标是在给定的轮数后,拿到的回报总金额最高。这是一个经典的游戏,名叫“多臂赌博机”,我们从这个游戏开始研究。这个游戏的难点在于平衡探索和获利,探索让我们知道哪种情形才是好的,获利是探索到的知识去选择最好的老虎机。
这里,我们要使用一个值函数来映射我们的动作与预期的奖品,这个函数叫Q函数。首先,我们把所有Q值初始化为相等值。然后,我们每做一个动作(选取一个箱子),根据这个动作导致的回报的好坏,更新这个动作对应的Q值。这样,我们就能得到一个好的值函数。我们用一个能学习到4个候选箱子的概率分布(使用softmax)的神经网络(从一个非常浅的开始)来逼近Q函数。
值函数能让我们评估我们动作的好坏,而策略决定了我们最终采取哪个动作。凭直觉,我们会使用能选择出Q值最高的动作的策略。在实际应用中,这种做法表现很差,因为在我们通过试错取得足够经验之前,起初所预估的Q值都是很不靠谱的。这促使我们在策略中加进一种机制,以增加探索的成分。方法之一是使用ϵ贪心算法,它是由随机选取一个具有ϵ概率的动作构成。开始时,总是随机选择动作,让ϵ接近1,然后逐步降低ϵ,并进一步了解哪些箱子是好的。最终,我们确定出最好的箱子。
在实践中,相比要么选择一个我们认为最好的动作,要么随机选一个动作,我们应该需要一个更巧妙的办法。一个广泛采用的方法叫Boltzmann Exploration,它是通过加入随机因子来调整基于我们当前对于箱子好坏的预估的概率。
2、增加不同的状态
这里,不同的背景颜色代表不同的平均箱内奖励
前面的例子仅描述了一种情形,即我们总是从面前的4个箱子中进行选取。而在现实中,是有多种情形的。下面,我们把这种情况加入到我们的环境中来。现在,每一轮中,箱子的背景色在3种颜色中交替显示,表示箱子不同的平均值。这意味着,我们所学习的Q函数,不仅取决于动作(我们所选的箱子),还取决于具体状态(什么样的背景色)。这种类型的游戏叫作上下文多臂赌博机。
很奇怪,我们仍然能用前述的方法。只要在神经网络中加多一个稠密层,用来输入当前状态的矢量就行了。
3、了解动作的后续结果
这里,我们是蓝色方块,尝试学习如何到达绿色方块,而不碰到红色方块
有一个关键因素使得我们的游戏比大多数都简单。在大部分环境中,比如上面那个迷宫,我们采取的行动对状态世界是有影响的。我们向上移动一格,可能得到奖励,也可能得不到,但是,下一轮,我们将处于不同的状态。这就是为什么我们要引入“计划”。
首先,我们把Q函数定义为我们当前状态的即时奖励,加上我们做完所有动作后所期望的折扣奖励。如果我们的Q函数对状态的预测准确的话,这种方法是管用的。那么,我们怎样做出准确的预测呢?
我们用一个叫时序差分(TD)学习的方法来生成一个好的Q函数。其要点是只看未来的有限步骤。例如,TD(1)只用后续的两个状态来评估奖励。
很奇怪,我们可以用TD(0),只看当前状态,预测下一轮的奖励,效果很不错。网络结构是一样的,但是我们需要进到下一步才能发现错误。接着,我们用这个错误来反向传播梯度,就像传统的深度学习那样,然后更新预测值。
3+、Monte Carlo介绍
Monte Carlo预测是另一个用来预测我们的动作是否成功的方法。它的原理是用当前策略把所有步骤走完(在上图中,成功到达绿色方块或者因碰到红色方块而以失败告终),并用结果来更新每一个经过的状态的预测值。这样我们可以在全部步骤完成后一次性传播预测值,而不用每步都做。代价是在预测值中引入了噪声,因为奖励的路径太长。
4、很少离散的世界
前面讲的方法都是先把有限数量的状态和行动进行映射,然后用神经网络来逼近预测值。在那个迷宫例子中,一共有49个状态(方块)和4个行动(相邻的4个移动方向)。在本图的情形中,我们尝试学习如何让一个球在一个二维托盘中保持平衡,每一时刻我们都要决定托盘是要朝左还是朝右倾斜。这里,状态空间变成连续的了(托盘的角度,球的位置)。好消息是,我们还是可以用神经网络进行函数逼近!
关于策略无关(off-policy)和策略相关(on-policy)学习的提醒:我们先前用的是策略无关方法,即我们可以用任何方式来生成数据(比方说ϵ贪心算法),并从中学习。而策略相关方法,只能从由策略产生的行动中去学习(记住,策略是我们用来决定如何行动的方法)。这会限制学习过程,因为策略中必须嵌入探索方法,但是也使得结果与推理相关联,令学习效率更高。
我们要采用的方法叫“策略梯度”,是策略相关的。先前,我们就每一个状态的每一个动作学习到了值函数Q,并在此基础上生成了策略。在香草梯度策略中,我们仍旧使用Monte Carlo预测,但是我们使用损失函数增加选取到能获奖的行动的概率,然后直接从损失函数中学习策略。因为我们是依赖策略来学习的,所以不能用类似ϵ贪心算法(其包含随机选择)那样的方法来使代理探索整个环境。我们用来强化探索的方法叫熵正则化,它能增加概率预测的宽度,从而在探索空间时采用更冒险的做法。
4+、利用深度学习进行表达
在实践中,许多最新型的RL模型要求学习一个策略和若干预测值。用深度学习的方法来实现的话,是让两者成为从同一个主干神经网络产生的两组分离的结果,这样做更易于让神经网络学习到好的表达方式。
可用的方法之一是Advantage Actor Critic(A2C)。 我们直接用策略梯度(上面定义的)来学习策略,同时用一种叫Advantage的东西学习值函数。我们不是基于奖励来更新值函数的,而是基于“优势(advantage)”。所谓“优势”,是指跟用旧的值函数的预测结果相比,一个动作变得更好或更坏的度量。这使学习的效果的稳定性优于简单Q学习和“香草策略梯度”。
5、从屏幕中直接学习
模型的输入就是上面图片的像素!
对于这些方法来说,使用深度学习还有一个优势,那就是深度神经网络在感知类任务中表现优秀。一个人在玩游戏时,他接收到的信息并不是一连串状态,而是一幅图像(通常是屏幕、棋盘或者周围环境)。
基于图像的学习综合了卷积神经网络(CNN)和RL。在本场景中,我们输入原始图像而不是特征,并在架构中加入一个2层CNN,其它都不用改!我们甚至可以检查一下激活函数,看看网络识别到了什么,它是如何确定值和策略的。在下面的例子中,我们可以看到网络用当前的得分和远处的障碍建立当前的状态值,同时根据附近的障碍决定如何行动。很利索!
检查CNN的激活函数,看看对于值预测(左)和策略预测(右),哪些是重要因素
顺便提一句,我随手玩了一下现成的代码,发现图像学习对于超参数特别敏感。比如,稍微改变一下折扣率,即使是一个玩具应用,神经网络也无法学习了。这个问题是大家都知道的,但亲身体验一下也蛮有意思的。
6、微妙动作
到目前为止,我们已经尝试过了状态空间是连续和离散的两种场景。然而,我们探讨的所有这些场景的动作空间都是离散的:向四个方向之一进行移动,或者向左向右倾斜托盘。理论上,类似自动驾驶等应用,我们需要学习连续的动作,比如在0-360度之间转动方向盘。在这种叫“3D球世界”的场景里,我们可以沿着托盘的每一个轴倾斜任意角度。这给了我们执行动作更多的控制,但也使动作空间大了很多。
为解决这个问题,我们通过高斯分布来逼近可能的选择。我们学习到高斯分布的均值和方差之后,就可以学习所有可能动作的概率分布,以及我们从这个分布中抽样出来的策略。原理很简单:)。
7、勇敢者的下一步
因为一些概念的缺失,使得上面讲的算法称不上最好的。让人觉得有意思的是,在概念上,最优秀的机器人和游戏算法与我们讨论的那些相隔并不遥远:
并行:A3C是最广泛使用的方法。它在actor critic中加入一个异步步骤,允许算法并行运行,使得解决一些有趣问题所花费的时间处于可接受范围。进化式算法的并行能力更强,其性能令人鼓舞。
课程式学习:在很多情况下,几乎不可能在随机动作中获得奖励。由于学不到有用的东西,让探索阶段很难搞。在这种情况下,我们可以简化问题,先解决容易的,再用基本模型对付越来越复杂的场景。
记忆:例如,用LSTM,我们能记住过去发生的事情,并在游戏进程中一步步做出决策。
基于模型的RL:在算法进行学习时,有多种方法可以建立一个世界模型,因此,它们可以基于运作简单而又回报很高的动作,推测出世界运行的规则。AlphaZero包括一个非常清晰的含有计划的模型。这篇论文让我觉得十分振奋。
总结就到这里,我希望内容是充实、有趣的!如果你想更多了解RL理论,请阅读Arthur的文章,或者更进一步研究,可以加入David Silver的UCL课程。
领取专属 10元无门槛券
私享最新 技术干货