参考文章:强化学习(三):DQN、Nature DQN、Double DQN,附源码解读_wweweiweiweiwei的博客-CSDN博客
强化学习之DQN进阶的三大法宝(Pytorch)_dqnseg-CSDN博客
- Q现实的计算方法:DQN的Q现实计算方法是将新的状态直接输入老的神经网络,返回最大的Q值。而Double DQN的Q现实计算方法则是利用新的神经网络将新的状态输入,得到Q最大值的action,再将此action作为旧的神经网络选择Q值的纵坐标。
- Q_target的计算方法:DQN和Double DQN的Q_target计算方式也不同,具体来说,DQN会直接更新Q值,而Double DQN则不会立即更新Q值,而是将这个非目标值用于下一轮的目标值。
即采用了一种延迟更新方法。对于一个state选取当前Predict Q Network计算action,将此action带入Target Q Network计算Q值,再更新Q表
在DDQN中,second-level DQN(即目标网络)的更新主要是在一个单独的过程中进行的,而不是在每一步中实时更新。这个过程通常在每一定数量的步骤后进行一次,以避免网络的不稳定。
更新second-level DQN主要是比较eval_net的Q值和新状态的最大Q值。具体来说,当游戏进入一个新的状态s'时,second-level DQN会计算出这个状态的最大Q值,即目标Q值。这个目标Q值会被存储下来,并用于更新eval_net中对应行动的Q值。然而,second-level DQN本身并不直接进行更新。它的参数是在一个单独的过程中,通过比较eval_net的Q值和新状态的最大Q值来进行更新的。
具体来说,这个更新过程包括以下步骤:
- 存储目标Q值:当游戏进入一个新的状态s'时,second-level DQN会计算出这个状态的最大Q值,即目标Q值。这个目标Q值会被存储下来,用于之后的更新过程。
- 比较Q值:在一个单独的过程中,比较eval_net的Q值和新状态的最大Q值。这可以通过将新状态s'输入eval_net来得到eval_net的Q值。
- 更新second-level DQN参数:根据比较结果,更新second-level DQN的参数。具体来说,可以使用以下公式来更新second-level DQN的参数:
θ' = θ' + α * (θ - θ')
其中,θ'是second-level DQN的参数,θ是存储的目标Q值的均值,α是学习率。这个公式表示,second-level DQN的参数会被更新为当前参数加上一个误差项,这个误差项是当前参数与目标Q值的均值之间的差乘以学习率。
通过这样的更新过程,second-level DQN能够为eval_net提供更准确的目标Q值,从而帮助eval_net更好地学习游戏的最佳策略。同时,这种定期更新的方式也有助于保持网络的稳定性。
综上所述,本人对DDQN的理解为对于一个state先进行Q值计算,用该Q值eval_net得到action,再使用second-level DQN计算该action的Q来更新eval_net。最后n步后根据eval_net和second-level DQN更新second-level DQN。(不知道这样理解是否正确)