DQN 笔记 double DQN

1 DQN的问题

DQN 笔记 State-action Value Function(Q-function)_UQI-LIUWJ的博客-CSDN博客 中,我们知道DQN的学习目标是

DQN 笔记 double DQN

         但是,这个Q的值是被“高估”了的。因为每一次策略Π更新的时候,Π(s)都取的是最大的那个action,也即DQN 笔记 double DQN

        然而,实际网络环境中,由于每个状态都有一定的概率取不同的动作(policy-based network),所以实际的DQN 笔记 double DQN【reward小的那些action会“向下”拉低一些Q值】,也就是说,我们回归的目标值是“高估”了的

这是double-DQN paper里的图,可以形象地说明这个“高估” 

DQN 笔记 double DQN        这边有 4 个不同的小游戏,横轴是训练的时间,红色锯齿状一直在变的线就是 Q-function 对不同的状态估计出来的平均 Q 值。有很多不同的状态,每个状态都 sample 一下,然后算它们的 Q 值,把它们平均起来,得到这条红色锯齿状Q-function。

         这条红色锯齿状的线在训练的过程中会改变,但它是不断上升的。因为 Q-function 是取决于你的策略的。学习的过程中你的策略越来越强,你得到的 Q 值会越来越大。在同一个状态, 你得到 reward 的期望会越来越大,所以一般而言,这个值都是上升的,但这是 Q-network 估测出来的值。【所以为啥Alien那里会下降,我就不得而知了】

        接下来真的去玩那个游戏,玩很多次。然后真的去算,在某一个状态, 你会得到的 Q 值到底有多少。(红色直线)

        你会发现估测出来的值远比实际的值大,在每一个游戏都是这样,都大很多。这就是“高估”的效果

         就着这个图我们再看一下double DQN的效果。

        蓝色的锯齿状的线是 Double DQN 的 Q-network 所估测出来的 Q 值。

        蓝色的无锯齿状的线是真正的 Q 值,你会发现它们是比较接近的。

2 double DQN的原理

2.1 大体思想

DQN 笔记 double DQN

        在 Double DQN 里面,选动作的 Q-function 跟算值的 Q-function 不是同一个。

        在原来的 DQN 里面,你穷举所有的 a,把每一个 a 都带进去, 看哪一个 a 可以给你的 Q 值最高,那你就把那个 Q 值加上 rt​。但是在 Double DQN 里面,你有两个 Q-network:

  • 第一个 Q-network Q 决定哪一个动作的 Q 值最大(你把所有的 a 带入 Q 中,看看哪一个 Q 值最大)。
  • 你决定你的动作以后,你的 Q 值(也就是回归的目标值)是用 Q′ 算出来的。

        所以:

  • 假设第一个 Q-function 高估了它现在选出来的动作 a,只要第二个 Q-function Q′ 没有高估这个动作 a 的值,那你算出来的就还是正常的值。
  • 假设 Q′ 高估了某一个动作的值,那也没差,因为只要前面这个 Q 不要选那个动作出来就没事了,这个就是 Double DQN 神奇的地方。

2.2 Q 和Q'的选取

        使用DQN 笔记 State-action Value Function(Q-function)_UQI-LIUWJ的博客-CSDN博客 第三小节说的target network

        在实现上,你有两个 Q-network:目标的 Q-network 和你会更新的 Q-network。

        所以在 Double DQN 里面,你会拿你会更新参数的那个 Q-network 去选动作,然后你拿目标网络(固定住不动的网络)去算值

        Double DQN 相较于原来的 DQN 的更改是最少的,它几乎没有增加任何的运算量,连新的网络都不用,因为原来就有两个网络了。你唯一要做的事情只有,本来你在找 Q 值最大的 a 的时候,你是用fixed的 Q′ (目标网络) 来算【也就是说,我原来更新和找最大的a都是用Q’来求得的】。现在改成用另外一个会更新的 Q-network 来算最大的a,只用Q'来更新Q-function。

上一篇:Linux常见命令


下一篇:inception network(bottlle neck)