人工智能如何应用在机器人上?--深度强化学习与简单2D机器人场景(下)
上一篇文章我们粗略介绍了策略梯度算法,通过阅读以下内容,我相信你可以获得一个更加深刻和全面的理解!
策略梯度的数学推导
策略梯度实际上是期望函数的梯度估计(score function gradient estimator)的一个特例。一般来说,我们会有一个形式为如下的数学表达式:
代表了特定标量函数f(x)在以
为概率分布函数时的数学期望值。怎样形象的理解这个表达式呢?f(x)对应于我们的回报函数或者是Advantage函数,p(x)是我们的策略网络,也是
(基于一张图像信息的行为概率分布)的一个模型。我们所要关注的就是如何通过调整参数θ来调整概率分布,进而提升取样点的得分(由f(x)判定)。对于当前的乒乓强化学习场景而言就是说我们应该如何调整策略神经网络的参数使得我们选取的行为能够得到尽可能高的回报。
回报函数的数学期望梯度 = 对于所有取样点的概率与其汇报函数乘积和在参数θ上的导数
将导数计算移至加和计算之前
经过一系列数学变换
最终得出:回报函数的数学期望梯度 = 每一个取样点的对数选取概率梯度与相对应的回报值乘积的数学期望
我们来简单描述一下这个过程,首先我们有一个分布函数
,(以p(x)简化代替)从中我们可以选取样点(比如这个分布函数可以是一个高斯分布)。对于每一个选中的取样点x我们可以计算出它的回报函数值f(x)。上面最终的等式告诉了我们应该如何移动概率分布函数(调整θ)使得我们的取样点能够得到更大的回报值。除了拿选取的x值计算f(x)值以外,我们也需要计算
,它是一个梯度向量,指明了为使得选取x概率增加,θ值应该变化调整的方向。换个方式说:我们将θ值顺着
的方向少量推动,那么选取到x取样点的概率在未来就会少量增加。我们仔细观察等式会发现在此之外我们还乘以了f(x),这点说明了取得更高回报值的取样点会更大地影响取样概率分布选取这类取样点的倾向。所以我们会观察到在更新概率分布函数之后我们的概率分布将从一开始的高斯分布形式逐渐演变成倾向于选取更容易获得高回报值取样点的概率分布。
图示:左图:初始时期是一个高斯概率分布,蓝色点代表一些取样点,蓝色箭头代表针对每一个取样点而言要使此取样点被选取的概率增大的话,此概率分布应该移动的方向。
中图:表示左图经过f(x)乘积叠加之后的取样点方向,红色为f(x)=-1,绿色为f(x) =+1,于是红色箭头所指为实际方向的逆向,绿色箭头所指即为实际方向。
右图:中图指明的方向会牵拉概率分布图移动到坐下方,移动之后的概率分布图会包含更多的带来正向奖励的取样点,由此,一次更新完成
学习训练
到此,我们用数学推导阐明了强化学习是如何应用在这个简易的乒乓球游戏中的了。实际的代码编写并不复杂,只有130行的Python代码就可以实现。作者使用了一个两层的策略网络,其中总共有200个隐藏层神经元,每一次的训练长度为10个循环,因为是21分制,所以每个循环大概包括几十局的乒乓球比赛才能决出胜负。经过了8000次训练循环(大约二十万局游戏),总共约800次参数更新之后达到了以下视频中的效果。我们也可以不断调整一些顶层变量使得我们的机器玩家变得更加无敌!
训练学习后的参数值:
我们来看一下训练之后的参数的样子:
图示:每一格代表一个训练完的神经元,这张图总共包含了40个神经元。白色的像素是正值权重值,黑色为负值权重值
由此,我们成功地训练了一个策略神经网络。背后是一种复杂的“猜想”+“验证”的方式:“猜想”即依据当前策略分布选择取样点(行为),“验证”即根据所选取样点(行为)进行判断和改进。当我们不甚了解强化学习原理的时候,我们可能无法理解机器是如何学会玩游戏的,但是当你仔细阅读以上的说明后,你应该会发现这一切并不玄幻,它确实是可以被理解和说明的。
我想通过上面的例子做一个机器学习和人类学习的比较:
人类玩乒乓球游戏是通过很多的经验和判断来学习进步的,比如说直观理解的物理规律(球的弹跳、碰撞、速度改变等)和感性的心理判断(我的对手想要获胜,那么他可能会采取哪些可能的进攻路线呢?)而机器玩家对这一切一无所知。
策略梯度法实际上是一个“蛮力”的方法:最优的方法最终会被成千上万次的尝试发现并且存储到程序里面。而作为人类,我们有一个抽象的模型,之后不断调整这个模型的准确度,在调整的时候也参杂了许多思考(对手移动较慢,我们可以击打球使球拥有纵向的高速逃离对手的防守)。有一点很类似,我们人类最终也会把这一套方法存起来,比如说肌肉记忆或者是战术经验。
机器学习需要大量且高频次地获得奖励或惩罚才能快速更正策略网络。而我们人类很多情况下可以预测到某些行为的后果而并不需要亲自尝试来学习。比如说我们不会通过天天开车撞树才能理解到撞车带给我们的损失。
其实强化学习在有很多游戏都可以轻松赢过人类,这一类游戏的共性就是需要快速反应、快速获得奖励或惩罚,而不是需要长期规划的那种游戏。总之,一旦你了解了强化学习的算法内涵那你就可以判断哪些场景适宜这种算法而哪些不适合了。我们现在的人工智能还完全无法比拟我们人类的复杂抽象思维的能力。
结语:
强化学习是一个很强大的人工智能算法,我们这两篇文章总结了如何利用强化学习中的策略梯度算法从零到一让机器通过接收图像信号自我学习出游戏通关策略!实际上,进行简单的更改调试,这个程序就可以应用到其他的游戏上面去,由此可见强化学习算法的通用性。
在促进AI发展方面:
我们观察到这个算法最一开始是通过蛮力选取一些随机的行为施加到控制对象上面的,这些行为直到带来奖励或者惩罚才能更新程序对环境的认知,进而调整选取不同行为的概率。而作为人类,我们处理这个问题的方法更像是通过构建一个抽象模型而非深入研究学习得出行为方式的。由于这些抽象的行为模型难以用数据描述,所以最近在人工智能领域,无监督生成模型(unsupervised generative model)和程序归纳法(program induction)也成为了研究热点。
在复杂机器人场景中的应用:
本文所讨论的强化学习不能够简单直接应用到那些由于搜索空间过于庞大而难以轻易获得最佳行为的场景里。比如说在一个真实的多维机器人场景中,更合理的算法是确定策略梯度法(deterministic policy gradients)而非随机策略梯度法(stochastic policy gradients),意思是我们不从一个随机分布里面选取行为取样点然后奖励获得成功的取样行为,而是采纳一个确定的行为选取策略,然后从另外一个描述回报情况的神经网络(critic network)直接获得梯度信息。这种方法在处理高维行为问题时要优于随机取样行为的方法,但与此同时也更加难以实现。其中的一个可能解决方案是增加多个机器人,平行探索训练。比如像谷歌的机器人工厂或是特斯拉Model S的自主巡航。
还有一系列的方法是通过添加额外的监督来缩小强化学习过程中的探索空间,以此使得本来不可能的任务变得可以实现。比如说可以从人类专家那里拿到一个很好的轨迹或者方向来指导机器人的探索学习方向。比如说大名鼎鼎的阿尔法狗:首先是通过大量观看人类顶尖围棋大赛数据,用监督学习的方法去预测人类棋手的下棋方式;之后对这个“拟人”的下棋策略进行策略梯度方法的优化训练得以战胜人类。在其他的一些没有人类教师的数据可以作为教学材料的领域里,我们可以应用优化算法求出最佳解,并将其作为教学材料。
我希望我的这篇讲解能够给你一个对强化学习更直观、具体的理解,也能让你了解到强化学习方法目前所面临的瓶颈和困难。如果你愿意推动强化学习或人工智能的进步,请假如OpenAI Gym!
END