此为《强化学习》第五章。
上一节中的动态规划方法需要知道整个environment的信息,但有的时候,我们只有经验 (Experience) (比如一组采样),而对environment没有任何其他知识;或者我们有一个可以交互的黑盒,通过黑盒可以进行仿真得到experience,但具体黑盒内的概率模型也是不知道的(或者非常难以计算的)。这种情况下,动态规划方法不再适用,蒙特卡洛方法 (Monte Carlo Method, MC) 成为了新的解决方案。
假设我们已经得到了一批在策略 π π 下的采样,我们想以此估计每个状态的值函数 vπ(s) v π ( s ) 。我们定义任一采样中的任一时刻通过状态 s s 叫做对状态 s s 的一次访问 (Visit) 。通常有两种方法来估计 vπ(s) v π ( s ) 。首次访问方法 (First-Visit MC Method) 以每个采样下第一次访问状态 s s 时的回报的平均作为对 vπ(s) v π ( s ) 的估计,每次访问方法 (Every-Visit MC Method) 以每个采样下每次访问状态 s s 时的回报的平均作为对 vπ(s) v π ( s ) 的估计。即
注意到 Gt=Rt+1+Gt+1 G t = R t + 1 + G t + 1 ,所以在遍历时,需要从后向前遍历求出回报 Gt G t 。First-Visit方法和Every-Visit方法非常类似,但在理论性质上略有不同。本章主要讨论First-Visit方法,以下给出First-Visit蒙特卡洛估计方法的伪代码。
蒙特卡洛方法听起来非常简单,但也已经可以用来解决一些问题了,比如21点 (Blackjack) 。
如果我们已知状态之间跳转的概率模型,那么上述的对状态值函数的估计就足够了,因为我们可以通过贪心算法,得到确定性的策略(即 π(s)=a π ( s ) = a )。但如果我们不知道状态之间的概率模型,那么我们就无法确定状态 s s 能跳转到其他哪些状态。此时,对行为值函数进行估计是一种可行的方法。
对行为值函数的估计和状态值函数非常类似,它也是统计每次在状态 s s 选择行为 a a 得到回报的平均。类似地,它也可以分成首次访问方法和每次访问方法,表达式如下:
但是,评估行为值函数有一个问题:很多 (s,a) ( s , a ) 对可能一次都没有被访问。比如当 π π 是一个确定型的策略时,每个状态只能观察到一个行为。由于缺少足够的数据,求平均的数量太少,以至于评估行为值函数并不能提升策略。解决这样问题的一个通用思路是持续探索 (Maintaining Exploration) ,我们可以让起点在所有的 (s,a) ( s , a ) 中随机选择,这样在无数次尝试中总是能够遍历所有的 (s,a) ( s , a ) 。这种方法被称为探索起点 (Exporing Starts) 。
探索起点方法有一定局限性。比如在一种实际交互的游戏中,我们只能从几个固定的起点出发,而不能任意指定起点。一种最常见的替代方法是制定一个探索性的策略,比如 ϵ ϵ -贪心法。
上述两节已经分析了如何使用蒙特卡洛法估计得到状态值函数或者行为值函数,本节讨论如何通过这些值函数来改良策略。方法和上一章中是几乎一样的,那就是贪心法。
可以证明 πk+1 π k + 1 不劣于 πk π k (详见书本)。稍微有一点不同的地方在于,这里的策略将使用探索起点的方法,来增强探索能力。
注意到这里我们有两个不太靠谱的假设,一是探索起点,二是无限次地实验。探索起点的前提我们将在下一章中去掉,而去掉无限次实验前提一般有两种方法。一是考虑置信度,如果很多次实验后仍然有个别 (s,a) ( s , a ) 没有被完全探索,那么它们可能就是不重要的(虽然这种方法也需要大量的实验);二是其实策略评估没有那么重要,不那么准确的策略评估也可以得到较好的结果(比如值迭代)。其实这两种方法似乎是一样的,总之就是让我们放心地不探索所有的可能性。
因此,带探索起点的蒙特卡洛方法伪代码如下。
上一节中已经说明了探索起点的不靠谱,并且也提到了取消探索起点的一个最常见的方法就是采用非确定性的(带概率的)策略。这里也有两类算法,分别叫做On-Policy方法和Off-Policy方法。On-Policy方法使用相同的策略生成数据和制定决策,而Off-Policy方法使用不同的两种策略作为学习者和决策者(On-policy methods attempt to evaluate or improve the policy that is used to make decisions, whereas off-policy methods evaluate or improve a policy different from that used to generate the data)。本节中讨论On-Policy方法。
On-Policy方法选择了一个非确定性的软 (Soft) 策略,用来生成数据和决策,比如 ϵ ϵ -贪心算法。类似之前的算法,我们也使用平均来估计得到 q(s,a) q ( s , a ) ,但在选择策略时,我们仅有 1−ϵ 1 − ϵ 的概率选择 q(s,a) q ( s , a ) 最大的那个行为 a a ,也有 ϵ/(|A(St)|) ϵ / ( | A ( S t ) | ) 的概率随机选择行为。它的伪代码如下:
On-Policy方法面临着一种两难困境:一方面,它们的目标是找到一个最优的策略;另一方面,为了探索所有的可能性,这个策略不得不做一些让步,使它的行为看起来不是最优(才能探索到一些其他行为)。Off-Policy方法试图维持一个确定性的当前最优策略,而使用其它非确定性的软策略来生成数据。学习得到的当前最优策略又被称为目标策略 (Target Policy) ,而用来生成数据的策略被称为行为策略 (Behavior Policy) 。
我读到这里时有个疑问,On-Policy方法可以在最后把 ϵ ϵ -贪心改成纯贪心,这样也能得到确定性策略用于决策,难道和Off-Policy有什么不同吗?我自己构造了一个例子试图说明不同。假如某个状态 s′ s ′ 下一步可以选择 s′′good s g o o d ″ 和 s′′bad s b a d ″ , v(s′′good)=100 v ( s g o o d ″ ) = 100 (假设很大), v(s′′bad)=−∞ v ( s b a d ″ ) = − ∞ ,在 s′ s ′ 的上一步 s s ,是否应该选择 s′ s ′ 作为下一步呢?在On-Policy方法下,应该是不行的,因为按照 ϵ ϵ -贪心, E[v(s′)]=−∞ E [ v ( s ′ ) ] = − ∞ ,即使最后改成了纯贪心,也无法改变对 s′ s ′ 的差评。而在Off-Policy方法下,由于目标策略Target Policy永远不会选择 s′′bad s b a d ″ ,因此在重要性采样中,即使行为策略Behavior Policy有时选择了 s′′bad s b a d ″ ,由于它的权重为 0 0 ,因此不会给 s′ s ′ 带来差评。
On-policy方法往往比较简单,因此书本中通常先考虑On-Policy方法。Off-Policy方法更加复杂,因此收敛速度偏慢,但它更加强大、泛化,因为On-Policy方法只是Off-Policy方法的一种特例。
假设我们的目标策略为 π π ,行为策略为 b b ,使用Off-Policy的一个前提是 π(a|s)>0→b(a|s)>0 π ( a | s ) > 0 → b ( a | s ) > 0 。因为如果行为策略无法触及到这一对 (s,a) ( s , a ) ,那么我们将无从估计目标策略中的 (s,a) ( s , a ) 。当然通常这一条件是能够得到满足的,因为往往 π π 是一个确定性策略,而 b b 是一个非确定性策略。
假设我们以 St S t 为起点,在策略 π π 下经历了 At,St+1,At+1,...,ST A t , S t + 1 , A t + 1 , . . . , S T 的轨迹,那么这个轨迹发生的概率是
这个式子中的 p p 常常是不可知的,不过幸运的是,当我们求解重要性采样的系数时,它们都会被约去。
在使用蒙特卡洛法求 vb(s)=E[Gt|St=s] v b ( s ) = E [ G t | S t = s ] 的时候,只能得到策略 b b 的值函数,它显然不能收敛到策略 π π 。这时重要性采样的系数就能派上用场。
因此Off-Policy方法结合First-Visit状态值函数的式子为
上式被称为普通重要性采样 (Ordinary Importance Sampling) 。另外还存在另一不同的加权重要性采样 (Weighted Importance Sampling) ,式子如下:
先说结论。普通重要性采样无偏,但方差较大,可能出现极端结果;加权重要性采样有偏(虽然偏差会逐渐减小),但方差较小。举个例子,考虑在所有样本中第一次访问 s s ,由于策略 b b 的探索性,在普通重要性采样中, ρ ρ 可能会很大,从而带来过于极端值函数;在加权重要性采样中, ρ ρ 被消去了, vπ(s)=vb(s) v π ( s ) = v b ( s ) ,这结果肯定是有偏差的,但这(在后续过程中)保证了权重不会大于1。在实践中,加权重要性采样的方差要明显低得多,因此更多地被采纳。
Every-Visit方法对普通或加权重要性采样都是有偏的,尽管随着时间偏差也能逐渐趋向于 0 0 。实践中,Every-Visit方法比First-Visit方法更易实现,更受欢迎。
前几章中都有采用增量式实现来加速算法、节约空间,蒙特卡洛法也一样。假设我们有一组不同experience下经过状态 s s 的回报 G1,G2,...,Gn G 1 , G 2 , . . . , G n (注意它们之间其实没有顺序关系,只是在不同采样下经过状态 s s 而已),它们对应的权重为 W1,W2,...,Wn W 1 , W 2 , . . . , W n ,根据加权重要性采样,有
(这里使用 n n 而不用 t t 作为下标,是因为避免把 n+1 n + 1 理解为下一时刻。实际上, n+1 n + 1 表示下一次经过状态 s s 。另外这里的下标和书上略有不同,因为书上默认 v1(s) v 1 ( s ) 为初始值,而本文为自己理解方便,改为 v0(s) v 0 ( s ) 为初始值,这样就不会有奇怪的 n−1 n − 1 。)令 Cn=∑nk=1Wk C n = ∑ k = 1 n W k 可以得到
于是可以得到增量式的、Off-Policy的、加权重要性采样的、Every-Visit的、对行为值函数进行迭代的蒙特卡洛方法伪代码:
注意 G G 和 W W 是全局的,它们每个时刻都要更新;而 C C 和 Q Q 是基于状态行为对 (s,a) ( s , a ) 的,只有这个方法在策略 b b 中被执行了,才会更新其中的一个 (s,a) ( s , a ) 。
On-Policy方法直接使用(带探索的)贪心法(或其他软策略)更新 π π 就可以了,因为On-Policy不区分目标策略和行为策略。Off-Policy也很类似,一方面它用纯贪心法更新了 π π ,一方面用软策略更新了 b b ,但它们基于的值函数是同一套(都是 π π 的)。与上一个伪代码几乎完全一样,这一节给出Off-Policy蒙特卡洛控制的伪代码(其他参数,比如加权重要性采样等与上一个伪代码相同)。
暂略。
暂略。
《Reinforcement Learning: An Introduction (second edition)》Richard S. Sutton and Andrew G. Barto
上一篇:《强化学习Sutton》读书笔记(三)——动态规划(Dynamic Programming)
下一篇:《强化学习Sutton》读书笔记(五)——时序差分学习(Temporal-Difference Learning)