什么时候使用蒙特卡洛方法:
蒙特卡洛方法适用于免模型的强化学习任务。(“免模型学习”对应于一类现实的强化
学习任务,在该类任务中,环境的转移概率、奖赏函数往往很难得知,甚至很难知道环境中一共有多少状态,因此,在该类学习任务中,学习算法不依赖于环境建模。)
为什么使用蒙特卡洛方法:
在免模型情形下,由于模型未知而导致无法做全概率展开,策略迭代酸中的策略无法评估,此时,只能通过在环境中执行选择的动作,来观察转移的概率和得到的奖赏。
什么是蒙特卡洛方法:
其主要思想是通过多次“采样”,然后求取平均累积奖赏来作为期望累积奖赏的近似。需要注意:和策略迭代算法不同,模型未知时,对状态值函数V的估计是有一定困难的,于是我们将估计对象从V转变为Q,即估计每一对“状态-动作”的值函数。
First-visit MC Method and Every-visit MC Method
First-visit MC Method:对于每一个被采样的episode,在进行对状态值函数或者“状态-动作”值函数进行估计时,只考虑第一个被访问的状态或者动作-状态对。
Every-visit MC Method:对于每一个被采样的episode,在进行对状态值函数或者“状态-动作”值函数进行估计时,考虑了每一个被访问的状态或者动作-状态对。
蒙特卡罗与动态规划不同点:
- 在动态规划算法中需要知道下一个状态对应的概率分布,而在蒙特卡洛算法中不需要。即不需要计算p(s′,r|s,a)。
- 蒙特卡洛方法估计的对象是一个状态或者一个动作状态对,因此对每个状态的估计是相互独立的。
- 蒙特卡罗计算复杂度独立于状态的数目
Monte Carlo Estimation of Action Values
有模型的学习:
根据“状态-动作”值函数可以很好地估计状态值函数,状态值函数可以充分确定策略。
免模型的学习:
对状态值函数的估计并不充分,智能精确地估计每一个动作对应的“状态-
动作”值函数。其原因在于:在真实的episodes中,对于一个已经被确定的策略,有
些存在的动作状态对不一定会被访问到。
针对该种情况,提出如下两种解决方法:
(1)探索性开端(相当于随机初始化);
(2)随机策略,在每个状态下选择任何动作的概率都是非0的。
Monte Carlo Control
蒙特卡洛方法的整体思路是:模拟 -> 抽样 -> 估值。
用蒙特卡洛方法估计最优策略——广义的策略迭代:
(1)更新值函数,使其逼近当前策略下值函数的真实值;
(2)根据当前的值函数改善当前的策略;
不断的循环迭代,使值函数和策略都逼近最优。
结合通用策略迭代(GPI)的思想。
下面是蒙特卡洛方法的一个迭代过程:
- 策略评估迭代
(1) 探索 - 选择一个状态(s, a)。
(2) 模拟 - 使用当前策略π,进行一次模拟,从当前状态(s, a)到结束,随机产生一段真实迭代序列(episode)。
(3) 抽样 - 获得这段序列上的每个状态(s, a)的回报G(s,a),记录G(s,a)到集合Returns(s,a)。
(4) 估值 - q(s, a) = Returns(s, a)的平均值。
(因为状态(s, a)可能会被多次选择,所以状态(s, a)有一组回报值。) - 策略优化 - 使用新的行动价值q(s,a)优化策略π(s)。
蒙特卡洛方法收敛的两个条件:
(1)探索性开端;
(2)无限多episodes;一般会针对所有的状态-行动,或者一个起始(s0,a0)下的所有状态-行动。这也说明持续探索(continual
exploration)是蒙特卡洛方法的主题。
实际算法中对无限多episodes的假设处理的方法是:
(1)保证在每一步的策略估计中逼近qπk,即要确保出错概率和估计偏差的幅度有上界;
(2)放弃完整的策略估值(极端情况:值迭代)。
On-policy and Off-policy
On-policy:
指的是被评估和被改善的是同一个策略。
Off-policy:
指的是被评估和被改善的策略 与 产生数据的策略是不同的策略。
数学基础——Important Sampling
目标:
求函数f在概率分布p下的期望值,即为![]()
![]()
方法:
从“提议分布”中采样,对目标分布进行估计
对应到Off-policy Method中:
目标分布p -> 目标策略
提议分布q -> 行为策略
函数值f(z) -> 值函数
其中,目标策略可以表示为:
重要性采样比为:
在普通的重要性采样下(τ(s)为所有时间序列中s被访问的次数):,这种采样无偏,方差大
在有权重的重要性采样下:,这种采样有偏,方差小
Incremental Implementation
蒙特卡罗估计可以写为递增性形式。假设我们有一系列得回报G1,G2,...,Gn−1,所有都是从同一个状态开始的,并且有随机的权重Wi,所以有估计为:
当又得到一个新的回报Gn的时候,应该如下进行更新:
则最终的程序框架为: