1. 前言

在前面的章节中我们介绍了时序差分算法(TD)和Q-Learning,当状态和动作空间是离散且维数不高时可使用Q-Table储存每个状态动作对的Q值,而当状态和动作空间是高维连续时,使用Q-Table不动作空间和状态太大十分困难。所以论文Human-level control through deep reinforcement learning提出了用Deep Q Network(DQN)来拟合Q-Table,使得Q-Table的更新操作包在一个黑盒里面,使强化学习的过程更加的通用化,自动化。

2. DQN的结构

我们可以把DQN理解为在Q-Learning的整体框架大体不改的情况下,对于\((S,A)->R\)奖励的获取方式的一种改进。

DQN有两个大的创新点:

  1. Replay Buffer样本回放缓冲区或者叫做(Experience replay)
  2. Target Network目标网络

2.1 Replay Buffer

使用DQN模型代替Q-Table会遇到两个问题

  1. 交互得到的序列存在一定的相关性:交互序列中的状态行动存在着一定的相关性,而对于基于最大似然法的机器学习模型来说,我们有一个很重要的假设:训练样本是独立且来自相同分布的,一旦这个假设不成立,模型的效果就会大打折扣。而上面提到的相关性恰好打破了独立同分布的假设,那么学习得到的值函数模型可能存在很大的波动。
  2. 交互数据的使用效率:采用梯度下降法进行模型更新时,模型训练往往需要经过多轮迭代才能收敛,每一次迭代,需要使用一定数量的样本计算梯度,如果每次计算的样本在计算一次梯度后就被丢弃,那么我们就需要花费更多的时间与环境交互并收集样本。

Replay Buffer结构图:

总的来说,Replay Buffer含了收集样本和采样样本两个过程。

  1. 收集样本:按照时间先后顺序存入结构中,如果Replay Buffer经存满样本,那么新的样本会将时间上最久远的样本覆盖。
  2. 采样样本:如果每次都取最新的样本,那么算法就和在线习相差不多;般来说,Replay Buffer会从缓存中均匀地随机采样一批样本进行学习。

均匀采样的好处是什么呢?前面提到我们交互得到的序列在时间维度上存在一定的相关性。我们希望学习得到的值函数能够表示在当前状态行动下的长期收益的期望,然而每一次交互得到的序列,只能代表当前状态一行动下的一次采样轨迹,并不能代表所有可能的轨迹。这样估计的结果就和期望的结果存在一定的差距。随着交互时间不断拉长,这个差距的累积会越来越大。如果完全使用序列的估计值进行训练, 某一轮训练时模型会朝着一个序列的估计训练,另一轮训练又会朝着另一个序列的估计训练,那么模型很容易产生较大波动采用均匀采样后,每次训练的样本通常来自多次交互序列,这样单一序列的波动就被减轻很多,训练效果也就稳定了很多。同时,一份样本也可以被多次训练,提高了样本的利用。

2.2 Target Network

模型不稳定的另外一个原因来自算法本身,Q-Learning的计算公式可以看出,算法可以分成如下两个步骤:

  1. 计算当前的状态行动下的价值目标值:\(\nabla{q(s,a)}=\gamma(s^{'})+max_{a^{'}}q^{T-1}(s^{'},a^{'})\)
  2. 网络模型的更新:\(q^T(s,a)=q^{T-1}(s,a)+\frac{1}{N}[\nabla{q(s,a)}-q^{T-1}(s,a)]\)

可以看出模型通过当前时刻的回报和下一时刻的价值估计进行更新,这里存在一些隐患,前面提到数据样本差异可能造成一定的波动,由于数据本身存在着不稳定性 每一轮轮迭代都可能产生一些波动,如果按照上面的计算公式,这些波动会立刻反映到下一个迭代的计算中,这样我们就很难得到一个平稳的模型。为了减轻相关问题带来的影响,我们要尽可能地将两个部分解耦。所以引入了Target Network,而原本的模型被称为Behavior Network。

  1. 在训练开始时,两个模型使用完全相同的参数。
  2. 在训练过程中, Behavior Network负责与环境交互,得到交互样本。
  3. 在学习过程中,由Q-Learning得到的目标价值由Target Network算得到;然后用它和Behavior Network的估计值进行比较得出目标值并更新Behavior Network。
  4. 每当训练完成一定轮数的迭代,Behavior Network模型的参数就会同步给Target Network,这样就可以进行下一个阶段的学习了。
  5. 通过使用 Target Network,计算目标价值的模型在一段时间内将被固定,这样模型可以减轻模型的波动性。

2.3 DQN的算法过程

(欢迎转载,转载请注明出处。欢迎沟通交流: 339408769@qq.com)

Deep Q Network(DQN)原理解析的更多相关文章

  1. 强化学习系列之:Deep Q Network (DQN)

    文章目录 [隐藏] 1. 强化学习和深度学习结合 2. Deep Q Network (DQN) 算法 3. 后续发展 3.1 Double DQN 3.2 Prioritized Replay 3. ...

  2. 【转】【强化学习】Deep Q Network(DQN)算法详解

    原文地址:https://blog.csdn.net/qq_30615903/article/details/80744083 DQN(Deep Q-Learning)是将深度学习deeplearni ...

  3. 深度增强学习--Deep Q Network

    从这里开始换个游戏演示,cartpole游戏 Deep Q Network 实例代码 import sys import gym import pylab import random import n ...

  4. AlphaGo的前世今生(一)Deep Q Network and Game Search Tree:Road to AI Revolution

    这一个专题将会是有关AlphaGo的前世今生以及其带来的AI革命,总共分成三节.本人水平有限,如有错误还望指正.如需转载,须征得本人同意. Road to AI Revolution(通往AI革命之路 ...

  5. 深度强化学习(DQN-Deep Q Network)之应用-Flappy Bird

    深度强化学习(DQN-Deep Q Network)之应用-Flappy Bird 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-fu ...

  6. 强化学习_Deep Q Learning(DQN)_代码解析

    Deep Q Learning 使用gym的CartPole作为环境,使用QDN解决离散动作空间的问题. 一.导入需要的包和定义超参数 import tensorflow as tf import n ...

  7. 论文翻译:2022_PACDNN: A phase-aware composite deep neural network for speech enhancement

    论文地址:PACDNN:一种用于语音增强的相位感知复合深度神经网络 引用格式:Hasannezhad M,Yu H,Zhu W P,et al. PACDNN: A phase-aware compo ...

  8. [原][Docker]特性与原理解析

    Docker特性与原理解析 文章假设你已经熟悉了Docker的基本命令和基本知识 首先看看Docker提供了哪些特性: 交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上, ...

  9. 【算法】(查找你附近的人) GeoHash核心原理解析及代码实现

    本文地址 原文地址 分享提纲: 0. 引子 1. 感性认识GeoHash 2. GeoHash算法的步骤 3. GeoHash Base32编码长度与精度 4. GeoHash算法 5. 使用注意点( ...

随机推荐

  1. 5.Python网络编程_通过继承实现多线程

    import threading import time #继承形式的多线程,适合于程序比较复杂的情况 class MyThread(threading.Thread): #t.start()会调用r ...

  2. 深入理解Java8中Stream的实现原理

    Stream Pipelines 前面我们已经学会如何使用Stream API,用起来真的很爽,但简洁的方法下面似乎隐藏着无尽的秘密,如此强大的API是如何实现的呢?比如Pipeline是怎么执行的, ...

  3. Oracle中如何创建数据库

    Oracle数据库的物理结构与MySQL以及SQLServer有着很大的不同.在使用MySQL或SQLServer时,我们不需要去关心它们的逻辑结构和物理结构. 但是在使用Oracle的时候,我们必须 ...

  4. jquery ajax怎么使用jsonp跨域访问

    在项目中使用接口的比较多,在客户端跨域访问,jquery中只能使用jquery ajax的jsonp方法. 值得注意的是,jQuery.ajax()只支持get方式的跨域,post的方式是不支持的.& ...

  5. 查看xml源码的方法

    查看xml源码的方法 要通过查看源码才能看到xml源码 因为 print_r输出的时候 默认页面打开是html编码的...... 所以解析不了xml

  6. 基于仿射的非刚体配准方法(i) 法向

    为啥闲呢,因为work干完了. 为啥补档呢,因为有新work了. 呃,因为新work让人自闭. 我现在干完了两部分.一是把最近邻的部分迁移过来. 二是求法向. 首先是给三个点,就能确定平面——因为是三 ...

  7. EF Core 根据已有的数据库来生成 EF 领域模型

    1. 如图: 2. 命令 <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFrame ...

  8. 阿里开源 Dragonwell JDK 重磅发布 GA 版本:生产环境可用

    今年 3 月份,阿里巴巴重磅开源 OpenJDK 长期支持版本 Alibaba Dragonwell的消息,在很长一段时间内都是开发者的讨论焦点,该项目在 Github 上的 Star 数迅速突破 1 ...

  9. 【mysql】Mysql的profile的使用 --- Profilling mysql的性能分析工具

    分析SQL执行带来的开销是优化SQL的重要手段. 在MySQL数据库中,可以通过配置profiling参数来启用SQL剖析.该参数可以在全局和session级别来设置.对于全局级别则作用于整个MySQ ...

  10. conda opencv cv2.imshow无法使用

    error: -------src-dir-------/opencv-2.4.10/modules/highgui/src/window.cpp:501: error: (-2) The funct ...