论文笔记:Human-level control through deep reinforcement learning

Human-level control through deep reinforcement learning

论文链接:https://courses.cs.washington.edu/courses/cse571/16au/slides/dqn_nature.pdf

论文来源:Nature(还是第一次读nature上的论文)

论文摘要

强化学习的理论根植于心理学和行为学在智能体如何优化自己在环境中的控制行为的思想。但是,为了在接近现实的环境中成功的使用强化学习,智能体面临一个艰巨的任务:高效地从高位输入中获得表示,并用这些表示概括从过去地经历到新情况地映射。人类和其他动物可以通过增强学习和分层感知处理系统的协调组合来解决问题,前者已经通过大量的神经数据得到证明。强化学习已经在很多领域取得了成功,他们的应用局限于单一领域(特征可以手工提取)或低维状态的领域。我们在本文中使用在深度神经网络训练中的最新成果,构建了一个新颖的人工智能体,被称作deep Q-network,使用端对端的强化学习技术,可以直接从高维空间输入中学习到有效的策略。我们使用这个智能体在Atari 2600游戏中进行测试。我们显示,在只接受像素和得分作为输入的情况下,使用同样的网络和参数,我们的算法可以在各种游戏中超过过往所有的算法,而且取得了可以和职业选手相匹敌的成绩。这项工作弥合了高维感觉输入和动作之间的鸿沟,从而有了第一个能够在各种挑战性任务中学习卓越的人工智能智能体。 

论文目标

从摘要中可以看出,本文旨在解决强化学习的适应性的问题,使用CNN,构建一个可以适应不同任务,可以从高维空间直接学习行为的智能体。

论文最后的地方总结的比较清楚:

 在本文中,我们账目了一个单一架构的算法能够完成成功的学习到控制策略来操作某个范围内大量不同游戏,并且这种学习需要很少的先验知识,在学习过程中只接受像素作为输入,并且使用相同的算法,网络和架构以及超参数在每个游戏中,以及人类游戏者也需要的先验知识。为了和之前的工作作对比,我们的方法包含了“端到端”的强化学习算法,它使用了回报函数在facilitate value函数估计的环境中,利用卷积神经网络指向的突出特征方向改进自己的表现。这个思路在神经生物科学中可以找到证据,也就是在视觉回路中,回报信号在感知学习中可能会影响表现的特征。特别的,强化学习和深度学习架构的成功结合结合在很大程度上以来我们的延迟算法,它包含可以存储和显示表现最近经历的变换。汇聚性的证据表明了海马区可能支持生理上的事实,即一个在人类大脑中存在的过程,即在离线阶段(比如,散步休息的时候)大脑中存在一个时间压缩的回放,它可以提供一个推断的策略,通过这个策略值函数可以有效的升级,通过利用基本中枢再激活。



方法描述

首先,我们看强化学习的基本公式:

这个公式很容易理解,s代表当前环境,a代表行为,r代表奖励,我们当前要选择的行为要综合当前奖赏和未来奖赏,使其最大。

再看本文主要的创新点[论文解读]:

1.  针对传统强化学习出现的不稳定甚至偏差现象,本文提出两种方式来解决这种不稳定问题。

    a) 使用经验回放(experience replay)来去除观测值之间的相关性(removecorrelations),平滑数据分布(smooth over data distribution)并对数据进行随机抽样(randomover data).

    b) 对目标参数进行周期性更新(Q-learning updates),以减少动作值Q与目标值之间的相关性。

2.  用深度卷积神经网络(CNN)作为动作-值函数(action-value function)。利用卷积神经网络的层次特征表征及模拟生物机制的特点,通过观察状态s下的动作a,以折减系数γ计算出当前状态的value,最终的目标是最大化未来的累计奖励(maximize the cumulative future reward)。

在这里重点讲一下经验回放(experience replay)这个概念的来源以及它为什么能去除观测值之间的相关性。

在强化学习里面,针对reward的设计,通常有两种(1)只有完成某一个任务才给予奖励,否则没有奖励。(2)人为的定义一个奖励函数,比如让机器人到达一个目标,距离目标越近,奖励越高。但是(1)会导致智能体能得到的奖励的时候很少,很稀疏,从人类的角度来看,就是机器会特别“沮丧”,因为它大部分尝试都是无用功。(2)这种函数的设置则极其依赖人类的聪明才智,不够通用。

我们再来想人类这种生物是如何处理之前做过的事情的,而且会反思,并且每一次反思得出的结论可能是不一样的,这正所谓经验回放。把这个想法运用到DQN中,每一次做出动作,进入下一个状态,我不会马上用这个来训练我们的DQN,而是把其放入“经历池”中,每次从经历池中取出一部分数据,用作训练。这个样子我们就可以充分地利用数据,提高训练效率,另外,因为我们随机抽取数据,数据是基本上没有相关性的,因此训练更容易收敛。(在机器学习中我们通常假设数据是独立同分布的)。

上图是DQN的网络架构,最后输出操作(这个输入输出还是不够复杂)。

实验结果

上面的图是针对游戏的训练结果,可以看到最后的action value(Q)收敛的比较好,但是游戏的平均得分其实在每次迭代中差距还是蛮大的,感觉还是不够稳定。

原文中另一张图证明其水平超过了所有其他算法和在一部分游戏中打败了职业选手。

实现的细节

1. Preprocessing:以Atari游戏为实验对象,预处理操作主要降低输入的维度及对Atari模拟器(emulator)的一些处理。首先是对单帧输入进行编码,对每帧的每个像素去最大值,以消除部分图像的缺失;再者是提取通道Y的数据并将其调整为84×84大小。

2. Architecture:模型的总体结构是给定一个状态作为输入,输出值为该状态下的每个动作的Q值。模型具体结构可见论文中图1说明,在此不详细说明。整体思路是将预处理后的84×84图像作为输入,中间层以一些带ReLU为激活函数的卷积层组成,输出层是线性全连接层,输出每个动作所对应的Q值,有多少个动作就有多少个Q值。

3. Training Details:用Atari游戏来验证本文提出的DQN算法,只改变reward设置,将其修剪(clip)在-1到1之间。此外,实验中使用了batch size为32的RMSProp优化算法,以ε-greedy算法,ε为线性退火率(ε由1线性下降到0.1)训练模型。实验过程采用跳帧训练的技巧,即不是对每一帧数据都进行学习,而是跳过几帧相同动作的数据,这样能够避免冗余学习,减少内存的无效占用,达到高效学习的目的。最后,将训练完毕的DQN模型用于测试阶段,每次的初始状态都是随机选取的,这能够减少模型的过拟合程度。
 

感想

第一次读Nature上的文章,格式上确实和会议论文不大一样,没有什么introduction,related work,详尽的算法说明,而是从直觉上告诉你怎么做比较好,从原理上给你讲你为什么要这么做,顺手diss一下其他的方法,然后直接上实验,用一个特别新奇又有说服力的实验告诉你,我们的方法最强。

整体来讲,这篇文章讲的是比较清楚的。我们希望能找一个相对通用的方法去解决和强化学习有关的问题,而在输入比较复杂的情况下我们很难找到比较好的Q函数,那怎么解决呢?用CNN去拟合Q,下面的问题就是如何去拟合神经网络的参数,接下来就是经验回放之类的技巧,最后,一个实验展示方法的有效性,通用性。告诉你我们的方法厉害就厉害在一个网络,一种参数,40几个游戏,都能跑出不错的效果。

发布了85 篇原创文章 · 获赞 100 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/caozixuan98724/article/details/98240125