强化学习 - DQN(Deep Q-network)(1)

改进点

    之前的  值学习方法(Q-learning),表格型,因为值函数(状态值函数V(s)或状态动作值函数Q(s,a))是以表格形式存储 Q_table 。现实状态空间 连续、无穷,所以 值函数  近似 利用函数  直接  拟合状态值函数或状态动作值函数 。

  • s,a 分别是状态 s 和动作 a 的向量表示,
  • 函数 Qϕ​(s,a) 通常是一个参数为ϕ 的函数,比如神经网络输出为一个实数,称为Q网络(Q-network)

所以:【DQN 是指基于深度学习的 Q-learning 算法,主要结合了价值函数近似(Value Function Approximation)与神经网络技术,并采用了  目标网络 target Network 和 经历回放 Experience replay  的方法进行网络的训练。】

学习的是啥?(1)Vπ(s) 

    value-based 学习的是 critic (评论家),而不是策略。 

 一种评论家--  State Value Function  Vπ(s) -- 评论家的输出值取决于状态state 和演员 (actor) π。【注意:评论家都是绑一个演员的,评论家没有办法去凭空去评价一个状态的好坏】。

    critic 作用:它是在衡量某一个演员( π)的好坏,而不是衡量一个状态的好坏【Policy Evaluation(策略评估)】。

怎么衡量Vπ(s)?State Value Function Estimation

MC-采样

      训练 Vπ(s) 网络时,是一个 回归问题,网络的输出就是一个值:在输入 sa​ 的时候,输出的值跟 Ga​ 越近越好,输入 s_bsb​ 的时候,输出的值跟 Gb​ 越近越好。

    这里的 G 是 累计奖励【玩游戏的时候,看做一个随机变量】,也就是  从某一状态开始到一个回合游戏结束后,才可以更新网络。导致 MC方法 问题 方差大,

TD-时序差分

      在游戏的某一个情况,某一个状态 s_t​ 的时候,采取动作 a_t,得到奖励r_t,跳到状态st+1​,就可以使用 TD 的方法   。

注意:!!在训练的时候,并不是直接去估测 V,而是希望得到的结果 V 可以满足这个式子

 训练 Vπ(s) 网络:希望它们两个相减的 loss 跟 r_t越接近,训练下去,更新 V 的参数

MC 和 TD  的差别

    这里体现了 不同的 方法 ,考虑了 不同 的假设:

         第一个回合, s_a得到奖励 0 以后,再跳到 s_b 也得到奖励 0:

  • 一个可能是: s_a是一个标志性的状态,只要看到 s_a 以后,s_b​ 就会拿不到奖励,s_a可能影响了 s_b。 MC 的算法的话,把 s_a 影响 s_b 这件事考虑进去。

  • 另一个可能是:看到 s_a​ 以后,s_b的奖励是 0 这件事只是一个巧合,并不是 s_a所造成,而是因为说 s_b 有时候就是会得到奖励 0,这只是单纯运气的问题。其实平常 s_b会得到奖励期望值是 3/4,跟 s_a是完全没有关系的。

学习的是啥?(2)Qπ(s,a) 

另一种评论家-- Q-function,又叫state-action value function(状态-动作价值函数)

--输入 的是 (s,a)对。

【??注意:

Q-function 有一个需要注意的问题是,这个演员π,在看到状态 s 的时候,它采取的动作不一定是 a。

Q-function 假设在状态 s 强制采取动作 a。不管你现在考虑的这个演员π, 它会不会采取动作 a,这不重要。在状态 s 强制采取动作 a。接下来都用演员 π 继续玩下去,就只有在状态 s,我们才强制一定要采取动作 a,接下来就进入自动模式,让演员π 继续玩下去,得到的期望奖励才是Qπ(s,a) 。

critic 作用:有了这个 Q-function,我们就可以决定要采取哪一个动作,我们就可以进行策略改进(Policy Improvement)。找到 π′ ,使得对所有可能的状态 s 而言,Vπ′(s)≥Vπ(s)。

  ***  这里: ***

  • 这个 π′ 是用 Q-function 推出来的,没有另外一个网络决定 π′ 怎么交互,有 Q-function 就可以找出π′。
  • 但是这边有另外一个问题就是,在这边要解一个 arg max 的问题,所以 a 如果是连续的就会有问题。如果是离散的,a 只有 3 个选项,一个一个带进去, 看谁的 Q 最大,没有问题。

***  Q-function 有两种写法:****

  • 输入是状态跟动作,输出就是一个标量;
  • 输入是一个状态,输出就是好几个值。

目标网络 Target Network

      Qπ(st​,at​) 是网络的输出,rt​+Qπ(st+1​,π(st+1​)) 是目标,在训练过程中 目标一直变化 会很难训练(因为是同一个模型 Qπ,),所以 解决方法是 :左边的 目标 固定住 ,那么输出的值是一个定值,即训练的时候,只更新左边的 Q 网络的参数,而右边的 Q 网络的参数会被固定住。

   就变成是一个回归问题。训练时,希望左边模型的输出的值跟目标越接近越好,最小化它的均方误差。

【过程:

1.开始两个网络是一样的,然后在训练的时候,把右边的 Q 网络固定住

2.梯度下降,调左边网络 的参数

3.可能更新 100 次以后才把这个参数复制到右边的网络去,把它盖过去。目标值 发生变化

4.重新再训练】

探索 Exploration

    原因:【使用 Q-function 的时候,policy 完全取决于 Q-function。给定某一个状态,就穷举所有的 a, 看哪个 a 可以让 Q 值最大,它就是采取的动作。

这个跟策略梯度不一样,在做策略梯度的时候,输出其实是随机的。我们输出一个动作的分布,根据这个动作的分布去做采样, 所以在策略梯度里面,你每次采取的动作是不一样的,是有随机性的。

 

   方法:

1.Epsilon Greedy  (ε-greedy) 

2.  Boltzmann Exploration

  像是策略梯度【网络的输出是一个期望的动作空间上面的一个的概率分布,再根据概率分布去做采样。

  根据 Q 值 去定一个概率分布 ,先取指数,再做归一化, 然后把exp(Q(s,a)) 做归一化的这个概率当作是你在决定动作的时候采样的概率。

 经验回放 Experience Replay

   

 Replay Buffer 又被称为 Replay Memory,存储策略π(不同的) 和 环境互动 时,收集的数据。 【会用到过去的经验数据,也可以消除样本之间的相关性。

【打破数据相关性,神经网络的训练效果为什么就不好?--》在神经网络中通常使用随机梯度下降法,如果样本是相关的,那么估计的梯度也会呈现出某种相关性。如果不幸的情况下,后面的梯度估计可能会抵消掉前面的梯度量。从而使得训练难以收敛。】

    有了 buffer 以后,怎么训练 Q 的模型,怎么估 Q-function

做法:迭代 训练 Q-function

  在每次迭代里面,从这个 buffer 里面随机挑一个 batch 出来,里面有一把的经验,根据这把经验去更新你的 Q-function。【历史数据】

DQN

   用深度卷积神经网络CNN近似拟合状态动作值函数Q(s,a)。 上面3个tip

 输入是距离当前时刻最近的 4 帧图像,该输入经过 3 个卷积层和 2 个全连接层的非线性变化后,最终在输出层输出每个动作对应的 Q 值。

 技巧

  • 在 Atari 游戏里面,一般 mini-batch 设置为 32。
  • Experience replay 用在新问题上一般为 10^6。

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值