深度强化学习DQN实现细节,入门深度强化学习

本文主要讲解深度强化学习的开山之作,文献[1,2].

        本文主要由学习“深度之眼强化学习中Alex老师的课”总结得出,Alex老师是我目前觉得把强化学习讲的最好的老师,没有之一,感谢Alex老师。主要参看文献为:[1]Playing Atari with Deep Reinforcement Learning 2013和[2]Human-level control through deep reinforcement learning 2015(是对上一篇的改进,发表在正儿八经的Nature),它们均出自谷歌的DeepMind,alpha go出自他们之手,有兴趣的同学自行下载。

        读懂本文需要一定的强化学习预备很基础的知识,上B站找个视频看看就会了的那一种。

一、强化学习->深度强化学习

      由于强化学习没有找到好的方法进行状态的缩减表示,所以导致强化学习热度下降(通过谷歌趋势获得),在2010年左右到达低谷,如图1所示。在传统强化学习中需要确定一个Q_table(如图2)指导决策,如每次在给定当前状态s_i这一行下选取值最大的数,得出数对应的动作a_j,该动作就位agent(智能体)当下要执行的动作。当状态s和动作a数量增大的时候,Q_table的的计算复杂度指数增长。


图1 强化学习关键字的geogle trend
图2 Q_table

        为了解决进行状态的缩减表示问题,当时主要的研究方法是使用人工设计的特征,结合线性函数拟合value function(用来估计Q_table中的值,也叫Q function)。因为非线性难以收敛。人工设计特征往往只能找到一些比较表面的特征,能以挖掘深层次的特征。

        终于,在2013年DeepMind团队提出Deep Q-Network[1](后边简称DQN),在多个游戏上实现对人类的超越。是第一篇成功结合深度学习和强化学习的研究成果,让强化学习不借助人工设计的特征,并使用非线性函数拟合value function(用来估计Q_table中的值,也叫Q function),即神经网络的输入是状态s输出的是各个动作的价值,使用DQN代替Q_table。在当时这片的论文的具有很大的意义,使得一部分研究者看到深度学习和强化学习结合的潜力,但是通过图1,我们还是可以看到当时对强化学习关注的人还不是很多。真正关注的人变多了还是得等到2016年,我猜是因为当时的alpha go下围棋赢了的事,才引起大家的重视。话不多说,进入主题:

二、数据预处理实现细节

1、图像部分:

        我们的目的使用深度强化学习打Artri小游戏,首先我们需要对获取的游戏界面进行处理(当然也有直接使用RAN,不是面对游戏的图像进行的方式。为了模拟人类,我们还是采用游戏图像进行训练)。图像预处理的主要目的是减少数据量,提高运算效率。预处理过程主要包括几部分:Grayscale(将彩图压缩成灰度图),Down-sampling(降低采样),Cropping(裁剪),remove background(去背景)。

(1)Grayscale(将彩图压缩成灰度图):将RGB三个信道的值加起来,取平均值。将平均值作为灰度值,因此图片变成只有灰度单信道。很是简单粗暴。

(2)Down-sampling(降低采样):简单理解就是每隔几个像素点取一个,文献[1,2]中是将原本210×160的输入压缩为110×84。

(3)Cropping(裁剪):裁剪一个游戏界面里边真正和打游戏有关的中心区域,在文献[1,2]中裁剪区域为最终大小为84×84。

(4)remove background(去背景):把(3)中得到的所有值除以256,所有像素点都减去背景颜色除以256的值,具体的例如在玩游戏“Pong-v0”时的背景颜色灰度值为90/256。我个人是这么觉得其实完全可以做个统计背景颜色(上边的90),出现概率最高的值肯定就是背景颜色的值,杆精的话就当我没说这句话。

2、游戏部分

       游戏部分的预处理主要包括两部分:key Frame和Reward Clipping。

(1)key Frame:游戏中时序上相邻的多帧图像之间是存在很强的相关性或者说很相似,我们没有必要对每帧图像都进行处理。所以文献[1]采用的固定间隔采用的方式,获取图像,图像称为Frame,这个方式称为key Frame。

(2)Reward Clipping:毕竟是要用这个方法玩几个游戏,为了提高这个深度强化学习方法的通用性,将所有的reward简化为+1,-1,和0。因为不同游戏的得分(reward)不一样。最后他有一个洋气的名:Reward Clipping。

三、Replay Buffer介绍(是关键)

       回放机制(Experience Replay)从1992年被提出,现在得到发扬光大。训练时,从Replay Buffer中随机抽样进行训练。Replay Buffer是什么?Replay Buffer就是存储很多个transition的地方。transition又是什么?一个ransition指一组(state、action、reward、next_state)数据。开始正题,使用Replay Buffer的:

(1)原理:存储过去遇到的transition、忘记过去太久的transition(说白了就是用一个定长的活动窗口存储transition)。训练时,从Replay Buffer中随机抽样进行训练。

(2)条件:存储的transition数量要合适。

(3)优势:满足DQN训练数据需要独立同分布(深度学习训练集要求独立同分布而游戏过程中的图像从时序上有具有强相关性,故采用从relpay buffer中随机抽样进行克服,使得抽样后的数据相互独立。这个是深读学习和强化学习结合最关键因素);“记忆”一段时间内的transition训练数据更平稳;可重复多次采样,提高数据利用。

四、实现细节

1、DQN论文中的网络结构:

图3 文献[1]的DQN网络结构
图4 文献[2]的DQN网络结构

2、网络训练时数据集的“Lable”计算

        要知道具体细节还是得看下边的伪代码和源码对应的思维导图,相信只要写过代码的都能看懂,现在给出更新方法的核心公式,确定Lable的公式。Q为网络,文献[2]中是两个Q网络,一个称为主网络Q、一个称为目标网络(Q上加个^)。y为label的值,对应与神经网络输出中最大的action_value;r 为收益(reward);a'为在下一个状态Φ_(j+1)能取得最大值的动作;Φ表示状态(state);θ为网络参数。

    捋一下,transition为网络输入,下边两条公式是网络输出对应的目标:Lable。

    至于怎么去求loss,作者用的是均方误差,优化方法是动能法吧,起码在Alex老师的源码里边是这样。


图5 DQN训练用到Lable计算方式

3、算法伪代码

       我就直接贴出来了,要用心看才行,是在还是很多疑问可以通过下一部分Alex老师源码的思维导图进行补充。

图6 文献[1]的伪代码


图7 文献[2]的伪代码

4、源码思维导图

        源码为Alex老师关于文献[2]的源码,我看完源码字后,画了个思维导图。我觉得看导图更容易看懂和理清逻辑。由于对源码作者尊重,若要源码或者其他相关资料,可以私信,只能用于学术交流。我觉得通过源码的思维导图,应该可以完全看懂整个深度强化学习的细节,语法问题自行百度即可,我觉得逻辑足够清晰。

train_visual.py文件中包括定义了两个函数main()和train(),main()为训练的程序入口,train()为一些训练细节。文件agent.py中定义了智能体的类:class Agent(...),包括类中的各个变量和智能体训练过程对执行动作的决策Agent.act(state),DQN主网络Q的学习Agent.learn(),对目标网络Q(上边加^)的更新soft_update(tau)等重要操作。nerworks.pyclass Visual_Q_Network()


图8 Alex老师关于文献[2]源码的思维导图

五、总结和展望

        分别从深度强化学习产生原因,数据预处理,replay buffer,训练的核心(lable)、源码思维导图等实现细节方面,对深度强化学习开山之作[1,2]进行分享关于实验结果就不贴图了,没啥意思,就是很多种游戏玩的比人好,有一些也玩的不好,文献[2]比文献[1],有很大提升。有兴趣的话,可以都手撕实现一下。有什么疑惑的,强烈建议先多看看上边的思维导图,强烈建议,问题应该会迎刃而解。通过写这个把这几天看的东西整理了一遍,感觉又很好的复习了一遍,这是我第二篇简书,手敲不易啊。文章当然肯定还存在许多的不足和个人不准确观点,还请批评指正。有什么问题和意见建议欢迎留言或者通过其他方式交流。DeepMind团队已经做到根据基因序列预测蛋白质结构,一起追逐大佬的脚步吧!

参考文献:

[1] Mnih V , Kavukcuoglu K , Silver D , et al. Playing Atari with Deep Reinforcement Learning[J]. Computer Science, 2013.

[2]Volodymyr M , Koray K , David S , et al. Human-level control through deep reinforcement learning[J]. Nature, 2015.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,454评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,553评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,921评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,648评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,770评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,950评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,090评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,817评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,275评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,592评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,724评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,409评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,052评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,815评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,043评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,503评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,627评论 2 350

推荐阅读更多精彩内容