第 8 章 DQN 改进算法
8.1 简介
DQN算法敲开了深度强化学习的大门,但是作为先驱性的工作,其本身存在着一些问题以及一些可以改进的地方。于是,在DQN之后,学术界涌现了非常多的改进算法。本章将介绍其中两个非常著名的算法:Double DQN和Dueling DQN,这两个算法的实现非常简单,只需要在DQN的基础上稍加修改,它们能在一定程度上改善DQN的效果。
8.2 Double DQN
普通的DQN算法通常会导致对Q值的过高估计(overestimate)。传统DQN优化的TD误差目标为
r+γmaxa′Qω−(s′,a′) r+\gamma \underset {a'} {max}Q_{\omega -}\left( s',a' \right) r+γa′maxQω−(s′,a′)
其中maxa′Qω−(s′,a′)max_{a'} Q_{\omega ^-}(s',a')maxa′Qω−(s′,a′)由目标网络(参数为ω−\omega^-ω−)计算得出,我们还可以将其写成如下形式:
Qω−(s′,argmaxa′Qω−(s′,a′))Q_{\omega ^-}(s',arg \underset {a'}{max}Q_{\omega^-}(s',a'))Qω−(s′,arga′maxQω−(s′,a′))
换句话说,max操作实际可以被拆解为两部分:首先选取状态s‘下的最优动作a∗=argmaxa′Qω−(s′,a′)a^*=arg max_{a'}Q_{\omega^-}(s',a')a∗=argmaxa′Qω−(s′,a′),接着计算该做动作对应的价值Qω−(s′,a∗)Q_{\omega^-}(s',a^*)Qω−(s′,a∗)。当这两部分采用同一套Q网络进行计算时,每次得到的都是神经网络当前估算的所有动作价值中的最大值。考虑到通过神经网络估算Q值本身在某些时候会产生正向或负向的误差,在DQN的更新方式下神经网络会将正向误差累积。例如,我们考虑一个特殊情形:在状态s‘下所有动作的Q值均为0,即Q(s′,ai)=0,∀iQ(s',a_i)=0,\forall i Q(s′,ai)=0,∀i,此时正确的更新目标应该是r+0=rr+0=rr+0=r,但是由于神经网络拟合的误差通常会出现某些动作的估算有正误差的情况,即存在某个动作a’有Q(s′,a′)>0Q(s',a')>0Q(s′,a′)>0,此时我们的更新目标出现了过高估计,r+γmaxQ>r+0r+\gamma max Q>r+0r+γmaxQ>r+0。因此,当我们用DQN的更新公式进行更新时,Q(s,a)Q(s,a)Q(s,a)也就会被过高估计了。同理,我们拿这个Q(s,a)Q(s,a)Q(s,a)来作为更新目标来更新上一步的Q值时,同样会被过高估计,这样的误差将会累积。对于动作空间较大的任务,DQN中的过高估计问题非常严重,造成DQN无法有效工作的后果。
为了解决这一问题,Doube DQN算法提出利用两个独立训练的神经网络估算maxa′Q∗(s′,a′)max_{a'}Q_*(s',a')maxa′Q∗(s′,a′)。具体做法是将原有的maxa′Qω−(s′,a′)max_{a'}Q_{\omega^-}(s',a')maxa′Qω−(s′,a′)更改为Qω−(s′,argmaxa′Qω(s′,a′))Q_{\omega^-}(s',arg max _{a'}Q_\omega(s',a'))Qω−(s′,argmaxa′Qω(s′,a′)),即利用一套神经网络QωQ_\omegaQω的输出选取价值最大的动作,但在使用该动作的价值时,用另一套神经网络<
DQN改进算法:Double DQN与Dueling DQN

本文介绍了DQN的两个改进算法Double DQN和Dueling DQN。Double DQN利用两个独立训练的神经网络估算Q值,解决了DQN中Q值过高估计的问题;Dueling DQN将状态价值函数和优势函数分别建模,能更高效学习状态价值函数,在动作空间较大的环境下表现更好。
最低0.47元/天 解锁文章
947

被折叠的 条评论
为什么被折叠?



