概述
文章目录
- 参考资料
- 思路1
- 思路2
- 思路3
- 4. 练习
- 1. Q-learning相比于policy gradient based方法为什么训练起来效果更好,更平稳?
参考资料
- 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. 练习所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复