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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 新RSS reader

    新RSS reader

    2022年1月10日
    38
  • 基于51单片机八路抢答器课程设计(含proteus仿真图及代码)

    基于51单片机八路抢答器课程设计(含proteus仿真图及代码)一、设计要求:1、可满足8个选手的抢答2、具有主持者控制开关,用来控制系统清零和抢答开始3、抢答器具有数据锁存功能、显示功能和声音提示功能4、抢答开始后,若有选手按动抢答器按钮,编号立即锁存,并在LED数5、码管上显示选手的编号,同时灯亮且伴随声音提示,还要禁止其后的抢答输入二、实验设计和分析1 总体设计方案方案一:采用数字电路控制。采用数字显示电路的好处就是设计简单。用以在P0口…

    2022年10月20日
    5
  • Android【本地Json处理工具类】

    Android【本地Json处理工具类】

    2021年3月12日
    150
  • getchar的用法举例_getchar能输入字符串吗

    getchar的用法举例_getchar能输入字符串吗c语言getchar的用法:1.从缓冲区读走一个字符,相当于清除缓冲区2.前面的scanf()在读取输入时会在缓冲区中留下一个字符’\n’(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误3.getchar()是在输入缓冲区…

    2022年10月19日
    2
  • 环保产品有哪些项目_项目环境分析

    环保产品有哪些项目_项目环境分析一、开发环境:开发环境是程序猿们专门用于开发的服务器,配置可以比较随意,为了开发调试方便,一般打开全部错误报告。通俗的讲,项目尚且在编码阶段,我们的代码一般在开发环境中,不会在生产环境中,生产环境组成:操作系统,web服务器,语言环境。二、测试环境:一般是克隆一份生产环境的配置,一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上。通常指项目测试,修改bug阶段。三、生产环境(pro):是指正式提供对外服务的,一般会关掉错误报告,打开错误日志。可以理解为包含所有的功能的环境,任何项目所使用

    2022年9月29日
    1
  • O2O:互联网的另一种变异形式

    O2O:互联网的另一种变异形式

    2021年8月27日
    62

发表回复

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

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