强化学习(3) 蒙特卡罗方法

本文深入探讨了蒙特卡罗方法在强化学习中的应用,特别是在未知环境模型的情况下,如何通过无模型算法求解马尔科夫决策问题。文章详细介绍了第一次访问和每次访问蒙特卡罗方法,以及它们在策略评估和改进中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

蒙特卡罗方法

强化学习(2)我们讲了已知模型时,利用动态规划的方法求解马尔科夫决策问题。然而很多时候,我们无法知道状态转移概率矩阵 P P P,这时动态规划法根本无法使用。这时候我们如何求解强化学习问题呢?
今天我们讲无模型的强化学习算法。无模型的强化学习算法主要包括蒙特卡罗方法和时间差分方法。本文要讨论蒙特卡罗(Monte-Calo, MC)的方法。

在动态规划的方法中,值函数的计算方法为:

v π ( s ) = ∑ a ∈ A π ( a ∣ s ) ( R s a + γ ∑ s ′ ∈ S P s s ′ a v π ( s ′ ) ) v_{\pi}(s)=\sum_{a \in A} \pi(a | s)\left(R_{s}^{a}+\gamma \sum_{s^{\prime} \in S} P_{s s^{\prime}}^{a} v_{\pi}\left(s^{\prime}\right)\right) vπ(s)=aAπ(as)(Rsa+γsSPssavπ(s))

动态规划方法计算状态处的值函数时利用了模型 P s s ′ a P_{ss'}^{a} Pssa 而在无模型强化学习中,模型 P s s ′ a P_{ss'}^{a} Pssa 是未知的。无模型的强化学习算法要想利用策略评估和策略改善的框架,必须采用其它的方法对当前策略进行评估(计算值函数)。

我们回到值函数最原始的定义公式:

v π ( s ) = E π [ G t ∣ S t = s ] = E π [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s ] v_{\pi}(s)=E_{\pi}\left[G_{t} | S_{t}=s\right]=E_{\pi}\left[\sum_{k=0}^{\infty} \gamma^{k} R_{t+k+1} | S_{t}=s\right] vπ(s)=Eπ[GtSt=s]=Eπ[k=0γkRt+k+1St=s]
q π ( s ) = E π [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s , A t = a ] q_{\pi}(s)=E_{\pi}\left[\sum_{k=0}^{\infty} \gamma^{k} R_{t+k+1} | S_{t}=s, A_{t}=a\right] qπ(s)=Eπ[k=0γkRt+k+1St=s,At=a]

状态值函数和行为值函数的计算实际上是计算返回值的期望。动态规划的方法是利用模型对该期望进行计算。在没有模型时,我们可以采用蒙特卡罗的方法计算该期望,即利用随机样本来估计期望。在计算值函数时,蒙特卡罗方法是利用经验平均代替随机变量的期望。

策略评估

当要评估智能体的当前策略时,我们可以利用策略产生很多次试验,每次试验都是从任意的初始状态开始直到终止状态,比如一次试验(an episode)为: S 1 , A 1 , R 2 , ⋯   , S T S_1,A_1,R_2,\cdots ,S_T S1,A1,R2,,ST计算一次试验中状态s处的折扣回报返回值为: G t ( s ) = R t + 1 + γ R t + 2 + ⋯ + γ T − 1 R T G_t\left(s\right)=R_{t+1}+\gamma R_{t+2}+\cdots +\gamma^{T-1}R_T Gt(s)=Rt+1+γRt+2++γT1RT
那么对于蒙特卡罗法来说,如果要求某一个状态的状态价值,只需要求出所有的完整序列中该状态出现时候的折扣回报值再取平均即可近似求解。

不过,利用蒙特卡罗方法求状态s处的值函数时,又可以分为第一次访问蒙特卡罗方法和每次访问蒙特卡罗方法。
在这里插入图片描述
图1.1

第一次访问蒙特卡罗方法是指,在计算状态s处值函数时,只利用每次试验中第一次访问到状态s时的返回值。如图1.1中第一次试验所示,计算状态s处的均值时只利用 G 11 G_{11} G11 。因此第一次访问蒙特卡罗方法的计算公式为:

v ( s ) = G 11 ( s ) + G 21 ( s ) + ⋯ N ( s ) v(s)=\frac{G_{11}(s)+G_{21}(s)+\cdots}{N(s)} v(s)=N(s)G11(s)+G21(s)+

每次访问蒙特卡罗方法是指,在计算状态s处的值函数时,利用所有访问到状态s时的回报返回值,即:

v ( s ) = G 11 ( s ) + G 12 ( s ) + ⋯ + G 21 ( s ) + ⋯ N ( s ) v(s)=\frac{G_{11}(s)+G_{12}(s)+\cdots+G_{21}(s)+\cdots}{N(s)} v(s)=N(s)G11(s)+G12(s)++G21(s)+

第二种方法比第一种的计算量要大一些,但是在完整的经历样本序列少的场景下会比第一种方法适用。

在上面的求解公式里,我们有一个求平均的过程,意味着要保存所有该状态的回报值之和最后取平均。这样浪费了太多的存储空间。一个较好的方法是在迭代过程计算回报均值,即每次保存上一轮迭代得到的回报均值与次数,当计算当前轮的回报时,即可计算当前轮回报均值和次数。递增计算均值的方法为:

v k ( s ) = 1 k ∑ j = 1 k G j ( s ) = 1 k ( G k ( s ) + ∑ j = 1 k − 1 G j ( s ) ) = 1 k ( G k ( s ) + ( k − 1 ) v k − 1 ( s ) ) = v k − 1 ( s ) + 1 k ( G k ( s ) − v k − 1 ( s ) ) \begin{aligned} v_{k}(s) &=\frac{1}{k} \sum_{j=1}^{k} G_{j}(s) \\ &=\frac{1}{k}\left(G_{k}(s)+\sum_{j=1}^{k-1} G_{j}(s)\right) \\ &=\frac{1}{k}\left(G_{k}(s)+(k-1) v_{k-1}(s)\right) \\ =& v_{k-1}(s)+\frac{1}{k}\left(G_{k}(s)-v_{k-1}(s)\right) \end{aligned} vk(s)==k1j=1kGj(s)=k1(Gk(s)+j=1k1Gj(s))=k1(Gk(s)+(k1)vk1(s))vk1(s)+k1(Gk(s)vk1(s))

这样上面的状态价值公式就可以改写成:

N ( S t ) = N ( S t ) + 1 N\left(S_{t}\right)=N\left(S_{t}\right)+1 N(St)=N(St)+1
V ( S t ) = V ( S t ) + 1 N ( S t ) ( G t − V ( S t ) ) V\left(S_{t}\right)=V\left(S_{t}\right)+\frac{1}{N\left(S_{t}\right)}\left(G_{t}-V\left(S_{t}\right)\right) V(St)=V(St)+N(St)1(GtV(St))

其中 G t = R t + 1 + γ R t + 2 + ⋯ + γ T − 1 R T G_{t}=R_{t+1}+\gamma R_{t+2}+\cdots+\gamma^{T-1} R_{T} Gt=Rt+1+γRt+2++γT1RT

这样我们无论数据量是多还是少,算法需要的内存基本是固定的 。
有时候,尤其是海量数据做分布式迭代的时候,我们可能无法准确计算当前的次数 N ( S t ) N\left(S_{t}\right) N(St),这时我们可以用一个系数 α α α来代替,即:

V ( S t ) = V ( S t ) + α ( G t − V ( S t ) ) V\left(S_{t}\right)=V\left(S_{t}\right)+\alpha\left(G_{t}-V\left(S_{t}\right)\right) V(St)=V(St)+α(GtV(St))

对于动作值函数 Q ( S t , A t ) Q\left(S_{t}, A_{t}\right) Q(St,At),也是类似的,比如对上面最后一个式子,动作值函数版本为:

Q ( S t , A t ) = Q ( S t , A t ) + α ( G t − Q ( S t , A t ) ) Q\left(S_{t}, A_{t}\right)=Q\left(S_{t}, A_{t}\right)+\alpha\left(G_{t}-Q\left(S_{t}, A_{t}\right)\right) Q(St,At)=Q(St,At)+α(GtQ(St,At))

策略改进

回忆下动态规划价值迭代的的思路, 每轮迭代先做策略评估,计算出价值 v k ( s ) v_{k}(s) vk(s),然后基于一定的方法(比如贪婪法)更新当前策略 π π π。最后得到最优价值函数 v ∗ v^{*} v和最优策略 π ∗ \pi^{*} π

和动态规划比,蒙特卡罗法不同之处体现在三点:一是策略评估的方法不同;二是蒙特卡罗法一般是优化最优动作价值函数 q ∗ q^{*} q,而不是状态价值函数 v ∗ v^{*} v;三是动态规划一般基于贪婪法更新策略,而蒙特卡罗法一般采用 ϵ ϵ ϵ−贪婪法更新。

π ( a ∣ s ) ← { 1 − ε + ε ∣ A ( s ) ∣  if  a = arg ⁡ max ⁡ a Q ( s , a ) ε ∣ A ( s ) ∣  if  a ≠ arg ⁡ max ⁡ a Q ( s , a ) \pi(a | s) \leftarrow \left\{\begin{array}{c}{1-\varepsilon+\frac{\varepsilon}{|A(s)|} \text { if } a=\arg \max _{a} Q(s, a)} \\ {\frac{\varepsilon}{|A(s)|} \text { if } a \neq \arg \max _{a} Q(s, a)}\end{array}\right. π(as){1ε+A(s)ε if a=argmaxaQ(s,a)A(s)ε if a̸=argmaxaQ(s,a)

在实际问题中,为了使算法收敛,一般 ϵ ϵ ϵ会随着算法的迭代过程逐渐减小,并趋于0。这样在迭代前期,我们鼓励探索,而在后期,由于我们有了足够的探索量,开始趋于保守,以贪婪为主,使算法可以稳定收敛。这样我们可以得到一张和动态规划类似的图:
在这里插入图片描述
根据探索策略(行动策略)和评估的策略是否是同一个策略,蒙特卡罗方法又分为on-policy和off-policy。
若行动策略和评估及改善的策略是同一个策略,我们称之为on-policy,可翻译为同策略。
若行动策略和评估及改善的策略是不同的策略,我们称之为off-policy,可翻译为异策略。

同策略是指产生数据的策略与评估和要改善的策略是同一个策略。比如,要产生数据的策略和评估及要改进的策略都是 ε − s o f t \varepsilon -soft εsoft策略。
异策略是指产生数据的策略与评估和改善的策略不是同一个策略。我们用 π \pi π表示用来评估和改进的策略,用 μ \mu μ表示产生样本数据的策略。

蒙特卡罗法算法流程

这里我们给出同策略蒙特卡罗强化学习方法。

输入:状态集 S S S, 动作集 A A A, 即时奖励 R R R,衰减因子 γ γ γ, 探索率 ϵ ϵ ϵ
输出:最优的动作价值函数 q ∗ q^{*} q和最优策略 π ∗ \pi^{*} π

  1. 初始化所有的动作价值 Q ( s , a ) = 0 Q(s,a)=0 Q(s,a)=0, 状态次数 N ( s , a ) = 0 N(s,a)=0 N(s,a)=0,采样次数 k = 0 k=0 k=0,随机初始化一个策略 π π π
  2. k = k + 1 k=k+1 k=k+1, 基于策略 π π π进行第 k k k次蒙特卡罗采样,得到一个完整的状态序列: S 1 , A 1 , R 2 , S 2 , A 2 , … S t , A t , R t + 1 , … R T , S T S_{1}, A_{1}, R_{2}, S_{2}, A_{2}, \ldots S_{t}, A_{t}, R_{t+1}, \ldots R_{T}, S_{T} S1,A1,R2,S2,A2,St,At,Rt+1,RT,ST
  3. 对于该状态序列里出现的每一状态行为对 ( S t , A t ) \left(S_{t}, A_{t}\right) (St,At),计算其收获 G t G_{t} Gt, 更新其计数 N ( s , a ) N(s, a) N(s,a)和行为价值函数 Q ( s , t ) Q(s, t) Q(s,t)
    G t = R t + 1 + γ R t + 2 + ⋯ + γ T − 1 R T G_{t}=R_{t+1}+\gamma R_{t+2}+\cdots+\gamma^{T-1} R_{T} Gt=Rt+1+γRt+2++γT1RT
    N ( S t , A t ) = N ( S t , A t ) + 1 N\left(S_{t}, A_{t}\right)=N\left(S_{t}, A_{t}\right)+1 N(St,At)=N(St,At)+1
    Q ( S t , A t ) = Q ( S t , A t ) + 1 N ( S t , A t ) ( G t − Q ( S t , A t ) ) Q\left(S_{t}, A_{t}\right)=Q\left(S_{t}, A_{t}\right)+\frac{1}{N\left(S_{t}, A_{t}\right)}\left(G_{t}-Q\left(S_{t}, A_{t}\right)\right) Q(St,At)=Q(St,At)+N(St,At)1(GtQ(St,At))
  4. 基于新计算出的动作价值,更新当前的 ϵ − ϵ− ϵ贪婪策略:
    π ( a ∣ s ) ← { 1 − ε + ε ∣ A ( s ) ∣  if  a = arg ⁡ max ⁡ a Q ( s , a ) ε ∣ A ( s ) ∣  if  a ≠ arg ⁡ max ⁡ a Q ( s , a ) \pi(a | s) \leftarrow \left\{\begin{array}{c}{1-\varepsilon+\frac{\varepsilon}{|A(s)|} \text { if } a=\arg \max _{a} Q(s, a)} \\ {\frac{\varepsilon}{|A(s)|} \text { if } a \neq \arg \max _{a} Q(s, a)}\end{array}\right. π(as){1ε+A(s)ε if a=argmaxaQ(s,a)A(s)ε if a̸=argmaxaQ(s,a)
  5. 如果所有的 Q ( s , a ) Q(s,a) Q(s,a)收敛,则对应的所有 Q ( s , a ) Q(s,a) Q(s,a)即为最优的动作价值函数 q ∗ q^{*} q。对应的策略 π ( a ∣ s ) π(a|s) π(as)即为最优策略 π ∗ \pi^{*} π。否则转到第二步。

蒙特卡罗法求解强化学习问题小结

蒙特卡罗法是我们第二个讲到的求解强化问题的方法,也是第一个不基于模型的强化问题求解方法。它可以避免动态规划求解过于复杂,同时还可以不事先知道环境转化模型,因此可以用于海量数据和复杂模型。但是它也有自己的缺点,这就是它每次采样都需要一个完整的状态序列。如果我们没有完整的状态序列,或者很难拿到较多的完整的状态序列,这时候蒙特卡罗法就不太好用了, 也就是说,我们还需要寻找其他的更灵活的不基于模型的强化问题求解方法。
下一篇我们讨论基于时间差分的强化学习方法。

参考文献:
[1]https://www.cnblogs.com/pinard/p/9492980.html
[2]https://zhuanlan.zhihu.com/p/25743759

<think>首先,用户的问题是:“我想了解强化学习中的蒙特卡罗方法 请问强化学习蒙特卡罗方法的原理与应用”。这是一个关于强化学习蒙特卡罗方法的原理和应用的查询。 根据系统级指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户可见层: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 参考站内引用: - 引用[1]: 关于同策略和异策略蒙特卡罗强化学习算法。 - 引用[2]: 关于蒙特卡洛方法的定义、与DP的区别,以及蒙特卡洛预测。 这些引用是提供的上下文,我应该尽可能参考用户的问题和我的回答。用户的问题是直接关于蒙特卡罗方法的原理和应用,所以我需要基于这些引用构建回答。 关键点从引用中: - 从引用[2]: 蒙特卡洛(MC)方法涉及大量随机成分的估计,用于估计价值函数和寻找最优策略,不需要完备的环境知识,只需要经验(状态、动作、收益序列)。 - 从引用[1]: 讨论了同策略和异策略蒙特卡罗强化学习算法。 我需要覆盖原理和应用: - 原理:蒙特卡罗方法强化学习中的基础是基于采样经验来估计价值函数。不像动态规划(DP)那样需要模型,MC方法直接从经验中学习。 - 应用:用于预测(估计价值函数)和控制(寻找最优策略),例如在游戏AI、机器人控制等。 结构化回答: 1. **介绍蒙特卡罗方法**:简要定义它。 2. **原理**:解释如何工作,包括关键概念如价值估计、同策略和异策略。 3. **应用**:讨论在强化学习中的实际应用。 4. **生成相关问题**:在最后添加相关问题。 使用中文回答。 添加引用标识: - 在回答中,如果引用段落,就在末尾添加[^1]或[^2]。引用来自提供的上下文。 可能的引用点: - 当解释MC方法不需要完备环境知识时,引用[2]。 - 当讨论同策略和异策略时,引用[1]。 生成相关问题: - 在最后添加“§§相关问题§§”部分,列出几个相关问题,如示例中所示。 回答结构: - 开头:直接回应用户问题。 - 主体:分步解释原理和应用。 - 结尾:相关问题。 确保LaTeX正确: - 例如,价值函数$V(s)$,状态序列$s_0, a_0, r_1, s_1, a_1, \dots$等。 完整回答: - 先介绍:蒙特卡罗方法是一种在强化学习中用于估计价值函数和优化策略的算法,基于随机采样。 - 原理:通过多次模拟或经验序列来平均回报,估计状态价值或动作价值。区别与DP。 - 同策略 vs 异策略:引用[1]提到。 - 应用:在模型未知的环境中,如游戏、自动驾驶等。 - 相关问题:例如,如何实现蒙特卡罗控制?蒙特卡罗方法的优缺点是什么?</think>### 强化学习蒙特卡罗方法的原理与应用 强化学习中的蒙特卡罗(Monte Carlo, MC)方法是一种基于随机采样的算法,用于估计价值函数和优化策略。它不依赖于环境模型,而是直接从经验序列(状态、动作、收益序列)中学习,这使得它在模型未知的环境中特别有效[^2]。下面我将逐步解释其原理和应用,确保回答清晰可靠。 #### 蒙特卡罗方法的原理 蒙特卡罗方法的核心思想是通过多次模拟或经验序列来平均累积回报,从而估计状态价值函数$V(s)$或动作价值函数$Q(s,a)$。与动态规划(DP)不同,DP需要环境的完整知识(如转移概率和奖励函数),而MC方法仅需从真实或模拟交互中采样的经验数据[^2]。这使其适用于实际场景,如游戏或机器人控制。 关键步骤包括: 1. **经验生成**:通过与环境交互生成多个轨迹(episode),每个轨迹包含状态序列$s_0, a_0, r_1, s_1, a_1, r_2, \dots$,直到终止状态。例如,在强化学习中,一个轨迹可能代表一次完整的游戏过程。 2. **价值估计**:对于每个状态$s$,计算其平均回报。回报定义为累积折扣奖励: $$ G_t = r_{t+1} + \gamma r_{t+2} + \gamma^2 r_{t+3} + \cdots $$ 其中$\gamma$是折扣因子($0 \leq \gamma < 1$)。然后,通过平均所有轨迹中状态$s$的首次出现回报,估计$V(s)$: $$ V(s) \approx \frac{1}{N(s)} \sum_{i=1}^{N(s)} G_i(s) $$ 这里$N(s)$是状态$s$被访问的次数。 3. **策略改进**:MC方法可用于控制问题(即优化策略)。常见算法包括: - **同策略(on-policy)**:评估和改进的策略相同,通常使用ε-贪心策略(以概率ε选择随机动作,以探索环境)进行采样。但改进时可能保留原始策略[^1]。 - **异策略(off-policy)**:评估使用一个策略(如ε-贪心),而改进使用另一个策略(如贪婪策略)。这提高了效率,因为采样策略可以更注重探索,而目标策略注重利用[^1]。 蒙特卡罗方法的优势在于其简单性和对模型未知环境的适应性。但缺点是需要完整轨迹,因此不适用于非终止环境(需结合其他方法如时序差分)。 #### 蒙特卡罗方法的应用 在强化学习中,蒙特卡罗方法广泛应用于预测(估计价值函数)和控制(优化策略)任务。具体应用场景包括: - **游戏AI**:例如,在AlphaGo等系统中,MC方法用于模拟游戏走法序列,估计状态价值以优化策略。通过大量随机采样,它能处理高维状态空间[^1][^2]。 - **机器人控制**:在自动驾驶或工业机器人中,MC方法通过模拟轨迹学习最优动作策略,而不需精确环境模型。例如,训练机器人导航时,采样多个路径序列来估计每个状态的价值。 - **金融建模**:用于强化学习中的投资策略优化,通过模拟市场序列估计动作价值函数$Q(s,a)$,以最大化长期收益。 - **推荐系统**:结合MC方法预测用户交互序列的价值,优化推荐策略,提升点击率和用户留存。 实际应用中,MC方法常与其他技术结合,如深度学习(Deep MC),以处理复杂问题。其核心价值在于提供一种无模型、数据驱动的学习方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值