《强化学习》第五章 蒙特卡洛方法

第五章 蒙特卡洛方法


在这一章中,我们考虑第一类实用的估计价值函数并寻找最优策略的方法。与第4章不同,在这里我们 并不假设拥有完备的环境知识。蒙特卡洛算法仅仅需要 经验,即从真实或者模拟的环境交互中采样得到的状态、动作、收益的序列。从 真实经验中进行学习是非常好的,因为它不需要关于环境动态变化规律的先验知识,却依然能够达到最优的行为。从 模拟经验中学习也是同样有效的,尽管这时需要一个模型,但这个模型只需要能够生成状态转移的一些 样本,而不需要像动态规划(DP)算法那样生成所有可能转移的概率分布。在绝大多数情况下,虽然很难得到显式的分布,但从希望得到的分布进行采样却很容易。

**蒙特卡洛算法通过平均样本的回报来解决强化学习问题。**为了保证能够得到有良好定义的回报,这里我们只定义用于分幕式任务的蒙特卡洛算法。在分幕式任务中,我们假设一段经验可以被分为若干个幕,并且无论选取怎样的动作整个幕一定会终止。价值估计以及策略改进在整个幕结束时才进行。**因此蒙特卡洛算法是逐幕做出改进的,而非在每一步(在线)都有改进。**通常,术语“蒙特卡洛”泛指任何包含大量随机成分的估计方法。在这里我们用它特指那些对完整的回报取平均的算法(而非在下一章中介绍的从部分回报中学习的算法)

第2章中的赌博机算法采样并平均每个动作的收益,蒙特卡洛算法与之类似,采样并平均每一个“状态-动作”二元组的回报。区别在于现在有多个状态,并且相互关联。换言之,在某个状态采取动作之后的回报取决于在同一个幕内后来的状态中采取的动作。由于所有动作的选择都在随时刻演进而不断地学习,所以从较早状态的视角来看,这个问题是非平稳的。

为了处理其非平稳性,我们采用了类似于第4章中研究DP时提到的广义策略迭代(GPI)算法的思想。当时我们从马尔科夫决策过程的知识中计算价值函数,而现在我们从马尔科夫决策过程采样样本的经验回报中学习价值函数

5.1 蒙特卡洛预测

我们首先考虑如何在给定一个策略的情况下,用蒙特卡洛算法来学习其状态价值函数。

假设给定在策略 π \pi π下途径状态s的多幕数据,我们想估计策略 π \pi π下状态s的价值函数 v π ( s ) v_\pi(s) vπ(s)。在一幕中第一次访问s被称为首次访问首次访问型MC算法用s的所有首次访问的回报的平均值估计 v π ( s ) v_\pi(s) vπ(s),而每次访问型MC算法则使用所有访问的回报的平均值。它们最终都会(对于每次访问型MC算法是二次收敛)收敛。

下框中展示的是“首次访问型MC算法”的伪代码。它需要检查 S t S_t St​是否在当前幕出现过。

在这里插入图片描述

当s的访问次数(或首次访问次数)趋向无穷时,首次访问型MC和每次访问型MC均会收敛到 v ∗ ( s ) v_*(s) v(s)

下面我们通过一个例子来讲解如何应用蒙特卡洛算法。

例5.1 二十一点

二十一点是一种流行于赌场的游戏,其目标是使得你的扑克牌点数之和在不超过21的情况下越大越好。J、Q、K的点数视作10,A既可以视作1也可以视作11。假设每一个玩家都独立地与庄家进行比赛。游戏开始时会给各玩家与庄家发两张牌。庄家的牌一张正面朝上一张背面朝上。玩家直接获得21点(一张A与一张10)的情况称为天和。此时玩家直接获胜,除非庄家也是天和,那就是平局。如果玩家不是天和,那么他可以一张一张地继续要牌,知道他主动停止(停牌)或者牌的点数和超过21点(爆牌)。如果玩家爆牌了就算输掉比赛。如果玩家选择停牌,就轮到庄家行动。庄家根据一个固定的策略进行游戏:他一直要牌,直到点数等于或超过17时停牌。如果庄家爆牌,那么玩家获胜,根据谁的点数更靠近21决定胜负或平局。

二十一点是一个典型的分幕式有限马尔可夫决策过程。可以将每一局看作一幕。胜、负、平局分别获得收益+1、-1和0。每局游戏进行中的收益都为0,并且不打折扣( γ = 1 \gamma=1 γ=1);所以最终的收益即为整个游戏的回报。玩家的动作为要牌或停牌状态则取决于玩家的牌和庄家显示的牌。 *我们假设所有的牌来自无穷多的一组牌(即每次取出的牌都会再放回牌堆),因此就没有必要记下已经抽了哪些牌。*如果玩家手上有一张A,可以视作11且不爆牌,那么称这张A为可用的。此时这张牌总会被视作11,因为如果视作1的话,点数综合必定小于等于11,而这时玩家就会要牌。所以玩家做出的选择只会依赖于三个(状态)变量:手牌的总和(1221),庄家显示的牌(A10),以及他是否有可用的A。这样共计200个状态。

考虑下面这种策略,玩家在手牌点数之和小于20时要牌,否则停牌。为了通过蒙特卡洛算法计算这种策略的状态价值函数,需要根据该策略模拟很多次游戏,并且计算每一个状态回报的平均值。得到如图5.1所示的状态价值函数
在这里插入图片描述

图5.1 策略:点数和为20或21时停牌,通过MC策略评估计算得到的近似状态价值函数

从图可以看出,有可用的A的状态估计在模拟了10 000幕游戏后仍然不确定、不规律,因为“用可用A”是比较罕见的状态,但是在模拟了500 000局游戏后,价值函数都能很好地近似。

练习 5.1

考虑图5.1右侧的图。为什么估计的价值函数在最后两行突然增高?为什么它在最靠左侧的一列降低?为什么上方图中靠前的值比下方图中对应的位置要高?

答:倒数第二行是一个临界值。点数小于二十对应要牌操作,大于20就停牌,此时不会爆牌,游戏的一局结束,获得收益。如果点数在20~21,更有可能获得正收益,所以价值函数更高。如果点数小于20,则继续要牌,状态转移为20及以上或直接爆牌,获得正收益的机会相对更小。

最左侧一列,庄家显示的牌有A,代表庄家的赢面更大,所以价值函数降低。

上方图中表示的是有可用A的情况,它在点数较小的时候可以充当11的点数,并且不会爆牌,所以状态转移到靠后的行,状态价值相对变高。而下方图中表示的是没有可用A的情况,A如果充当11点会爆牌,所以A只能充当1,因此点数之和更小,状态价值相对更小。

  • 什么是on-policy和off-policy?
  • importance sampling 是什么?

练习5.2

加入我们在解决二十一点问题时使用的不是首次访问蒙特卡洛算法而是每次访问型蒙特卡洛算法,那么你觉得结果会非常不一样吗?为什么?

标答:结果是一样的,因为这款游戏是无记忆的(所有的牌来自无穷多的一组牌)。


**即使我们完全了解这个任务的环境知识,使用DP方法来计算价值函数也不容易。**因为DP需要知道下一时刻的概率分布,它需要知道表示环境动态的四元函数p,而这在二十一点问题中是很难得到的。比如,假设玩家手牌的点数为14,然后选择停牌。如果将玩家最后得到+1的收益的概率视作庄家显示的牌的函数,那么该如何进行求解?在DP之前必须计算得到所有的这些概率,然而这些计算通常既复杂又容易出错。相反,通过蒙特卡洛算法生成一些游戏的样本则非常容易,且这种情况很常见。蒙特卡洛算法只需利用若干幕采样序列就能计算的特性是一个巨大的优势,即便我们已知整个环境的动态特性也是如此。

**我们是否能够将回溯图的思想应用到蒙特卡洛算法中呢?**回溯图的基本思想是顶部为待更新的根节点,下面则是中间与叶子结点,它们的收益和近似价值都会在更新时用到。

如下图所示,在蒙特卡洛算法中估计 v π v_\pi vπ时,根为一个状态节点,然后往下是某幕样本序列一直到终止状态为止的完整轨迹,其中包含该幕中的全部状态转移。**DP的回溯图显示了所有可能的转移,而蒙特卡洛算法则仅仅显示在当前幕中采样到的那些转移。 ** DP的回溯图仅仅包含一步转移,而蒙特卡洛算法则包含了到这一幕结束为止的所有转移。回溯图上的这些区别清楚地体现了这两种算法之间的本质区别。
在这里插入图片描述

**蒙特卡洛算法的一个重要的事实是:对于每个状态的估计是独立的,而不是自举的。**这与DP完全不同。

*特别注意,计算一个状态的代价与状态的个数是无关的。*这使得蒙特卡洛算法适合在仅仅需要获得一个或者一个子集的状态的价值函数时使用。我们可以从这个特定的状态开始采样生成一些幕序列,然后获取回报的平均值,而完全不需要考虑其他的状态。

蒙特卡洛算法相比于DP的三个优势:

  • 可以从实际经验学习
  • 可以从模拟经历学习
  • 计算一个状态的代价与状态的个数是无关的

例5.2 肥皂泡

在这里插入图片描述

一个闭合线框浸泡在肥皂水中,沿着线框边缘形成了一个肥皂泡。如果线框的几何形状不规则但是已知,我们该如何计算肥皂泡表面的形状呢?这个形状满足任意一点受到相邻部分施加的外力和为零的条件(忽略重力?)。这意味着在表面上的任意一点,其高度等于它领域的其他点的高度的平均值。此外,表面的边界恰好与线框重合。这个问题通常的解法是将整个表面网格化,然后通过迭代计算每个网格的高度。在线框上的网格高度固定为线框的高度,其他的点则调整为四个相邻网格高度的平均值。就像DP的策略迭代一样,不停迭代这个过程,最终会收敛到一个所求表面的近似值。

蒙特卡洛方法最早用来解决的问题类型与这个问题十分相似。我们可以不进行上述的迭代计算,而是在表面选一个网格点开始随机行走,每一步等概率地走到相邻的四个网格点之一,直到到达边界。这样到达边界点的高度的期望值就是起点高度的一个近似(???)。因此,某个网格点的高度可以通过从此点开始的多次随机行走的终点的高度的平均值来近似。如果人们只对一个点,或者一小部分点组成的集合比较感兴趣,那么这种蒙特卡罗法比起迭代法更加有效率。

5.2 动作价值的蒙特卡洛估计

如果无法得到环境的模型,那么计算动作的价值(“状态-动作”二元组的价值,也即动作价值函数的值)比起计算状态的价值更加有用一些。有模型的情况下,单靠状态价值函数就足以确定一个策略:用在DP那一章讲过的方法,我们只需简单地向前看一步,选取特定的动作,使得当前收益与后继状态的价值函数之和最大即可。( π ( s ) = a r g m a x a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ V ( s ′ ) ] \pi(s)=\underset{a}{argmax}\sum_{s',r}p(s',r|s,a)[r+\gamma V(s')] π(s)=aargmaxs,rp(s,rs,a)[r+γV(s)])但在没有模型 p ( s ′ , r ∣ s , a ) p(s',r|s,a) p(s,rs,a)未知)的情况下,仅仅有状态价值函数是不够的。我们必须通过显式地确定每个动作的价值来确定一个策略。所以这里我们主要的目标是使用蒙特卡洛算法确定 q ∗ q_* q。因此我们首先考虑动作价值函数的策略评估问题。

动作价值函数的策略评估问题的目标就是估计 q π ( s , a ) q_\pi(s,a) qπ(s,a),即在策略π下状态从s采取动作a的期望回报。只需将对状态的访问改为对“状态-动作”二元组的访问,蒙特卡洛算法就可以用几乎和之前完全相同的方式来解决此问题。和之前一样,在对每个“状态-动作”二元组的访问次数趋向无穷时,这些方法都会二次收敛到动作价值函数的真实期望值。

这里唯一的坑在于一些“状态-动作”二元组可能永远都不会被访问到。但是,我们为了比较这些动作,又需要估计在一个状态下所有可采取的动作的价值函数,而不仅仅是最好的那个动作。

这就是在第2章中提及的,如何保持试探的普遍问题。如何保证所有“状态-动作”二元组都有非零的概率被选为起点?这样就保证了采样的幕趋向无穷的时候,每一个“状态-动作”二元组都会被访问到无数次。我们把这种假设称为试探性出发。

试探性出发假设有时非常有效,但当然也并非总是那么可靠。

练习5.3

计算 q π q_\pi qπ的蒙特卡洛估计的回溯图是什么样的?

答:和书中提到的状态值一样,只是我们有状态-动作对而不是状态。

5.3 蒙特卡洛控制

现在已经可以考虑如何使用蒙特卡洛估计来解决控制问题了,即如何近似最优的策略。基本的思想是采用在DP章节中介绍的广义迭代(GPI)。在GPI中,我们同时维护一个近似的策略和近似的价值函数。价值函数会不断迭代使其更加精确地近似对应当前策略的真实价值函数,而当前的策略也会根据当前的价值函数不断调优。下图显示了这一过程。
在这里插入图片描述

首先,我们讨论经典策略迭代算法的蒙特卡洛版本。

π 0 ⟶ E q π 0 ⟶ 1 π 1 ⟶ E q π 1 ⟶ I π 2 ⟶ E ⋯ ⟶ I π ∗ ⟶ E q ∗ \pi_{0} \stackrel{\mathrm{E}}{\longrightarrow} q_{\pi_{0}} \stackrel{1}{\longrightarrow} \pi_{1} \stackrel{\mathrm{E}}{\longrightarrow} q_{\pi_{1}} \stackrel{\mathrm{I}}{\longrightarrow} \pi_{2} \stackrel{\mathrm{E}}{\longrightarrow} \cdots \stackrel{\mathrm{I}}{\longrightarrow} \pi_{*} \stackrel{\mathrm{E}}{\longrightarrow} q_{*} π0Eqπ01π1Eqπ1Iπ2EIπEq

这里, ⟶ E \stackrel{\mathrm{E}}{\longrightarrow} E表示策略评估,而 ⟶ I \stackrel{\mathrm{I}}{\longrightarrow} I表示策略改进。假设我们观测到了无限多幕的序列,并且这些幕保证了试探性出发假设。在这种情况下,对于任意的 π k \pi_k πk,蒙特卡洛算法都能精确地计算对应的 q π k q_{\pi_k} qπk

策略改进的方法是在当前价值函数上贪心地选择动作。由于我们有动作价值函数,所以在贪心的时候完全不需要使用任何的模型信息。对于任意的一个动作价值函数q,对应的贪心策略为:对于任意一个状态 s ∈ S s \in S sS,必定选择对应动作价值函数最大的动作
π ( S ) ≐ a r g max ⁡ a q ( s , a ) . \pi(S)\doteq arg \underset{a}{\operatorname{max}}q(s,a). π(S)argamaxq(s,a).
策略改进可以通过将 q π k q_{\pi_k} qπk对应的贪心策略作为 π k + 1 \pi_{k+1} πk+1来进行。这样的 π k \pi_{k} πk π k + 1 \pi_{k+1} πk+1满足策略改进定理,因为对于所有的状态 s ∈ S s \in S sS
q π k ( s , π k + 1 ( s ) ) = q π k ( s , argmax ⁡ a q π k ( s , a ) ) = max ⁡ a q π k ( s , a ) ⩾ q π k ( s , π k ( s ) ) ⩾ v π k ( s ) \begin{aligned} q_{\pi_{k}}\left(s, \pi_{k+1}(s)\right) &=q_{\pi_{k}}\left(s, \underset{a}{\operatorname{argmax}} q_{\pi_{k}}(s, a)\right) \\ &=\max _{a} q_{\pi_{k}}(s, a) \\ & \geqslant q_{\pi_{k}}\left(s, \pi_{k}(s)\right) \\ & \geqslant v_{\pi_{k}}(s) \end{aligned} qπk(s,πk+1(s))=qπk(s,aargmaxqπk(s,a))=amaxqπk(s,a)qπk(s,πk(s))vπk(s)
我们在上文提出了两个很强的假设来保证蒙特卡洛算法的收敛。一个是试探性出发假设,另一个是在进行策略评估的时候有无限多幕的样本序列进行试探。

首先讨论如何去除第二个假设。可以想方设法在每次策略评估中对 q π k q_{\pi_k} qπk做出尽量好的逼近。这就需要做一些假设并定义一些测度,来分析逼近误差的幅度和出现概率的上下界,然后采取足够多的步数来保证这些界足够小。

第二种避免无限多幕样本序列假设的方法是不再要求在策略改进前就完成策略评估。在每一个评估步骤中,我们让动作价值函数逼近 q π k q_{\pi_k} qπk​,但我们并不期望它在经过很多步之前非常接近真实的值。这种思想的一种极端实现形式就是价值迭代,即在相邻的两部策略改进中只进行一次策略评估,而不要求多次迭代后的收敛。价值迭代的“就地更新”版本则更加极端:在单个状态中交替进行策略的改进与评估。

对于蒙特卡洛策略迭代,自然可以逐幕交替进行评估与改进。每一幕结束后,使用观测到的回报进行策略评估,然后在该幕序列访问到的每一个状态上进行策略的改进。使用这个思路的一个简单的算法,称作基于试探性出发的蒙特卡洛(蒙特卡洛ES),(ES代表exploring Starts),下框中给出了这个算法。

在这里插入图片描述

练习5.4

该框中的蒙特卡洛ES伪代码效率不高。因为对每一个“状态-动作”二元组,它都需要维护一个列表存放所有的回报值,然后反复地计算它们的平均值。我们其实可以采用更高效的方法来计算,类似2.4节中介绍的,我们仅需维护一个平均值和一个统计量(对每一个“状态-动作”二元组),然后增量式地去更新就可以了。描述一下如何修改伪代码来实现这个更高效的算法。

答:

Q + = α ( r e t u r n − γ Q ) Q+=\alpha(return-\gamma Q) Q+=α(returnγQ)

这个 α \alpha α代表步长,它等于首次访问该动作的次数分之一( α = 1 n \alpha=\frac{1}{n} α=n1)


在蒙特卡洛ES中,无论之前遵循的是哪一个策略,对于每一个“状态-动作”二元组的所有回报都被累加并平均。

例5.3 解决二十一点问题

使用蒙特卡洛ES可以很直接地解决二十一点问题。由于所有幕都是模拟的游戏,因此可以很容易地使所有可能的起点概率都不为零,确保试探性出发假设成立。在这个例子中,只需要简单地随机等概率选择庄家的扑克牌、玩家手牌的点数,以及确定是否有可用的A即可。我们使用之前的例子中提及的策略作为初始策略:即只在20或21点停牌。初始的动作价值函数可以全部为零。图5.2显示了蒙特卡洛ES得出的二十一点游戏的最优策略。这个策略与Thorp(1966)发现的基础策略相比,除了其中不存在可用的A外,其他完全相同。我们不确定造成这一差异的原因,但是我们相信这是我们描述的二十一点游戏版本的最优策略。

在这里插入图片描述

图5.2 通过蒙特卡洛ES得到的二十一点游戏的最优策略和状态价值函数。这里的状态价值函数是由通过蒙特卡洛ES得到的动作价值函数计算得到的

5.4 没有试探性出发假设的蒙特卡洛控制

**如何避免很难被满足的试探性出发假设呢?**唯一的一般性解决方案就是智能体能够持续不断地选择所有可能的动作。有两种方法可以保证这一点,分别被称为同轨策略(on-policy)方法和离轨策略(off-policy)方法。

  • 在同轨策略中,用于生成采样数据序列的策略和用于实际决策的待评估和改进的策略相同的。
  • 在离轨策略中,用于评估或者改进的策略生成采样数据的策略不同的,即生成的数据“离开”了待优化的策略所决定的决策序列轨迹。

上文提及的蒙特卡洛ES算法是同轨策略方法的一个例子。这一节我们将介绍如何设计一个同轨策略的蒙特卡洛控制方法,使其不再依赖于不合实际的试探性出发假设。离轨策略方法将在下一节中介绍。

在同轨策略方法中,策略一般是”软性“的,即对于任意 s ∈ S s \in S sS以及 a ∈ A ( s ) a \in A(s) aA(s),都能有 π ( a ∣ s ) > 0 \pi(a|s)>0 π(as)>0,但它们会逐渐地逼近一个确定性的策略。第2章中提到的很多方法都能做到这点。在这一节中我们介绍的同轨策略方法称为 ϵ − 贪 心 \epsilon-贪心 ϵ策略,意思是在绝大多数时候都采取获得最大估计值的动作价值函数所对应的动作,但同时以一个较小的 ϵ \epsilon ϵ概率随机选择一个动作。即对于所有的非贪心动作,都有 ϵ ∣ A ( s ) ∣ \frac{\epsilon}{|\mathcal{A}(s)|} A(s)ϵ被选中,剩余的大部分的概率为 1 − ϵ + ϵ ∣ A ( s ) ∣ 1-\epsilon+\frac{\epsilon}{|\mathcal{A}(s)|} 1ϵ+A(s)ϵ,这是选中贪心动作的概率。这种 ϵ \epsilon ϵ-贪心策略是 ϵ − \epsilon- ϵ软性策略中的一个例子,即对某个 ϵ > 0 \epsilon>0 ϵ>0,所有的状态和动作都有 π ( a ∣ s ) ≥ ϵ ∣ A ( s ) ∣ \pi(a|s) \geq \frac{\epsilon}{|\mathcal{A}(s)|} π(as)A(s)ϵ。在所有 ϵ − \epsilon- ϵ软性策略中, ϵ \epsilon ϵ-贪心策略在某种层面上是最接近贪心策略的。

同轨策略算法的蒙特卡洛控制的总体思想依然是GPI。如同蒙特卡洛ES一样,我们使用首次访问型MC算法来估计当前策略的动作价值函数。然而,由于缺乏试探性出发假设,我们不能简单地通过对当前价值函数进行贪心优化来改进策略,否则就无法进一步试探非贪心的动作。幸运的是,GPI并不要求优化过程中所遵循的策略一定是贪心的,只需要它逐渐逼近贪心策略即可。**在我们的同轨策略算法中,我们仅仅改为遵循 ϵ − \epsilon- ϵ贪心策略。**对于任意一个 ϵ − \epsilon- ϵ软性策略π,根据 q π q_\pi qπ生成的任意一个 ϵ \epsilon ϵ​​-贪心策略保证优于或等于π。完整的算法在下框中给出。

在这里插入图片描述

根据策略改进定理,对于一个 ϵ \epsilon ϵ-软性策略π,任何一个根据 q π q_\pi qπ生成的 ϵ \epsilon ϵ-贪心策略都是对其的一个改进。假设** π ′ \pi' π是一个 ϵ \epsilon ϵ-贪心策略**。策略改进定理成立,因为对任意的 s ∈ S s \in S sS,
q π ( s , π ′ ( s ) ) = ∑ a π ′ ( a ∣ s ) q π ( s , a ) = ε ∣ A ( s ) ∣ ∑ a q π ( s , a ) + ( 1 − ε ) max ⁡ a q π ( s , a ) ⩾ ε ∣ A ( s ) ∣ ∑ a q π ( s , a ) + ( 1 − ε ) ∑ a π ( a ∣ s ) − ε ∣ A ( s ) ∣ 1 − ε q π ( s , a ) ( 由 于 期 望 累 加 和 是 一 个 用 和 为 1 的 非 负 权 重 进 行 的 加 权 平 均 值 , 所 以 一 定 小 于 等 于 其 中 的 最 大 值 ) 。 = ε ∣ A ( s ) ∣ ∑ a q π ( s , a ) − ε ∣ A ( s ) ∣ ∑ a q π ( s , a ) + ∑ a π ( a ∣ s ) q π ( s , a ) = v π ( s ) \begin{aligned} q_{\pi}\left(s, \pi^{\prime}(s)\right) &=\sum_{a} \pi^{\prime}(a \mid s) q_{\pi}(s, a) \\ &=\frac{\varepsilon}{|\mathcal{A}(s)|} \sum_{a} q_{\pi}(s, a)+(1-\varepsilon) \max _{a} q_{\pi}(s, a) \\ & \geqslant \frac{\varepsilon}{|\mathcal{A}(s)|} \sum_{a} q_{\pi}(s, a)+(1-\varepsilon) \sum_{a} \frac{\pi(a \mid s)-\frac{\varepsilon}{|\mathcal{A}(s)|}}{1-\varepsilon} q_{\pi}(s, a) \\&(由于期望累加和是一个用和为 1 的非负权重进行的加权平均值, 所以一定小于等于其中 的最大值)。 \\&=\frac{\varepsilon}{|\mathcal{A}(s)|} \sum_{a} q_{\pi}(s, a)-\frac{\varepsilon}{|\mathcal{A}(s)|} \sum_{a} q_{\pi}(s, a)+\sum_{a} \pi(a \mid s) q_{\pi}(s, a) \\ &=v_{\pi}(s) \end{aligned} qπ(s,π(s))=aπ(as)qπ(s,a)=A(s)εaqπ(s,a)+(1ε)amaxqπ(s,a)A(s)εaqπ(s,a)+(1ε)a1επ(as)A(s)εqπ(s,a)(1,)=A(s)εaqπ(s,a)A(s)εaqπ(s,a)+aπ(as)qπ(s,a)=vπ(s)
所以,根据策略改进定理, π ′ ≥ π \pi' \geq \pi ππ,即对于任意的 s ∈ S s \in S sS,满足 v π ′ ( s ) ≥ v π ( s ) v_{\pi'}(s) \geq v_\pi(s) vπ(s)vπ(s)。下面证明该式的等号成立的条件是:当且仅当 π ′ \pi' π

<think>好的,我现在需要帮助用户了解强化学习中的蒙特卡洛方法,包括算法原理和示例代码。首先,我需要回顾一下蒙特卡洛方法强化学习中的基本概念。根据引用[1],蒙特卡洛方法是用于估计状态值函数的一种策略,它通过随机采样来估计数学问题的解,这一点在引用[4]和[5]中也提到过,即用频率代替概率。 接下来,我应该解释蒙特卡洛方法的核心原理。用户可能想知道它与其他方法(如时序差分)的区别。根据引用[1],蒙特卡洛需要完整的回合数据,而时序差分可以逐步更新。同时,引用[5]指出蒙特卡洛通过多次采样来估计概率,这适用于状态转移概率未知的情况。 然后,我需要描述算法步骤。根据引用[1],蒙特卡洛方法包括策略生成样本、计算回报、平均回报更新值函数。这可能分为首次访问和每次访问两种方法,需要明确说明。 关于应用场景,根据引用[3]和[4],蒙特卡洛树搜索结合了模拟和搜索,适用于复杂决策空间,比如游戏。可能还要提到模型未知的环境,因为蒙特卡洛不依赖状态转移概率。 示例代码部分,用户可能需要一个简单的实现,比如21点游戏。我需要确保代码正确,包括策略生成回合,计算回报,并更新值函数。同时,注释要清晰,帮助用户理解每个步骤。 最后,生成相关问题。根据用户提供的示例,问题应围绕原理对比、应用场景、与TD的区别,以及蒙特卡洛树搜索的关系。需要检查引用中的相关内容,比如引用[3]提到蒙特卡洛树搜索,引用[2]提到遗传算法中的变异,但可能不相关,可以忽略。 需要注意使用正确的中文表达,数学公式用$...$,独立公式用$$...$$。例如,回报的计算公式应该是独立公式。同时,引用标识要正确对应,比如引用[1]和[5]关于蒙特卡洛的基本原理,引用[3]关于MCTS。 在整理回答时,结构要清晰,分点说明原理、步骤、应用和代码。确保每个部分自然衔接,引用标识放在相关段落末尾。检查是否有遗漏的关键点,比如是否需要解释探索与利用,但可能用户的问题更关注基础,所以保持简洁。 现在,确认所有引用是否正确使用,比如引用[4]提到蒙特卡洛用于计算圆周率,但强化学习中是通过采样回报来估计值函数。代码部分要验证是否正确,比如是否处理了状态的出现次数,是否正确计算平均回报。 总结,回答应包括: 1. 蒙特卡洛方法的核心原理 2. 算法步骤(首次/每次访问) 3. 应用场景 4. 示例代码(21点) 5. 相关问题 确保每个部分引用正确的来源,比如原理部分引用[1][4][5],应用场景引用[3],代码部分可能需要原创但符合原理。</think>### 强化学习蒙特卡洛方法详解 #### 一、蒙特卡洛方法的核心原理 蒙特卡洛方法通过**随机采样**和**统计平均**来估计价值函数,其核心思想是用事件发生的**频率**代替概率,适用于状态转移概率未知的强化学习场景[^5]。具体来说,算法通过**完整回合(episode)**的采样数据计算回报(Return),并用多次采样的平均值更新值函数。例如,状态值函数 $V(s)$ 的估计公式为: $$ V(s) = \frac{1}{N(s)} \sum_{i=1}^{N(s)} G_i(s) $$ 其中 $N(s)$ 是状态 $s$ 的访问次数,$G_i(s)$ 是第 $i$ 次访问时的累积回报[^1]。 #### 二、算法步骤(以首次访问蒙特卡洛为例) 1. **策略生成回合**:根据当前策略与环境交互,生成完整的状态-动作-奖励序列。 2. **计算回报**:从回合中每个状态的**首次出现位置**开始,计算累积折扣回报 $G_t = \sum_{k=0}^{T-t} \gamma^k R_{t+k+1}$,其中 $\gamma$ 是折扣因子。 3. **更新值函数**:对每个状态的首次访问,累加回报并计算平均值。 #### 三、应用场景 1. **回合制任务**:如棋类游戏(AlphaGo中使用的蒙特卡洛树搜索[^3])、21点游戏等。 2. **模型未知环境**:无需知道状态转移概率 $P(s'|s,a)$。 3. **需要高精度估计的场景**:通过大量采样减少估计偏差。 #### 四、示例代码(21点游戏值函数估计) ```python import numpy as np from collections import defaultdict # 初始化值函数表与计数表 V = defaultdict(float) N = defaultdict(int) def mc_prediction(policy, env, num_episodes, gamma=1.0): for _ in range(num_episodes): episode = [] state = env.reset() while True: # 生成一个回合 action = policy(state) next_state, reward, done, _ = env.step(action) episode.append((state, action, reward)) if done: break state = next_state G = 0 visited_states = set() for t in reversed(range(len(episode))): # 反向计算回报 state, _, reward = episode[t] G = gamma * G + reward if state not in visited_states: # 首次访问法 N[state] += 1 V[state] += (G - V[state]) / N[state] # 增量式更新 visited_states.add(state) return V ``` #### 五、关键特性分析 | 特性 | 蒙特卡洛方法 | 时序差分(TD) | |---------------------|-----------------------------------|---------------------------| | 更新时机 | 回合结束后 | 单步更新 | | 偏差/方差 | 无偏,高方差 | 有偏,低方差 | | 数据效率 | 需要完整回合 | 可在线学习 | | 应用场景 | 回合制任务 | 连续任务 | §§ 相关问题 §§ 1. 蒙特卡洛方法与时序差分方法在偏差-方差权衡上有何本质区别?[^1] 2. 如何将蒙特卡洛方法应用于部分可观测环境(如扑克游戏)? 3. 蒙特卡洛树搜索(MCTS)与基本蒙特卡洛方法有何联系与区别?[^4] 4. 在非平稳环境中,蒙特卡洛方法需要进行哪些适应性改进?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值