笔记——“Human-level control through deep reinforcement learning”

来源:互联网 发布:手机网络不卡玩游戏卡 编辑:程序博客网 时间:2024/05/17 22:02

最近读了nature2015年的文章“Human-level control through deep reinforcement learning”,这是做的一点笔记,备忘而已。

通过深度强化学习实现人类水平的控制

Agents面对一个很难的任务:他们必须从高维度的感知输入中提取出环境的高效描述。而人和动物处理这个问题却是通过强化学习和有层次的感觉处理系统的结合。过去的强化学习只能用在有用特征可以被人为制作的场合,或者是用在全部可观测、低维的状态空间下。本文提出了一种deep Q-network,他可以直接从高维感知输入中学习成功的策略,通过使用端对端强化学习。而且在Atari游戏中经过了验证,只输入原始像素和游戏的得分,该算法的效果好过之前所有的算法,并且达到了人类专业玩家的水平。

DQN是将强化学习和深度神经网络结合起来,深度神经网络具有从裸数据中提取特征的能力。

我们使用深度卷积神经网络来近似最优动作-状态函数。但是,使用非线性函数近似器比如神经网络来近似动作-值函数时,强化学习会不稳定甚至出现偏差。这种不稳定有几个原因:观察值之间具有相关性,Q值的微小变动会很大地改变策略,从而改变数据分布,改变动作值(Q)与目标值r+γmaxaQ(s,a))之间的关联性。我们用了两个方式来解决这种不稳定性。首先,我们使用experience replay来打乱观测值之间的相关性,并且平滑数据分布的变化。第二,将目标值的参数周期性更新,这样减小Q值与目标值之间的相关性。

我们使用深度卷积神经网络来近似值函数Q(s,a;θi),其中θi是迭代第i步的神经网络参数。对于experience replay,我们在每一个时间步t存储经验et=(st,at,rt,st+1)到一个数据集Dt=e1,,et中。进行学习的时候,我们从经验中随机抽取样本(s,a,r,s)U(D)进行Q-learning更新。在第i次迭代中,Q-learning更新使用如下的损失函数:

Li(θi)=E(s,a,r,s)U(D)[(r+γmaxQ(s,a;θi)Q(s,a;θi))2]

其中,γ是折扣因素,决定智能体的视野,θi是第i次迭代时Q-网络的参数,θi是第i次迭代时用于计算目标值得网络参数。目标网络参数θi每隔C步用Q-网络的参数θi来更新,期间保持不变。

借用Atari游戏平台(49种游戏)来验证我们的算法。我们使用相同的网络结构,相同的超参数值,和相同的学习程序,(输入高维数据210×160的彩色录像,60hz),来证明我们的方法在不同的平台下都鲁棒地学习到了成功的策略。

方法
预处理:
由于该算法是直接处理Atari游戏的裸数据,一帧是210×160个像素点,128色,数据量非常大,对计算能力和记忆存储量提出了很高的要求。我们提前进行预处理是为了减低输入量的维度和对Atari仿真器进行一些处理。首先,对单帧进行编码,对每个像素的颜色值取最大值(在已编码的帧和之前的帧中,比如m帧,m=4,m也可以设为3或5),这样可以消除由于闪烁造成的部分图像的缺失。第二部,我们从RGB帧中提取Y通道的数据(即亮度数据)并重新调整为84×84的数据。

模型结构:
我们使用的结构是,输入状态,输出该状态下每个动作的Q值。
结构图如图1所示。其中神经网络的输入是由预处理之后的结果—84×84×4的图像;第一层隐含层包括32个8×8的滤波器,步幅是4,后面跟一个非线性整流器(a rectifier nonlinearity);第二层隐含层包括64个4×4的滤波器,步幅是2,后面加一个非线性整流器;第三层隐含层包括64个3×3的滤波器,步幅是1,后面跟一个整流器;最后一个隐含层是全连接,包含512个整流单元;输出层是线性全连接层,输出的个数是action的个数。

训练细节:
在Atari游戏中检验DQN算法时,网络结构、学习算法和超参数的设定都没有变,唯一变得是reward,并且将reward值修剪在-1~1之间。
在这个实验中,我们使用了RMSProp算法,最小的学习步数是32,策略是ε-greedy算法,在前一百万帧数据中,ε从1线性下降到0.1,之后保持固定不变。我们一共训练了大约5千万帧数据,记忆库的容量是一百万帧。
本实验借用了之前训练Atari算法时的技巧,使用了跳帧技巧,即不是每一帧都看、选择动作、学习,而是跳过几帧,在这跳过的几帧中选取的动作跟这几帧之前的动作相同。
DQN算法中所采用的超参数的数值见extended data table1。

评价程序:
策略为ε-greedy,其中ε=0.05,用训练好的DQN参数来进行测试,玩每个游戏30遍,每遍最长5分钟,每次的初始状态都是随机取。评价的目的是为了减少过拟合的程度。

*待做:
1、该文章的代码需要验证。*

阅读全文
0 0
原创粉丝点击