重要性采样(Importance Sampling)详细学习笔记

文章目录

  • 重要性采样(Importance Sampling)详细学习笔记
    • 前言:
    • 参考主体:
    • on-policy 和 off-policy
      • On-policy:
      • Off-policy:
    • 重要性采样
    • 重要性采样后方差的变化-公式推导
    • 重要性采样在on-policy和off-policy的具体应用

前言:

重要性采样,我在众多算法中都看到的一个操作,比如PER,比如PPO。
由于我数学基础实在是太差了,每次看都是迷糊过去,希望下次能看懂,半年前看《深入浅出强化学习》的时候,是理解了的,但是没做笔记,再看的时候就记不起来了…
最近忍不了了,还是记下来再说。

参考主体:

  1. 强化学习入门 第三讲 蒙特卡罗方法
  2. 李宏毅 强化学习ppo章节

on-policy 和 off-policy

行动策略评估及改善的策略是同一个策略,我们称之为on-policy,可翻译为同策略

行动策略评估及改善的策略是不同的策略,我们称之为off-policy, 可翻译为异策略

接下来我们重点理解这on-policy方法和off-policy方法。

On-policy:

同策略是指产生数据的策略与评估和要改善的策略是同一个策略模型。比如,要产生数据的策略和评估及要改进的策略都是ϵ−soft\epsilon-softϵ−soft策略。其伪代码如图3.5所示
图3.5 同策略蒙特卡罗强化学习

如图3.5产生数据的策略以及进行评估和改进的策略都是ϵ\epsilonϵ-softsoftsoft策略。

Off-policy:

异策略是指产生数据的策略与评估和改善的策略不是同一个策略。我们用π\piπ表示用来评估和改进的策略,用ϵ\epsilonϵ-softsoftsoft表示产生样本数据的策略。

异策略可以保证充分的探索性。例如用来评估和改进的策略π\piπ是贪婪策略,用于产生数据的探索性策略μ\muμ为探索性策略,如ϵ\epsilonϵ-softsoftsoft策略。

用于异策略的目标策略π\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)dxF(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]=1N∑nNf(zn)E[f]=\frac{1}{N}\sum_n^N {f(z^n)}E[f]=N1​∑nN​f(zn),znz^nzn~q(z)~{q(z)} q(z)
这句话的意思是对于变量z,根据q(z)这个概率分布,采样N个数据,每个数据对应有值f(zn)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)dzE[f]=\int{f(z)\frac{p(z)}{q(z)}q(z)}dzE[f]=∫f(z)q(z)p(z)​q(z)dz
≈1N∑nNp(z)q(z)f(z)\approx\frac{1}{N}\sum_n^N{\frac{p(z)}{q(z)}f(z)}≈N1​∑nN​q(z)p(z)​f(z), znz^nzn~q(z)q(z)q(z)

同乘同除不改变值的大小,但由于第二步要经过采样,因此会对方差造成影响,分布差别越大,方差越大。

定义重要性权重:wn=p(zn)q(zn)w^n=\frac{p(z^n)}{q(z^n)}wn=q(zn)p(zn)​ ,普通的重要性采样求积分如方程(3.7)所示为:
E[f]=1N∑nNwnf(zn)E[f]=\frac{1}{N}\sum_n^N {w^nf(z^n)}E[f]=N1​∑nN​wnf(zn),znz^nzn~q(z)~{q(z)} q(z)

由式(3.7)可以知道,基于重要性采样的积分估计为无偏估计,即估计的期望值等于真实的期望。但是,基于重要性采样的积分估计的方差无穷大 (怎么就方差无穷大了?) 。这是因为,原来的被积函数乘上了一个重要性权重,这就改变了被积函数的形状及分布。尽管被积函数的均值没有发生变化,但方差明显发生改变。
在重要性采样中,使用的采样概率分布与原概率分布越接近,方差越小。然而,被积函数的概率分布往往很难求得,或很奇怪,没有简单地采样概率分布能与之相似,如果使用分布差别很大的采样概率对原概率分布进行采样,方差会趋近于无穷大。
一种减小重要性采样积分方差的方法是采用加权重要性采样:

E[f]≈∑n=1Nwn∑n=1Nwmf(zn)E[f]\approx\sum_{n=1}^N{\frac{w^n}{\sum_{n=1}^N{w^m}}f(z^n)}E[f]≈∑n=1N​∑n=1N​wmwn​f(zn)

普通重要性采样和加权的区别在于分母,普通的是采样次数N,加权的分母是所有重要性权重wnw^nwn的和,如果f(zn)=1f(z^n)=1f(zn)=1,那么E[f]=1E[f]=1E[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:12,1:12]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:34,1:14]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],
那么重要性采样后的方差值:
varx−p(x)(f(x)p(x)q(x))=12[202∗12/34+12∗12/14]−右边的值=4013−右边的值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​−右边的值,
原本的方差
varx−p(x)(f(x))=12[202+12]−右边的值=4012−右边的值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​−右边的值
即重要性采样后的方差也可以变小,并不一定是变大。

重要性采样在on-policy和off-policy的具体应用

在异策略(off-policy)方法中,行动策略μ\muμ即用来产生样本的策略,所产生的轨迹概率分布相当于重要性采样中的q[z]q[z]q[z],用来评估和改进的策略π\piπ所对应的轨迹概率分布为p[z]p[z]p[z],因此利用行动策略μ\muμ所产生的累积函数返回值来评估策略π\piπ时,需要在累积函数返回值前面乘以重要性权重。

在目标策略π\piπ下,一次试验的概率为:

上面的公式,用繁琐的语言来描述就是:我们已经有了一个回合的轨迹(st,at,st+1,at+1…sT,aT),对于这个轨迹,在我们的目标策略中,产生的概率是多少?那么就直接计算一下,首先在st的状态下,选择动作ak的概率是π(Ak∣Sk)\pi(A_k|S_k)π(Ak​∣Sk​),其次智能体产生动作ak后,下一步状态达到sk+1的概率是多少?需要有环境的状态转移概率p(Sk+1∣Sk,Ak)p(S_{k+1}|S_k, A_k)p(Sk+1​∣Sk​,Ak​),后面的事件假设是独立的,因此一顿连乘,就拿到了整个轨迹的概率。
下面行动策略是一样的逻辑,只不过行动策略是真的。

在行动策略μ\muμ下,相应的试验的概率为:

因此重要性权重为:

和环境相关的状态转移概率是一样的,所以直接就消除了。

普通重要性采样,值函数估计为如图3.7所示:

这个分母后面有解释。可以这么理解:在一次试验中出现状态s的次数,可以看成是上面公式的N.

我们知道原本v(s)的定义是v(s)=1k∑j=1kGj(s)v(s)=\frac{1}{k}\sum_{j=1}^k{G_j(s)}v(s)=k1​∑j=1k​Gj​(s),但是现在我们有了重要性采样,因此公式就变了,G(s)前面多了一个重要性权重ptTtp_t^{T_t}ptTt​​。


图3.7 普通重要性采样计算公式

现在举例说明公式(3.11)中各个符号的具体含义。

图3.8 重要性采样公式举例解释

t是状态访问的时刻,T(t)T(t)T(t)是访问状态s相对应的那个试验的终止状态所对应的时刻,T(s)\Tau(s)T(s)是状态s发生的所有时刻集合。

加权重要性采样值函数估计为:

考虑这是一个单次回报,也就是说我们目前只采样了一条轨迹。如果是加权重要性采样,此时分子分母的权重是一样的,所以估计值就是GtG_tGt​ 。但是GtG_tGt​根据行为策略估计的,显然是有偏的。所以加权重要性采样是有偏的。
同时加权重要性采样的重要性采样比最大值为1,只有单条轨迹时为1,所以方差比较小。对于常规重要性采样,单次回报的估计值是ptTtGtp_t^{T_t}G_tptTt​​Gt​,经过了纠正,所以理论上无偏。但他的采样比(重要性系数ptTtp_t^{T_t}ptTt​​)有时候可能很大,或者很小,导致回报的方差大。在实际中,由于加权重要性采样的方差很小,更推荐使用。

对于every-visit方法,两种采样方式都是有偏的(这一点我没太明白)。但是当采样的轨迹数不断增加,偏差趋向于0.实际中也经常采用every-visit的方法。因为first-visit的方法需要记录状态首次被访问的时间步。

最后给出异策略每次访问(every-visit)蒙特卡罗算法的伪代码:


需要注意的是:此处的软策略μ\muμ为ϵ\epsilonϵ-softsoftsoft策略,需要改进的策略π\piπ为贪婪策略。

花了好久都没有搞明白最后一张伪代码。我尝试着理解,C(s,a)是(s,a)出现的频次,但是后面的更新和W有关,这个W和动作策略μ\muμ有关,难道是重要性系数?有人看过这张图出自哪儿吗?或者简单讲讲流程。

最后,总结一下:

重点理解on-policy 和off-policy的概念,学会利用重要性采样来评估目标策略的值函数.

经过不少公式推导,我们知道对于不好的概率分布,我们可以用一个新的好用的分布来替代它,替代后,需要经过一个重要性采样的操作,保证期望无偏。这个技术很有用,下一步试着推导一下PPO.

ps: 欢迎做强化的同学加群一起学习:
深度强化学习-DRL:799378128
欢迎关注知乎帐号:未入门的炼丹学徒

重要性采样(Importance Sampling)详细学习笔记相关推荐

  1. 图形学数学基础之重要性采样(Importance Sampling)

    作者:i_dovelemon 日期:2017/08/06 来源:CSDN 主题:Importance Sampling, PDF, Monte Carlo 引言 前面的文章[图形学数学基础之基本蒙特卡 ...

  2. 重要性采样(Importance Sampling)简介和简单样例实现

    重要性采样(Importance Sampling)简介和简单样例实现 在渲染领域,重要性采样这个术语是很常见的,但它究竟是什么呢?我们首先考虑这样的一种情况: 如果场景里有一点P,我们想计算P点的最 ...

  3. 重要性采样Importance Sampling

    参考: https://zhuanlan.zhihu.com/p/41217212 https://zhuanlan.zhihu.com/p/78720910?utm_source=wechat_se ...

  4. 【机器学习分支】重要性采样(Importance sampling)学习笔记

    重要性采样(importance sampling)是一种用于估计概率密度函数期望值的常用蒙特卡罗积分方法.其基本思想是利用一个已知的概率密度函数来生成样本,从而近似计算另一个概率密度函数的期望值. ...

  5. matlab重要性采样,Importance Sampling (重要性采样)介绍 | 文艺数学君

    摘要这一篇是关于重要性抽样(importance sampling)的介绍, 包括他的背景知识, 相关的数学转换和最后的例子. 简介 重要性抽样(importance sampling)是一种近似的抽 ...

  6. 重要性采样(importance sampling)

    重要性采样是统计学习中一种常用的方法.在强化学习中通常和蒙特卡洛方法结合使用. 重要性采样是,使用另外一种分布来逼近所求分布一种方法. 具体形式是这样的:假设我们在想要求取目标分布PPP下函数f(x) ...

  7. 【台大郭彦甫】Matlab入门教程超详细学习笔记二:基本操作与矩阵运算(附PPT链接)

    Matlab入门教程超详细学习笔记二:基本操作与矩阵运算 前言 一.基本操作 1.把matlab当作计算器使用 2.变量 3.控制格式输出 二.矩阵运算 1.矩阵 2.矩阵索引 3.使用:创建向量 4 ...

  8. Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)

    所有示例使用的数据表均为Oracle提供的SQL基础数据表(t_employees.sql dept.sql emp.sql salgrade.sql) 熟练掌握多多练习即可达到完成后端开发所需具备的 ...

  9. 陈宝林《最优化理论与算法》超详细学习笔记 (八)————最优性条件

    陈宝林<最优化理论与算法>超详细学习笔记 (八)----最优性条件 无约束问题的极值条件 必要条件 二阶充分条件 充要条件 约束极值问题的最优性条件 不等式约束的一阶最优性条件 无约束问题 ...

最新文章

  1. ubuntu samba 安装
  2. C Implement a string class with basic functionality
  3. git查看stash内容
  4. jQuery UI Widget(1.8.1)工作原理--转载
  5. jvm性能调优实战 - 34十万QPS的社交APP 如何优化GC性能提升3倍?
  6. 【公告】服务器升级完成
  7. ST发布世界上首款LoRa Soc单片机STM32WL
  8. Memcached 一致性哈希算法PHP实现
  9. 北大读博手记:怎样完成自己的博士生涯?
  10. 把collections.Counter的计数结果转为pandas的DataFrame
  11. android 生成bks_创建 Android bks证书
  12. Python 命令行cmd指定颜色设置
  13. 使用交换机服务器没有响应,登陆难交换机故障现象综合说明
  14. 电脑端(PC)按键精灵——3.其他命令
  15. 基于cobra的go语言命令行解析器
  16. CodeForces - 777D Cloud of Hashtags
  17. ARM7中断处理过程、状态、嵌套
  18. 酷!60 s 速学HTTP 状态码 !
  19. 第十八天:WEB攻防-ASP安全MDB下载植入IIS短文件名写权限解析
  20. 笔记:惠普存储集群忘记密码重置方法

热门文章

  1. 网页转换成电脑exe软件简单办法
  2. python下标越界怎么解决_Python异常处理
  3. teracopy php,Unraid 升级到 UnRaid 6.0的详细操作步骤(三)
  4. java中黑点是什么意思_[Java教程]input输入密码变黑点密文
  5. NumberRunningTextView(数字会滚动的TextView)
  6. MySQL下载安装 完美卸载
  7. Win10电脑怎么恢复出厂设置
  8. java mye,JAVA-MyEclipse第一个实例
  9. 自上而下面向能力的编程思想
  10. TP5集成支付宝h5支付接口