我是靠谱客的博主 自觉西牛,最近开发中收集的这篇文章主要介绍【学习强化学习】八、连续动作下的DQN设计参考资料思路1思路2思路34. 练习,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 参考资料
  • 思路1
  • 思路2
  • 思路3
  • 4. 练习
    • 1. Q-learning相比于policy gradient based方法为什么训练起来效果更好,更平稳?

参考资料

  1. https://datawhalechina.github.io/easy-rl/#/chapter8/chapter8

思路1

a = arg ⁡ max ⁡ a Q ( s , a ) a=arg max _{a} Q(s, a) a=argamaxQ(s,a)

  • 假设a是离散的,即a的可能性都是有限的。我们可以把每一个可能的动作都带到 Q 里面算它的 Q 值。
  • 假如动作a是连续的,我们无法穷举所有可能的连续动作,让 Q 的值最大。
  • 我们可以从连续的动作分布中采样出 N 个可能的 a: { a 1 , a 2 , ⋯   , a N } left{a_{1}, a_{2}, cdots, a_{N}right} {a1,a2,,aN} ,一个一个带到 Q函数里面,看谁最大。当然这不是一个非常精确的做法,这是第一个方案。

思路2

既然要解的是一个优化问题(optimization problem),其实是要最大化目标函数(objective function),要最大化一个东西, 就可以用梯度上升。我们就把a当作是参数,然后找一组a去最大化Q函数,就用梯度上升去更新 a 的值,最后看看能不能找到一个a去最大化Q函数,也就是目标函数。当然这样会遇到全局最大值(global maximum)的问题, 就不见得能够真的找到最优的结果,而且这个运算量显然很大, 因为你要迭代地更新 a。我们训练一个网络就很花时间了。如果用梯度上升的方法来处理连续的问题, 等于是每次要决定采取哪一个动作的时候,都还要做一次训练网络的过程,显然运算量是很大的。这是第二个方案。

思路3

可参考论文:https://arxiv.org/abs/1603.00748

第三个方案是设计一个网络的架构,专门设计Q函数,使得解 arg max 的问题变得非常容易。

  • 下图是一个例子,这边这个Q函数的做法是这样。 通常输入状态 s 是一个图像,可以用一个向量或一个矩阵来表示。 输入 s,Q函数会输出 3 个东西。 μ ( s ) mu(s) μ(s)是一个向量; Σ ( s ) Sigma(s) Σ(s) 是一个矩阵; V ( s ) V(s) V(s)是一个标量。 Q函数是在某一个状态,采取某一个动作的时候,你期望的奖励有多大。到目前为止这个Q函数只输入 s,它还没有a输入进来,a 在哪里呢?当这个Q函数输出 μ mu μ Σ Sigma Σ V V V 的时候,我们才把a引入,用a跟 μ ( s ) 、 Σ ( s ) 、 V mu(s)、Sigma(s)、V μ(s)Σ(s)V 互相作用一下,才算出最终的 Q 值。
    在这里插入图片描述

  • a怎么和这 3 个东西互相作用呢?实际上 Q ( s , a ) Q(s,a) Q(s,a),Q函数的运作方式是先输入 s,让你得到 μ , Σ mu,Sigma μ,Σ V V V。然后再输入a,然后接下来把a跟 μ mu μ 相减。所以 − ( a − μ ( s ) ) T Σ ( s ) ( a − μ ( s ) ) + V ( s ) -(a-mu(s))^{T} Sigma(s)(a-mu(s))+V(s) (aμ(s))TΣ(s)(aμ(s))+V(s)是一个标量,这个数值就是 Q 值 Q ( s , a ) Q(s,a) Q(s,a)

  • 假设 Q ( s , a ) Q(s,a) Q(s,a) 定义成这个样子,我们要怎么找到一个a去最大化这个 Q 值呢?这个方案非常简单。因为 ( a − μ ( s ) ) T Σ ( s ) ( a − μ ( s ) ) (a-mu(s))^{T} Sigma(s)(a-mu(s)) (aμ(s))TΣ(s)(aμ(s)) 一定是正的,它前面乘上一个负号,所以第一项就假设我们不看这个负号的话,第一项的值越小,最终的 Q 值就越大。因为我们是把 V ( s ) V(s) V(s) 减掉第一项,所以第一项的值越小,最后的 Q 值就越大。怎么让第一项的值最小呢?你直接把a代入 μ mu μ 的值,让它变成 0,就会让第一项的值最小。

  • a a a代入 μ ( s ) mu(s) μ(s) 以后,可以让 Q 的值最大。所以假设要你 arg max Q 函数,如下式所示。
    μ ( s ) = arg ⁡ max ⁡ a Q ( s , a ) mu(s)=arg max _{a} Q(s, a) μ(s)=argamaxQ(s,a)

  • 虽然一般而言,若 Q 是一个一般的函数, 你很难算,但是我们这边设计了 Q 这个函数,a 只要设 μ ( s ) mu(s) μ(s),我们就得到最大值。在解这个 arg max 的问题的时候就变得非常容易。所以 DQN 也可以用在连续的情况,只是有一些局限,函数不能够随便乱设,它必须要有一些限制。

在这里插入图片描述

4. 练习

1. Q-learning相比于policy gradient based方法为什么训练起来效果更好,更平稳?

答:在 Q-learning 中,只要能够估计出 Q-function,就保证可以改进对应的 policy。而因为估计 Q-function 作为一个回归问题,是比较容易的。在这个回归问题中, 我们可以时刻观察我们的模型训练的效果是不是越来越好,一般情况下我们只需要关注 regression 的 loss 有没有下降,你就知道你的 model 学的好不好。所以估计Q-function 相较于学一个 policy 是比较容易的。你只要估计Q-function,就可以保证现在一定会得到比较好的 policy,同样其也比较容易操作。

最后

以上就是自觉西牛为你收集整理的【学习强化学习】八、连续动作下的DQN设计参考资料思路1思路2思路34. 练习的全部内容,希望文章能够帮你解决【学习强化学习】八、连续动作下的DQN设计参考资料思路1思路2思路34. 练习所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部