DQN依靠其神经网络的梯度下降进行训练,所采用的损失值一般为eval_q和target_q之间的偏差,而Double DQN相较DQN的变化仅存在于target_q的计算方式,其余一概照搬。对于这种计算方式改变的意义此处做一个简单记录。
DQN与Double DQN的target_q计算方法如下:
对比一下不难发现,只有最后一项关于状态的计算不同。公式里面的
和
对应的是DQN用于决策和评估的两个网络(或许因为评估网络的权重间歇性更新,是决策网络的某个历史版本,因此带个减号),这两个参数填在Q函数里面表示此处使用哪个网络来进行计算。
在DQN中,关于的Q值计算方式为,使用评估网络
遍历所有action,计算各自对应的
后选取最大值。而在Double DQN中,使用决策网络
遍历所有action,找到对应
最大的那个,然后使用评估网络
来计算这个action所对应的Q值。对比起来就是,DQN中,
来给出最佳动作,然后
计算其Q值;Double DQN中,
给出最佳动作,然后
计算其Q值。所以Double DQN与DQN的不同其实可以总结为“关于下一时刻状态的最佳动作,是由决策网络来选还是评估网络来选”。
查资料的时候,关于Double DQN的作用说法基本为“抑制Q值的过度估计”。在网络训练初期,对于Q值计算尚不准确时,一味遍历取最大值,容易使target_q偏高,因为target_q是由reward和的q组成的,而
的q理论上又是由reward和
的q组成,以此类推,Q值的overestimate就会叠加,造成过高估计(例如此时网络对于某个action的Q值估计偏高,而由于不加限制的max方法,这个overestimation就被引进来了)。
的出现为的是参数固定,即解决梯度下降时目标值频繁变化造成难以收敛的问题,而参数固定带来的结果是
没有
那么新,在上文所述选择最佳动作时,没有
合理。因此使用
来更合理地选择动作,而使用
来计算Q值保证梯度下降目标值的稳定,就是Double DQN的效果。