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^- θ。伪代码如下:
在这里插入图片描述

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

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

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


相关推荐

  • web端功能测试怎么测_web的主要功能是什么

    web端功能测试怎么测_web的主要功能是什么一、功能测试1.1链接测试链接是web应用系统的一个很重要的特征,主要是用于页面之间切换跳转,指导用户去一些不知道地址的页面的主要手段,链接测试一般关注三点:1)链接是否按照既定指示那样,确实链

    2022年8月1日
    12
  • 电商仓库erp软件_电商交易系统和订单系统

    电商仓库erp软件_电商交易系统和订单系统1、系统独立部署、永久使用,自行管理绑定和授权店铺账号,所有数据都保存在自己的数据库中,多账号使用不关联。2、支持前端的自定义开发和后端功能定制。3、零售、分销、批发、营销方式全面支持,支持兰亭、DX等批量发货、定期对账结算。4、ERP、商品、库存、订单、list售价、list库存实时同步。5、灵活的商品注册:支持多款式、组合品、商品图片6、将从平台下载的订单自动快速导入、自动派单、分配库存。7、具备每天300…

    2025年12月7日
    7
  • Ubuntu安装二:在VM中安装Ubuntu

    Ubuntu安装二:在VM中安装Ubuntu

    2021年12月3日
    51
  • 什么是BI系统?_bi是做什么的

    什么是BI系统?_bi是做什么的BI软件是商业智能(BusinessIntelligence)软件的英文缩写。目前,商业智能通常被理解为将企业中现有的数据转化为知识,帮助企业做出明智的业务经营决策的工具。商务智能系统中的数据来自企

    2022年8月3日
    10
  • vmware虚拟机怎么安装系统_虚拟机装系统

    vmware虚拟机怎么安装系统_虚拟机装系统‍虽然现在windowsxp已经被win7、win10等系统逐渐取代,不过在很多特殊情况下还需要到XP系统中进行测试。那么这个时候就可以通过安装虚拟机系统来解决问题。常用的虚拟机工具有VMwareWorkstation,下面具体介绍安装虚拟机系统ghostxpsp3的步骤。相关阅读:一、准备工作二、VMware安装虚拟机系统ghostxpsp3步骤图解1、打开VMwareWorkstat…

    2022年8月16日
    4
  • pycharm如何缩进多行代码_pycharm如何运行选中代码

    pycharm如何缩进多行代码_pycharm如何运行选中代码方法一:在代码界面,点击鼠标右键,然后按住鼠标左键下拉选择就行了方法二:直接按下快捷键,alt+shift+insert,然后长按鼠标左键下拉即可进入多行编辑模式。…

    2025年8月7日
    3

发表回复

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

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