具体是将卷积神经网络和Q Learning结合在一起。卷积神经网络的输入是原始图像数据(作为状态)输出则为每个动作对应的价值Value Function来估计未来的反馈Reward
在这篇文章中,还只是测试7个游戏,到了Nature的文章则测试了更多的游戏,并且取得了更好的效果
直接从高维的输入(比如视觉或听觉)来学习一个控制策略 是 RL增强学习的长期挑战。个人理解:这个问题是人工智能抽象出来的极其重要的子问题,因为人类都是通过视觉听觉触觉等感觉然后来学习一项技能,比如玩游戏,打篮球,洗碗等等。 解决这个问题的意义在于机器人不一定可以具有自我意识,但是却可以实现 机器人彻底代替重复性劳动 的愿景。
性能的好坏主要取决于特征提取的好坏
当前,深度学习已经在视觉,语音等领域取得突破性进展,根本的方法就是通过神经网络自动提取复杂特征。所以,很自然的我们会考虑一个问题:
增强学习能否收益于深度学习
答案当然是YES
从上面分析出增强学习要结合深度学习存在的三个问题:
确实,如果没有这篇文章的突破性创新,我们如何知道怎么解决这三个问题。这篇文章至少解决了前两个问题及部分解决了第三个问题。
使用Arcade Learning Environment 来训练Atari 2600 游戏。
- 目标:使用一个基于神经网络的agent来学习玩各种游戏,玩的越多越好。
- 输入:要求只输入图像数据和得分,和人类基本一样
- 输出: 控制动作
- 要求:对于不同游戏,网络的结构及顶层参数设定一样
要理解这篇文章,没有背景知识是很难的,虽然作者在这里介绍了一下RL的基本知识及Q-learning算法以及采用神经网络来代替Q矩阵的方法,但篇幅太短,没有基础很难理解。
核心就是几个公式:Q-learning ,用neural network的loss function,梯度公式。
有了这几个公式支撑,整个算法也就理解一半了。
关于背景知识这一块这里不进行分析了,之后专门进行介绍。
看到这里才知道实际上并不是Deepmind第一次将神经网络用于RL,TD-gammon使用了MLP(Multi-layer percetron)也就是一般的神经网络,一个隐藏层(hidden layer)来训练。并且将其应用到了玩backgammon游戏上取得了人类水平。但是很可惜的是,当时人们把算法用到其他游戏象棋围棋并不成功,导致人们认为TD-gammon算法只适用于backgammon这个特殊的例子,不具备通用性。
本质上,使用神经网络是为了模拟一个非线性的函数(value或者policy都行,比如flappy bird,设定它上升到一个高度下降这就是一个分段函数)。人们发现,将model-free的算法比如Q-learning与非线性函数拟合的方法(神经网络是一种)很容易导致Q-network发散。因此,大部分的工作就使用线性的函数拟合(linear function approximation),收敛性好。
显然不是Deepmind第一个想到把深度学习和增强学习结合在一起的。之前也有人尝试用深度神经网络来估计环境environment,估值函数value function或者policy策略。这实际上是三个Deep Learning与Reinforcement Learning结合的思路
并且结合Q-learning发散的问题也被Gradient temporal-difference 方法部分解决。(这个方法具体是神马还有待学习)
这些方法用在使用非线性来估计固定策略或者使用线性来估计一个控制策略还是证明可以收敛的。 但是这些方法还没有拓展到非线性控制nonlinear control。
这就是研究点!!!!
采用同样的loss function,但是使用RPROP(不懂)来更新参数,问题是采用batch update而不是sgd 需要更多的计算开销而且取决于数据集的大小。
采用deep autoencoder,也是使用visual input。但是不同的是,NFQ是把特征提取和增强学习分开进行的。先提取特征,再应用NFQ训练。
而Deepmind是End-to-End。学习的特征和最后的动作价值是直接关联的。也就是学习什么特征也是网络决定
使用它做增强学习研究之前就有,但采用的是线性函数估计和获取的视觉特征(linear function approximation and generic visual features) 总之之前是人工提取特征,降维。
HyperNEAT使用神经网络来代替一个策略,但不同游戏用不同的网络。
当前深度学习的方式核心在于采用大量的数据集,然后使用SGD进行权值的更新。所以,这里的目标就是将增强学习的算法连接到深度神经网络中,然后能直接输入RGB的原始图像,并使用SGD进行处理。
实际上TD-gammon的思路就是上面的思路,只是训练是直接获取experience样本进行训练,也就是on-policy。而关键是这个算法是20年前的了。所以,经过20年的硬件发展以及深度学习的发展,没有理由说无法在这上面取得突破。
相比于TD-gammon的在线学习方式,Deepmind使用了experience replay的技巧。简单的说就是建立一个经验池,把每次的经验都存起来,要训练的时候就 随机 的拿出一个样本来训练。这样就可以解决状态state相关的问题。以此同时,动作的选择采用常规的 ϵ -greedy policy。 就是小概率选择随机动作,大概率选择最优动作。
然后呢输入的历史数据不可能是随机长度,这里就采用固定长度的历史数据,比如deepmind使用的4帧图像作为一个状态输入。
整个算法就叫做Deep-Q-Learning。
算法就是如下了:
算法分析:
1. 训练分成M个episode,每个episode训练T次。我的理解就是比如玩游戏,一局是一个episode,一局里面有很多时间片,就训练多少次,次数不固定。重启新的episode主要是初始化state 作为新的第一个,而不是用上一局的最后的状态作为state输入。
2. 实际上每个循环分成两部分:一部分是输出动作并存储。一部分是随机从经验池里取出minibatch个transitions,然后计算target,根据loss function通过RMSProp更新参数。(minibatch是什么意思?)
3. 这里的算法我们可以看到,参数是一直更新的,而Nature的算法改进了,计算target用的是之前的参数。具体算法的变化等之后分析Nature的文章再说。
实际应用中,只存储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的数量有限。
具体的模型架构如下:
如何在训练的过程中估计训练的效果在RL上是个Challenge。毕竟不像监督学习,可以有training 和validation set。那么只能使用reward,或者说平均的reward来判定。也就是玩的好就是训练的好。
但是存在问题就是reward的噪声很大,因为很小的权值改变都将导致策略输出的巨大变化,从文章的途中可以看出:
以此同时,平均Q值的变化却是稳定的,这是必然的,因为每次的Target计算都是使用Q的最大值。:
而且很关键的是所有的实验都收敛了!!!
虽然没有理论支持为什么保证收敛,但是就是实现了,Deepmind的方法可以在一个稳定的状态下使用大规模的深度神经网络结合增强学习。
在敌人出现时,Q值上升,快消灭敌人时,Q值到顶峰,敌人消失,Q值回到正常水平。这说明Q值确实代表了整个复杂的状态。实际上到后面发现,整个神经网络可以同时跟踪多个图上的目标:
算法对比了。
- Sarsa算法。使用Sarsa算法学习一个线性的policy,采用手工获取的特征。
- Contingency算法。 采用和Sarsa相同的方法,但是通过学习部分屏幕的表达增强了特征。
上面的方法的特征提取都采用传统的图像处理方法比如背景减除。
总之就是特征提取方式落后。Deepmind的算法是原始输入计算机需要自己去detect物体。(直接解决了detection和tracking的问题)
以此同时,当然是对比人类的水平了。人类的得分是人类玩两小时的结果,反正是蛮高的。但deepmind的方法有几个超过人类
对比的列表就不复制了,总而言之就是方法好,原始输入,并且在使用 ϵ 为0.05的得分还比其他方法强。
这篇文章采用了一个全新的方法结合深度学习和增强学习,可以说是deep reinforcement learning的开山之作。采用stochastic minibatch updates以及experience replay的技巧。 效果很强,具有通用性。