改进DQN算法 Double DQN算法 DuelingDQN算法

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

第 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+γamaxQω(s,a)

其中maxa′Qω−(s′,a′)max_{a'} Q_{\omega ^-}(s',a')maxaQω(s,a)由目标网络(参数为ω−\omega^-ω)计算得出,我们还可以将其写成如下形式:

Qω−(s′,argmaxa′Qω−(s′,a′))Q_{\omega ^-}(s',arg \underset {a'}{max}Q_{\omega^-}(s',a'))Qω(s,argamaxQω(s,a))

换句话说,max操作实际可以被拆解为两部分:首先选取状态s‘下的最优动作a∗=argmaxa′Qω−(s′,a′)a^*=arg max_{a'}Q_{\omega^-}(s',a')a=argmaxaQω(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')maxaQ(s,a)。具体做法是将原有的maxa′Qω−(s′,a′)max_{a'}Q_{\omega^-}(s',a')maxaQω(s,a)更改为Qω−(s′,argmaxa′Qω(s′,a′))Q_{\omega^-}(s',arg max _{a'}Q_\omega(s',a'))Qω(s,argmaxaQω(s,a)),即利用一套神经网络QωQ_\omegaQω的输出选取价值最大的动作,但在使用该动作的价值时,用另一套神经网络<

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值