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. [Redis_1] Redis 介绍 && 安装

    0. 说明 Redis 介绍 && 安装 1. Redis 介绍 2. Redis 安装(Windows 10) [2.1 解压 redis-2.2.2-win32-win64.rar ...

  2. linux 文本操作

    sed -i 直接修改 sed 是负责插入替换删除字符串操作. sed -n '/11/p' 11.txt |sed  's/11/33333/g'  查找11并替换11位3333 sed  's/1 ...

  3. js 小数计算时出现多余的数据

    根据资料显示:是由于十进制换算成二进制,处理后,再由二进制换算成十进制时,造成的误差. 得出:所以(0.1+0.2)!=0.3 而是=0.30000000000000004的结果 解决方法: 参考:h ...

  4. [python]如何理解uiautomator里面的 right,left,up,down 及使用场景

    关于Android自动化uiautomator 框架,前面有讲在有些场景下,比如需要在设置界面中将某些选项开关打开或者关闭(前提是这些选项和开关的控件(resourceId,className,tex ...

  5. CSS样式定义的优先级顺序总结

    CSS样式定义的优先级顺序总结 层叠优先级是: 浏览器缺省 < 外部样式表 < 内部样式表 < 内联样式 其中样式表又有: 类选择器 < 类派生选择器 < ID选择器 & ...

  6. ocr jdk

    公司有个需求,遍历所有图片,筛选出含有敏感字的图片.这里就需要ocr技术,找了几天,发现了几个不错的ocr jdk. http://cn.ocrsdk.com/ 俄罗斯公司,贵有贵的道理 http:/ ...

  7. 解决IDEA因分配内存而引起的卡顿

    解决IDEA分配内存不足引起卡顿的问题 在使用IDEA的过程中,经常会运行一段时间后程序卡顿.一段代码可能要敲很久或者出现死机状态,严重影响代码书写速度.经查阅资料,IDEA的自动分配内存最大只有75 ...

  8. 调用类java.lang.Math的成员方法"public static double random"运算下面表达式10000次,统计其中生成的整数0,1,2,.....20的个数分别是多少,并输出统计结果.(int)(Math.random()*20+0.5)

    public class Test2 { public static void main(String args[]){ int num; int count[]=new int[21]; for(i ...

  9. js阻止事件冒泡的两种方法

    1.什么是JS事件冒泡 在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这 ...

  10. Android Des加密解密

    算法转自:http://www.linuxidc.com/Linux/2011-08/41866.htm import java.security.Key; import java.security. ...