1 DQN的引入

  由于q_learning算法是一直更新一张q_table,在场景复杂的情况下,q_table就会大到内存处理的极限,而且在当时深度学习的火热,有人就会想到能不能将从深度学习中借鉴方法,将深度学习的方法应用到强化学习中。13年,谷歌的deepmind团队就发表了关于DQN算法的论文,促进了强化学习的发展,扩展了强化学习的应用场景。

2 将深度学习应用到强化学习的挑战

  将深度学习应用到强化学习上主要有两大挑战,下面具体说明这两种挑战是什么

2.1 第一个挑战是关于样本的分布:

  深度学习能够收敛的一大主要原因就是数据集要求独立同分布,只有数据集独立同分布,运用深度学习训练出来的模型才能更好的拟合数据集中潜在的模型,才能得到理想的结果。但是强化学习是从reward中学习,从一系列高度相关的状态中学习,而且强化学习中的智能体随着算法学习到新的行为,数据分布可能会发生改变,存在不能收敛的结果。想要将深度学习算法应用到强化学习中就必须解决强化学习的问题,切断状态的相关性,使数据集的分布稳定。

2.2 第二个挑战是关于学习的方式:

  深度学习是标准的监督式学习,在训练之前,想要训练得到的理想模型的目标就已经暗中存在,深度学习通过一次次的迭代,使算法收敛,寻到理想的模型。然而强化学习是从稀疏,有噪声,有延迟的标量的奖励信号中学习,想要将深度学习的算法应用用强化学习中就必须为强化学习设计每一步更新迭代的目标。

3 关于上述挑战的两个解决办法

3.1 解决样本分布问题

  谷歌deepmind的这篇论文中介绍了一种解决样本分布问题的方法:经验重放机制(repaly mechanism)。

  首先agent会被初始化一个状态s,将状态s输入到评价网络中(一个神经网络,后文介绍),输出每个动作的q值,agent通过q值和探索利用(exploration and exploitation)算法来选择在本状态执行的行动action,最后将s,action作用与环境中,环境会反馈给agent此状态执行action的reward和下一个状态s'。此时就到了一个序列(s, a, r, s'),其中s 为本次状态,a 为状态s时的执行的动作,r 为在状态s执行动作a环境反馈给agent的奖赏,s' 是下一个状态。一个序列(s , a, r, s')就构成了一个训练样本。

  首先规定经验池的大小为N,即只有N个最新的序列存在经验池中,大于N的序列会重头覆盖经验池中的样本。在每次更新神经网络参数时就用经验池中数据。

  经验池的存在,使高度相关的一系列的状态变成了一个个离散的数据样本,减小了训练的方差,同时使样本的分布趋于稳定,有利于算法的收敛,agent还能像人一样,可以从自己的历史经验中学习。

3.2 解决有监督问题

  为了解决强化学习和有监督学习的深度学习之间的矛盾,这篇论文中设计了两个神经网络,

  一个神经网络为预测网络:输入本次的状态,即样本序列中的第一个元素s,输出每个动作预测的q值,agent就是利用输出的每个动作的q值来决定本状态要执行的动作,本网络的参数随时更新。  

  另一个网络为评价网络:输入为下一个状态,即样本序列中的第四个元素s',输出为状态s'是每个动作的q值(q_next),然后利用贝尔曼方程(q_target=r+γ*max(q_next))计算出状态s时执行动作a的目标q值。

  评价网络的输出经过贝尔曼方程,计算结果的目标q值可作为预测网络的label,这样就解决了有监督的深度学习和没有监督的强化学习之间的矛盾。

  为了抑制状态之间相关性的问题,评价网络的参数并不会实时更新,在一定步数之后,预测网络会将自己的参数复制为评价网络。

4 算法流程

4.1 算法的整体逻辑

4.2 算法的学习逻辑

强化学习算法DQN的更多相关文章

  1. 一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm)

    一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm) 2017-12-25  16:29:19   对于 A3C 算法感觉自己总是一知半解,现将其梳理一下,记录在此,也 ...

  2. 【强化学习】DQN 算法改进

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

  3. 强化学习算法Policy Gradient

    1 算法的优缺点 1.1 优点 在DQN算法中,神经网络输出的是动作的q值,这对于一个agent拥有少数的离散的动作还是可以的.但是如果某个agent的动作是连续的,这无疑对DQN算法是一个巨大的挑战 ...

  4. 强化学习(十二) Dueling DQN

    在强化学习(十一) Prioritized Replay DQN中,我们讨论了对DQN的经验回放池按权重采样来优化DQN算法的方法,本文讨论另一种优化方法,Dueling DQN.本章内容主要参考了I ...

  5. 强化学习(十七) 基于模型的强化学习与Dyna算法框架

    在前面我们讨论了基于价值的强化学习(Value Based RL)和基于策略的强化学习模型(Policy Based RL),本篇我们讨论最后一种强化学习流派,基于模型的强化学习(Model Base ...

  6. 强化学习Q-Learning算法详解

    python风控评分卡建模和风控常识(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005214003&am ...

  7. 强化学习(十五) A3C

    在强化学习(十四) Actor-Critic中,我们讨论了Actor-Critic的算法流程,但是由于普通的Actor-Critic算法难以收敛,需要一些其他的优化.而Asynchronous Adv ...

  8. 强化学习(十三) 策略梯度(Policy Gradient)

    在前面讲到的DQN系列强化学习算法中,我们主要对价值函数进行了近似表示,基于价值来学习.这种Value Based强化学习方法在很多领域都得到比较好的应用,但是Value Based强化学习方法也有很 ...

  9. ICML 2018 | 从强化学习到生成模型:40篇值得一读的论文

    https://blog.csdn.net/y80gDg1/article/details/81463731 感谢阅读腾讯AI Lab微信号第34篇文章.当地时间 7 月 10-15 日,第 35 届 ...

随机推荐

  1. Windows 7 任务栏图标消失(变透明,仍然占有地方,但是点击无反应)的解决方法

    解决方案:清理资源管理器缓存(重启资源管理器) 1.打开程序管理器(ctrl+shift+esc) 2.在进程那里找到"explorer.exe",然后按结束进程 3.然后在文件( ...

  2. 一起学习Boost标准库--Boost.texical_cast&format库

    今天接续介绍有关字符串表示相关的两个boost库: lexical_cast 将数值转换成字符串 format 字符串输出格式化 首先,介绍下lexical_cast ,闻其名,知其意.类似C中的at ...

  3. 记录一次mysql使用load into命令导入csv格式数据的过程

    今天从qwiklab实验获取一组数据,大概有5万条,在qwiklab实验室使用的是pgsql数据库,但是今天想把他插入本地的mysql数据库中. 1.首先是查看一下数据内容: 数据中有的是空值,有的是 ...

  4. Django商城项目笔记No.18商品部分-数据表创建

    数据库表设计 在电商中对于商品,有两个重要的概念:SPU和SKU SPU = Standard Product Unit (标准产品单位) SPU是商品信息聚合的最小单位,是一组可服用.易检索的标准化 ...

  5. Case Study: 技术和商业的结合点在哪里?

    如果要制作过去两三年里最火爆的企业级产品创业公司名单,里面一定少不了一家叫做Docker的公司.先别管Docker是做什么的,只要记住这是这几年企业级IT产品里最重要的热点技术,有一半的大型企业已经在 ...

  6. PyQt5--EventSender

    # -*- coding:utf-8 -*- ''' Created on Sep 14, 2018 @author: SaShuangYiBing Comment: This example is ...

  7. [Android自动化] 在 pip-9.0.1 版本情况下安装 uiautomator2 报错的解决办法

    1.在命令窗口中使用命令: pip install uiautomator2 时报 pip 版本过低,需要先升级 pip 版本,理论上会按照提示进行升级 pip 操作,但执行升级命令时到最后却还是报错 ...

  8. (十九)ArcGIS JS 加载WMS服务(超图示例)

    前言 在工作中,需要在ArcGIS API for JavaScript中加载超图服务,因为超图的rest服务只可以用于Leaflet .openlayers3 (with MVT) .MapboxG ...

  9. Apache Kafka系列(一) 起步

    Apache Kafka系列(一) 起步 Apache Kafka系列(二) 命令行工具(CLI) Apache Kafka系列(三) Java API使用 Apache Kafka系列(四) 多线程 ...

  10. Android友盟推送

    当前版本号:v3.0.5 1.下载SDK解压并导入(import module,compile project(':PushSDK')),里面有demo,用demo的包名去官网添加一个应用,然后替换d ...