DQN
基础算法
网络结构
DQN与普通的Q-leaning的区别之一在于使用一个DCNN来近似Q(s,a),在论文中的一代目DQN中使用的是三个卷积层+两个全连接层
经验重放
另外一个区别在于利用了经验回放训练强化学习的学习过程,即一个经验池保存了 ( s , a , R , s ′ , d o n e ) (s,a,R,s',done) (s,a,R,s′,done)这一种五元组,之后训练时也从经验池中取出值进行训练。
训练神经网络时,存在的假设是训练数据是独立同分布的,但是通过强化学习采集的数据之间存在着关联性,利用这些数据进行顺序训练,神经网络不稳定。使用经验回放可以打破数据间的关联 —— TA说的
具体代码实现的时候只需要每次从经验池随机选取batch个五元组进行训练,并将结果再扔回经验池即可。
Nature DQN
原来的DQN是on-policy的,这样子会导致更新的时候关联性太高,难以收敛,详情可以去看DPG的论文。
所以我们使用两个网络来代替原来的网络,一直训练的predict网络和用于当作真实值的target网络(不改变参数),在训练一定轮次之后再更新target网络。
DDQN
DQN和Nature DQN都没有改变Q-learning本身的一个问题,那就是估值一定会大于真实值,主要原因在于更新Q值时取得max,所以最后提出了DDQN算法。
DDQN的定义是动作的选择与动作的评估分别用不同的值实现,使用 m a x a ′ Q ( s i ′ , a , θ ) max_{a'}Q(s_i',a,\theta) maxa′Q(si′,a,θ)得出使用的action,再用 y j = R j + γ Q ′ ( s j ′ , a , θ ) y_j=R_j+\gamma Q'(s_j',a,\theta) yj=Rj+γQ′(sj′,a,θ)得出动作a对应的值。
直接对比来说,Nature DQN使用target网络中所有action中最大的Q(s,a)最大的值来更新,而DDQN使用令predict网络中Q(s,a)最大的a在target网络中计算Q(s,a)。
Dueling DQN
Dueling DQN将输出的Q(s,a)改为A(s,a)与V(s)两个输出。
为什么这样子就会有提升呢?可以举一个例子,比如说打砖块,其实在球刚反弹上去的时候,大多情况下action是没有意义的(左移,右移,不动),重要的只有state本身。那么将action和state对Q(s,a)的影响尽可能分离开来,就能提升对Q(s,a)估计的表现