深度强化学习——DQN「建议收藏」

DQN(DeepQ-Learning)可谓是深度强化学习(DeepReinforcementLearning)的开山之作,是将深度学习与增强学习结合起来从而实现从感知(Perception)到动作(Action)的端对端(End-to-end)学习的一种全新的算法。

大家好,又见面了,我是你们的朋友全栈君。

联系方式:860122112@qq.com

DQN(Deep Q-Learning)可谓是深度强化学习(Deep Reinforcement Learning,DRL)的开山之作,是将深度学习与强化学习结合起来从而实现从感知(Perception)到动作( Action )的端对端(End-to-end)学习的一种全新的算法。由DeepMind在NIPS 2013上发表1,后又在Nature 2015上提出改进版本2

一、DRL

原因:在普通的Q-learning中,当状态和动作空间是离散且维数不高时可使用Q-Table储存每个状态动作对的Q值,而当状态和动作空间是高维连续时,使用Q-Table不现实。

通常做法是把Q-Table的更新问题变成一个函数拟合问题,相近的状态得到相近的输出动作。如下式,通过更新参数 θ 使Q函数逼近最优Q值

Q(s,a;θ)Q(s,a)

而深度神经网络可以自动提取复杂特征,因此,面对高维且连续的状态使用深度神经网络最合适不过了。

DRL是将深度学习(DL)与强化学习(RL)结合,直接从高维原始数据学习控制策略。而DQN是DRL的其中一种算法,它要做的就是将卷积神经网络(CNN)和Q-Learning结合起来,CNN的输入是原始图像数据(作为状态State),输出则是每个动作Action对应的价值评估Value Function(Q值)。

二、DL与RL结合的问题

  1. DL需要大量带标签的样本进行监督学习;RL只有reward返回值,而且伴随着噪声,延迟(过了几十毫秒才返回),稀疏(很多State的reward是0)等问题;
  2. DL的样本独立;RL前后state状态相关;
  3. DL目标分布固定;RL的分布一直变化,比如你玩一个游戏,一个关卡和下一个关卡的状态分布是不同的,所以训练好了前一个关卡,下一个关卡又要重新训练;
  4. 过往的研究表明,使用非线性网络表示值函数时出现不稳定等问题。

三、DQN解决问题方法

  1. 通过Q-Learning使用reward来构造标签(对应问题1)
  2. 通过experience replay(经验池)的方法来解决相关性及非静态分布问题(对应问题2、3)
  3. 使用一个CNN(MainNet)产生当前Q值,使用另外一个CNN(Target)产生Target Q值(对应问题4)

1、构造标签

前面提到DQN中的CNN作用是对在高维且连续状态下的Q-Table做函数拟合,而对于函数优化问题,监督学习的一般方法是先确定Loss Function,然后求梯度,使用随机梯度下降等方法更新参数。DQN则基于Q-Learning来确定Loss Function。

Q-Learning
有关RL的基础知识不再啰嗦,直接看Q-Learning的更新公式:

Q(s,a)=Q(s,a)+α(r+γmaxaQ(s,a)Q(s,a))



而DQN的Loss Function为

L(θ)=E[(TargetQQ(s,a;θ))2]



其中

θ
是网络参数,目标为

TargetQ=r+γmaxaQ(s,a;θ)

显然Loss Function是基于Q-Learning更新公式的第二项确定的,两个公式意义相同,都是使当前的Q值逼近Target Q值。

接下来,求 L(θ) 关于 θ 的梯度,使用SGD等方法更新网络参数 θ

2、经验池(experience replay)

经验池的功能主要是解决相关性及非静态分布问题。具体做法是把每个时间步agent与环境交互得到的转移样本 (st,at,rt,st+1) 储存到回放记忆单元,要训练时就随机拿出一些(minibatch)来训练。(其实就是将游戏的过程打成碎片存储,训练时随机抽取就避免了相关性问题)

3、目标网络

在Nature 2015版本的DQN中提出了这个改进,使用另一个网络(这里称为TargetNet)产生Target Q值。具体地, Q(s,a;θi) 表示当前网络MainNet的输出,用来评估当前状态动作对的值函数; Q(s,a;θi) 表示TargetNet的输出,代入上面求 TargetQ 值的公式中得到目标Q值。根据上面的Loss Function更新MainNet的参数,每经过N轮迭代,将MainNet的参数复制给TargetNet。

引入TargetNet后,再一段时间里目标Q值使保持不变的,一定程度降低了当前Q值和目标Q值的相关性,提高了算法稳定性。

四、DQN算法流程

1、网络模型

这里写图片描述

输入的是被处理成灰度图的最近4帧 84×84 图像,经过几个卷积层(没有池化层)后接两个全连接层,输出是所有动作的Q值。

2、算法伪代码

NIPS 2013版
这里写图片描述

Nature 2015版
这里写图片描述

2、算法流程图(2015版)

主要流程图
这里写图片描述

Loss Function 的构造
这里写图片描述

五、总结

DQN是第一个将深度学习模型与强化学习结合在一起从而成功地直接从高维的输入学习控制策略。

创新点:

  1. 基于Q-Learning构造Loss Function(不算很新,过往使用线性和非线性函数拟合Q-Table时就是这样做)。
  2. 通过experience replay(经验池)解决相关性及非静态分布问题;
  3. 使用TargetNet解决稳定性问题。

优点:

  1. 算法通用性,可玩不同游戏;
  2. End-to-End 训练方式;
  3. 可生产大量样本供监督学习。

缺点:

  1. 无法应用于连续动作控制;
  2. 只能处理只需短时记忆问题,无法处理需长时记忆问题(后续研究提出了使用LSTM等改进方法);
  3. CNN不一定收敛,需精良调参。

参考文献
[1]Playing Atari with Deep Reinforcement Learning
[2]Human-level control through deep reinforcement learning


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126012.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • shufflenetv1详解

    shufflenetv1详解shufflenetv1知识的搬运工又来了论文地址:shufflenetv1论文地址ShuffleNet:AnExtremelyEfficientConvolutionalNeuralNetworkforMobileDevices。shufflenet是一篇关于降低深度学习计算量的论文,其可以运行在手机等移动设备端,发表在了CVPR2018上摘要此论文是一篇效率很高的cnn框架,可以运行在移动设备端,(例如,10-150 MFLOPs)而设计的,该结构利用分组逐点卷积(poin

    2025年8月26日
    6
  • ingress什么意思_k8s kong

    ingress什么意思_k8s kongk8sIngress介绍Http代理Https代理Ingress介绍我们已经知道,Service对集群之外暴露服务的主要方式有两种:NodePort和LoadBalancer,但是这两种方式,都有一定的缺点:NodePort方式的缺点是会占用很多集群机器的端口,那么当集群服务变多的时候,这个缺点就愈发明显。LoadBalancer的缺点是每个Service都需要一个LB,浪费,麻烦,并且需要kubernetes之外的设备的支持。基于这种现状,kubernetes提供了Ingress资源对象,I

    2022年8月9日
    2
  • anaconda+pycharm的安装与配置教程

    anaconda+pycharm的安装与配置教程注:anaconda是自带Python解释器和Python编辑器于一身的,但是Python编辑器中pycharm更好用,所以本教程是写给自己的,每次重新安装anaconda和pycharm的时候有的要注意的地方都记不住了1.安装anaconda1.1.去官网下载anaconda的安装包(官网:https://www.anaconda.com/products/individual)在官网下载很忙的话可以去这里https://mirrors.tuna.tsinghua.edu.cn/下1.2.安装过

    2022年8月28日
    4
  • git clone下来的代码放在哪里,如何放在指定路径

    git clone下来的代码放在哪里,如何放在指定路径今天从github上clone了代码,最后出来形如:但是话说我的东西下载到哪里去了呢????摸不着头脑,然后百度之,发现一般会放在命令行对应的路径下,也就是win+R>cmd查看命令行地址:然后去此路径下寻找之,果然在这里。那么,如何才能clone到自己指定的路径下呢?百度之得如下说法:gitclonehttps://github.com/jque…

    2022年7月21日
    47
  • FEC原理及其实现[通俗易懂]

    FEC原理及其实现[通俗易懂]感谢原作者:http://blog.csdn.net/rootusers/article/details/49097257视频会议中通常使用的FEC/QOS技术,这方面的资料比较复杂和稀少,根据这么多年的工作经验,做一下分享。 在IP视频通话中丢包造成的影响多种多样。其中对视频质量的影响主要有:马赛克现象、局部变形(图像的某些区域不清晰)、图像模糊、屏幕频繁刷新或闪

    2022年8月11日
    9
  • 7.PyCharm基本使用与常规设置

    7.PyCharm基本使用与常规设置文章目录0.新建Python项目0.1步骤0.2演示1.主题设置1.1步骤1.2演示2.字体大小调整2.1步骤2.2演示3.添加多个解释器3.1步骤3.2演示3.3版本切换0.新建Python项目0.1步骤第一次安装,需要创建一个项目。如果能进入到开发界面请略过。1.NewProject2.选择路径3.选择本地环境–>选择电脑安装的解释器4.取消生成main.py脚本5.create6.进入到开发界面–>close关闭推荐提示0.2演示1.主题设置1

    2022年8月28日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号