4. 蒙特卡洛方法:从随机采样中学会决策
蒙特卡洛方法,说白了就是「用大量随机采样来逼近真实值」。在强化学习里,它解决的是「不知道环境模型时怎么评估策略」的问题。我刚开始接触时觉得这名字很唬人,其实核心思想特别朴素——多试几次,取平均。
核心思想:通过完整的 episode 采样,用实际回报的平均值来估计状态价值或动作价值。不需要环境模型,完全靠经验。
4.1 蒙特卡洛预测(MC Prediction)
预测问题就是:给定一个策略 π,估计它的状态价值函数 vπ(s)。蒙特卡洛的做法很简单——跑完一个 episode,记录每个状态的实际回报 Gt,然后取平均。
公式长这样:
V(s) ← V(s) + α · (G - V(s)) # 增量式更新
# 或者直接用平均值:V(s) = (1/N) · Σ G_i(s)
我个人习惯用增量式更新,因为不用存所有回报值,内存友好。你想想看,如果状态空间很大,存每个状态的回报列表会爆炸。
4.2 首次访问 vs 每次访问
这里有个细节:同一个 episode 里,某个状态可能出现多次。那怎么处理?
| 方法 | 做法 | 特点 |
|---|---|---|
| 首次访问 MC | 只使用该状态在 episode 中第一次出现时的回报 | 理论性质更好,偏差小 |
| 每次访问 MC | 使用该状态每次出现时的回报 | 数据利用率高,但可能有偏差 |
我的经验:首次访问 MC 在理论上更容易分析,收敛性证明也更干净。但实际项目中,如果 episode 很长,每次访问 MC 能更快利用数据。我一般先用首次访问做原型,数据不够时再切到每次访问。
为什么会这样?因为首次访问 MC 的每次采样是独立同分布的,而每次访问 MC 的采样之间存在相关性。不过在实践中,只要 episode 数量够多,两者差别不大。
4.3 蒙特卡洛控制(MC Control)
控制问题就是:找到最优策略。MC Control 的思路是「广义策略迭代」——交替进行策略评估和策略改进。
流程如下:
- 用 MC 方法评估当前策略的动作价值函数 Q(s, a)
- 基于 Q 值做策略改进:π(s) ← argmaxa Q(s, a)
- 重复直到收敛
嗯,这里要注意:MC Control 必须保证每个状态-动作对都被访问足够多次,否则 Q 值估计不准。这就引出了探索问题。
4.4 探索性初始化(Exploring Starts)
探索性初始化是解决探索问题的一种暴力方法——每个 episode 开始时,随机选择状态和动作作为起点。这样能保证所有 (s, a) 对都有机会被访问到。
我曾经踩过的坑:探索性初始化在理论上没问题,但实际中很难实现。比如机器人控制任务,你没法让机器人从「随机姿态」开始。更常见的是用 ε-贪婪策略来做探索。
探索性初始化的假设是:我们可以从任意状态-动作对开始一个 episode。这在很多实际问题中不成立,所以它更多是理论工具,而非实用方案。
4.5 同策略 vs 异策略学习
这是蒙特卡洛方法里最绕的部分。我当年学的时候也迷糊了一阵。
| 概念 | 行为策略 | 目标策略 | 典型算法 |
|---|---|---|---|
| 同策略(On-policy) | 与目标策略相同 | 就是行为策略本身 | MC Control with ε-贪婪 |
| 异策略(Off-policy) | 与目标策略不同 | 要学习的策略 | 重要性采样 MC |
同策略学习:你用什么策略探索,就用什么策略学习。比如你用 ε-贪婪策略收集数据,然后学习这个 ε-贪婪策略本身。
异策略学习:你用行为策略(比如完全随机)收集数据,但学习的是另一个目标策略(比如最优策略)。这需要重要性采样来修正分布差异。
关键区别:同策略简单稳定,但探索和利用必须平衡;异策略可以复用历史数据,但重要性采样会引入方差。我个人在数据稀缺时倾向异策略,数据充足时用同策略更省心。
重要性采样的公式长这样:
ρ = ∏ (π(a|s) / b(a|s)) # 重要性采样比
V(s) ← V(s) + α · (ρ · G - V(s))
说白了就是:用行为策略 b 采到的回报,乘上一个权重 ρ,来估计目标策略 π 的价值。权重越大,说明这次采样对目标策略越「重要」。
4.6 知识体系总览
下面这张图把蒙特卡洛方法的核心脉络串起来了:
从图上你能看到,蒙特卡洛方法从预测和控制两个方向展开。预测解决「怎么评估」,控制解决「怎么改进」。而探索策略和学习范式(同策略/异策略)是贯穿始终的设计选择。
避坑指南:我曾经在异策略 MC 上吃过亏——重要性采样比 ρ 在 episode 较长时会变得非常大或非常小,导致方差爆炸。后来我加了权重截断(clipping)和归一化,才稳定下来。如果你用异策略,一定要监控 ρ 的分布。