强化学习之DQN进阶的三大法宝(Pytorch)

本文探讨了DQN算法及三大优化技术DDQN、PER、DuelingDQN,通过理论与实验证明了它们在强化学习任务中的效果,包括消除过估计、加速收敛和增加探索效率。

三大法宝:

①:DDQN:改变Nature DQN中TD目标值中a'的产生方式。

②:Prioritized experience reply:改变从经验池采样的方式。

③:Dueling DQN:改变网络结构

本文将通过理论+实战结合的方式总结DQN与三大法宝的功能。

为了阐述清楚三种方式的各自优势:实战部分不选用NIPS DQN作为基础网络,而是用Nature DQN(后面简称DQN)。分别探索:

DQN vs DDQN:DDQN的功能

DQN vs DQN_PER :PER的功能

DQN vs Dueling DQN:改进版网络的功能

DQN vs DDQN_PER_Dueling DQN:组合的功效


一:理论部分:

1.1、DQN

1.2、DDQN

1.3、Prioritized experience reply(PER) 

1.4、Dueling DQN 

1.1、DQN:

DQN是基于Q-learning算法,结合神经网络来做值函数近似的算法,用于解决Q-learning难以适用于连续状态以及繁多状态下搜索困难、存储苦难的问题。

1.1.1、首先来一波论文率先提出的伪代码:(下图是2013年提出的第一代NIPS DQN,2015年在原有基础上增加了Target-Q-network,就是下面翻译部分)

1.1.2、翻译:(2015年Nature DQN算法)

1、初始化参数N(记忆库),学习率lr,\epsilon贪心策略中的\epsilon,衰减参数\gamma,更新步伐C

2、初始化记忆库D

3、初始化网络Net(本实验选择一个2层的网络,其中隐藏层为50个神经元的FC层),将参数W和W_指定为服从均值为0,方差为0.01高斯分布,并例化出2个相同的网络eval_net(以下简称Q1)和target_net(以下简称Q2)。

4、for episode in range(M):

5、     初始化状态observation

6、     for step in range(T):

7、            通过\epsilon贪心策略选中下个动作action,其中Q(s, a)来自于eval_net的前向推理。

8、            通过环境的反馈获得observation'以及奖励值reward。

9、            将observation、observation'、action、reward打包存入记忆库D中。

10、          当记忆库存满之后,抽取batch个大小的数据(sj, sj', aj, rj)送入2个网络中

11、          以损失函数L =  \frac{1}{batch}*\sum_{j=1}^{batch}( rj + \gamma * max(Q2(sj';W_)) - Q1(sj,aj;W))^2 进行训练

12、          每隔C步,更新target_net的参数W_ = W

 

下面这张博主画的图可以很好实现上述的伪代码过程:

 

1.1.3、DQN提出的原因:

Q-learning算法,使用Q表来存储动作状态值函数,通过不断尝试来更新Q表,最终达到收敛,找到了最优策略。但是其缺陷在于Q表的容量和搜索范围,当一个任务的状态数目贼多,比如围棋、图像,那么对Q表的存储量是个考验,此外,搜索也是个问题。另一方面,若任务的状态值是个连续值,比如接下去的小车位置、速度,Q表是不够用的。因此需要用值函数近似的方法,用一个非线性函数去拟合动作状态值函数,达到升级版Q表的角色。拟合这件事neual network就很擅长,输入是个状态,输出则是状态对应的各个动作的值,这不就相当于是Q表了吗,并且nn不怕你输入繁多的状态,也不怕你输入是连续值,故Q-learning将Q值存储的方式改成神经网络,那么DQN初步就形成了。当然DQN强大的原因,并不在于此。

1.1.4、DQN强大的原因:

二大优势:经验回放池 + Target-Q网络

1.1.4.1、引入经验池:就是用一个二维数组将过去的样本存储起来,供之后网络训练用,具体来说,经验池的引入:

a、首先Q-learning为off-policy算法(异策略算法,Sarsa为同策略,on-policy算法),也就是说,其生成样本<s,s_,r,a>的策略值函数更新的策略不一样,生成策略是\epsilon-greedy 策略,值函数更新的策略为原始策略。故可以学习以往的、当前的、别人的样本。而经验池放的就是过去的样本,或者说过去的经验、记忆。一方面,和人类学习知识依靠于过去以往的记忆相吻合,另一方面,随机加入过去的经验会让nn更加有效率。

b、打乱样本之间的时间相关性。回顾nn中输入样本之间是无关的(除了RNN比较特殊),随机性抽取有利于消除输出结果对时间连续的偏好。

c、每次抽取batch个数据正适合nn的前向和后向传播。

 

1.1.4.2、引入Target-Q-network

a、这个网络的输出通过取max,乘以\gamma,加上reward,作为标签y。这是由于Q-learning是值迭代算法,r + \gamma * max(Q2(s_,a')是target Q,与Q-learning一样,DQN用这个作为标签,让Q(s,a)去无限接近标签,从而找到最优策略。

b、延迟更新网络。第一代的NIPS DQN是和Q(s,a)同时更新的,这就使得算法的稳定性降低,Q值可能一直就靠近不了target Q,但也不能不变,比如Target-Q-network刚初始化后,其产生的Q(s',a')是不准确的,就像Q-learning中Q(s',a')由于刚开始时候,也不住准确,都是0,但接下去会不断更新Q表,一段时间后,下一尝试同一个Q(s',a')出现时,此时Q(s',a')已经更新了,从第0次尝试->收敛过程中,Q(s',a')一定是在不断更新,从0到最优值。因此Target-Q-network中的网络参数不能一尘不变,一段时间后,也需要更新。

c、另外,回顾下监督学习中,标签是个不随网路参数W变动的值,因此,一定时间内,需要维持不变,既为了稳定,又为了符合监督学习的特性。

 


1.2、DDQN

1.2.1、DDQN提出的原因

1.2.2、产生过估计的原因

1.2.3、DDQN算法的改进

1.2.4、DDQN算法

DDQN是为了解决DQN出现Q值过度估计的问题。

1.2.1、DDQN提出的原因

过估计问题:由于我们对于Q函数的估计会有误差,在取最大化Q值的时候,会高于真实的最大Q值。由于过高的估计偏差,这种累积的错误会导致任意的坏状态被估计为高值,从而导致次优的策略更新和发散的行为,这就是过估计问题。

如上图所示,提出DDQN的作者发现DQN算法会导致Q-eval-net的结果Q值被过度估计,也就是说通过这个网络出来的Q值比真实Q值要高出很多。

上图是论文中基于游戏Atari的实验:

1、曲线是作者通过6个随机种子去产生6次随机实验,通过跟踪某个状态动作对的Q值产生6条曲线,较深颜色的曲线是6次实验的中位线(求中间值),阴影部分是通过将6条中的上下最极端的2条通过线性插值产生。平直的直线是用训练好的policy在游戏中不断积累R,计算每个episode的衰减的return,即Gt。然后求取平均值来作为对DQN和DDQN的Q(s,a)真实值true value(而且是最优值函数)的无偏估计。

2、2条不同颜色的曲线是DQN和DDQN在训练时,从Q_eval网路中输出的Q值,不断变高是因为随着迭代加深,策略在优化,值函数在变大,最后趋于平稳说明达到收敛,顺便一提,Q值不一定单调递增,也不一定总体递增。得看具体环境,但是最终会稳定下来是确定的。寻路问题,他就是总体先下降然后再上升。比如其他环境,上图的6种游戏,那它就是逐渐上升。此外,最终的最优Q值不一定从头到尾都是几个动作中的最大。

3、如果没有过高估计的话,训练到收敛之后,Q(s,a)应该是和真实值true value是无限接近的,即上图各自颜色的直线应该与曲线的右端是重合的,这是符合TD学习的理论的。

如上图所示,Wizard of Wor和Asterix这两个游戏中,DQN的结果比较不稳定。也表明过高估计会影响到学习的性能的稳定性(DDQN打电动显然更强)。因此不稳定的问题的本质原因还是对Q值的过高估计

1.2.2、产生过估计的原因

 

根本原因就是从Q-learning延续到DQN一直存在的->TD目标值中取max操作:

TD目标值:

Q-learning(DQN):

以DQN为例,如上图所示,假设Q表中Q(s',a')的四个值相等,对比DQN采用值函数近似,TD目标值的产生是通过Target-neural-network产生的,因此其值会上下有所波动,通过取max操作后,DQN的目标值变成了过大的那个柱子。

根据公式,Q(s,a)通过软更新靠近TD目标值,而TD目标值现在已经偏大,故Q(s,a)的结果也会偏高。

1.2.3、DDQN算法的改进

DDQN在DQN的基础上,仅仅只是改变了Q-target的计算方式,其余均没有改变。

DQN:

DDQN: 

即:

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值