Paper Reading 1 - Playing Atari with Deep Reinforcement Learning
来源:NIPS 2013
作者:DeepMind
理解基础:
- 增强学习基本知识
- 深度学习 特别是卷积神经网络的基本知识
创新点:第一个将深度学习模型与增强学习结合在一起从而成功地直接从高维的输入学习控制策略
详细是将卷积神经网络和Q Learning结合在一起。卷积神经网络的输入是原始图像数据(作为状态)输出则为每一个动作相应的价值Value Function来预计未来的反馈Reward
实验成果:使用同一个网络学习玩Atari 2600 游戏。在測试的7个游戏中6个超过了以往的方法而且好几个超过人类的水平。
在这篇文章中。还仅仅是測试7个游戏。到了Nature的文章则測试了很多其它的游戏。而且取得了更好的效果
长处:
- 算法具备通用性。一样的网络能够学习不同的游戏(当然,游戏具有类似性)
- 採用End-to-End的训练方式。无需人工提取Feature(比方游戏中敌人的位置等等)
- 通过不断的測试训练,能够实时生成无尽的样本用于有监督训练(Supervised Learning)
缺点:
- 由于输入的状态是短时的,所以仅仅适用于处理仅仅需短时记忆的问题,无法处理须要长时间经验的问题。
(比方玩超级玛丽)
- 使用CNN来训练不一定能够收敛,须要对网络的參数进行精良的设置才行。
改进办法:
- 使用LSTM 来增强记忆性?
- 改进Q-Learning的算法提高网络收敛能力。
详细分析
1 前言介绍 Introduction
提出问题:
直接从高维的输入(比方视觉或听觉)来学习一个控制策略 是 RL增强学习的长期挑战。个人理解:这个问题是人工智能抽象出来的极其重要的子问题。由于人类都是通过视觉听觉触觉等感觉然后来学习一项技能,比方玩游戏,打篮球,洗碗等等。 解决问题的意义在于机器人不一定能够具有自我意识,可是却能够实现 机器人彻底取代反复性劳动 的愿景。
以往的解决的方法:
- 人工提取特征(比方物体的位置)
- 使用线性的value function或者policy策略来表征
性能的好坏主要取决于特征提取的好坏
Deep Learning 带来的机会
当前。深度学习已经在视觉,语音等领域取得突破性进展。根本的方法就是通过神经网络自己主动提取复杂特征。所以,非常自然的我们会考虑一个问题:
增强学习是否能收益于深度学习
答案当然是YES
从RL看结合Deep Learning的困难之处
- 深度学习的成功依赖于大量的有标签的样本。从而进行有监督学习。
而增强学习仅仅有一个reward返回值,而且这个值还经常带有噪声,延迟,而且是稀少的(sparse)。理解是不可能每一个state给个reward。特别是延迟Delay,经常是几千毫秒之后再返回。
- 深度学习的样本都是独立的。而RL中的state状态却是相关的,前后的状态是有影响的。这显而易见。
- 深度学习的目标分布是固定的。一个图片是车就是车,不会变。但增强学习,分布却是一直变化的,比方超级玛丽,前面的场景和后面的场景不一样。可能前面的训练好了。后面又不行了,或者后面的训练好了前面又用不了了。
从上面分析出增强学习要结合深度学习存在的三个问题:
- 没有标签怎么办?
- 样本相关性太高怎么办?
- 目标分布不固定怎么办?
确实。假设没有这篇文章的突破性创新,我们怎样知道怎么解决这三个问题。
这篇文章至少攻克了前两个问题及部分攻克了第三个问题。
解决之道 CNN + Q-Learning = Deep Q Network
- 通过Q-Learning使用reward来构造标签
- 通过experience replay的方法来解决相关性及非静态分布问题
实验环境
使用Arcade Learning Environment 来训练Atari 2600 游戏。
- 目标:使用一个基于神经网络的agent来学习玩各种游戏。玩的越多越好。
- 输入:要求仅仅输入图像数据和得分。和人类基本一样
- 输出: 控制动作
- 要求:对于不同游戏。网络的结构及顶层參数设定一样
背景知识 Background
要理解这篇文章,没有背景知识是非常难的,尽管作者在这里介绍了一下RL的基本知识及Q-learning算法以及採用神经网络来取代Q矩阵的方法。但篇幅太短。没有基础非常难理解。
核心就是几个公式:Q-learning ,用neural network的loss function,梯度公式。
有了这几个公式支撑,整个算法也就理解一半了。
关于背景知识这一块这里不进行分析了,之后专门进行介绍。
相关工作 Related Work
TD-gammon
看到这里才知道实际上并非Deepmind第一次将神经网络用于RL,TD-gammon使用了MLP(Multi-layer percetron)也就是一般的神经网络,一个隐藏层(hidden layer)来训练。
而且将其应用到了玩backgammon游戏上取得了人类水平。
可是非常可惜的是,当时人们把算法用到其它游戏象棋围棋并不成功,导致人们觉得TD-gammon算法仅仅适用于backgammon这个特殊的样例,不具备通用性。
本质上,使用神经网络是为了模拟一个非线性的函数(value或者policy都行,比方flappy bird,设定它上升到一个高度下降这就是一个分段函数)。人们发现。将model-free的算法比方Q-learning与非线性函数拟合的方法(神经网络是一种)非常easy导致Q-network发散。因此。大部分的工作就使用线性的函数拟合(linear function approximation),收敛性好。
其它人
显然不是Deepmind第一个想到把深度学习和增强学习结合在一起的。之前也有人尝试用深度神经网络来预计环境environment,估值函数value function或者policy策略。
这实际上是三个Deep Learning与Reinforcement Learning结合的思路
而且结合Q-learning发散的问题也被Gradient temporal-difference 方法部分解决。(这种方法详细是神马还有待学习)
这些方法用在使用非线性来预计固定策略或者使用线性来预计一个控制策略还是证明能够收敛的。
可是这些方法还没有拓展到非线性控制nonlinear control。
这就是研究点!。!!
最相近的工作 NFQ
採用相同的loss function,可是使用RPROP(不懂)来更新參数,问题是採用batch update而不是sgd 须要很多其它的计算开销而且取决于数据集的大小。
採用deep autoencoder,也是使用visual input。可是不同的是。NFQ是把特征提取和增强学习分开进行的。
先提取特征。再应用NFQ训练。
而Deepmind是End-to-End。
学习的特征和最后的动作价值是直接关联的。也就是学习什么特征也是网络决定
关于Atari 2600 模拟器
使用它做增强学习研究之前就有。但採用的是线性函数预计和获取的视觉特征(linear function approximation and generic visual features) 总之之前是人工提取特征,降维。
HyperNEAT使用神经网络来取代一个策略。但不同游戏用不同的网络。
Deep reinforcement learning
目标
当前深度学习的方式核心在于採用大量的数据集。然后使用SGD进行权值的更新。所以,这里的目标就是将增强学习的算法连接到深度神经网络中。然后能直接输入RGB的原始图像。并使用SGD进行处理。
对照TD-gammon的改进之处
实际上TD-gammon的思路就是上面的思路。仅仅是训练是直接获取experience样本进行训练。也就是on-policy。而关键是这个算法是20年前的了。所以。经过20年的硬件发展以及深度学习的发展,没有理由说无法在这上面取得突破。
相比于TD-gammon的在线学习方式。Deepmind使用了experience replay的技巧。
简单的说就是建立一个经验池。把每次的经验都存起来。要训练的时候就 随机 的拿出一个样本来训练。这样就能够解决状态state相关的问题。
以此同一时候。动作的选择採用常规的ϵ-greedy policy。
就是小概率选择随机动作,大概率选择最优动作。
然后呢输入的历史数据不可能是随机长度,这里就採用固定长度的历史数据,比方deepmind使用的4帧图像作为一个状态输入。
整个算法就叫做Deep-Q-Learning。
Deep-Q-Learning
算法就是例如以下了:
算法分析:
1. 训练分成M个episode,每一个episode训练T次。我的理解就是比方玩游戏,一局是一个episode,一局里面有非常多时间片,就训练多少次,次数不固定。重新启动新的episode主要是初始化state 作为新的第一个,而不是用上一局的最后的状态作为state输入。
2. 实际上每一个循环分成两部分:一部分是输出动作并存储。
一部分是随机从经验池里取出minibatch个transitions,然后计算target。依据loss function通过RMSProp更新參数。(minibatch是什么意思?)
3. 这里的算法我们能够看到,參数是一直更新的。而Nature的算法改进了,计算target用的是之前的參数。详细算法的变化等之后分析Nature的文章再说。
算法长处对照standard online Q-learning
- 每一步的经验都能带来非常多权值的更新,拥有更高的数据效率(个人不是非常理解这作为一个长处,曾经的算法就没有吗?)
- 就是experience replay的优势。打破数据的相关性,减少数据更新的不确定性variance。
- experience replay的还有一个长处就是不easy陷入局部最优解或者更糟糕的不收敛。 假设是on-policy learning。也就是来一个新的经验就学一个。那么下一个动作就会受当前的影响。假设最大的动作是向左,那么就会一直向左。使用experience replay 获取的行为的分布就比較平均。就能防止大的波动和发散。也因此。这是一个off-policy的学习。
实际应用中。仅仅存储N个经验在经验池里(毕竟空间有限嘛)这种方法的局限性就是这个经验池并没有区分重要的转移transition,总是覆盖最新的transition。
所以,採用有优先级的使用memory是一个更好的方式。
这也就是阿蒙说的引导的经验池。
预处理与网络模型架构
由于输入是RGB,像素也高,因此,对图像进行初步的图像处理,变成灰度矩形84*84的图像作为输入,有利于卷积。
接下来就是模型的构建问题,毕竟Q(s,a)包括s和a。一种方法就是输入s和a。输出q值。这样并不方便,每一个a都须要forward一遍网络。
Deepmind的做法是神经网络仅仅输入s,输出则是每一个a相应的q。这样的做法的长处就是仅仅要输入s。forward前向传播一遍就能够获取全部a的q值,毕竟a的数量有限。
详细的模型架构例如以下:
实验
- 測试7个游戏
- 统一不同游戏的reward,正的为1。负的为-1。其它为0。这样做a,R的长处是限制误差的比例而且能够使用统一的训练速度来训练不同的游戏
- 使用RMSProp算法。就是minibatch gradient descent方法中的一种。Divide the gradient by a running average of its recent magnitude. 梯度下降有非常多种方法包括(SGD,Momenturn,NAG,Adagrad,Adadelta,Rmsprop) 相关问题以后再分析。
- ϵ-greedy 前1百万次从1 下降到0.1。然后保持不变。
这样一開始的时候就很多其它的是随机搜索,之后慢慢使用最优的方法。
- 使用frame-skipping technique,意思就是每k frame才运行一次动作,而不是每帧都运行。在实际的研究中,假设每帧都输出一个动作。那么频率就太高,基本上会导致失败。在这里,中间跳过的帧使用的动作为之前最后的动作。这和人类的行为是一致的,人类的反应时间仅仅有0.1,也是採用相同的做法。而且这样做能够提速明显的。那么这里Deepmind大部分是选择k=4。也就是每4帧输出一个动作。
训练
怎样在训练的过程中预计训练的效果在RL上是个Challenge。毕竟不像监督学习。能够有training 和validation set。那么仅仅能使用reward,或者说平均的reward来判定。也就是玩的好就是训练的好。
可是存在问题就是reward的噪声非常大,由于非常小的权值改变都将导致策略输出的巨大变化。从文章的途中能够看出:
以此同一时候。平均Q值的变化却是稳定的,这是必定的,由于每次的Target计算都是使用Q的最大值。
:
而且非常关键的是全部的实验都收敛了!!!
尽管没有理论支持为什么保证收敛。可是就是实现了。Deepmind的方法能够在一个稳定的状态下使用大规模的深度神经网络结合增强学习。
显示Value Function
就是看一下每一帧的Q值变化,看了之后答案是惊人的:
在敌人出现时,Q值上升。快消灭敌人时,Q值到顶峰。敌人消失,Q值回到正常水平。这说明Q值确实代表了整个复杂的状态。实际上到后面发现,整个神经网络能够同一时候跟踪多个图上的目标:
算法评估
算法对照了。
- Sarsa算法。使用Sarsa算法学习一个线性的policy,採用手工获取的特征。
- Contingency算法。 採用和Sarsa相同的方法。可是通过学习部分屏幕的表达增强了特征。
上面的方法的特征提取都採用传统的图像处理方法比方背景减除。
总之就是特征提取方式落后。Deepmind的算法是原始输入计算机须要自己去detect物体。(直接攻克了detection和tracking的问题)
以此同一时候。当然是对照人类的水平了。人类的得分是人类玩两小时的结果,反正是蛮高的。
但deepmind的方法有几个超过人类
对照的列表就不复制了,总而言之就是方法好,原始输入。而且在使用ϵ 为0.05的得分还比其它方法强。
总结Conclusion
这篇文章採用了一个全新的方法结合深度学习和增强学习,能够说是deep reinforcement learning的开山之作。
採用stochastic minibatch updates以及experience replay的技巧。 效果非常强,具有通用性。
Paper Reading 1 - Playing Atari with Deep Reinforcement Learning的更多相关文章
- 论文笔记之:Playing Atari with Deep Reinforcement Learning
Playing Atari with Deep Reinforcement Learning <Computer Science>, 2013 Abstract: 本文提出了一种深度学习方 ...
- Learning Roadmap of Deep Reinforcement Learning
1. 知乎上关于DQN入门的系列文章 1.1 DQN 从入门到放弃 DQN 从入门到放弃1 DQN与增强学习 DQN 从入门到放弃2 增强学习与MDP DQN 从入门到放弃3 价值函数与Bellman ...
- (转) Deep Reinforcement Learning: Playing a Racing Game
Byte Tank Posts Archive Deep Reinforcement Learning: Playing a Racing Game OCT 6TH, 2016 Agent playi ...
- [DQN] What is Deep Reinforcement Learning
已经成为DL中专门的一派,高大上的样子 Intro: MIT 6.S191 Lecture 6: Deep Reinforcement Learning Course: CS 294: Deep Re ...
- 深度强化学习(Deep Reinforcement Learning)入门:RL base & DQN-DDPG-A3C introduction
转自https://zhuanlan.zhihu.com/p/25239682 过去的一段时间在深度强化学习领域投入了不少精力,工作中也在应用DRL解决业务问题.子曰:温故而知新,在进一步深入研究和应 ...
- (zhuan) Deep Reinforcement Learning Papers
Deep Reinforcement Learning Papers A list of recent papers regarding deep reinforcement learning. Th ...
- 【资料总结】| Deep Reinforcement Learning 深度强化学习
在机器学习中,我们经常会分类为有监督学习和无监督学习,但是尝尝会忽略一个重要的分支,强化学习.有监督学习和无监督学习非常好去区分,学习的目标,有无标签等都是区分标准.如果说监督学习的目标是预测,那么强 ...
- 18 Issues in Current Deep Reinforcement Learning from ZhiHu
深度强化学习的18个关键问题 from: https://zhuanlan.zhihu.com/p/32153603 85 人赞了该文章 深度强化学习的问题在哪里?未来怎么走?哪些方面可以突破? 这两 ...
- Deep Reinforcement Learning 基础知识
Introduction 深度增强学习Deep Reinforcement Learning是将深度学习与增强学习结合起来从而实现从Perception感知到Action动作的端对端学习的一种全新的算 ...
随机推荐
- 统计个位数的数目 Exercise07_07
/** * @author 冰樱梦 * 时间:2018年下半年 * 题目:统计个位数的数目 * */ public class Exercise07_07 { public static void m ...
- mongo基础---增删改查
正文 MongoDB 是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB是一个介于关系型数据库和非关系数据库之间的产品,是非关系数据 ...
- [转]Spring Security 可动态授权RBAC权限模块实践
RBAC:基于角色的访问控制(Role-Based Access Control) 先在web.xml 中配置一个过滤器(必须在Struts的过滤器之前) <filter> <fil ...
- bash中的管道和重定向
管道 管道命令操作符是:”|”,它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandarderror 信息没有直接处理能力.然后,传递给下一 ...
- ECMAScript 6(ES6)常用语法
一:Let和const (1)Let定义块级作用域的变量,var定义的变量会提升.Let不会提升. 如下.var可以先用,打印是undefined但是let在定义之前是不能用的. 会报错Uncaug ...
- nginxtomca负载均衡
Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 ...
- Spring与Quartz的整合
Quartz Quartz是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制.Quartz允许开发人员根据时间间隔来调度作业.它实现了作业和触发器的多 ...
- XML-RPC 实现C++和C#交互
我们通常会面对这样的问题:整合不同平台或不同类库,这些类库可能来自不同的语言,甚至不同的操作系统. 如何解决这类棘手的问题呢? 一.方案介绍 解决不同语言交互的方法有不少,对我了解的windows系统 ...
- 非意外的PDB错误 OK(0)
用ib编项目会出现这个error 用vs重新编译全部 就没有问题 ib的设置改下 Visual Studio Builds--Advanced --PDB File Allocation Force ...
- JQuery选择器中的一些注意事项
1. 选择器中含有特殊符号的注意事项 1. 1 选择器中含有",","#","("或"]"等特殊字符 根据w3c的规定, ...