(七)强化学习——DQN,DDQN,Dueling DQN,Rainbow DQN

本文介绍了DQN算法及其改进版本,如DDQN和DuelingDQN,强调了从Q-learning的传统方法向深度学习迁移的优势。此外,讨论了经验回放、目标网络和RainbowDQN在解决强化学习中问题和提升性能的关键作用。
摘要由CSDN通过智能技术生成

1.前言
        在开始学习DQN之前,这里推荐一个OpenAI关于DeepRL的一个学习资源网站:Welcome to Spinning Up in Deep RL!。个人认为这是一个很不错的网站,不管你以后是想搞强化学习的科研方向还是应用方向。这里再推荐一下bilibili的北大王树森的深度强化学习教程,对DQN的讲解可以说是十分的通俗易懂。
在这里插入图片描述

spinning up对RL算法的一个分类

        图片上的算法,虽然不详尽,但对于我们对强化学习算法的分类与学习路径选着是很有帮助的。基于模型和不基于模型的两大类。在不基于模型中又主要有两条线,策略梯度和Q-learning,这里便没有分的如此清楚,除了DQN,我后续还会分享其他算法。
2.DQN算法
         DQN算法全名为Deep Q-learning Network 算法,出自Playing Atari with Deep Reinforcement Learning这篇论文,从全名我们就可以看出,DQN和Q-learning关系密切,从(六)强化学习——Sarsa,Saras(λ),Q-Learning算法我们知道,不管是Q-learning算法还是sarsa算法,他们的状态动作价值函数Q(s,a)都是用一张大表(Q-table)来存储的,这样当状态的数量和动作变多时,这将是一张巨大的表,对内存和查询都是一个挑战。而且当遇到强化学习任务所面临的状态空间是连续的,存在无穷多个状态,这种情况就不能再使用表格的方式存储价值函数。DQN其实就是用一个深度神经网络来近似最优动作-价值函数Q*(s,a),把这个网络叫做Q网络(deep Q-network),写为Q(s,a;θ),θ是神经网络的参数。Q网络的输入是状态s,输出是所有可能动作所对应的Q值大小。
在这里插入图片描述

Q网络的输入输出

   2.1DQN算法的训练
         我们训练Q(a,s;θ)网络的目的,是希望Q(a,s;θ)能够对输入的状态-行动对打出正确的分。DQN是一种典型的用TD方式来更新网络的强化学习算法,不是很清楚TD的可以看看,(五)强化学习——蒙特卡罗强化学习(MC) and 时序差分强化学习(TD),n步时序差分预测(n步TD)。以下是原始的DQN的更新步骤:

初始化Q(s,a,w)
对每幕:
        初始化S
        对幕中的每一个循环:
                状态S输入神经网络Q,输出所有动作对应的Q值,利用策略(ε-贪心)选择一个动作A
                执行A,观测到R,S’
                计算损失loss=1/2[(R+γmaxQ(S’,a;θ))-Q(S,A;θ)]2,用随机梯度下降更新参数w
                S=S’
        直到S是终止状态
我们一搬把R+γmaxQ(S’,a;θ))这部分称为TD target,这样叫是因为它有点像监督学习中标签的那种感觉。不清楚幕是啥的,可以看看这个(二)强化学习——有限的马尔可夫决策过程(有限MDP)使用神经网络等非线性函数逼近器来表示Q函数时,强化学习是不稳定甚至发散的。这种不稳定性有几个原因:观测序列中存在的相关性,对Q的小更新可能会显著改变策略从而改变数据分布,还有Q的估计值过高的问题。为了解决这些问题,在训练DQN时,用了两个技巧,经验回放(Experience Replay)目标网络(fixQ-target)
   2.2经验回放(Experience Replay)
         从原始DQN的训练步骤,我们可以看出DQN是每一幕,每一幕的训练,从幕头到幕尾终止状态,而幕是智能体与环境的连续交互过程留下的状态,动作,奖励序列,这就导致了更新Q网络的连续两个状态的相关性很强,这对Q网络的训练是不利的,而且由于幕更新完后就直接丢弃了,会造成经验的浪费。
        经验回放就能很好的解决这两个问题,它具体是这样做的,它把幕拆开成(S,A,R,S’)这样的一个四元组,一般叫transition,一条幕可以拆成很多个transition,把每一条幕都拆成这样的元组,然后打乱存储在一起,就形成了经验池。在更新网络的时候,我们每一次直接从经验池中随机抽取一个batch的transition来训练,计算平均梯度来更新网络,这就很好的解决了上面的问题。
在这里插入图片描述
   这样随机均匀抽取transition来更新网络有一个问题就是,对于某些重要的状态的动作的学习得不到重视,比如某个游戏,打boss其实的最重要的,我们因该多关注打boss这些状态,随机均匀抽取的话就关注不到重点,于是 PRIORITIZED EXPERIENCE REPLAY论文又提出了优先经验回放。其实就是对每个transition加入优先级标记,越高的优先级在抽取时有越高的概率抽取到,这里我就不多做解释了,感兴趣的可以直接去看看论文。
   2.3目标网络(fixQ-target) 论文Human-level control through deep reinforcement learning
   首先,在计算TD target时,由于使用了最大化操作maxQ(S’,a;θ)),这可能导致计算的结果比真实值要大。而TD target已经是对真实价值的高估,因此每次更新都会加重DQN对真实价值的高估。这种高估问题会导致DQN不能准确地选出最优的动作。其次,Bootstrapping的影响也是导致价值估计过高的一个重要原因。在DQN中,由于使用同一个神经网络来同时选择和评估动作,这就引入了Bootstrapping问题。具体来说,当使用当前的网络权重来评估并选择动作时,这些动作的价值估计可能会受到网络自身估计误差的影响,从而导致价值估计过高。
    为了解决这种估计值过高的问题,引入了一个target目标网络Q(s,a;θ_),该网络结构与原DQN中的Q(s,a;θ)网络相同,只是参数不同。Q(s,a;θ_)主要负责更新TD-target,θ_的参数定期由θ_=θ来更新(这是硬更新,还有一种加入参数比例的更新,软更新)。

在这里插入图片描述

加入了target目标网络后更新过程

图片来源:博客园 jsfantasy

3.DDQN算法 论文:Deep Reinforcement Learning with Double Q-learning
        DDQN算法是DQN算法的改进,主要还是为了解决Q值过高估计的问题。之前提出的Q-target网络并没有很好的解决这个问题。DDQN能更好的解决这个问题,但也没有彻底的解决这个问题。

TD target=r+γQ(S',argmaxQ(S',a;θ);θ_)

这个公式可以理解为,我们计算TD target 的时候,把下一个状态先输入原DQN网络Q(S’,A;θ),得到一个所有动作的Q值分布记为P1,然后从P1分布中选出Q值最大的这个动作记为Amax,然后再把下一个状态输入目标网络Q(S’,A;θ_),又会输出一个分布记为P2,此时,我们不选择P2分布中的最大Q值,而是选择P2分布中Amax所对应的Q值。
这个Q值是小于等于P2分布中的最大Q值的,这也就是为啥这样做能有效减少估值过高问题的原因。
4.Dueling DQN算法 论文:Dueling Network Architectures for Deep Reinforcement Learning
        Dueling DQN是深度Q网络(DQN)的一种改进算法。它的主要思想是将神经网络中Q价值的输出分成两部分:状态价值V和优势函数A。状态价值V代表由状态直接决定的价值,与具体的动作无关;而优势函数A则表示每个动作相对于该状态下其他动作的优势,可以更好地估计不同动作对于状态的贡献,如下图所示
在这里插入图片描述

上图是原神经网络架构,下图是Dueling DQN架构

那为什么要这样做呢?我们来看这样的一个例子,这是一个小车躲避障碍物的游戏,对于上面的一组图片,小车这个时刻前面是没有障碍物的,小车的任何动作对Q值没有影响,因为不管怎么实施动作都不会碰撞,这种情况V值大,A值小。而对于下面一组图,动作的实施对于Q值的影响就比较大了,V值变小,A值变大。这样分开学习能更好的学习不同的场景。

在这里插入图片描述

如下公式是Q值的更新公式如下图所示:
在这里插入图片描述
V表示状态函数,A表示优势函数,θ,β,α分别表示为各个阶段网络的参数。|A|表示所有动作的数量,最后减的那一部分公式可以理解为减的是所有动作对于这个状态的优势的均值。通过Dueling DQN的改进,可以更好地估计不同动作对于状态的贡献,提高学习效率,使得在复杂环境下的强化学习任务中取得更好的效果

5.Rainbow DQN算法 论文:Rainbow: Combining Improvements in Deep Reinforcement Learning
        rainbbow,中文意思就是彩虹,彩虹是多条颜色的,就像对于DQN改进的多个方面,经验回放的DDQN,优先经验的DDQN,,Dueling DDQN等等,什么样的组合才是最好的,这篇论文做了详细的消融实验,结果如下图所示
在这里插入图片描述

实验证明了,对DQN的若干改进可以成功地集成到一个单一的学习算法中,从而达到最先进的性能。

6.总结
        Q-Learning算法对于Q值的存储是通过表来存贮的,在对于很多场景会有很大的局限性。DQN是用神经网络来近似最优动作价值函数。原始的训练方式,会存在更新模型的相邻状态相关性强和估计值过高的问题。于是提出了经验回放来解决相关性的问题,优先经验回放让模型有重点的关注训练,提出目标网络来解决Q值估计过高的问题。DDQN也是用来解决估计过高的问题。Dueling DQN改变了原来的网络,把Q值分为状态函数和优势函数两部分,能够提高学习效率,使得在复杂环境下的强化学习任务中取得更好的效果。Rainbow DQN是对所有改进的一个整合。

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值