【转载】 DeepMind用ReinforcementLearning玩游戏

原文地址:

https://blog.csdn.net/wishchin/article/details/42425145

 原文 :  http://dataunion.org/?p=639

1.引言

       说到机器学习最酷的分支,非Deep learning和Reinforcement learning莫属(以下分别简称DL和RL)。这两者不仅在实际应用中表现的很酷,在机器学习理论中也有不俗的表现。DeepMind 工作人员合两者之精髓,在Stella模拟机上让机器自己玩了7个Atari 2600的游戏,结果是玩的冲出美洲,走向世界,超越了物种的局限。不仅战胜了其他机器人,甚至在其中3个游戏中超越了人类游戏专家。噢,忘记说了,Atari 2600是80年代风靡美国的游戏机,当然你现在肯定不会喜欢了。长成什么样子?玩玩当下最火的flappy bird(整体来看,Flappy Bird的那只鸟无非将Piou Piou的卡通小鸟改为了像素风格,颜色也一样,而且玩法上,实在是太过相似。Flappy Bird改动最大的是把核心玩法导向了完全的自虐模式,为此在玩法上相比Piou Piou做了简化,这也是为何其能获得病毒式下载量的重要原因,而Flappy Bird是手机游戏支持iOS、android。)吧!

 

 闲话少叙,来看看准备工作吧。首先是一台Atari 2600,估计是研发人员从爹妈的废物处理箱中翻箱倒柜的找出来的。等会,都生锈了是怎么回事儿?电池也装不上的说!淡定……由Stella倾情打造了模拟机,甚至还有为学术界专门贡献的Arcade Learning Environment,妈妈再也不用担心我的科研了。输入信息就是模拟器当前画面,输出为可供选择的摇杆和按钮“A-B-B-A-上-上-下-下”,学术点说就是当前状态下合法的操作集合。目的呢,当然是赢得游戏,分数多多益善。

 

然后就是玩游戏了。作为很酷很酷的科学家,肯定不会亲手玩游戏咯,当然一方面也是怕老板发现。不过,想要机器玩游戏,先得想清楚人类是怎么玩游戏的:

  • 首先,游戏开始,停留在初始时刻。然后,游戏场景开始变换,玩家眼睛捕捉到画面的变化,将视觉信号传递回脑皮层进行处理。
  • 之后,脑皮层将视觉信号转换为游戏的语义信息,通过经验指导,将语义信息与应该进行的操作做映射,之后是将映射后得到的操作信号传递到身体,如手指动作。操作结束后,游戏场景进入下一帧,玩家得到一定的回报,如越过关隘,或者吃到金币。如此循环,直到游戏结束。

仔细想想这个过程,发生在游戏内部的那些事情是玩家所不用考虑的,玩家能够覆盖的只是上述游戏循环的右半段。即输入视觉信号,输出手指动作。而手指动作到下一帧场景,以及玩家得到回报是游戏内部的过程。

      

既然了解了人类玩家的操作过程,并分解出实际需要玩家的部分内容,下一步就是让机器替代人类玩家了。为了区分,通常称机器玩家为agent。与人类玩家的操作类似,agent需要负责:

  1. 由上一帧回报信号学习到玩游戏的知识,即经验(什么场景下需要什么操作)
  2. 视觉信号的处理与理解(降维,高层特征抽取)
  3. 根据经验以及高层的视觉特征,选择合理的经验(动作)
  4. 动作反馈到游戏,即玩家手动的部分

所以说,游戏都是越玩越好的,人类玩家如此,agent亦如此。既然已经刻画出来操作步骤,随着DL和RL的发展,实操也不是什么难题嘛。下面,   首先看看RL是如何促进agent的学习。 之后会讲到DL是如何合理的安插到RL的学习框架中,并如何起到作用的。  然后,会强调一下这两者在游戏agent操作中的难点,以及如何解决实际问题。 最后,来看看agent游戏玩的到底如何。总结涉及对RL的升华。

2. Reinforcement Learning

 RL其实就是一个连续决策的过程。传统的机器学习中的supervised learning就是给定一些标注数据,这些标注作为supervisor,学习一个好的函数,来对未知数据作出很好的决策。但是有时候你不知道标注是什么,即一开始不知道什么是“好”的结果,所以RL不是给定标注,而是给一个回报函数,这个回报函数决定当前状态得到什么样的结果(“好”还是“坏”)。 其数学本质是一个马尔科夫决策过程。最终的目的是决策过程中整体的回报函数期望最优。

来看看一些关键元素:

  • 状态        集合S: S是一个状态集合,其中每一个元素都代表一个状态。在游戏的场景中,状态S就是某一时刻采集到的视觉信号。
  • 动作        集合A: A中包含所有合法操作。如flappy bird中点击一下屏幕,temple run中的上下左右等指动。
  • 状态转移概率P: P是一个概率的集合,其中每一项都表示着一个跳转的概率。例如,在当前状态s下,进行操作a转移到下一个状态的概率。
  • 回报        函数R: R是一个映射,跟状态转移概率P有点联系,R说明的是,在当前状态s下,选择操作a,将会得到怎样的回报。需要注意的是,这里的回报不一定是即时回报,如棋牌游戏中,棋子移动一次可能会立刻吃掉对方的棋子,也可能在好多步之后才产生作用。

回报函数有一些小小的tricky。

        首先,RL的过程是一种随机过程,意即整个决策的过程都是有概率特性的,每一步的选择都不是确定的,而是在一个概率分布中采样出来的结果。因此,整个回报函数是一种沿时间轴进行的时序/路径积分。依据贝叶斯定理,开局时刻不确定性是最大的,开局基本靠猜,或者一些现有的先验知识。随着游戏的不断进行接近终点,局势会逐渐晴朗,预测的准确性也会增高。深蓝对战国际象棋大师卡斯帕罗夫的时候,开局就是一些经典的开局场景,中局不断预测,多考虑战略优势,局势逐渐明朗,因此这时候一般会出现未结束就认输的情况。终局通常就是一些战术上的考量,如何更快的将军等。类似地,在RL中,回报函数的时序/路径积分中,每一步的回报都会乘上一个decay量,即回报随着游戏的进行逐渐衰减。此举也有另一些意味:如何最快的找到好的结果,例如在无人直升机中,花费最小的时间找到最优的控制策略,剩下的就是微调。

接下来,当这一切都确定了,剩下的事情就是寻找一种最优策略(policy)。所谓策略,就是状态到动作的映射。我们的目的是,找到一种最优策略,使得遵循这种策略进行的决策过程,得到的全局回报最大。所以,RL的本质就是在这些信号下找到这个最佳策略。

众所周知动态规划,其中一条理论基石就来自Bellman公式。Bellman公式告诉我们,在一种序列求解的过程中,如果一个解的路径是最优路径,那么其中的每个分片都是当前的最佳路径,即子问题的最优解合起来就是全局最优解。回报函数的最大化就服从Bellman公式,这是非常棒的性质,表示着我们可以不断迭代求解问题。旅行商问题就不服从Bellman公式,因此它是NP-hard问题

于是,RL的学习分为两个方面,两方面相互交织,最终得到结果。这是一种典型的Expectation-Maximization算法的过程。EM算法在机器学习中是相当经典的算法,大量的机器学习优化都使用这个方法。

如下图所示的一种EM算法求解RL的示例:

图  略

该示例代码取自Spark Summit 2013,由Adobe的Nedim Lipka介绍了RL在市场策略(网页个性化展示)上的应用。这里抛开具体的应用语义,以及分布式算法,来简单分析RL优化过程中EM算法的一般过程。

这里,是一个函数,这个函数以当前状态s为参数,返回一个动作a,这个动作是一个概率分布,代表着在当前状态s下,转移到任意另外一个状态的概率是多少。假设我们有三个状态,那么这个动作分布可能是这个样子的:

另外,是一个价值函数,即我们从s这个状态出发,直到无穷大的遍历,能获得的最大回报的期望。价值函数其实就是在策略为,初始状态为s情况下的回报函数。另外,是一个即时(immediate)回报函数,即从状态s出发,经过a这个动作的作用,走到这个状态获得的回报是多少。例如用户在某个页面上浏览,点了一个广告,到了广告商的页面,广告商付给该网站1块钱。

价值函数,其中表示当前动作下面的转移概率,表示当前动作下的即时回报函数,是从s转移到之后,所能得到最大的期望价值。

这个函数优化有个问题,那就是和都是未知的,而这两个量是相互纠缠的,计算需要最大化,而计算需要对最好的进行积分。所以这是个典型的Expectation-Maximization算法。代码中第一部分就是EM算法中的Expectation,第二部分就是EM算法的Maximization部分。

        那么为什么第一部分会有迭代呢?那是因为大家记得随机游走,都不是游走一次就能结束的。整个转移链想达到稳定状态,需要多次迭代才可以。这就类似于Gibbs sampling 算法,必须多次迭代才能收敛。这里也是,计算Expectation需要让整体的网络达到稳定状态。其中符号delta代表着前后两次迭代差距是否足够小,因此判断是否收敛。

   总结一下,说白了,RL就是一个supervised random walk(可以参考斯坦福大学Jure Leskovec教授的论文Supervised Random Walk )。传统的random walk是按照固定的转移概率随便(采样)游走,RL就是在随机游走的每一步,都选择一个能使回报函数最大化的方向走,即选择一个当前状态下最好的action。而RL游走的这个网络,是由状态S为点集,动作A为边集,状态转移概率P为边权重的有向无环图(DAG)。状态转移概率P不是不变的,而是随着agent在这个网络中的步进,不断变的更加正确,符合现实世界的分布。这个DAG,就是一种混沌的网络状态。

澄清一些概念,Reward 是一次action得到的payoff,Return是一序列reward的函数,如discounting sum。上述两个是目标,而下面的value function是要学习的函数。Value function是状态的函数,或者是“状态-动作”这个序对的函数。来预测在给定状态(或者给定“状态-动作”)下agent能表现多好。有多好,表明的是在这点的expected reward,即在这点所能看到的未来最大期望收益。Approximator,关键是泛化能力,在有限的状态-动作子集上获得的经验,如何扩展到全部的状态和动作上?使用动态规划这种“查找表”的方式,是有局限的,而且这个局限不仅仅是内存上的(硬件上的)。Off-policy是指不需要一个policy查找表之类的,而是直接求最大化reward的那个action。

3. Deep Learning in RL

     Deep在何处?换句话说,因为DL参与的RL与传统的RL有何不同,从而要引入DL?我们在前面介绍RL的过程中,处理的是状态。而实际上,很多时候状态是连续的、复杂的、高维的。不像之前介绍中说的4个状态就可以了。实际上,假设我们有128*128的画面,那么状态的数目是指数级增长的,即有2^(128*128)中可能存在的状态,这个数字是1.19e+4932,这可是个天文数字!游戏画面连续存在,就算按照每秒30帧来算,一局游戏玩下来,啥都不用干了。处理数据的速度根本跟不上游戏画面变化的速度,更不用说那些高清的游戏。实际上,DeepMind现在也就能玩玩Atari这种爸爸辈的游戏吧。

无奈,因此求助于DL。注意,在此之前有很多人工特征处理,但很明显,一旦引入了人类的活动,就无法做成一种集成性的系统了,只能成为实验室的二维画面玩具。人类为什么玩游戏玩的好呢?因为人脑非常善于处理高维数据,并飞快的从中抽取模式。现在由DL来替代这块短板。

DL现在有两种经典形式,由Hinton、LeCun和Yoshida等人(原谅我不能一一列举大牛们)逐步完善。DL作为机器学习界的明星方法,早已耳熟能详。但是兹事体大,还是稍微提一下两种经典形式吧。

首先说明的是,两种形式在深层架构上很类似,但是在每层的处理上有所不用。依据多种神经网络之不同,DL分类如下:

  • 第一个差别就是   单层网络的不同,分为Auto-encoder Restricted Boltzmann Machine
  • 第二个差别就是   深层架构之不同,如何安排深层架构,是直接堆叠,还是通过卷积神经网络
  • 第三个差别就是   最高两层分类/识别层的不同安排,不同的高两层安排代表了不同的学习形式,是生成模型,还是判别模型
  • 第四个差别    是不同的激活函数选择,常见的是sigmoid函数,但也有通过 Rectified Linear Unit增强学习能力的,甚至还有convex函数的选择,如DSN。

=================================================

https://blog.csdn.net/u010215609/article/details/62247479

The Arcade Learning Environment

https://github.com/mgbellemare/Arcade-Learning-Environment

猜你喜欢

转载自www.cnblogs.com/devilmaycry812839668/p/10557689.html