前几天在整重要性采样,然后提到的一个模糊的概念就是:
在异策略(off-policy)方法中,行动策略 μ \mu μ即用来产生样本的策略,所产生的轨迹概率分布相当于重要性采样中的 q [ z ] q[z] q[z],用来评估和改进的策略 π \pi π所对应的轨迹概率分布为 p [ z ] p[z] p[z],因此利用行动策略 μ \mu μ所产生的累积函数返回值来评估策略 π \pi π时,需要在累积函数返回值前面乘以重要性权重。
在Q-learning中刚好行动策略为 ϵ \epsilon ϵ- s o f t soft soft,目标策略为贪婪策略 π \pi π,明明策略不一样了,为啥就不用重要性采样了呢?
且Q-learning, DQN, DDPG等,都没有用到重要性采样。
这究竟是什么鬼东西?
为了搞明白这个点,我在知乎上搜了一下,问了师弟和群友,在群友的指点下,终于知道了关键所在。
Q ( s , a ) = E s ′ ∼ p ( s , a ) [ r ( s , a , s ′ ) + m a x a ′ Q ( s ′ , a ′ ) ] Q(s,a)=E_{s'\sim p(s,a)}[r(s, a, s')+max_{a'}Q(s', a')] Q(s,a)=Es′∼p(s,a)[r(s,a,s′)+maxa′Q(s′,a′)]
白话翻译:
关于Q值-V值的定义,以及互相之间的关系,可以看这篇文章:强化学习入门 第一讲 MDP
对于状态s,采取动作a的Q值,由于采取了动作a后,会有不同的s’,因此有一个状态转移概率p(s’|s,a),这样就得给所有的s’求期望。
而概率 p ( s ′ ∣ s , a ) p(s'|s,a) p(s′∣s,a)是由环境决定的,与动作策略无关,即p(s’|s,a)不存在重要性因子。到这一步,其实已经能明确了,对于Q(s,a)来说,变量只有p。
再往前推一步,transition(s, a, r, s’)中的(s, a)是根据behavior policy采样得到的,为什么Q(s, a)和r(s, a)就和behavior policy无关了?
其实这里跟哪个policy来的没关系,因为在这里我们其实可以理解为是人为指定,或者从经验池中随机采样了这组(s, a)。
更新Q(s, a)时,它对自己的更新不会因为它是来自target or behavior policy而存在任何影响;而 r ( s ′ ∣ s , a ) r(s' | s, a) r(s′∣s,a)当我们指定更新哪个(s, a)的时候,就只取决于环境如何定义reward function了,于是 r ( s ′ ∣ s , a ) r(s' | s, a) r(s′∣s,a)也已经确定下来了,同样也是跟来自target or behavior policy无关。
那么至于最后的 m a x a ′ Q ( s ′ , a ′ ) max_{a'}Q(s', a') maxa′Q(s′,a′),因为target policy是greedy的,且这里也是通过greedy选择了Q在s’下对应最大价值的a’,所以这一块的数据仍然是相同策略,不用加入importance sampling。
看了好几个知乎答主的回答,都在说多步更新应该加重要性系数,但也有人说,在DQN-DDPG这类算法中,我们的目标策略是确定的,而重要性采样是两个随机分布的关系,你整一个确定性策略,比例不是0,就是1/p,这没意思啊。所以下面的推导花了我一天时间,其实并没有什么用。难过
—更新,看了群友推荐的一篇文章,果然off-policy的Q-learning都不适合用重要性采样。
Q ( s , a ) = E s ′ ∼ p ( s , a ) , s ′ ′ ∼ p ( s ′ , π ( s ′ ) ) [ r ( s , a , s ′ ) + γ r ( s ′ , a ′ , s ′ ′ ) + γ 2 m a x a ′ ′ Q ( s ′ ′ , a ′ ′ ) ] Q(s,a)=E_{s'\sim p(s,a), s''\sim p(s',\pi(s'))}[r(s, a, s')+\gamma r(s', a', s'')+\gamma ^2 max_{a''}Q(s'', a'')] Q(s,a)=Es′∼p(s,a),s′′∼p(s′,π(s′))[r(s,a,s′)+γr(s′,a′,s′′)+γ2maxa′′Q(s′′,a′′)]
期望转成求和的形式就容易看出来了:
Q ( s , a ) = ∑ s ′ P ( s ′ ∣ s , a ) [ r ( s ′ ) + ∑ a ′ π ( a ′ ∣ s ′ ) ∑ s ′ ′ P ( s ′ ′ ∣ s ′ , a ′ ) ( γ ∗ r ( s ′ ′ , s ′ , a ′ ) + γ 2 m a x a ′ ′ Q ( s ′ ′ , a ′ ′ ) ] Q(s,a)=\sum_{s'}P(s'|s,a)[r(s')+\sum_{a'}\pi(a'|s')\sum_{s''}P(s''|s',a')(\gamma*r(s'',s',a')+\gamma^2max_{a''}Q(s'',a'')] Q(s,a)=∑s′P(s′∣s,a)[r(s′)+∑a′π(a′∣s′)∑s′′P(s′′∣s′,a′)(γ∗r(s′′,s′,a′)+γ2maxa′′Q(s′′,a′′)]
这个期望涉及的概率为 p ( s ′ ∣ s , a ) ∗ π ( s ′ ) ∗ p ( s ′ ′ ∣ s ′ , a ′ ) p(s'|s,a)*\pi(s')*p(s''|s',a') p(s′∣s,a)∗π(s′)∗p(s′′∣s′,a′) ,注意其中的 π \pi π 如果还是使用Q网络贪婪策略整出来的动作a’,那么就不需要重要性采样。
但如果 ϵ \epsilon ϵ- s o f t soft soft 作为behavior策略产生 a ′ a' a′ ,就需要乘上重要性因子。毕竟目标策略是贪婪策略。
下面举一个具体的例子:
我们简化这个实验:
通过上面的一系列表述,其实单步Q-learning,因为r的出现和策略无关,就是单纯的受环境的影响,这个不需要重要性采样;
而多步的,我目前感觉也不应该用,我看别人代码里面也没有加这玩意儿。
有其他理解的同学,欢迎指导分享!
ps: 欢迎做强化的同学加群一起学习:
深度强化学习-DRL:799378128
欢迎关注知乎帐号:未入门的炼丹学徒
CSDN帐号:https://blog.csdn.net/hehedadaq