文章目录
一、Double DQN(DDQN)
1、引出原因
DQN的Q-value往往是被高估的(即高出实际值),原因是Q值总是基于使得Q最大的action得出的。
上图为四个游戏的训练结果的对比。
橙色的锯齿线代表DQN估测的Q-value,橙色的直线代表DQN训练出来的policy实际中获得的Q-value。
蓝色的锯齿线代表Double DQN估测的Q-value,蓝色的直线代表Double DQN训练出来的policy实际中获得的Q-value。
可以得到两个结论:
- 从橙色的曲线和橙色的直线可以看出,DQN估测出来的Q-value,往往会高于实际中的Q-value (即,DQN的Q被高估了)
- 从橙色的直线和蓝色的直线可以看出,Double DQN训练出来的policy,一般会好过DQN训练出来的policy(即,DDQN训练效果更好)
2、DDQN基本原理
如下图所示,DDQN使用两个Q function(因此称为double), 一个用来选择行动action,另外一个用来计算Q值。
二、Dueling DQN
1、创新点
Dueling DQN的原理很简单——只对网络结构进行改变!
2、优势所在
Dueling DQN中,输出结果变成Q=V+A,因为有时候在某种state,无论做什么动作,对下一个state都没有多大的影响,所以将Q-function分解为两部分。比如,在一个好的state,无论做什么action,都能得到很高的value;在一个很差的state,无论做什么action,都只会得到一个很低的value。
下图展示了实际过程中,如何使A(s,a)的每一列的和都为0:
下图中V(s)的输出值为1,A(s,a)的输出值为{7,3,2}为了使A(s,a)的每一列的和都为0,可以使A(s,a)的每个数减去对应所在列的平均数,即{7,3,2}变成{3,-1,-2},此为Normalization的过程。
三、优先回放(Prioritized Experience Replay)
之前在buffer中sample数据去训练network的时候,是无差别地sample每一笔数据,就是说没有偏向于sample哪些数据。
这样做的不足是有些:有时候因为sample到的某一笔训练数据质量不好,造成
Q
(
s
t
,
a
t
)
Q(s_t,a_t)
Q(st,at)估测的值和
r
t
+
Q
(
s
t
+
1
,
a
t
+
1
)
r_t+Q(s_{t+1},a_{t+1})
rt+Q(st+1,at+1)的差距比较大(即TD error)。如果接下去还是无差别地sample每一笔数据,就会导致这些TD error比较大的情况没有得到更多更好的训练,就会导致Q network 在有些情况估值不准确。
所以使用Prioritized Reply后,对于那些会造成TD error的情况,就会倾向于sample更多相关的数据来训练network,使得network克服这个TD error。
(直白的说就是你应该在薄弱的地方投入更多的精力)
四、Multi-step: Combination of MC and TD
MC是计算的在s_t之后直到episode结束的所有reward,TD是计算 s t s_t st到 s t + 1 s_{t+1} st+1的reward。
Multi-step这个方法结合了MC和TD各自的特点,将TD改为计算
s
t
s_t
st到
s
t
+
n
s_{t+n}
st+n,即由原来跳到下一个状态,改为跳到之后n个状态。特殊的,直接跳到episode结束则变为MC方法。
五、Noisy Net
1、创新点——在参数上加noise
这个技术是为了改进exploration的。之前的exploration(epsilon greedy)是在action上做noise。而Noisy Net是在Q-function的参数上做noise。
注意:在每一个episode开始前,对Q-function的参数添加noise,用这个添加了noise的network去玩游戏,直到episode结束,才可以重新添加新的noise(同一场游戏,是同样的noise)。
2、优势
在action上加noise,会随机的试,即epsilon-greedy,就算给出同一个state s,也会做出不同的action,可能是按照Q-function的结果,也可能是以random得到的结果。这不符合实际的情况,因为实际上我们希望给出同一个state,都会做出同样的action。
而在Q-function的参数上加noise,会系统的试。因为在这个方法规定了只在一个episode开始前添加noise,不会在episode中途再增加noise,所以在episode中遇到同一个state都会做出同样的action。所以它是比较有系统地进行exploration。比如在一个episode中,遇到 S t S_t St状态都采取“向右”的action,在另一个episode遇到 S t S_t St状态都采取“向左”的action。
六、Distributional Q-function
1、提出原因——不同的分布可能有相同的mean
使用同一policy的actor在同一个state采取同一个action,得到的cumulated reward是不同的,因为后续state是具有随机性的。如果对它进行统计,会发现它是会呈现一个分布(distribution)。而Q-value就是这些分布取mean的结果。
这样做有一个不足就是:即便mean相同,但是可能实际的分布是完全不同的。然而因为Q-function只输出Q-value(即分布的mean),所以我们看不到实际的分布。
如下图所示,mean相同,分布却截然不同。
所以Distributional Q-function就是为了能够实现从输出Q-value变成输出Q-function的分布。
2、优势
左边为Q-function,右边为Distributional Q-function。
三种颜色代表三种action,每种action的几率加起来为1(注意并非总的为1)。
同一颜色不同柱子代表在同一state下采取同一action产生的reward落在分布里的几率。
具体来说,在绿色柱子里,5个柱子的X轴代表5种不同reward,Y轴代表在某一state采取某一action得到的reward落在此处的几率,绿色的五个加起来概率为1。
Distributional Q-function的好处:有了具体的分布,我们不仅可以从中挑选一个mean最大的动作之后(其实这一步不用Distributional Q-function也能做),还能进一步考虑哪个分布的方差最小,进一步降低不稳定的可能性。
目前虽然还是选mean最大的去执行,但是如果有两个mean差不多,就可以去选一个更稳定的去执行。
七、Rainbow
把前面所有的方法全部运用在一起就是Rainbow,可以看到最终效果还是很不错的。
其中,文章前面讲到的Multi-step可以看A3C当做参考,因为A3C中就有运用到 Multi-step 的技术。
下面这张图讲的是,在上面的Rainbow拿掉某一种技术后导致分数降低多少(比如绿色的线就是拿掉Dueling DQN技术)。
可以看到在拿掉Double DQN后几乎没有影响,是因为有使用Distribution Q-function的时候,一般就克服了DQN过估计(over estimate)reward的问题(而这正是Double DQN想解决的问题),甚至会出现略微低估(under estimate)reward的情况,所以使用Double DQN的效果就没有那么大。
Distribution Q-function之所以能解决过估计,是因为Distribution Q-function的输出是一个分布,而这个分布的X轴(即reward大小)是有一个区间的,假设这个区间是[-10,10],而这时过估计的reward为100,超出这个区间,就没有被记录到,所以就不会有过估计(over estimate)的情况发生。
参考:
https://blog.csdn.net/ACL_lihan/article/details/104056542
https://blog.csdn.net/cindy_1102/article/details/87907470