美文网首页
强化学习-什么是DQN

强化学习-什么是DQN

作者: Chaos_YM | 来源:发表于2020-10-20 20:16 被阅读0次

    提示:阅读本系列文章需要有神经网络基础,了解反向传播和梯度下降原理

    发现很多博客文章对DQN的描述不是很好理解。本篇尽量用浅显易懂的描述,解释2013版和2015版DQN的原理,欢迎补充指正。

    上一篇我们介绍了Q-learning,但是Q-learning的局限在于,处理不了state很复杂的情况,表格过大也会带来各种储存,查询,等等问题。

    于是DeepMind在2013年提出了DQN算法,用神经网络来替代表格,并在2015年提出了优化,使用两个神经网络提高训练速度和收敛性。这是强化学习与深度学习的结合。

    DQN2013

    DQN2013

    上图有一个隐藏的细节:
    最后一步:perform a gradient descent step on () according to equation3。翻译过来就是根据方程式3对这个方差进行梯度下降更新。
    但问题是在原论文中,这个equation3中的y_i,与上图的y_i是不同的:
    y_i=r+\gamma max Q(s^、,a^、;\theta_{t-1}) \tag{原论文公式3}
    y_i=r+\gamma max Q(s^、,a^、;\theta_{t}) \tag{上面的截图}
    差异,为了梯度下降更新参数的时候,y_i这项不参与求导,当做常数计算,据说效果更好。这叫做semi-gradient method
    参考链接:强化学习论文复现

    上图为Deep Q-learning 2013算法流程,解释如下:

    • 首先初始化Memory D,它的容量为N;
    • 初始化Q网络,随机生成权重ω;
    • 循环遍历episode =1, 2, …, M:
    • 初始化initial state S1;
    • 循环遍历step =1,2,…, T:
      1, 用ϵ−greedy策略生成action a_t
      2, 执行action a_t,接收reward r_t及新的state S_{t+1};
      3, 将transition样本 (S_t,a_t,r_t,S_{t+1})存入D中;
      4, 从D中随机抽取一个minibatch的transitions (S_j,a_j,r_j,S_{j+1})
      5, 令y_j=r_j,如果 j+1步是terminal的话,否则,令 y_j=r_j+γ * maxQ(S_{t+1},a)
      6, 对(y_j−Q(S_t,a_j;ω))^2关于ω使用梯度下降法进行更新,根据方程式3;

    与Q-learning对比,关键点在于创建了记忆库Memory D。
    实际项目中,我们会先让记忆库积累到一定的数量,才会开始抽取样本,训练神经网络,梯度下降去优化。

    Replay Buffer使用过程:

    • 收集样本:按照时间先后顺序存入结构中,如果Replay Buffer经存满样本,那么新的样本会将时间上最久远的样本覆盖。
    • 采样样本:如果每次都取最新的样本,那么算法就和在线习相差不多;一般来说,Replay Buffer会从缓存中均匀地随机采样一批样本进行学习。(下面有针对采样的优化算法DQN with Prioritized Replay的介绍)

    DQN2013版流程图也可如下表示:
    (样本中只有(S_i,a,r,S_{i+1}),时序差分公式必要的maxQ(s', a')怎么得来??抽取训练样本后,用神经网络处理样本,得到maxQ(s', a'))

    image

    DQN2015

    DQN2015

    上图为Deep Q-learning 2015算法流程,解释如下:

    • 首先初始化Memory D,它的容量为N;
    • 初始化Q网络,随机生成权重ω;
    • 初始化target Q网络,权重为ω^−=ω;
    • 循环遍历episode =1, 2, …, M:
    • 初始化initial state S1;
    • 循环遍历step =1,2,…, T:
      1, 用ϵ−greedy策略生成action a_t
      2, 执行action a_t,接收reward r_t及新的state S_{t+1};
      3, 将transition样本 (S_t,a_t,r_t,S_{t+1})存入D中;
      4, 从D中随机抽取一个minibatch的transitions (S_j,a_j,r_j,S_{j+1})
      5, 令y_j=r_j,如果 j+1步是terminal的话,否则,令 y_j=r_j+γ * maxQ(S_{t+1},a)
      6, 对(y_j−Q(S_t,a_j;ω))^2关于ω使用梯度下降法进行更新;
      7, 每隔C steps更新target Q网络,ω^−=ω

    它通过使用两个相同的神经网络,以解决数据样本和网络训练之前的相关性。
    与DQN2013对比,关键点在于使用两个相同结构的神经网络。其中网络A作为实际Q的计算网络,输出预估的Q值,此为Q估计;使用网络B输出的Q值,以时序差分方程计算Q现实,节课得到loss,然后每一步都对A进行梯度下降更新,每隔C步(一般是几百步),同步A,B网络的权重参数。这就是fix q-target原理。

    DQN2015版流程图也可如下表示:


    image

    既然有了优化版的DQN(2015),以下我们所说的普通DQN指的都是2015版的

    下面介绍一些可以提升DQN学习效率的改进算法。

    Double DQN

    传统DQN使用target-Q network得到target-Q值(现实值),如下,由于预测具有误差,而且去Qmax值来计算,可能导致误差更大

    image
    于是,Double DQN方法将这个公式优化了一下,不再是取target-Q network中S_{t+1}的Qmax而是取eval-Q network(Q估计)中max(S_{t+1},a),然后用这个动作a取Q现实中的Q值来替代。
    更新后的公式为:
    image

    DQN with Prioritized Replay

    这一套算法重点就在我们 batch 抽样的时候并不是随机抽样, 而是按照 Memory 中的样本优先级来抽. 所以这能更有效地找到我们需要学习的样本.


    image

    优先级定义方式:采用SumTree 有效抽样,本质上是使误差更大的样本有更大的被选中的概率。

    原理:

    • 我们设定 TD-error = Q现实 - Q估计 来规定优先学习的程度. 如果 TD-error 越大, 就代表我们的预测精度还有很多上升空间, 那么这个样本就越需要被学习, 也就是优先级 p 越高。
    • 如果使用排序等方式对样本集进行处理,耗时耗力
    • SumTree 是一种树形结构, 每片树叶存储每个样本的优先级 p, 每个树枝节点只有两个分叉, 节点的值是两个分叉的合, 所以 SumTree 的顶端就是所有 p 的合. 正如下面图片, 最下面一层树叶存储样本的 p, 叶子上一层最左边的 13 = 3 + 10, 按这个规律相加, 顶层的 root 就是全部 p 的合了
    image

    Dueling DQN

    用一句话来概括 Dueling DQN 就是. 它将每个动作的 Q 拆分成了 state 的 Value 加上 每个动作的 Advantage.

    其他文章推荐:
    DQN原理详解l
    莫烦大佬的强化学习系列

    相关文章

      网友评论

          本文标题:强化学习-什么是DQN

          本文链接:https://www.haomeiwen.com/subject/zjzrmktx.html