Human-level control through deep reinforcement learning

Nature 2015 Google DeepMind

Abstract 


  RL 理论 在动物行为上,深入到心理和神经科学的角度,关于在一个环境中如何使得 agent 优化他们的控制,提供了一个正式的规范。为了利用RL成功的接近现实世界的复杂度的环境中,然而,agents 遇到了一个难题:他们必须从高维感知输入中得到环境的有效表示,然后利用这些来将过去的经验应用到新的场景中去。显著地,人类和其他动物看起来可以通过一个和谐的RL 和 层次感知处理系统的有效组合进而解决这个问题。前者通过丰富的神经数据解释了由多巴胺能神经产生的相位信号和 TD Reinforcement learning 算法之间的显著的并行得到验证。于此同时, RL agents 在一些领域已经取得了很多的成果,之前他们的应用基本上被限制在领域内,即:手工设计的有用的特征,全部观测到的domains,低维的状态空间等等。此处,我们利用最近发展迅速的深度神经网络来开发一种新颖的智能 agent,叫做: deep Q-network, 利用end-to-end 的RL, 可以直接从高维感知输入中学习到成功的策略。我们在具有挑战性的经典Atari 2600 games,测试了该 agent。实验证明,该 deep Q-network agent,仅仅接收像素 和 游戏得分 作为输入,利用相同的算法,网络设计 和 超参数可以超过之前任何的算法,达到和专业游戏玩家的水平。该工作桥接了 高维感知输入 和 动作,能够处理各种具有挑战性的任务。

  

     我们要设计一个算法,其能够开发一个广泛的处理多种任务的能力 ---- 一般的人工智能,无法达到这个效果。为此,我们发展了一种新的 agent, a deep Q-network(DQN),可以结合RL 和 深度神经网络。特别注意的是,最近深度神经网络的发展,几个层的结点用来建立逐渐更加抽象的数据表示,已经使得其可以直接从原始感知数据中,学习到像物体的种类这样的概念。我们用一个特别成功的结构,深度卷积网络,其利用平铺的卷积滤波来模仿感受野的效果---> uses hierarchical layers of tiled convolutional filters to mimic the effect of receptive fields. 所以,探索图像的局部空间关系,构建对自然转换的鲁棒性,像:视角和尺寸的变换。

  我们通过一系列的 observations, actions and rewards,考虑 agent 和 环境交互的任务。该 agent的目标是:为了得到最大的累积奖赏,而选择动作。正式的,我们利用一个深度卷积网络来近似最优的动作-值函数(the optimal action-value function):

  $Q(s, a) = max_{\pi} E [ r_t + \gamma r_{t+1} + \gamma^2 r_{t+2} + ... + |s_t = s, a_t = a, \pi ]$,

  

  RL 比较出名的一个问题就是:当用一个非线性函数估计,如:一个神经网络来表示 动作-值函数时,就会导致不稳定或者不收敛。这个不稳定主要有几个原因导致的:序列观察的相关性(the correlations present in the sequence of observations), Q值的小的更新,可能会显著的改变策略,从而改变数据分布,以及动作-值(Q) 和 目标值之间的关系。我们利用新颖的Q-Learning的变种来解决上述不稳定的问题,主要用到两个idea:

  1. 我们利用由生物学启发出来的机制,称为:experience replay,在数据中生成不规则分布。从而消除了观测序列的相关性,使得在数据分布上光滑的变化。

  2. 我们利用一个迭代更新来朝向目标值(target values) 调整 动作-值 Q ( the action-value),仅仅周期性更新,从而减少了与目标的联系。

  于此同时,在RL之中存在其他稳定的方法来训练神经网络,像: netral fitted Q-iteration,这些方法涉及到上百次迭代的训练网络。所以,这些方法不像我们的算法,不适合用于大型神经网络。我们利用像图1中所示的深度卷积神经网络来参数化估计的值函数 $Q(s, a; \delta_i)$,其中 $\delta_i$ 是第i次迭代的Q-network的参数。为了实现经验重现,我们在一个数据结合$D_t$中,在每一次时间步骤 t,存储 agent 的经验,$e_t = (s_t, a_t, r_t, S_{t+1})$。在学习的过程当中,我们采用 Q-leaning 更新,在经验样本上 (s, a, r, s') ~ U(D),从存储的样本中随机均匀的绘制。第i次迭代的Q-learning 更新,采用下列的损失函数:

  其中,$\gamma$ 是折扣因子,决定了 agent的视野。

  


  The Methods:

  

  Preprocessing:直接处理 Atari 2600 帧,图像大小是 210*160。我们为了降低输入的维度,采取了一个基础的预处理的步骤,用 Atari 2600 仿真器来进行人为处理。首先,为了编码单张图像,我们采用当前编码帧和前一帧每一个像素点色彩值的最大值。移除闪烁是很有必要的,因为一些物体仅仅出现在奇数帧,而有一些则只出现在偶数帧,由于有限数量的精灵导致的 artefact 会立马显现。 第二,我们然后提取 Y 通道,也就是经常说的 亮度,然后将其resize成 84*84的。

  Code availability.   代码链接:https://sites.google.com/a/deepmind.com/dqn

  Model architecture. 利用神经网络,有好几种不同的方法来参数化 Q。因为 Q 映射了 历史-动作对(history-action pairs)到他们的Q值,历史  和 动作 已经在之前的方法中被用于神经网络的输入。这种结构的主要缺点是:一个单独的前向传播需要计算每一个动作的Q值,导致计算代价和动作的数量成比例上升。我们则使用这样的一个结构,即:每一个可能的动作有一个单独的输出,仅仅将状态表示输入给神经网络。输出对应了每一个动作为每一个状态预测的Q值。这种结构的优势是:在一个给定的状态下,对于所有可能动作的Q值的计算,在网络中仅仅需要一个前向传播即可。

  图1中展示的结构,给出如下的描述:传入给神经网络的输入是预处理映射完毕后的 84*84*4 的图像。

  第一个隐层:卷积核大小为 8*8 , 然后有 32个filter,步长为4;后面跟一个非线性激活函数;

  第二个隐层:卷积核大小为 4*4, 然后有 64个filter,步长为2;后面跟一个非线性激活函数;

  第三个卷积层,64个filter,卷积核大小为 3*3,步长为1,后面也跟着一个 rectifier;

  最后的隐层是:全连接层,由512个rectifier units 构成;

  输出层是 一个全连接,每一个有效地动作对应一个输出。

  作者考虑在游戏中,有效动作的数量 从4~18之间变换。

  Training details:

  每一个游戏,一个网络:所有的游戏都用同样的网络结构,学习算法,以及超参数设置。由于游戏的分数都不一样,所以作者将所有的 positive reward 设置为1,negative reward 设置为 -1,不变化的则设置为0.

  训练过程中行为策略是 贪心算法。

  像之前的算法一样,本文也是采用 跳帧技术,即: the agent 看并且选择动作每隔 k 帧,而不是每一帧都做。其最后一个动作在跳过的帧上重复。

  


  Algorithm

  我们考虑这样的任务,在一个由动作,观察 和 奖励构成的序列中,agent 和环境交互。每一个时间步骤, the agent 从合法的游戏动作中选择一个动作 $a_t$。然后将此动作传输给模拟器,以修改其内部状态 和 游戏得分。总的来说,该环境可能是随机的。agent 看不到模拟器的内部状态;但是可以看到从模拟器传来的图像,即:代表当前屏幕图像信息的由像素构成的向量。此外,其还接收到代表游戏得分变换的奖励 $r_t$。既然总的来说,游戏得分可能依赖于之前序列的动作和观察;关于某动作的反馈,可能经过几千次的时间步骤才会接收到。

  因为 agent 仅仅观察到当前的屏幕,所以该任务是部分观测的,许多模拟器的状态是有感官上的锯齿现象的(即,仅仅从当前屏幕 $x_t$ 不可能完全的明白当前的情况)。所以,动作和观察的序列,$s_t = x_1, a_1, x_2, ... , a_{t-1}, x_t$, 输入给算法,然后依赖于这些序列进行游戏策略的学习。模拟器中的所有序列,都假设会在有限时间步骤内结束。这种形式就构成了一个大而有限的 马尔科夫决策过程(MDP),其中的每一个序列都是单独的状态。简单地将完整的序列 $s_t$ 作为第 t 个时刻的状态描述。

  agent 和 模拟器交互的目标是能够获得最大的累积奖励。我们做出一个标准的假设,即:奖励的奖励都被一个衰减因子 $\gamma$ 相乘,(设置 $\gamma = 0.99$),定义时刻t的折扣反馈为:

  其中,T 是游戏结束的时刻。

  我们定义 最优的 动作-值函数 $Q^*(s, a)$,作为最大的期待反馈,在观察了一些序列 s 之后,然后才去一些动作 a, $Q^*(s, a) = max_{\pi} E[R_t|S_t = s, a_t = a, \pi]$,其中 $\pi$ 是映射序列到动作的一个策略。

   最优的动作-值函数遵循一个重要的等式,即:贝尔曼等式(Bellman equation)。这是基于如下的观察:如果序列 s‘ 在下一个时间步骤最优的值 $Q^*(s', a') $ 对于所有动作 a’ 来说都是已知的,那么最优的策略应该是选择这么一个动作 a',从而可以得到最大的期望值 $r + \gamma Q^*(s', a')$:

  $Q^*(s, a) = E_{s'}[r + \gamma max_{a'} Q^*(s', a')|s, a]$

  许多RL 算法基本的idea都是:利用贝尔曼等式来预测 动作-值函数 作为一次迭代更新,$Q_{i+1}(s, a) =  E_{s'}[r + \gamma max_{a'} Q_i(s', a')|s, a]$。随着 i 趋于无穷大,这样的值迭代算法收敛到最优动作值函数,$Q_i -> Q^*$。实际上,这些基础的方法是不切合实际的,因为每一个动作值函数分别预测给每一个序列,没有任何 generalization。 实际上,用一个函数估计来预测 动作值函数是很common的。在RL领域经常利用线性函数逼近器,有时候也会用非线性函数,如:神经网络。我们提到 带权重的神经网络函数逼近器称为:Q-network。一个Q-network 可以通过在第 i 次迭代来调整参数 $\theta_i$而得到训练,以此降低贝尔曼等式中的均方误差 (mean-squared error),其中最优目标值 $r + \gamma max_{a'}Q^*(s' , a')$ 利用之前一些迭代得到的参数 $\theta_i^-$ 替换为估计目标值 $y = r + \gamma max_{a'}Q(s', a'; \theta_i^-)$。这就会使得 损失函数 $L_i(\theta_i)$ 的序列随着迭代次数 i 而改变:

  注意到,目标依赖于网络的权重;而有监督的学习,在学习开始之前是固定的。在每一个优化阶段,当优化第 i 个损失函数 $L_i(\theta_i)$时,固定之前迭代的参数 $\theta_i^-$,就会有一系列定义好的优化问题。最后一项是 目标的方差,不依赖于我们当前优化的参数 $\theta_i$,所以可以暂时忽略。区分不同的损失函数及其对应的权重,我们有如下的梯度:

  

  注意到,本文的算法是:model-free and off-policy。

  Model-free:因为本文算法是直接从模拟器中得到的样本来解决强化学习任务,而没有显示的预测奖赏和转移概率 $P(r, s'|s, a)$。

  Off-policy:学习贪婪策略 $a = argmax_{a'} Q(s, a'; \theta)$,与此同时,采用一个确保有足够状态空间探索的行为分布。实际上,该行为分布是经常被选中通过一个 $\epsilon-greedy$ 策略,有 $1-\epsilon$的概率来选择一个贪婪策略,有 $\epsilon$ 的概率随机的选择一个 action。

  其实,off-policy 更主要的是讲:策略评估 和 策略改进的不是同一个策略。例如:Q-learning 评估的是 贪心策略,而改进的是 原始策略(即,没有采用贪心算法策略)。这里比较容易懵逼啊。。。呃呃呃。。。

  

  


  Training algorithm for deep Q-networks.

  训练深度 Q-network 的算法在 Algorithm 1中。基于Q,根据 贪心策略来指导 agent 选择和执行动作。由于,将任意长度的历史作为神经网络的输入是有困难的,我们的 Q-function 作用于 利用上述函数 产生的固定长度表示的历史。该算法从两个角度 修改了 Q-learning,使其适合大型神经网络的训练并且不会发散。

  首先,我们利用称为 Experience Replay 的技术,存储每一个时间步骤 agent的经历,$e_t = (s_t, a_t, r_t, s_{t+1})$,在该算法的内部循环中,我们对 experience 样本 采用 Q-learning 更新,或者 minibatch updates,$(s,a,r,s') ~ U(D)$,从存储的样本池子中随机的抽取。

  该方法对比传统的 online Q-learning算法有以下几个优势

  1. Experience 的每一个步骤经常用到许多权重更新中去,允许更好的数据效率。

  2. 由于样本之间强烈的相关性,直接从连续的样本中进行学习是 inefficient的;样本的随机化破坏了该相关性,从而减少了更新的方差。

  3. 当 on-policy 的学习时,当前的参数决定了用来训练参数的下一个数据样本。(when learning on-policy the current parameters determine the next data sample that the parameters are trained on.)

  例如:如果最大动作是向左移动,然后训练样本就由左边的样本主宰;如果向右移动,训练样本的分布也会交换。

  很容易发现,不想要的反馈循环(feeback loops)是如何产生的,参数也可能在一个 poor 的局部最小困住,或者直接就悲剧的发散了。

  第二个改动是:

  为了改善我们方法的稳定性,在 Q-learning 更新的过程中,我们使用了额外的 目标网络(target network)来产生目标 $y_j$。

  确切的讲,每执行 C 次迭代,我们将网络 Q 克隆下来,然后得到一个目标网络(target network Q'),然后用这个目标网络Q' 来在接下来的 C 次迭代中来产生 Q-learnng的目标 $y_j$。这个改变,使得算法相对标准的 online Q-learning 来讲,更加稳定,因为 普通的 Q-learning 一次更新增加了 $Q(s_t, a_t)$ 经常对于所有的 a 来讲,也增加了 $Q(s_{t+1}, a)$,所以就增加了目标 $y_j$,可能会导致震荡或者策略的发散。用一组较老的系数来产生 target,增加了 更新Q的时间 和 更新能够影响到目标 $y_j$ 的时间的延迟,使得不容易发散。

  还有一个“黑科技”,即:

  此外,作者还发现将更新 限制在 -1 到 1之间 能够提升算法的有效性。因为所有的 |x| 的 positive value 的梯度是1,而 negative value 的值为 -1,将平方差剪切到 -1 和 1 之间就对应了 利用一个绝对值损失函数来处理 在(-1,1)间隔之外的误差(error )。这种 error clipping 方式进一步的改善了算法的稳定性。


   总的算法流程如下:

  

论文笔记之:Human-level control through deep reinforcement learning的更多相关文章

  1. 论文笔记之:Asynchronous Methods for Deep Reinforcement Learning

    Asynchronous Methods for Deep Reinforcement Learning ICML 2016 深度强化学习最近被人发现貌似不太稳定,有人提出很多改善的方法,这些方法有很 ...

  2. 论文笔记之:Playing Atari with Deep Reinforcement Learning

    Playing Atari with Deep Reinforcement Learning <Computer Science>, 2013 Abstract: 本文提出了一种深度学习方 ...

  3. 论文阅读之: Hierarchical Object Detection with Deep Reinforcement Learning

    Hierarchical Object Detection with Deep Reinforcement Learning NIPS 2016 WorkShop  Paper : https://a ...

  4. 【论文 PPT】 【转】Human-level control through deep reinforcement learning(DQN)

    最近在学习强化学习的东西,在网上发现了一个关于DQN讲解的PPT,感觉很是不错,这里做下记录,具体出处不详. ============================================= ...

  5. 深度强化学习介绍 【PPT】 Human-level control through deep reinforcement learning (DQN)

    这个是平时在实验室讲reinforcement learning 的时候用到PPT, 交期末作业.汇报都是一直用的这个,觉得比较不错,保存一下,也为分享,最早该PPT源于师弟汇报所做.

  6. github上DQN代码的环境搭建,及运行(Human-Level Control through Deep Reinforcement Learning)conda配置

    最近师弟在做DQN的实验,由于是强化学习方面的东西,正好和我现在的研究方向一样于是我便帮忙跑了跑实验,于是就有了今天的这个内容. 首先在github上进行搜寻,如下图: 发现第一个星数最多,而且远高于 ...

  7. 论文笔记之:Dueling Network Architectures for Deep Reinforcement Learning

    Dueling Network Architectures for Deep Reinforcement Learning ICML 2016 Best Paper 摘要:本文的贡献点主要是在 DQN ...

  8. 【资料总结】| Deep Reinforcement Learning 深度强化学习

    在机器学习中,我们经常会分类为有监督学习和无监督学习,但是尝尝会忽略一个重要的分支,强化学习.有监督学习和无监督学习非常好去区分,学习的目标,有无标签等都是区分标准.如果说监督学习的目标是预测,那么强 ...

  9. 论文笔记之:Active Object Localization with Deep Reinforcement Learning

    Active Object Localization with Deep Reinforcement Learning ICCV 2015 最近Deep Reinforcement Learning算 ...

随机推荐

  1. RSA原理说明

    长度,建议至少1024.模数n(常取默认65537)两边都要用. 指数e,和n一起就是公钥. 指数d,和n一起就是私钥. 质数p和q用于生成密钥对,然后就丢弃不公开. 一.密钥对的生成步骤 1.随机选 ...

  2. 【论文阅读】Sliding Line Point Regression for Shape Robust Scene Text Detection

    一.整体网络结构              二.细节                                      n=7,(7+7)*2+4=32个channel 三.结果       ...

  3. study mysql

    SELECT CONCAT(`_`.`drop_default`,`_`.`alter_default`,`_`.`update_default`) AS `sql` FROM ( -- 设置默认值 ...

  4. PHP消息队列实现及应用_慕课网学习

    https://blog.csdn.net/d_g_h/article/details/79643714 https://blog.csdn.net/tTU1EvLDeLFq5btqiK/articl ...

  5. Mantle 与Injection

    本来Injection可以本地打补丁实时修改代码,但是不知道Mantle的数据类为何不能打补丁,可能因为Mantle利用了很多运行时的技术吧.

  6. TempData["a"]多个Action方法之前共享数据

    ViewData["a"]只可以在自己视图的页面里被访问,但TempData["a"]可以多个Action方法之前共享数据,比如在 @{Html.RenderA ...

  7. linux lvs

  8. 如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?

    如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(2006-12-14 09:25:36) 与这个问题具有相同性质的其他描述还包括:如何 ...

  9. 通俗理解RxJS(一)

    自学 Rx 快有一个周了, 它非常适合处理复杂的异步场景.结合自己所学,决定写系列教程. 我认为, Rx 中强大的地方在于两处 管道思想,通过管道,我们订阅了数据的来源,并在数据源更新时响应 . 强大 ...

  10. <<Joint Deep Modeling of Users and Items Using Reviews for Recommendation>> 评论打分预测

    综述: 本文将 CNN 与 FM(Factorization Machine) 结合,基于评论文本来进行评分预测. 简介: 目前将神经网络应用推荐系统的研究工作中,有一类思路是把如CNN等神经网络作为 ...