第五章:蒙特卡洛方法
和前几章讲的不一样,蒙特卡洛方法不需要对环境进行完全的建模,而只需要经验,也就是实际或者仿真的与环境进行交互的整个样本序列,包括状态动作和反馈信息。从实际交互中学习并不需要对环境建模,而从仿真交互中学习也只需要能够产生相应的转移样本而不是完整的环境状态转移概率分布。而且很多的例子中产生相应的交互例子很容易,得到概率分布却很难。
蒙特卡洛方法采用平均样本反馈的方法来解决强化学习问题。为了保证得到定义好的reward值,我们只在episodic tasks上使用蒙特卡洛方法。也就是假设每个任务都能分为一个个episode,每个episode结束以后才进行值更新和策略的改进。因此蒙特卡洛法是以一个episode为单位来计算,而不是以每一步(online)来计算。
和第二章的bandit问题类似,蒙特卡洛法用的也是为每个状态或者状态动作对平均反馈的方式。但是在这个方法中有很多个状态,而且不同状态之间相互联系,同时每个动作的选择都在学习中,因此这个问题是非稳态且是associative search的。
为了解决这种非稳态,我们使用了第四章介绍的GPI框架。也就是在样本反馈中计算值函数,同时对策略进行改进最终达到最优。
5.1 Monte Carlo Prediction
首先考虑在给定策略下估计状态值函数的问题。状态的值是从该状态开始之后得到反馈的期望,一个简单的计算方式就是将从该状态开始的反馈值加起来求平均。随着计算次数增加,最终平均值会逼近期望值。这个想法在蒙特卡洛法中一直得到应用。
假设给定了一堆在策略下经过状态s的序列样本,我们想要评估在策略下状态s的值函数。每次转移到状态s都叫做对s的一次访问(visit)。s有可能在样本中被访问多次,因此我们把第一次访问s的时间叫做对s的first-vist。首次访问蒙特卡洛法(first-visit MC method)把第一次访问状态s后得到的反馈值进行平均,而每次访问蒙特卡洛法(every-visit MC method)是把所有访问s后的反馈值进行平均。随着访问次数趋近于无穷,这两种方法的估计值都会收敛至目标值。
练习5.1 因为最后两步停止了要牌不会爆掉而且点数很大容易获胜。 前面一直在要牌,容易爆掉。 在没有11点的牌但是却总点数大于12的情况下继续要牌更容易爆。
练习5.2 不会,因为每个状态只会经过一次。
DP方法需要完全了解环境建模,而且需要知道采取动作之后下一个状态的转移分布,但是有的问题中很难去产生下一状态的概率分布。因此即使对于有环境建模的问题,蒙特卡洛方法只需要生成状态序列的做法也是一个很大的优点。
对于蒙特卡洛方法来说,它的backup diagrams会是一条直线。因为每一个序列的状态轨迹都只有所有可能的其中一条,因此它的backup diagrams是从根节点状态开始,采取一个动作转移到一个状态一直到结束状态。而不像是DP算法中把所有的可能性都考虑到。
关于蒙特卡洛法估计值函数的另一个重要特点是,这个方法对每个状态值的估计是独立的。换句话说,蒙特卡洛法并没有使用bootstrap。
而且蒙特卡洛法估计每一个单个的状态值的时候,计算复杂性和整个状态的数量无关。所以对于只关注某几个状态的时候蒙特卡洛法特别实用,这是蒙特卡洛法对比DP法的第三个优点。
5.2 Monte Carlo Estimation of Action Values
如果没有对环境的建模,那么评估状态动作值函数相对于状态值函数就会更有效。如果有了环境模型,那么只需要状态值函数就可以得到一个贪心策略,但是如果没有环境模型,只有状态值函数是做不到确定一个贪心策略的。因此我们的目标是估计,使用的是policy evaluation方法。
对于评估状态动作值函数来说,计算方法和上节讲的类似,只不过是把遍历每个状态改为遍历每个状态动作对。只不过这里存在一个问题,那就是直接这么评估状态动作对,可能会导致有的状态动作对永远不会被访问。但是为了选择最好的动作,我们需