DQN(Double/ Duel/ D3DQN)
flow___
编辑于 2024年01月01日 08:18
收录于文集
共13篇

DQN

DQN的基本思想

Deep Q-learning 

    思想是将神经网络引入到强化学习的策略评估中,在一系列基于价值函数的策略评估方法中,我们基本都是在基于表格去做迭代和计算,但是对于连续状态空间的模型,或者状态空间较大,无法用离散化表示的模型,需要引入新的表达方式,自然 基于值函数近似的方法被引入强化学习。可以看到RL的发展历程,从MDP的五要素S A P R γ,通过转换为期望求解隐去对P的需求,通过引入值函数近似的方法,拓展S(对A同理)从离散到连续。

值函数近似

    想拓展到连续状态空间,我们需要理解在做策略评估的时候本质上是在做什么事情,首先我们有一堆数据 SARS(A),在基于价值表格的方法中,我们是在使用这些数据,用数值计算的方法去迭代的求解bellman方程 sarsa(或者bellman最优方程 q-leanring),是在迭代求解这几个未知数(解的存在性和收敛性由MDP的性质,动点理,大数定理等得以保证);

    若对于连续状态空间或动作空间,只有离散的解是不够优美的,若想要某个表格中不存在的解,这可能还需要用到插值等。回想一下在Clifwalk中对的状态值函数的可视化,那个状态空间其实就是一个空间中的曲面,从值函数近似的角度上看,我们可以认为是在用函数来对那些点做拟合。

图片来自西湖大学赵世钰老师的【强化学习的数学原理】课程

    说到曲线合,是不是就想到了统学习的方法,各基函数经网络等等,就都可以用到强化学习里面了。事实也正是如此,近些年深度学习的发展也为强化学习带来了新的好用的

    经典的DQN就是在拟合价值函数时候使用了Q-learning + 络的组合,并取得了很好的效果,当然DQN之后很多改进工作,与多的化学习训练上的trick,这里将介绍一些。

· DQN with Target Network  [1]

    这个基本算是早期DQN的baseline了 

伪代码

    两个神经网络,一个延迟更新权重,一个实时训练中进行参数更新。有两个好处,一个是可以提前大批量用old-network计算TD-target,直接制作好数据对(原始公式中的w更新公式,需要用到多次网络做forward计算最优q(s', a&#​39;)),这样有利于使用深度学习套件进行模型的快速训练。另一个好处是说能够让模型的训练更稳定。有点类似于双Q学习中的思想?不太确定。

· Double DQN  [2] [3] 

    为了解决 Overestimation of Q value 一 decoupling maximization & action selection    

    详见 RL An Intro... Eg 6.7 —— 对于这个问题,有一种看法是,其根源在于确定价值最大的动华和估计它的价值这两个过程采用了同样的样本(多幕序列)。假如我们将这些样本划分为两个集合,并用它们学习两个独立的对真实价值g(a),Vae A的估计 Q(a)和 Q2(a),那么我们接下来就可以使用其中一个估计,比如Q:(a),来确定最大的动作 A”= argmax。Q1(a),再用另一个 Q2 来计算其价值的估计Q2(A”)=Q(argmax。Q:(a))。由于E[Q2(A")|=g(A&#​34;),因此这个估计是无偏的.

    Q学习是基于贪心策略的,这会导致最大化偏差问题,和双Q学习思想一致。下面是双Q学习的伪代码,可以借鉴一下。

· Dueling DQN

    Dueling DQN算法提出了一种新的神经网络结构——对偶网络(duel network)。网络的输入与DQN和DDQN算法的输入一样,均为状态信息,但是输出却有所不同。Dueling DQN算法的输出包括两个分支,分别是该状态的状态价值V(标量)和每个动作的优势值A(与动作空间同维度的向量)。DQN和DDQN算法的输出只有一个分支,为该状态下每个动作的动作价值(与动作空间同维度的向量)。具体的网络结构如下图所示:

         

单分支网络结构(DQN和DDQN)

 对偶网络结构(Dueling DQN)

    在DQN算法的网络结构中,输入为一张或多张照片,利用卷积网络提取图像特征,之后经过全连接层输出每个动作的动作价值;在Dueling DQN算法的网络结构中,输入同样为一张或多张照片,然后利用卷积网络提取图像特征获取特征向量,输出时会经过两个全连接层分支,分别对应状态价值和优势值,最后将状态价值和优势值相加即可得到每个动作的动作价值(即绿色连线操作)。

· 实验结果与分析

    其实三个变体网络在代码的实现与区别上区别较小,DoubleDQN在best Action的选择上与DQN有所区别,在代码的实现上仅将原始的动作选择换成如下式:

    double DQN此时的 TD-target 并不完全由target-net决定了,此时用eval网络来进行next—best—action的选取 完全可以认为是由新的一部分数据来进行的最大化估计,此时的target-net并未看见这部分数据,类似于双Q学习中的两套Q-tables的思想。

DuelingDQN主要在网络结构的内部与其他有所区别:

代码块
Python
自动换行
复制代码
class Model(nn.Module):
    def __init__(self, num_inputs=4):
        super(Model, self).__init__()

        self.public_layers = nn.Sequential(
            nn.Linear(NUM_STATES, 512),
            nn.ReLU(),
            nn.Linear(512, 256)
        )

        self.adv_layers = nn.Sequential(
            nn.Linear(256, 128),
            nn.ReLU(),
            nn.Linear(128, NUM_ACTIONS)
        )

        self.state_layers = nn.Sequential(
            nn.Linear(256, 128),
            nn.ReLU(),
            nn.Linear(128, 1)
        )
    def forward(self, x):
        # 公共层
        x = self.public_layers(x)

        adv = self.adv_layers(x)

        state_v = self.state_layers(x)
        # dueling DQN 通俗理解基于state-value的均值,加上不同动作带来的不同影响
        # 相比于只关注action 这个也关注了状态value
        # 减掉均值是为防止网络只学adv网络而偷懒的将v网络直接学成0 所以后面做个中心化操作
        q = adv + state_v.repeat(1, NUM_ACTIONS) - torch.mean(adv, 1, keepdim=True).repeat(1, NUM_ACTIONS)
        return q
复制成功

    个人认为 dueling DQN 通俗理解就是:基于state-value的均值,加上不同动作带来的不同影响,相比于只关注action 这个也关注了状态value,减掉均值是为防止网络只学adv网络而偷懒的将v网络直接学成0,所以在代码实现上会在后面做个中心化操作。

两个实验的结果分析:

两个实验只需要改一下环境的参数,所以这里一起进行分析!

倒立摆曲线颜色

登月车曲线颜色

收敛稳定性与最优性:

    这里我在Tensorboard中将光滑度调为0.95后截取的图片,可以看到:

    在倒立摆任务中,对偶结构的网络整体的稳定性会更好,rewards的方差明显要更小,且在收敛度上也看起来会更好。在经过1000个episode后每个方法基本都能找到较好的策略。

    在着陆车上,稳定性其实都比较一般,震荡非常剧烈,个人认为是对于这几个基础DQN,他们都没有好好利用好的Reward的幕的奖励, 因为是对Memory中的样本进行的均匀采样,而较好的奖励的幕往往是在整个状态空间中不常拿到的, 我认为这是震荡非常剧烈的原因之一,如果引入Prioritized replay的话应该会好一点,有 Prioritized replay 的可以高效的利用这些不常拿到的奖励, 并好好学习他们。不过时间不太够了,只能在lab3复现!

CartPole

    可以看到着陆车环境下,明显原始的DQN已经全面的落后于其他改进模型,D3DQN在这里展现出来的最优性要高于其余模型。

LunarLander

收敛速度:

    这里可以看到Duel网络的收敛速度是明显慢于传统DQN的,这与网络模型的变形,加深离不开关系。

CartPole

    可以看到着陆车模型中的DoubleDQN出现了一段时间的低谷后扬起这样的曲线,个人认为是短暂的陷入了局部最优解中,应该是认为在空中飘着就是好的,这也应该是导致其收敛速度变得慢于正常值的原因。

LunarLander

参考:

[1] Mnih, V,Kavukcuoglu,K, Siver, D. Rusu, A. A, Veness, J. Bellemare, M. G.... & Hassabis, D.(2015). Human-evel control through deep reinforcement learning.nature,518(7540)529-533

[2] Van Hasselt, H. (2010). Double Q-earning. Advances in neural information processing systems, 23, 2613-2621.

[3] Van Hasselt, H., GuezA. & Silver, D. (2016, March). Deep reinforcement learning with double q-learning, ln Proceedings of the AAAl conference on artificial intelligence (Vol. 30 No.1).

· 秋刀鱼的DQN视频​

· 强化学习的数学原理​

· 强化学习中的过估计/最大化偏差 - 知乎 (zhihu.com)

· Duel DQN  —— https://blog.csdn.net/weixin_46133643/article/details/121880738