强化学习大致上可分为两类,一类是Markov Decision Learning,另一类是与之相对的Model Free Learning

分为这两类是站在问题描述的角度上考虑的。同样在解决方案上存在着两种方法对应着这两类问题描述,即Dynamic Programming(DP)和Stochastic Method,其中DP方法可以分为Policy Iteration与Value Iteration,统计方法皆以Monte Carlo为基础,延申后产生Temporal-Difference(TD)与TD($\lambda$)算法,并可再细分为on-policy的SARSA算法与off-policy的Q-learning。依据这个分类规则,可以发现所谓的on-policy与off-policy皆是出现在统计方法之中,且以Monte Carlo作为实现基础的,但实际上DP方法使用的也大都是on-policy策略,这其中包括了epsilon-greedy,UCB和Softmax。可以从之前我们对这几种动作选择策略的分析上找出一些关于on-policy的共同点,将其列举出来:

  • 都属于软策略(soft-policy),即没有动作的选择概率为0
  • 在学习过程中,使用前一次迭代更新的动作选择策略作为本次迭代的动作选择策略

可以发现on-policy中的动作选择策略是随迭代在试验中不断更新的,而off-policy与之不同之处便在于此。关于on-policy与off-policy的区别在Sutton书中有这么一段描述:

The on-policy approach in the preceding section is actually a compromise—it learns action values not for the optimal policy, but for a near-optimal policy that still explores. A more straightforward approach is to use two policies, one that is learned about and that becomes the optimal policy, and one that is more exploratory and is used to generate behavior.

前一句话表明on-policy算法是在保证跟随最优策略的基础上同时保持着对其它动作的探索性,对于on-policy算法来说如要保持探索性则必然会牺牲一定的最优选择机会。后一句话表明,有一个更加直接的办法就是在迭代过程中允许存在两个policy,一个用于生成学习过程的动作,具有很强的探索性,另外一个则是由值函数产生的最优策略,这个方法就被称作off-policy。

off-policy与重要性采样(Importance Sampling)密不可分,虽然这其中的逻辑并不复杂,但初学时确实有些难理解,尤其是在Sutton书中突然出现Importance Sampling的概念,而且并没有很多解释。Importance Sampling主要的作用在于通过一个简单的可预测的分布去估计一个服从另一个分布的随机变量的均值。在实际应用off-policy时,迭代过程通常会有两个策略,一个是Behavior policy,用于生成学习过程所需要选择的动作,这一个简单的,探索性非常强的关于动作选择的分布,另一个是Target policy,这是我们最终希望得到的最优动作选择分布。应用Importance Sampling之处在于通过Behavior policy去估计Target policy可能反馈回来的收益的均值,即用一个简单分布去估计服从另一个分布的随机变量的均值。由于Monte Carlo方法主要应用离散随机变量问题,所以我们也以离散随机变量为例解释如何实现Importance Sampling。

假设一个随机变量$ A_1 $服从离散分布$ P $,另一个随机变量$ A_2 $服从离散分布$ Q $,其中$ P = \{p_1, p_2, ..., p_n \} $,$ Q = \{q_1, q_2, ..., q_n\} $。离散随机变量$A_1$可以写为$ A_2 = \{x_1, x_2, ..., x_n\} $,$A_2$中每个元素出现的概率都对应这离散分布$ P $,随机变量$ A_2 $也同样写为$ A_2 = \{x_1, x_2,..., x_n\} $,但其元素出现的概率对应离散分布$ Q $(注意:Importance Sampling实现的条件之一,随机变量服从的分布不同但其元素的集合是相同的)。依据这个基本假设,我们可以写出期望$ E[A_1] $与期望$ E[A_2] $:

$$ E[A_1] = \sum_{i = 1}^{n} x_i p_i $$

$$ E[A_2] = \sum_{i = 1}^{n} x_i q_i $$

如使用统计方法去估计随机变量$ A_1 $与随机变量$ A_2 $的均值$ M[A_1] $与$ M[A_2] $,可以写为(均试验N次):

$$ M[A_1] = \frac{1}{N}(x_1 K_1 + x_2 K_2 + .... + x_n K_n) $$

$$ M[A_2] = \frac{1}{N}(x_1 M_1 + x_2 M_2 + .... + x_n M_n) $$

在上述式子中,$K_i$与$ M_i $分别表示$ x_i $在两次试验中出现的次数,所以一定存在$ \sum K_i = \sum M_i = N $。依据Monte Carlo方法的基本原理,当试验次数N趋于无穷大时,统计均值一定是期望的无偏估计。所以实际运用中,可以将两者等同看待。有了统计方法的最基本原理作为支撑,我们下面来看Importance Sampling究竟解决了一个什么问题。

如果现在只能够做关于随机变量$ A_2 $的试验,但是又想要同时估计随机变量$ A_1 $的均值,应当如何呢?其实很简单,只需要将统计均值中的$ K_i $替换成$ M_i $就好了。当试验次数$ N\rightarrow \infty $,可以有$ K_i \approx N p_i$,而$ M_i \approx N q_i $,所以可以将$ K_i $估计为$ M_i \frac{p_i}{q_i} $,所以随机变量$ A_1 $的均值估计可以写为:

$$ M[A_1] \approx \frac{1}{N}\sum_{i = 1}^{N} \left(x_i \frac{p_i}{q_i}\right) M_i $$

这便是普通重要性采样(Ordinary Importance Sampling)的基本原理和表达式,其中系数$ \frac{p_i}{q_i} $被称作Importance Ratio。这里需要注意一点的是,普通重要性采样并不严格符合统计方法的基本原理,这主要是源于对$K_i$的近似处理,导致了$ \sum \frac{p_i}{q_i} M_i $并非严格上等于试验次数N,这也导致了所谓的"Infinite Variance",也就是无论N多大(只要不是正无穷),普通重要性采样(OIS)的估计值的方差始终不会趋于0。为了解决这个问题,只需要把试验次数N替换为估计的试验次数即可,估计的试验次数就是$ \sum \frac{p_i}{q_i} M_i $,这个方法也被称为权重重要性采样(Weighted Importance Sampling)。权重重要性采样的表达式可以写为:

$$ M[A_1] = \frac{\sum \left(x_i \frac{p_i}{q_i}\right) M_i}{ \sum \frac{p_i}{q_i} M_i } $$

那么如何把重要性采样应用到off-policy算法中呢?这中间还需要有一个构建分布的过程,首先要了解的是,off-policy中的两个动作选择策略分布,behavior和target,并不是Importance Sampling的应用对象。在Monte Carlo过程中,从一个状态转移到最终状态获得的收益$ R $所服从的分布才是Importance Sampling中所需要的分布,而这个分布是通过behavior policy或target policy计算出来的。举个例子,在Monte Carlo过程中,一个episode的状态转移过程为:

$$ S_1 \ \Rightarrow\ (S_1, A_1) \ \Rightarrow \ (S_2, A_1) \ \Rightarrow \ (S_1, A_3) \ \Rightarrow \ S_T $$

从处于状态$ S_1 $并选择动作$ A_1 $开始,因为各个状态下动作的选择都是独立的,最终到达状态$ S_T $的概率可以写为:

$$ P_r(S_1, A_1) = \pi_b(S_1, A_1)\pi_b(S_2, A_1)\pi_b(S_1, A_3) $$

我们知道,在off-policy中,执行episode中应用的动作选择策略为behavior policy,将其称为$ \pi_b $。计算出的$ P_r(S_1, A_1) $才是对应状态$S_1$在执行动作$ A_1 $产生收益$R_1$的分布$P$,相应的由target policy通过计算得出的收益$R_2$的分布为$Q$,现在问题就转变成了Importance Sampling可以解决的问题了。

已知随机变量$ R_1 $服从分布$ P $,随机变量$ R_2 $服从分布$ Q $,当前只对随机变量$ R_1 $进行试验,求解随机变量$ R_2 $的统计均值。写出权重重要性采样的表达式(求和形式):

$$ M[R_2] = \frac{\sum \left(r_i \frac{p_i}{q_i}\right) M_i}{ \sum \frac{p_i}{q_i} M_t } $$

在这个式子中,$r_i$表示在第i个episode中所获得的Return,也就是收益,$ p_i $与$ q_i $分别表示在第i个episode由behavior policy和target policy产生收益$r_i$的概率。对于在状态$S_1$下执行动作$ A_1 $所产生的Importance Ratio可以进一步由动作选择策略来计算。假设第i个episode以状态$S_1$执行动作$A_1$为起始,其的所有状态动作选择过程为:

$$ S_1 \ \Rightarrow\ (S_1, A_1) \ \Rightarrow \ (S_2, A_2) \ \Rightarrow ....\Rightarrow\ (S_{T-1}, A_{T-1}) \ \Rightarrow \ S_T $$

则Importance Ratio可以写为:

$$ \frac{p_i}{q_i} = \frac{\pi_b(S_1, A_1) \pi_b(S_2, A_2)....\pi_b(S_{T - 1}, A_{T-1})}{\pi_t(S_1, A_1) \pi_t(S_2, A_2)....\pi_t(S_{T - 1}, A_{T-1})} = \prod_{i = 1}^{T-1} \frac{\pi_b(S_i, A_i)}{\pi_t(S_i, A_i)}$$

依据我们之前所提到的Monte Carlo最最重要的性质“每一个状态的估计都是独立的,不依赖于其它状态的! ”(可以参考博文:从蒙特卡罗方法正式引入强化学习),在第i个episode中,状态$S_2$执行动作$A_2$的估计中的Importance Ratio可以写为:

$$ \mathrm{For} \ (S_2, A_2), \  \frac{p_i}{q_i} = \prod_{i = 2}^{T-1} \frac{\pi_b(S_i, A_i)}{\pi_t(S_i, A_i)}$$

依此类推,对于状态$S_{T-1}$执行动作$A_{T-1}$,Importance Ratio可以写为:$ \frac{\pi_b(S_{T-1}, A_{T-1})}{\pi_t(S_{T-1}, A_{T-1})} $,这也就是为什么在Off-policy MC prediction算法中,在一个episode中,更新估计所有中间状态的Importance Ratio是从$ t = T - 1 $开始的原因所在了。让我们把权重重要性采样的求和形式写为迭代更新形式,以求在实现过程中更加直观。

让我们设权重重要性采样求和形式中的分子为$ R_s(S, A) $,分母为$ C_s(S, A) $,前一个表示Return之和,后一个表示估计试验次数之和,用$ W $表示Importance Ratio。

假设当前为第i个episode,返回的收益为R_i,从$ t = T - 1 $开始更新(W的初值为1):

$$ \begin{align} & W = W \frac{\pi_b(S_{t}, A_{t})}{\pi_{tar}(S_{t}, A_{t})} \\ & C_s(S_t, A_t) = C_s(S_t, A_t) + W\\ & R_s(S_t, A_t) = R_s(S_t, A_t) + WR_i  \end{align} $$

如果我们把上述的更新形式写为Incremental形式,Off-policy MC prediction算法就算是完成了:

【RL系列】On-Policy与Off-Policy的更多相关文章

  1. 【RL系列】马尔可夫决策过程——状态价值评价与动作价值评价

    请先阅读上两篇文章: [RL系列]马尔可夫决策过程中状态价值函数的一般形式 [RL系列]马尔可夫决策过程与动态编程 状态价值函数,顾名思义,就是用于状态价值评价(SVE)的.典型的问题有“格子世界(G ...

  2. 【RL系列】马尔可夫决策过程中状态价值函数的一般形式

    请先阅读上一篇文章:[RL系列]马尔可夫决策过程与动态编程 在上一篇文章里,主要讨论了马尔可夫决策过程模型的来源和基本思想,并以MAB问题为例简单的介绍了动态编程的基本方法.虽然上一篇文章中的马尔可夫 ...

  3. 【RL系列】SARSA算法的基本结构

    SARSA算法严格上来说,是TD(0)关于状态动作函数估计的on-policy形式,所以其基本架构与TD的$v_{\pi}$估计算法(on-policy)并无太大区别,所以这里就不再单独阐述之.本文主 ...

  4. 【RL系列】从蒙特卡罗方法步入真正的强化学习

    蒙特卡罗方法给我的感觉是和Reinforcement Learning: An Introduction的第二章中Bandit问题的解法比较相似,两者皆是通过大量的实验然后估计每个状态动作的平均收益. ...

  5. 【RL系列】Multi-Armed Bandit笔记——UCB策略与Gradient策略

    本篇主要是为了记录UCB策略与Gradient策略在解决Multi-Armed Bandit问题时的实现方法,涉及理论部分较少,所以请先阅读Reinforcement Learning: An Int ...

  6. 【RL系列】Multi-Armed Bandit笔记补充(一)

    在此之前,请先阅读上一篇文章:[RL系列]Multi-Armed Bandit笔记 本篇的主题就如标题所示,只是上一篇文章的补充,主要关注两道来自于Reinforcement Learning: An ...

  7. Influx Sql系列教程二:retention policy 保存策略

    retention policy这个东西相比较于传统的关系型数据库(比如mysql)而言,是一个比较新的东西,在将表之前,有必要来看一下保存策略有什么用,以及可以怎么用 I. 基本操作 1. 创建re ...

  8. HTTP系列之Referer和Referrer policy简介

    目录 @ 1.前言摘要 在csdn网站随便抓个链接来看看: Referer参数: referrer policy是unsafe url的,ok,下面介绍一下Referer和referrer polic ...

  9. 【RL系列】MDP与DP问题

    推荐阅读顺序: Reinforcement Learning: An Introduction (Drfit)  有限马尔可夫决策过程 动态编程笔记 Dynamic programming in Py ...

随机推荐

  1. .net core API 使用swagger

    第一种方法:直接添加swagger,会在app_start中生成SwaggerConfig,在该文件中配置相关内容(把生成xml打开): 第二种方法:添加四个引用文件Swashbuckle.AspNe ...

  2. [转载]Linux crontab命令解析

    名称 : crontab crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表.-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权 ...

  3. winfroms更换皮肤

    一.添加控件lrisSkin.dll 然后把继承的窗体更换成别人做好的窗体类 能达到换肤的效果     二. 全部源代码就一行: skinEngine1.SkinFile = "WaveCo ...

  4. sizeof 用于返回一个对象或者类型所占据的内存数

    整数类型 sizeof(int); 4字节or8字节 函数 sizeof(函数); 函数返回值类型占据的字节数 字符数组 char c[] = "abc"; sizeof(c); ...

  5. 【2017 ICPC亚洲区域赛北京站 J】Pangu and Stones(区间dp)

    In Chinese mythology, Pangu is the first living being and the creator of the sky and the earth. He w ...

  6. js实现把textarea通过换行或者回车把多行数字分割成数组,并且去掉数组中空的值。

    删除数组指定的某个元素 var msg = " ";  //textarea  文本框输入的内容 var emp = [ ];   //定义一个数组,用来存msg分割好的内容 1. ...

  7. 《Redis设计与实现》- 数据库

    1. 服务器中数据库结构 Redis 服务器将所有数据库都保存在服务器状态 redisServer 结构的 db 数组中,由 redisDb 结构代表一个数据库 struct redisServer ...

  8. 物联网通信 - RESTDemo示例程序(Python版本)

    QQ:505645074 下载地址: https://pan.baidu.com/s/1VHtni6rVslXkSBTW26jXTg GET接口 http://127.0.0.1:5000/test/ ...

  9. Python学习笔记十:json序列化,软件结构目录规范,ATM作业讲解,import本质论

    json序列化 将系统的某个状态保存为字符串(挂起),序列化. import json json.dumps():序列化 json.loads():反序列化 简单类型数据处理 import pickl ...

  10. laravel5实现微信第三方登录功能

    背景 最近手头一个项目需要实现用户在网站的第三方登录(微信和微博),后端框架laravel5.4. 实现过程以微信网页版第三方登录,其他于此类似,在此不做重复. 准备工作 网站应用微信登录是基于OAu ...