zoukankan      html  css  js  c++  java
  • 【强化学习】DQN 算法改进

    DQN 算法改进

    (一)Dueling DQN

    Dueling DQN 是一种基于 DQN 的改进算法。主要突破点:利用模型结构将值函数表示成更加细致的形式,这使得模型能够拥有更好的表现。下面给出公式,并定义一个新的变量:

    [q(s_t, a_t)=v(s_t)+A(s_t, a_t) ]

    也就是说,基于状态和行动的值函数 (q) 可以分解成基于状态的值函数 (v) 和优势函数(Advantage Function)(A) 。由于存在:

    [E_{a_{t}}[q(s_t, a_t)] = v(s_t) ]

    所以,如果所有状态行动的值函数不相同,一些状态行动的价值 (q(s, a)) 必然会高于状态的价值 (v(s)),当然也会有一些低于价值。于是优势函数可以表现出当前行动和平均表现之间的区别:如果优于平均表现,则优势函数为正,反之为负。

    以上是概念上的分解,以下是网络结构上对应的改变:

    再保持主体网络不变的基础上,将原本网络中的单一输出变为两路输出,一个输出用于输出 (v) ,它是一个一维的标量;另一个输出用于输出 (A),它的维度和行动数量相同。最后将两部分加起来,就是原来的 (q) 值。

    如果只进行以上单纯地分解,会引出另外一个问题:当 (q) 值一定使,(v)(A) 有无穷多种可行组合,我们可以对 (A) 函数做限定。我们知道 (A) 函数地期望为 0:

    [E_a[A(s_t, a_t)] = E_{a}[q(s_t, a_t)-v(s_t)]=v(s_t)-v(s_t)=0 ]

    (A) 值进行约束,将公式变为:

    [q(s_t, a_t) =v(s_t)+(A(s_t, a_t)- frac{1}{|A|}sum_{a'}A(s_t, a_t^{'})) ]

    让每一个 (A) 值减去当前状态下所有 (A) 值得平均数,就可以保证前面提到的期望值为 0 的约束,从而增加了 (v)(A) 的输出稳定性。

    实际意义: 将值函数分解后,每一部分的结果都具有实际意义。通过反卷积操作得到两个函数值对原始图像输入的梯度后,可以发现 (v) 函数对游戏中的所有关键信息都十分敏感,而 (A) 函数只对和行动相关的信息敏感。

    (二)Priority Replay Buffer

    Priority Replay Buffer 是一种针对 Replay Buffer 的改进结构。Replay Buffer 能够提高样本利用率的同时减少样本的相关性。它存在一个问题:每个样本都会以相同的频率被学习。但实际上,每个样本的难度是不同的,学习样本所得的收获也是不同的。为了使学习的潜力被充分挖掘出来,就有研究人员提出了 Priority Replay Buffer。它根据模型对当前样本的表现情况,给样本一定的权重,在采样时被采样的概率就和这个权重有关。交互时表现越差,对应权重越高,采样的概率也就越高。反之,如果表现越好,则权重也就降低,被采样的概率也就降低。这使得模型表现不好的样本可以有更高的概率被重新学习,模型会把更多精力放在这些样本上

    从算法原理来看,Priority Replay Buffer 与以往的 Replay Buffer 有两个差别:

    (1)为每一个存入 Replay Buffer 的样本设定一个权重;

    (2)使用这个权重完成采样过程:由于采样的复杂度较高,我们可以采用线段树数据结构来实现这个功能。


    References

    ​ [1] 《强化学习精要——核心算法与 Tensorflow 实现》冯超

  • 相关阅读:
    正则表达式口诀
    Ajax请求的四种方式
    jQuery插件 -- jQuery UI插件
    电脑操作技巧
    递归
    声纹识别环境初次搭建
    视频编码book_实战_全角度——1
    SDK等阅读笔记
    音视频bug调试
    音视频开发进阶指南(二)
  • 原文地址:https://www.cnblogs.com/xxxxxxxxx/p/12034554.html
Copyright © 2011-2022 走看看