重要性采样,我在众多算法中都看到的一个操作,比如PER,比如PPO。
由于我数学基础实在是太差了,每次看都是迷糊过去,希望下次能看懂,半年前看《深入浅出强化学习》的时候,是理解了的,但是没做笔记,再看的时候就记不起来了…
最近忍不了了,还是记下来再说。
若行动策略和评估及改善的策略是同一个策略,我们称之为on-policy
,可翻译为同策略
。
若行动策略和评估及改善的策略是不同的策略,我们称之为off-policy
, 可翻译为异策略
。
接下来我们重点理解这on-policy方法和off-policy方法。
同策略是指产生数据的策略与评估和要改善的策略是同一个策略模型。比如,要产生数据的策略和评估及要改进的策略都是 ϵ − s o f t \epsilon-soft ϵ−soft策略。其伪代码如图3.5所示
图3.5 同策略蒙特卡罗强化学习
如图3.5产生数据的策略以及进行评估和改进的策略都是 ϵ \epsilon ϵ- s o f t soft soft策略。
异策略是指产生数据的策略与评估和改善的策略不是同一个策略。我们用 π \pi π表示用来评估和改进的策略,用 ϵ \epsilon ϵ- s o f t soft soft表示产生样本数据的策略。
异策略可以保证充分的探索性。例如用来评估和改进的策略 π \pi π是贪婪策略,用于产生数据的探索性策略 μ \mu μ为探索性策略,如 ϵ \epsilon ϵ- s o f t soft soft策略。
用于异策略的目标策略 π \pi π和行动策略 μ \mu μ并非任意选择的,而是必须满足一定的条件。这个条件是覆盖性条件即:行动策略 μ \mu μ产生的行为覆盖或包含目标策略 π \pi π产生的行为。利用式子表示即为:满足 π ( a ∣ s ) > 0 \pi(a|s)>0 π(a∣s)>0 的任何 ( s , a ) (s,a) (s,a) 均满足 μ ( a ∣ s ) > 0 \mu(a|s)>0 μ(a∣s)>0 。
这个覆盖性的公式没太明白。我直观上理解是,目标策略 π \pi π有的动作,动作策略都会产生,即概率大于0。
利用行为策略产生的数据评估目标策略需要利用重要性采样方法。下面,我们来介绍重要性采样。
图3.6 重要性采样
我们利用图3.6来描述重要性采样的原理。重要性采样来源于求期望:
这里先提几个基础概念,(哇,这个基础概念我都弄错了,还好被师弟及时纠正),p(z)被称为变量z的概率密度函数,由于不在f(z)中进行采样,所以f(z)算是z的一个权重函数?另外概率分布F(x)和概率密度f(x)的关系,一般是 F ( x ) = ∫ 1 ∗ f ( x ) d x F(x)=\int{1*f(x)dx} F(x)=∫1∗f(x)dx,是一个定积分,求面积的关系。
在李宏毅的课程中,有这样的描述:
在x服从p(x)分布时,f(x)的期望为负,此时我们从q(x)中来采样少数的x,那么我们采样到的x很有可能都分布在右半部分,此时f(x)大于0,我们很容易得到f(x)的期望为正的结论,这就会出现问题,因此需要进行大量的采样
这里的服从p(x)分布和分布函数是不一样的概念。一般变量会根据概率密度函数p(x)采样来的,所以也会称为,变量x服从p(x)分布。
如果是离散的话,就会有下面的式子:
E [ f ] = 1 N ∑ n N f ( z n ) E[f]=\frac{1}{N}\sum_n^N {f(z^n)} E[f]=N1∑nNf(zn), z n z^n zn~ q ( z ) ~{q(z)} q(z)
这句话的意思是对于变量z,根据q(z)这个概率分布,采样N个数据,每个数据对应有值 f ( z n ) f(z^n) f(zn),对他们求平均,就近似整个概率分布的期望。
如图3.6, 当随机变量z的分布p(z)非常复杂时,无法利用解析的方法产生用于逼近期望的样本,这时,我们可以选用一个概率分布很简单,产生样本很容易的概率分布q(z),比如正态分布。
这里需要指出的一点是,原来的p(z)只是采样复杂,并不是未知!在网络做参数的模型中,一般来说针对输入的状态s,策略网络是可以算出一个具体的值。
原来的期望可变为:
E [ f ] = ∫ f ( z ) p ( z ) q ( z ) q ( z ) d z E[f]=\int{f(z)\frac{p(z)}{q(z)}q(z)}dz E[f]=∫f(z)q(z)p(z)q(z)dz
≈ 1 N ∑ n N p ( z ) q ( z ) f ( z ) \approx\frac{1}{N}\sum_n^N{\frac{p(z)}{q(z)}f(z)} ≈N1∑nNq(z)p(z)f(z), z n z^n zn~ q ( z ) q(z) q(z)
同乘同除不改变值的大小,但由于第二步要经过采样,因此会对方差造成影响,分布差别越大,方差越大。
定义重要性权重: w n = p ( z n ) q ( z n ) w^n=\frac{p(z^n)}{q(z^n)} wn=q(zn)p(zn) ,普通的重要性采样求积分如方程(3.7)所示为:
E [ f ] = 1 N ∑ n N w n f ( z n ) E[f]=\frac{1}{N}\sum_n^N {w^nf(z^n)} E[f]=N1∑nNwnf(zn), z n z^n zn~ q ( z ) ~{q(z)} q(z)
由式(3.7)可以知道,基于重要性采样的积分估计为无偏估计,即估计的期望值等于真实的期望。但是,基于重要性采样的积分估计的方差无穷大 (怎么就方差无穷大了?) 。这是因为,原来的被积函数乘上了一个重要性权重,这就改变了被积函数的形状及分布。尽管被积函数的均值没有发生变化,但方差明显发生改变。
在重要性采样中,使用的采样概率分布与原概率分布越接近,方差越小。然而,被积函数的概率分布往往很难求得,或很奇怪,没有简单地采样概率分布能与之相似,如果使用分布差别很大的采样概率对原概率分布进行采样,方差会趋近于无穷大。
一种减小重要性采样积分方差的方法是采用加权重要性采样:
E [ f ] ≈ ∑ n = 1 N w n ∑ n = 1 N w m f ( z n ) E[f]\approx\sum_{n=1}^N{\frac{w^n}{\sum_{n=1}^N{w^m}}f(z^n)} E[f]≈∑n=1N∑n=1Nwmwnf(zn)
普通重要性采样和加权的区别在于分母,普通的是采样次数N,加权的分母是所有重要性权重 w n w^n wn的和,如果 f ( z n ) = 1 f(z^n)=1 f(zn)=1,那么 E [ f ] = 1 E[f]=1 E[f]=1,这就极大的降低了方差。
在这篇文章中,有这样的分析:常规重要性采样是无偏的,但是会有较大的方差,而加权重要性采样有偏,但是方差小。
在李宏毅的课件中,有详细的推导,加不加重要性采样,对期望和方差的影响:
这一页PPT的推导,就非常明确:
第一行是前面已知的条件,换了分布,期望一样;
第二行是我们待求的两个方差变量的形式,注意分布不一样了;
第三、四行是将方差展开成期望的表达式,利用右边的那个公式。
第四行的左边部分,需要用到左下角我加的那个步骤;左下角第一行,利用期望的定义,展开成在q(x)分布下的积分;
左下角第二行,由左下角第一行平方展开,消除p(x)后,再结合得到;
左下角第三行,变成在p(x)分布下的积分后,转成期望的形式;第四行的左边部分,就是第一行的内容。
最终加了重要性系数后,方差就在第一项多了一个 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x),所以如果二者分布差距过大,会导致方差变大。
但是!但是!上面的 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x)并不能保证用了重要性采样后,方差就会变大,举一个极端的例子:
随机变量x只有两个取值,0 和 1:
p ( x ) = [ 0 : 1 2 , 1 : 1 2 ] p(x)=[{0:\frac{1}{2}, 1:\frac{1}{2}}] p(x)=[0:21,1:21],在0的概率为0.5, 1的概率为0.5,表述下同。
q ( x ) = [ 0 : 3 4 , 1 : 1 4 ] q(x)=[{0:\frac{3}{4}, 1:\frac{1}{4}}] q(x)=[0:43,1:41],
f ( x ) = [ 0 : 20 , 1 : 1 ] f(x) = [0: 20, 1: 1] f(x)=[0:20,1:1],
那么重要性采样后的方差值:
v a r x − p ( x ) ( f ( x ) p ( x ) q ( x ) ) = 1 2 [ 2 0 2 ∗ 1 2 / 3 4 + 1 2 ∗ 1 2 / 1 4 ] − 右 边 的 值 = 401 3 − 右 边 的 值 var_{x-p(x)}(f(x)\frac{p(x)}{q(x)})=\frac{1}{2}[20^2*\frac{1}{2}/\frac{3}{4}+1^2*\frac{1}{2}/\frac{1}{4}]-右边的值=\frac{401}{3}-右边的值 varx−p(x)(f(x)q(x)p(x))=21[202∗21/43+12∗21/41]−右边的值=3401−右边的值,
原本的方差
v a r x − p ( x ) ( f ( x ) ) = 1 2 [ 2 0 2 + 1 2 ] − 右 边 的 值 = 401 2 − 右 边 的 值 var_{x-p(x)}(f(x))=\frac{1}{2}[20^2+1^2]-右边的值=\frac{401}{2}-右边的值 varx−p(x)(f(x))=21[202+12]−右边的值=2401−右边的值
即重要性采样后的方差也可以变小,并不一定是变大。
在异策略(off-policy)方法中,行动策略 μ \mu μ即用来产生样本的策略,所产生的轨迹概率分布相当于重要性采样中的 q [ z ] q[z] q[z],用来评估和改进的策略 π \pi π所对应的轨迹概率分布为 p [ z ] p[z] p[z],因此利用行动策略 μ \mu μ所产生的累积函数返回值来评估策略 π \pi π时,需要在累积函数返回值前面乘以重要性权重。
上面的公式,用繁琐的语言来描述就是:我们已经有了一个回合的轨迹(st,at,st+1,at+1…sT,aT),对于这个轨迹,在我们的目标策略中,产生的概率是多少?那么就直接计算一下,首先在st的状态下,选择动作ak的概率是 π ( A k ∣ S k ) \pi(A_k|S_k) π(Ak∣Sk),其次智能体产生动作ak后,下一步状态达到sk+1的概率是多少?需要有环境的状态转移概率 p ( S k + 1 ∣ S k , A k ) p(S_{k+1}|S_k, A_k) p(Sk+1∣Sk,Ak),后面的事件假设是独立的,因此一顿连乘,就拿到了整个轨迹的概率。
下面行动策略是一样的逻辑,只不过行动策略是真的。
在行动策略 μ \mu μ下,相应的试验的概率为:
因此重要性权重为:
和环境相关的状态转移概率是一样的,所以直接就消除了。
这个分母后面有解释。可以这么理解:在一次试验中出现状态s的次数,可以看成是上面公式的N.
我们知道原本v(s)的定义是 v ( s ) = 1 k ∑ j = 1 k G j ( s ) v(s)=\frac{1}{k}\sum_{j=1}^k{G_j(s)} v(s)=k1∑j=1kGj(s),但是现在我们有了重要性采样,因此公式就变了,G(s)前面多了一个重要性权重 p t T t p_t^{T_t} ptTt。
现在举例说明公式(3.11)中各个符号的具体含义。
图3.8 重要性采样公式举例解释
t是状态访问的时刻, T ( t ) T(t) T(t)是访问状态s相对应的那个试验的终止状态所对应的时刻, T ( s ) \Tau(s) T(s)是状态s发生的所有时刻集合。
加权重要性采样值函数估计为:
考虑这是一个单次回报,也就是说我们目前只采样了一条轨迹。如果是加权重要性采样,此时分子分母的权重是一样的,所以估计值就是 G t G_t Gt 。但是 G t G_t Gt根据行为策略估计的,显然是有偏的。所以加权重要性采样是有偏的。
同时加权重要性采样的重要性采样比最大值为1,只有单条轨迹时为1,所以方差比较小。对于常规重要性采样,单次回报的估计值是 p t T t G t p_t^{T_t}G_t ptTtGt,经过了纠正,所以理论上无偏。但他的采样比(重要性系数 p t T t p_t^{T_t} ptTt)有时候可能很大,或者很小,导致回报的方差大。在实际中,由于加权重要性采样的方差很小,更推荐使用。
对于every-visit方法,两种采样方式都是有偏的(这一点我没太明白)。但是当采样的轨迹数不断增加,偏差趋向于0.实际中也经常采用every-visit的方法。因为first-visit的方法需要记录状态首次被访问的时间步。
最后给出异策略每次访问(every-visit)蒙特卡罗算法的伪代码:
需要注意的是:此处的软策略 μ \mu μ为 ϵ \epsilon ϵ- s o f t soft soft策略,需要改进的策略 π \pi π为贪婪策略。
花了好久都没有搞明白最后一张伪代码。我尝试着理解,C(s,a)是(s,a)出现的频次,但是后面的更新和W有关,这个W和动作策略 μ \mu μ有关,难道是重要性系数?有人看过这张图出自哪儿吗?或者简单讲讲流程。
最后,总结一下:
重点理解on-policy 和off-policy的概念,学会利用重要性采样来评估目标策略的值函数.
经过不少公式推导,我们知道对于不好的概率分布,我们可以用一个新的好用的分布来替代它,替代后,需要经过一个重要性采样的操作,保证期望无偏。这个技术很有用,下一步试着推导一下PPO.
ps: 欢迎做强化的同学加群一起学习:
深度强化学习-DRL:799378128
欢迎关注知乎帐号:未入门的炼丹学徒