迷雾探险7 | DQN笔记

2018-12-27  本文已影响25人  臻甄

这一节继续跟着莫大神的教程走,记录一些笔记。

详细文档可以直接移步莫大神的社区:https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/

DQN

论文:《Playing Atari with Deep Reinforcement Learning》19 Dec 2013

Deep Q Network:实际就是Q-learning集合神经网络的方法。Google Deep mind 团队就是靠着这 DQN 使计算机玩电动玩得比我们还厉害。

为了更好的了解DQN,我把莫大神关于神经网络的教程又扫了一遍(还含有TensorFlow的使用教程,超棒!):https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/
浅显的概括一下,神经网络就是通过各种类似神经网络的计算结构的算法,通过不断的调参之后,可以想想神经网络是一个黑盒子,对于预期的输入,可以得到预期的输出。类似y=bx+c,神经网络就是把b和c的参数调出来,对于输入的x都可以计算出y(这种比喻可能不恰当,但对于我来说足够生动形象了。。。)

传统的强化学习比如Q-learning使用查表的方法来进行决策,很容易让表格规模爆炸。而神经网络的作用就是代替这张表格,通过训练神经网络里的少量参数,可以直接从state+action输出下一个state的值,或者是输出所有state对应的Q值,然后再用Q-learning做决策。 DQN代替Q-learning.png DQN的工作原理如下: DQN-工作原理.png

而使用两种方法可以使得DQN变得更强大。在更新Q值的时候,取一些之前的经历进行学习. 这种做法打乱了经历之间的相关性, 也使得神经网络更新更有效率.

DQN-Fixed-Q-targets.png

需要的别注意的是:DQN更新Q值的时候,需要根据Q估计对应的action反向传递回去更新该action,而Q现实不一定选了这个action,两个action不一样,需要注意一下。

因为以前更新Q值是针对(state, action)对应的某个Q值更新,而DQN拟合了一个state对应的所有action的Q值,是一个向量,再更新Q值的时候需要注意是哪个action对应的误差,再做反向传递。

有人做了更通俗的解释,就是拿Q_target中最大的action对应的Q值,去减去Q_eval中对应值的位置,而这两个值可能位置不一样,可能需要移位对应好再相减。

Double DQN

论文:《Deep Reinforcement Learning with Double Q-learning》18 Nov 2015

一句话概括, DQN 基于 Q-learning, Q-Learning 中有 Qmax, Qmax 会导致 Q现实 当中的过估计 (overestimate). 而 Double DQN 就是用来解决过估计的. 在实际问题中, 如果你输出你的 DQN 的 Q 值, 可能就会发现, Q 值都超级大. 这就是出现了 overestimate.

为什么会overestimate呢?因为DQN中把Qmax作为Q现实的一部分了,而Q_max本来就是有误差的,输入神经网络之后很容易放大误差。

改动在于:两个神经网络: Q_eval(Q估计中的), Q_next (Q现实中的).

总结一下:用Q估计的神经网络估计Q现实Qmax(s', a')的最大动作值. 然后用这个被Q估计估计出来的动作来选择Q现实中的Q(s').

DQN with Prioritized Replay

论文:《Prioritized Experience Replay》22 Sep 2015

当正负样本数量相差很大,比如MountainCar的例子,只有很少的情况才能按到reward,其他时候都是无奖励,这就会导致传统的DQN会训练很长很长的时间。DQN with Prioritized Replay正是为了加速这种情况下的训练速度。它会重视这种少量的, 但值得学习的样本。

算法重点就在我们 batch 抽样的时候并不是随机抽样, 而是按照 Memory 中的样本优先级来抽. 所以这能更有效地找到我们需要学习的样本。

样本的优先级定义方式:TD-error=Q现实 - Q估计的大小。
加速优先级排序方式:使用SumTree算法。

Dueling DQN

论文:《Dueling Network Architectures for Deep Reinforcement Learning》20 Nov 2015

目的:稍稍修改 DQN 中神经网络的结构, 就能大幅提升学习效果, 加速收敛。
一句话概括:将每个动作的 Q 拆分成了 state 的 Value 加上 每个动作的 Advantage.
具体的不同见莫烦关于Dueling DQN的介绍

上一篇下一篇

猜你喜欢

热点阅读