速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

看 DeepMind 如何用 Reinforcement learning 玩游戏

  • 2014-03-31
  • 本文字数:9869 字

    阅读完需:约 32 分钟

引子

说到机器学习最酷的分支,非 Deep learning 和 Reinforcement learning 莫属(以下分别简称 DL 和 RL)。这两者不仅在实际应用中表现的很酷,在机器学习理论中也有不俗的表现。 DeepMind 工作人员合两者之精髓,在 Stella 模拟机上让机器自己玩了 7 个 Atari 2600 的游戏,结果是玩的冲出美洲,走向世界,超越了物种的局限。不仅战胜了其他机器人,甚至在其中 3 个游戏中超越了人类游戏专家。噢,忘记说了,Atari 2600 是 80 年代风靡美国的游戏机,当然你现在肯定不会喜欢了。长成什么样子?玩玩当下最火的 flappy bird 吧!

闲话少叙,来看看准备工作吧。首先是一台 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 的升华。

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。

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。

所谓 Q-learning

初始化的时候需要设置 DL 与 RL 的起始参数,例如 episode(其表述一种天然存在分割的序列,如玩游戏,总会遇到终局。一个 episode 就是这样一个天然的分割。)设置为零,初始化策略,以及初始化空的 replay memory。

之后就是在一个个 episode 中进行探索。简单来讲,就是累计 4 帧游戏画面,经过些许预处理(裁剪、白化)之后,算作当前状态。之后根据现有的策略,选择一个最大化全局回报动作。在 ALE 模拟器中执行这个动作,收获下面 4 帧画面,以及此次回报。并将本次探索的结果存入 replay memory。

接下来就是进行新的策略(模型)学习。首先从 replay memory 中采样几组探索结果,分别根据一阶的 Bellman 公式求解理论回报值,最为标注信息。之后使用标注信息来优化 CNN,通过 SGD 进行优化。

要明确的是,不同的 episode 之间有哪些变量是共用的呢?有哪些是新 eposide 中置零,重新开始的呢?很显然,function approximator,即我们的神经网络是维持不变的,因为 CNN 在这里出现的本意就是随着样本数目、迭代数目不断增加,优化的越来越好。剩下的,replay memory 也是不变的,因为 replay memory 算是一个资源池,也就是传统意义上的数据。数据收集越来越多,但是不会丢弃。至于其他的,像学到的 policy,以及 reward 等都是要重新开始的。

以上介绍的过程就是 Q-learning 的一般过程。通常来说,Q-learning 是 model-free 的,什么意思呢?就是说使用 Q-learning 的 RL 过程在计算 value function(即 Q-function)的时候,不需要和环境进行交互。而上文中提到的动态规划方法,是需要跟环境交互才能计算最优回报的。通过使用一个称作 Q-function 的函数,可以完全避免计算最优回报的时候和环境交互。这个 Q-function 通常又被称作 function approximator.

细数挑战

很多问题都是看起来简单,实操过程中困难重重,因此,做任何事情都要“in the wild”,否则只是在外围打转,没有深度,因此词句缺乏力量,从而写不出有力的篇章。(作者躺枪)

首先是如何将整个过程构成闭环,在实时的游戏中进行持续学习和决策。可以肯定的是,一般情况下,游戏进行画面计算的时间是相当短的,然而 DL 编码出特征,并用 RL 找出策略这个过程要长的多。因此,游戏运行的每一帧都要停下来看看 agent 算完了没有。如果这是一个流处理系统,那么整套系统的性能就被压死在这里。在实验环境中,我们当然可以容忍 agent 慢慢玩,但是这样是无法与人类玩家力拼的。DeepMind 的科学家们也没给出太好的解决方案,只是设置了一个 k 值,意即每出 k 帧动画才判决一次。细想一下会出很多问题,如 agent 在这 k 帧就不幸挂掉了,负分滚粗。这点还是期待更佳性能,或者更轻量的解决方案。正所谓,性能性需求不如功能性需求优先,但是,当性能性需求在这种情况下变成了一种功能性需求,那就必须解决了。

相比于有监督学习,RL 的另一大挑战是没有大量标注数据。首先要澄清一点,就是 DL 在前面的 pre-train 的过程中不需要标注数据,不代表整个 DL 过程中不需要标注数据。恰恰相反的是,只要有充分的标注数据,DL 是可以抛开前面的 pre-train 而直接计算的。RL 每一次计算的时候是不知道一个具体的 label 来表明对错的,只能得到一个叫做标量回报的信号,这个信号通常都是稀疏的,有噪声的,尤其重要的一点,是有延迟的。延迟,表明的是当前动作和回报之间的延迟,游戏得分可能依赖于之前所有的状态和动作,而一个动作所得到的反馈很可能到数千步之后才能展现出来(如围棋,这也是战略性游戏和战术性游戏的差别)。可以在本文游戏结果一节中看到,对于战略性游戏,agent 表现还是非常差的。

还有一个问题是机器学习算法都是有数据分布独立性的假设的,IID 是一个很重要的性质,如果数据之间是有关联的,那么计算出来的模型就是有偏向的。但是 RL 中的数据通常是一个前后严重相依的序列。并且随着 policy 的学习,数据分布倾向于不同,严重影响回归器的使用。可想而知,当前情况下的状态会影响下一次的动作选择,而下一次动作选择的不同会影响下一帧画面,下一帧画面又会影响下下次动作的选择。犹如一个长长的链条,让状态和动作纠缠不清。怎么破 IID 的问题?DeepMind 学习 Long-Ji Lin 93 年用来控制机器人运动的大作,通过使用 replay memory,存储过去一段时间内的“状态 - 动作 - 新状态 - 回报”序列,并进行随机采样以打破依赖,以及用过去的动作做平滑。

历史局限性也严重制约这 agent 的能力,局限性嘛,就是眼光看不到未来,正如当年葡王拒绝了当地人哥伦布的远航,而西班牙女王伊莎贝拉则是拿出自己的首饰珠宝让哥伦布出海。这里的历时局限性是指在当前阶段只能看到游戏的一部分画面,无法掌控全局。从而产生一个更严重的问题,就是富者更富的马太效应难以调和,agent 选择的动作会偏向一定的画面,而这种画面会使得 agent 在这个偏向上持续增强。例如,当前时刻最大化回报的操作是向左移动,因此 agent 选择向左移动,所以左侧的画面会被更多的看到,左侧画面占据大量的训练样本席位,从而控制进一步的学习。这种情况下,强烈的正反馈的循环会让 agent 迅速陷入局部最优值,甚至直接发散开。(John 和 Benjamin 在 97 年的 automatic control 上对此有所论述。)通过 replay memory 会让更多的历史样本参与训练,从而冲淡马太效应带来的影响。

最后是 Bellman 公式的局限性。根据前文叙述的 RL 用法,我们可以很 happy 的看到求解未来的回报是一个可以动态规划的过程,因此 Bellman 公式大杀四方,可以快速得到最大未来回报的结果。可惜的是,这种计算看似很好的解决问题,实则不然。这种情况下预测只针对当前最优路径这一单条路径的情况进行计算,不具备泛化能力。比如对当前数据做个分类器,可以轻轻松松达到 100% 的正确性,但是这个 100% 的分类器用在其他数据上甚至不如随机分类的结果。这种情况的解决办法是,使用一个自定义的 function 来模拟这个最大回报。这里的函数就可以任意选择了,例如有些人选用简单的线型函数,有些人则选用更加复杂的函数,如这里使用的卷积神经网络。之前的做法是,给我当前的策略、 状态,以及动作的选择作为输入,通过动态规划计算出未来的回报。现在则是给定这些输入,直接输送到神经网络中计算出未来的回报。

致命一击

游戏准备

DeepMind 工作人员最终用这个 DRL 玩了 7 个 Atari 游戏,分别是激光骑士(Beam Rider),打砖块(Breakout),摩托大战(Enduro),乓(Pong),波特 Q 精灵(Q*bert),深海游弋(Seaquest),太空侵略者(Space Invaders)。玩这些游戏的过程中呢,用的网络深层架构、学习算法,甚至是超参设置都是完全一样的,这充分说明了该方法的有效性,以及泛化能力。(当然,也说明了 DeepMind 的小伙伴们懒得去调一手好参。)当然,有一点肯定是把不同的游戏修改了的,那就是得分。不同的游戏得分、算分的情况很不相同,导致处理起来很麻烦。因此,玩游戏的过程中,每得到一个正分就加一,得到一个负分(滚粗)就给个减一。通过这种做法让不同的游戏都融合在一个框架内,不会因为奇怪的得分、给分方法导致出现计算上的困难。

注意我们的 Arcade Learning Environment 模拟器,跟 agent 配合起来会有一些问题,因为 ALE 把游戏画面一帧一帧计算出来很快,超过了 agent 的计算判决时间,所以导致游戏玩起来一卡一卡的(这点不像棋牌类游戏,可以给出思考时间),因为设置 ALE 出 k 帧才让 agent 判决一次,这样才能保证玩起来不是那么的卡。在本组实验中,k 通常设置为 4。

传统的有监督学习过程中,评测是简单确定的,给定了测试集,就可以对现有模型给出一个评价。然而,RL 的评测是很困难的。最自然的评测莫过于计算游戏的结果,或者几次游戏结果的均值,甚至是训练过程中周期性的分数统计。但是,这种做法会有很大的噪声,因为策略上权重的微小扰动可能造成策略扫过的状态大不相同(回顾一下,状态来自游戏画面,不同的动作选择会导致下一帧画面的变化,这个效应累计起来变化是巨大的。)。因此,DeepMind 选择了更加稳定的评价策略,即直接使用动作的价值函数,累加每一步操作 agent 可以得到的折扣回报。

实际操练

首先一些预处理是必不可少的,虽然论文本身标榜基本无预处理。但是显然,DeepMind 的玩家们更倾向于直接使用现成的 Deep Neural Network(Hinton 2012 年做 ImageNet 分类用到的卷积神经网络,并使用了 GPU 加速),而不是自己从头开始。正所谓“做像罗马人做的事一样的事情”,为了直接使用“罗马人”开发的 DL,首先做的是降维处理,将 RGB 三色图变换成灰度图,其次是做了一些裁剪,将原图像由 210×160 采样成 110×84 的图像,并最终裁剪成 84×84 的图像。最终是每 4 帧图像合在一起当作一次训练的样本。

网络架构方面,输入是 84×84×4 的像素,第一层神经元是 16 个 8×8 的过滤器,第二层是 32 个 4×4 的过滤器,最后一层是与 256 个 rectifier 单元的全连接,输出层是与单一输出与下层的全连接的线性函数。DeepMind 称这种与 RL 结合使用的卷积神经网络为 Deep Q-Network.

对照最左侧的 Q-value 评价曲线,与右侧“深海巡弋”相对照。点 A 时刻有一个敌军出现在屏幕最左侧,此时 Q-value 升高,B 点时刻升高到峰值,因为我们发射的鱼雷就要击中敌军。击溃敌军潜艇之后,Q-value 降低。说明 DeepMind 的 DRL 是可以感知图片语义的。

最终的评测对象中包含了 Sarsa 算法,Contingency 算法,本算法,以及人类专家。前两个算法都使用了人工合成的 features。人类玩家的结果是玩每个游戏两小时之后取得所有成成绩的中位数。最终对比结果显示,首先是本算法远胜于所有人工合成 features 的方法,其次是本方法还在打砖块、摩托大战和乓上得分超过人类玩家,在激光骑士上能跟人类玩家比部落下风。但是本算法在波特 Q 精灵、深海游弋和太空侵略者三个游戏上还离人类专家相去甚远。因为这三个游戏比另外的游戏需要更多的深思熟虑,即策略链条上的每一次抉择都可能会对长时间后的结果造成影响,而前三个游戏前后之间关联度小,前面操作造成的影响不易传播到后面的策略中,因此效果会更好。

飞翔吧,小鸟!

由 DRL 看世界

“看看你自己的生活,你的职业选择、你与配偶的邂逅、你被迫离开故土、你面临的背叛、你突然的致富或潦倒,这些事有多少是按照计划发生的?”正如塔勒布在《黑天鹅》中提到的,世界是随机的。纳特•西尔弗也保持这种观点:预测一直都不是简单的问题。复杂动力系统的预测困难来自三个方面,一是微观结构的易变性,稀疏性导致缺少显著的统计特征;二是复杂动力系统的混沌性,简单的微扰会带来巨大的变化;三是人类行为的因变性,导致数据分布改变影响预测模型。而不同的目的导向也导致了不同的不同的预测结果。除了天气预报,鲜见较准确的预测系统。

只不过此随机并非完全随机的,而是某种程度上可预测的随机。因为依据状态的不同,动作的选择并不是一个均匀分布。所谓一花一世界,一叶一菩提,RL 正如现实世界的一个缩影。正是由于 RL 和 DL 对世界和人类高度的拟真性,笔者才感觉这俩是机器学习中最有趣的部分。苏格拉底说“认识你自己”,尼采也有言“离每个人最远的,就是他自己”,RL 和 DL 像两位不懈的巨人,在人类认识自我,认识环境的道路上渐行渐远。

笔者一直对随机过程保持敬畏之心。当然原因之一也是笔者曾差点“随机过程随机过”,但是,抛开那些“只是更善于阐述而已,甚至只是更善于用复杂的数学模型把你弄晕而已”的故弄玄虚,随机过程支撑整个世界,贝叶斯点睛你的生活。

结构之美

一篇 DRL 引出了三种结构,这些结构都是美不胜收的。分别是“模型的结构”“数据的结构”以及“模型和数据的结构”。要注意的是,这里都只是画出了结构的一部分,还有其他大块的部分没体现在图中。

(模型的结构,图为 DL 中的受限波尔特兹曼自动机)

(模型和数据的结构,Gibbs sampling 的网络相依,节点为隐含变量和观测变量)

参考文献

  1. Playing Atari with Deep Reinforcement Learning
  2. Residual Algorithms: Reinforcement Learning with Function Approximation
  3. Bayesian Learning of Recursively Factored Environments
  4. The Arcade Learning Environment: An Evaluation Platform for General Agents
  5. CS229 Lecture notes: Reinforcement Learning and Control
  6. Rectified Linear Units Improve Restricted Boltzmann Machines
  7. An Analysis of Temporal-Difference Learning with Function Approximation
  8. Deep Auto-Encoder Neural Networks in Reinforcement Learning
  9. On optimization methods for deep learning
  10. Technical Note: Q-Learning
  11. Towards Distributed Reinforcement Learning for Digital Marketing with Spark

作者简介

尹绪森,Intel 实习生,熟悉并热爱机器学习相关内容,对自然语言处理、推荐系统等有所涉猎。目前致力于机器学习算法并行、凸优化层面的算法优化问题,以及大数据平台性能调优。对 Spark、Mahout、GraphLab 等开源项目有所尝试和理解,并希望从优化层向下,系统层向上对并行算法及平台做出贡献。


感谢吴甘沙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-03-31 05:5735657

评论

发布
暂无评论
发现更多内容

Flutter 开发从 0 到 1(一)需求与准备

吴小龙同学

flutter ios android 跨平台

iOS底层系统小结

shirley

ios

线上排障技巧 | 动态修改LOGGER级别

AI乔治

Java 编程 架构 JVM

fastJson与一起堆内存溢出'血案'

AI乔治

Java 架构 JVM Fastjson 内存溢出

Maven 进阶

少平

【得物技术】机器学习在图形验证码识别上的应用

得物技术

学习 算法 测试 图像识别 验证码

Maven 入门

少平

Java

架构师训练营第四周作业

李日盛

架构

这篇 MySQL 索引和 B+Tree 讲的太通俗易懂!

MySQL 面试 数据库事务 索引结构

杂谈

落曦

架构师训练营 - 第四周学习总结

joshuamai

“双11”正成为区块链场景应用“练兵场”

CECBC

大数据

大招落地:MySQL 插入更新死锁源码分析

AI乔治

Java MySQL 编程 架构

极客时间 - 架构师一期 - 第八周作业

_

极客大学架构师训练营 第八周作业

极客大学 - 架构师培训 -ch3 作业

bing5tui3

极客大学架构师训练营

【薪火计划】01 - 好与坏

AR7

管理

架构师训练营第 1 期 - 第 8 周课后练习

Anyou Liu

极客大学架构师训练营

ARTS Week14

丽子

C++的智能指针你了解吗?

良知犹存

c++

架构师训练营 - 第四周课后练习

joshuamai

如何正确的关闭线程池

Rayjun

Java 线程池

区块链技术发展需加强核心技术自主创新

CECBC

区块链技术

数字货币是数字经济发展基石

CECBC

数字货币

16张图带你彻底搞懂基数排序

Java架构师迁哥

我用 Python 找出了删除我微信的所有人并将他们自动化删除了

Python小二

Python 微信

Flutter 开发从 0 到 1(二)框架与网络

吴小龙同学

flutter ios android 跨平台

Scala-语法特性(一):类型和变量定义

正向成长

scala

上海与鲲鹏的数字共鸣

脑极体

用eBPF/bcc分析系统性能的一个简单案例

AI乔治

Java 编程 架构 大前端

java是如何调用native方法?hotspot源码分析必会技能

诸葛小猿

Java jdk JVM jni hotspot

架构师训练营第1期 - week08 - 作业

lucian

极客大学架构师训练营

看DeepMind如何用Reinforcement learning玩游戏_大数据_尹绪森_InfoQ精选文章