Q学习和深度Q学习(DQN)论文笔记「建议收藏」

Q学习和深度Q学习(DQN)论文笔记「建议收藏」Q学习(Q-learning)强化学习中有个很重要的递归关系,贝尔曼方程(BellmanEquation):Qπ(st,at)=E[r+γE[Qπ(st+1,at+1)]]Q^\pi(s_t,a_t)=E[r+\gammaE[Q^\pi(s_{t+1},a_{t+1})]]Qπ(st​,at​)=E[r+γE[Qπ(st+1​,at+1​)]]这个公式实际上也揭露了状态的马尔科夫性质,也…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

最近想做个汇总,所以这里简单写一下。

Q学习(Q-learning)

强化学习中有个很重要的递归关系,贝尔曼方程(Bellman Equation):
Q π ( s t , a t ) = E [ r + γ E [ Q π ( s t + 1 , a t + 1 ) ] ] Q^\pi(s_t,a_t)=E[r+\gamma E[Q^\pi(s_{t+1},a_{t+1})]] Qπ(st,at)=E[r+γE[Qπ(st+1,at+1)]]
这个公式实际上也揭露了状态的马尔科夫性质,也就是下一个状态只与当前状态有关。强化学习中大多数方法都是基于这个公式,Q学习也一样。Q学习的更新公式如下:
Q ( s , a ) = Q ( s , a ) + α [ r + γ m a x a ′ Q ( s , a ) − Q ( s , a ) ] Q(s,a)=Q(s,a)+\alpha[r+\gamma max_{a'}Q(s,a)-Q(s,a)] Q(s,a)=Q(s,a)+α[r+γmaxaQ(s,a)Q(s,a)]
可以看见不同于贝尔曼方程中使用下一个状态的期望来估计当前Q值,Q学习中使用的是下一个状态的最大Q值来估计当前状态Q值。这是由于强化学习的agent目标是最大化累积奖赏,也就是Q值。但是这会带来的问题是 高估 。这篇文章是没有涉及解决这个问题的,Sutton的书中提到的解决方法是Double Q-learning,结合深度学习就是DDQN,我们组老师也在17年IJCAI发了一篇解决这个问题的文章Weighted Double Q-learning。下面是Q-learning和Double Q-learning的算法:
在这里插入图片描述
在double Q-learning中会定义两个Q函数,选择动作时是在两者之和的基础上进行 ϵ − g r e e d y \epsilon-greedy ϵgreedy选择,在更新时这两个函数是交互使用的,若一个Q1更新则Q2则作为max评估,这样在一定程度上可以解决 高估 问题。(简单理解就是因为Q2下的max并不是Q1下的max)
在这里插入图片描述

深度Q学习(DQN)

DQN中使用神经网络来作为Q值的逼近函数。权重和偏置用 θ \theta θ 表示。损失函数表示为: L ( s , a ∣ θ i ) ≈ ( r + γ m a x a ′ Q ( s ′ , a ∣ θ i ) − Q ( s , a ∣ θ i ) ) 2 L(s,a|\theta_i)\approx (r+\gamma max_{a'}Q(s',a|\theta_i)-Q(s,a|\theta_i))^2 L(s,aθi)(r+γmaxaQ(s,aθi)Q(s,aθi))2
梯度更新公式:
θ i + 1 = θ i + α   ▽ θ L ( θ i ) \theta_{i+1}=\theta_i+\alpha\ \bigtriangledown_\theta L(\theta_i) θi+1=θi+α θL(θi)
但是若使用相同的网络来生成下一个目标Q值和估计当前Q值,会导致振荡性甚至发散。还有就是,深度学习要求样本之间相互独立且同分布,但强化学习样本并不满足这个条件。因此DQN中使用三个技巧来来解决这一系列问题:经验回放,目标网络和自适应性学习率调整方法。(事实上当使用函数逼近时(比如神经网络作为逼近函数),强化学习会表现的不稳定甚至发散,主要原因是:序列观察值之间具有关性,对于Q网络的微小更新会导致策略明显的变化,以及action value Q(s,a)和target action value r + γ m a x Q ( s ′ , a ′ ) r+\gamma max Q(s',a') r+γmaxQ(s,a)之间的关联性。这三点都是一定会存在的问题,不可比避免的。DQN中使用的经验回放主要是一定程度上打破序列之间的相关性,而目标网络是解决Q值和目标Q值之间的相关性的(原文Human-level control through deep reinforcement
learning第四段)。但是对于第二个原因,并由和好的解决,所以可以朝着这个方向拓展。)
经验回放,是指在Agent与环境交互过程中,经验会以 ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1)的形式存放在经验池D中,每次训练会从D中随机抽样出一批数据来进行训练,这样就可以在一定程度上消除样本之间的相关性。目标网络是指,DQN中使用两个网络,一个网络是当前网络,与环境交互,并不断更新。另一个网络是目标网络,它并不与环境交互,也不在每个时间步进行更新,而是每隔一定时间步才会更新,每次更新都是把当前网络参数直接赋值给它。
具体的操作是每此训练时,比如第 i i i次迭代,一个小批量经验(minibatch)经验 e t = ( s t , a t , r t , s t + 1 ) e_t=(s_t,a_t,r_t,s_{t+1}) et=(st,at,rt,st+1)会从经验池中随机抽样出来。损失函数定义为: L i ( θ i ) = E ( s , a , r , s ′ ) ∼ D [ ( y i − Q ( s , a ∣ θ i ) ) 2 ] L_i(\theta_i)=E_{(s,a,r,s')\sim D}[(y_i-Q(s,a|\theta_i))^2] Li(θi)=E(s,a,r,s)D[(yiQ(s,aθi))2]其中 y i = r + γ m a x a ′ Q − ( s ′ , a ′ ∣ θ − ) y_i=r+\gamma max_{a'}Q^-(s',a'|\theta^-) yi=r+γmaxaQ(s,aθ)这里 Q − Q^- Q就是目标网络。每过一定时间步就会将 θ \theta θ赋值给 θ − \theta^- θ。伪代码如下:
在这里插入图片描述

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/186356.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 【XRT Vitis-Tutorials】视频处理加速(Kernel+VCU)

    【XRT Vitis-Tutorials】视频处理加速(Kernel+VCU)1前言前面文章导航:ZCU106XRT环境搭建ZCU106XRTVivado工程分析ZCU106XRTPetaLinux工程分析【XRTVitis-Tutorials】RTLKernels测试【XRTVitis-Tutorials】C++/RTLKernel混合编程测试【XRTVitis-Tutorials】图像并行计算【XRTVitis-Tutorials…

  • hdfs的八大安全和可靠策略总结和设计基础与目标[通俗易懂]

    hdfs的八大安全和可靠策略总结和设计基础与目标[通俗易懂]hdfs的八大安全和可靠策略总结和设计基础与目标

  • QCustomPlot开发笔记(一):QCustomPlot简介、下载以及基础绘图[通俗易懂]

    QCustomPlot开发笔记(一):QCustomPlot简介、下载以及基础绘图[通俗易懂]QCustomPlot开发笔记系列整理集合,这是目前使用最为广泛的Qt图表类(Qt的QWidget代码方向只有QtCharts,Qwt,QCustomPlot),使用多年,系统性的整理,过目并整理了原有文档,本系列旨在系统解说并逐步更新其各种Demo示例。

    2022年10月10日
  • mysql ddl操作(mysql查询条件执行顺序)

    由于mysql在线ddl(加字段、加索引等修改表结构之类的操作)过程如下: A.对表加锁(表此时只读)B.复制原表物理结构C.修改表的物理结构D.把原表数据导入中间表中,数据同步完后,锁定中间表,并删除原表E.rename中间表为原表F.刷新数据字典,并释放锁普遍,对于大表的处理,目前没有特别好的解决方案。大部分公司都会有个瞬断的过程。

  • 安装VMtool_虚拟机没有安装VMware Tools

    安装VMtool_虚拟机没有安装VMware Tools安装VMTOOL工具1.VMtoolsVMtools顾名思义就是Vmware的一组工具。主要用于虚拟主机显示优化与调整,另外还可以方便虚拟主机与本机的交互,如允许共享文件夹,甚至可以直接从本机向虚拟主机拖放文件、鼠标无缝切换、显示分辨率调整等,十分实用。2.先启动系统3.安装4.将安装包复制到桌面5.解压压缩包tar-zxvf*.tar.gz6.进入解压文件运行./vmware-install.pl7.安装完成选择yes,遇到选项回车。安装完成reboot。..

  • PyCharm安装配置谷歌浏览器驱动[通俗易懂]

    PyCharm安装配置谷歌浏览器驱动[通俗易懂]PyCharm配置安装Chorme驱动下载驱动查看Chorme的版本这是我的谷歌浏览器版本去网站下载对应的驱动软件下载后进入下载的目录,解压然后把这个文件放入Python的Scripts文件夹(首先你的Python环境变量已经配置过)驱动下载地址:http://chromedriver.storage.proxy.ustclug.org/index.html安装驱动进入设置,按照步骤点击安装selenium包然后会出现安装进程,添加完成之后开始测试驱动测试驱动创建一个Pyth

发表回复

您的电子邮箱地址不会被公开。

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