title: DQN(Deep Q Network)—(2)
date: 2021-05-08 11:41:04
tags:
- Python
- Reinforcement Learning
categories: 强化学习
续DQN
上图为整个神经网络的结构图,很明显可以看到神经网络包含2个网络结构—target_net和eval_net。
eval_net是一个实时神经网络,每次进行强化学习的过程,它的参数都会更新训练,所以它是一个实时神经网络。
target_net是一个延迟神经网络,它的网络结构和eval_net是一样的,但是参数更新相对于eval_net是延后的,例如可能在eval_net进行200次的更新后,target_net才更新一次,这一次更新就是将此时的eval_net的参数赋值给target_net。
关于神经网络训练的内容则需要查看其他资料。
Double DQN
由于DQN是一种基于Q learing的强化学习方法,那么在Q learning中存在着Qmax,Qmax会导致当前Q值得过估计(overestimate)。而Double DQN就是为了解决这个问题而提出来的。在实际问题中,如果你输出的DQN的Q值,你会发现,输出的Q值都十分大,这也就过估计导致的。
Double DQN 和 DQN的区别
我们知道DQN的神经网络部分看成一个最新神经网络(eval_net)和老神经网络(target_net),他们有相同的结构,但是内部的参数更新存在时差。所以它的Q现实部分是:
我们知道导致过估计的主要原因及时后面部分的Qmax,因为我们的神经网络预测Qmax本来就会有误差,每次也向着最大误差的Q现实进行改进神经网络,正式因为这个Qmax导致了过估计。所以Double DQN的办法就是引入另一个神经网络来打消一些最大误差的影响。而DQN中本来就有两个神经网络,我们可以利用其中一个神经网络。
对于Q估计的神经网络估计Q现实中Qmax(s_,a_)的最大动作值A,然后用这个被Q估计网络估计出的动作来选择Q现实中的Q(s_)。
简单来说,存在两个神经网络:eval_net(Q估计),target_net(Q现实):
对于DQN来说原本Q_next = max(Q_next(s_))
对于Double DQN则,Q_next = Q_next(s_,argmax(Q_eval(s_)))