蒙特卡洛方法(Monte Carlo Methods)是一类通过随机采样来近似求解问题的数值计算方法,在强化学习中扮演着核心角色。作为无模型方法(Model-Free Method)的代表,蒙特卡洛方法不依赖环境模型 ,仅通过与环境的交互经验(episodes)就能学习最优策略,使其特别适用于环境动力学未知或过于复杂而无法建模的现实问题。
蒙特卡洛方法的数学根基是大数定律 :当独立同分布的随机样本数量趋近无穷时,样本均值收敛于期望值。强化学习中的蒙特卡洛方法正是利用完整的 episode 回报(return)来估计状态值函数或动作值函数。
在强化学习中,一个 episode 从时间步 t tt 开始的回报(return)定义为折扣累积奖励:
G t = R t + 1 + γ R t + 2 + γ 2 R t + 3 + ⋯ = ∑ k = 0 ∞ γ k R t + k + 1 G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \dots = \sum_{k=0}^{\infty} \gamma^k R_{t+k+1}
G t = R t + 1 + γ R t + 2 + γ 2 R t + 3 + ⋯ = k = 0 ∑ ∞ γ k R t + k + 1
其中 γ ∈ [ 0 , 1 ] \gamma \in [0, 1]γ ∈ [ 0 , 1 ] 是折扣因子(discount factor)。
对于状态 s ss 的价值函数 v π ( s ) v_\pi(s)v π ( s ) ,蒙特卡洛方法使用经验回报的均值来估计:
v π ( s ) ≈ 1 N ( s ) ∑ i = 1 N ( s ) G t ( i ) ( s ) , 其中 N ( s ) 是访问状态 s 的次数 v_\pi(s) \approx \frac{1}{N(s)} \sum_{i=1}^{N(s)} G_t^{(i)}(s), \quad \text{其中 } N(s) \text{ 是访问状态 } s \text{ 的次数}
v π ( s ) ≈ N ( s ) 1 i = 1 ∑ N ( s ) G t ( i ) ( s ) , 其中 N ( s ) 是访问状态 s 的次数
这是一个无偏估计(unbiased estimator),随着 N ( s ) → ∞ N(s) \to \inftyN ( s ) → ∞ ,估计值以概率 1 收敛到真实值。
蒙特卡洛方法区别于动态规划(DP)和时序差分学习(TD)的关键特征在于:
特性
蒙特卡洛 (MC)
动态规划 (DP)
时序差分 (TD)
是否需要环境模型
❌ 不需要
✅ 必须知道转移概率
❌ 不需要
更新时机
Episode 结束后
每一步自举
每一步或每隔几步
自举 (Bootstrapping)
❌ 不使用
✅ 使用
✅ 使用
偏差 (Bias)
无偏
有偏(依赖模型)
有偏(依赖估计值)
方差 (Variance)
高(需完整episode)
低
中等
适用场景
Episode 式任务
已知模型的环境
连续任务
收敛速度
慢(需大样本量)
快(Bellman迭代)
较快
蒙特卡洛预测(MC Prediction)的目标是在给定策略 π \piπ 下估计状态值函数 v π ( s ) v_\pi(s)v π ( s ) 。根据对状态访问的处理方式不同,分为两种变体。
首次访问 MC 只使用 episode 中第一次 到达状态 s ss 时的回报。算法如下:
输入:策略 π,完整 episodes
输出:v(s) 对所有 s ∈ S
初始化:
Returns(s) ← 空列表,对所有 s ∈ S
对于每个 episode:
生成轨迹 S_1, A_1, R_2, S_2, A_2, ..., R_T, S_T (根据 π)
G ← 0
对于 t = T-1, T-2, ..., 1:
G ← γG + R_{t+1}
如果 S_t 是 episode 中首次出现:
将 G 追加到 Returns(S_t)
V(S_t) ← average(Returns(S_t))
数值示例 :假设折扣因子 γ = 1 \gamma = 1γ = 1 ,一个简单环境的状态集合为 { A , B , C , D } \{A, B, C, D\}{ A , B , C , D } ,策略 π \piπ 产生以下 3 个 episode:
Episode
轨迹
奖励序列
1
A→B→C→D→终端
+1, -2, +3, -1
2
A→C→D→终端
0, +5, -2
3
B→A→D→终端
-1, +2, -2
首次访问 MC 计算(γ = 1 \gamma=1γ = 1 ):
Episode 1 中状态 A 的回报(首次出现于 t=1):G = 1 + ( − 2 ) + 3 + ( − 1 ) = 1 G = 1 + (-2) + 3 + (-1) = 1G = 1 + ( − 2 ) + 3 + ( − 1 ) = 1
Episode 2 中状态 A 的回报(首次出现于 t=1):G = 0 + 5 + ( − 2 ) = 3 G = 0 + 5 + (-2) = 3G = 0 + 5 + ( − 2 ) = 3
Episode 3 中状态 A 的回报(首次出现于 t=2):G = 2 + ( − 2 ) = 0 G = 2 + (-2) = 0G = 2 + ( − 2 ) = 0
V ( A ) = 1 + 3 + 0 3 = 1.33 V(A) = \frac{1 + 3 + 0}{3} = 1.33
V ( A ) = 3 1 + 3 + 0 = 1.33
类似地,状态 B 的回报:
Episode 1(t=2):G = ( − 2 ) + 3 + ( − 1 ) = 0 G = (-2) + 3 + (-1) = 0G = ( − 2 ) + 3 + ( − 1 ) = 0
Episode 3(t=1):G = ( − 1 ) + 2 + ( − 2 ) = − 1 G = (-1) + 2 + (-2) = -1G = ( − 1 ) + 2 + ( − 2 ) = − 1
V ( B ) = ( 0 + ( − 1 ) ) / 2 = − 0.5 V(B) = (0 + (-1)) / 2 = -0.5V ( B ) = ( 0 + ( − 1 )) /2 = − 0.5
每次访问 MC 使用 episode 中每一次 到达状态 s ss 的回报。当同一个状态在同一个 episode 中出现多次时,每次出现都贡献一个样本。
特性
首次访问 MC
每次访问 MC
样本数
少(每episode最多1个/s)
多(每episode多次)
偏差
无偏
有偏(相关样本)
方差
较高
较低
计算量
需跟踪首次出现
更简单
收敛性
保证收敛
实践中收敛,有偏一致
在实践中,我们不存储所有回报,而是使用增量式更新(incremental update):
V ( s t ) ← V ( s t ) + α [ G t − V ( s t ) ] V(s_t) \leftarrow V(s_t) + \alpha \left[G_t - V(s_t)\right]
V ( s t ) ← V ( s t ) + α [ G t − V ( s t ) ]
其中 α \alphaα 是步长参数(学习率)。当 α = 1 / N ( s t ) \alpha = 1/N(s_t)α = 1/ N ( s t ) 时,等价于普通均值计算。
蒙特卡洛控制(MC Control)的目标是从经验中学习最优策略。核心思想是广义策略迭代(GPI, Generalized Policy Iteration) :交替进行策略评估和策略改进。
策略评估 (Policy Evaluation)
←──────────────→
策略改进 (Policy Improvement)
对于无模型控制,我们使用动作值函数 q π ( s , a ) q_\pi(s, a)q π ( s , a ) 而非状态值函数 v π ( s ) v_\pi(s)v π ( s ) ,因为策略改进需要比较不同动作的价值,而 v π ( s ) v_\pi(s)v π ( s ) 无法直接提供每个动作的独立评估。
动作值函数的 MC 估计:
Q ( s t , a t ) ← Q ( s t , a t ) + α [ G t − Q ( s t , a t ) ] Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left[G_t - Q(s_t, a_t)\right]
Q ( s t , a t ) ← Q ( s t , a t ) + α [ G t − Q ( s t , a t ) ]
蒙特卡洛 ES 是第一种 MC 控制算法,它通过**探索性起点(Exploring Starts)**来保证所有状态-动作对都被多次访问。
初始化:
Q(s, a) ← 任意值,对所有 s ∈ S, a ∈ A(s)
π(s) ← 任意策略,对所有 s ∈ S
Returns(s, a) ← 空列表,对所有 s ∈ S, a ∈ A(s)
循环(每个 episode):
选择 S_0 ∈ S, A_0 ∈ A(S_0),使得每对 (s, a) 被选中的概率 > 0
根据 π 生成从 (S_0, A_0) 开始的 episode
G ← 0
对于 episode 中的每一步 (t = T-1, T-2, ..., 0):
G ← γG + R_{t+1}
如果 (S_t, A_t) 在 episode 中首次出现:
将 G 追加到 Returns(S_t, A_t)
Q(S_t, A_t) ← average(Returns(S_t, A_t))
π(S_t) ← argmax_a Q(S_t, a) # 策略改进
局限性 :ES 要求能够从任意状态-动作对开始 episode,这在真实环境中往往不可行(例如机器人无法从"飞在空中"的状态开始探索)。
On-policy MC 控制使用 ϵ \epsilonϵ -贪心(ϵ \epsilonϵ -greedy) 策略来平衡探索与利用。算法评估和改进的是同一个策略(即正在执行的策略)。
π ( a ∣ s ) = { 1 − ϵ + ϵ ∣ A ( s ) ∣ , 如果 a = arg max a Q ( s , a ) ϵ ∣ A ( s ) ∣ , 否则 \pi(a|s) = \begin{cases}
1 - \epsilon + \frac{\epsilon}{|A(s)|}, & \text{如果 } a = \arg\max_a Q(s, a) \\
\frac{\epsilon}{|A(s)|}, & \text{否则}
\end{cases}
π ( a ∣ s ) = { 1 − ϵ + ∣ A ( s ) ∣ ϵ , ∣ A ( s ) ∣ ϵ , 如果 a = arg max a Q ( s , a ) 否则
其中 ϵ ∈ [ 0 , 1 ] \epsilon \in [0, 1]ϵ ∈ [ 0 , 1 ] 是探索率。
ϵ \epsilonϵ 值对策略的影响 (以 4 个动作为例):
ϵ \epsilonϵ
贪婪动作概率
每个非贪婪动作概率
总探索概率
0.0
100%
0%
0%
0.1
92.5%
2.5%
7.5%
0.3
77.5%
7.5%
22.5%
0.5
62.5%
12.5%
37.5%
1.0
25%
25%
75%
On-Policy First-Visit MC Control (for ε-soft policies)
参数:ε > 0 (探索率)
初始化:
Q(s, a) ← 任意值,s ∈ S, a ∈ A(s)
Returns(s, a) ← 空列表
π ← ε-贪心策略基于 Q
循环(每个 episode):
根据 π 生成 episode: S_0, A_0, R_1, ..., S_{T-1}, A_{T-1}, R_T (终端)
G ← 0
对于 t = T-1, T-2, ..., 0:
G ← γG + R_{t+1}
如果 (S_t, A_t) 首次在 episode 中出现:
将 G 追加到 Returns(S_t, A_t)
Q(S_t, A_t) ← average(Returns(S_t, A_t))
更新 π(S_t) 为 ε-贪心策略
考虑简化版 21 点游戏作为示例环境:
状态 :玩家当前手牌点数 (12-21) + 庄家明牌 (1-10) + 是否有可用 Ace
动作 :要牌 (Hit) 或 停牌 (Stick)
奖励 :赢 +1,输 -1,平 0
运行 On-Policy MC 控制(ϵ = 0.1 , γ = 1 , 500 , 000 \epsilon=0.1, \gamma=1, 500,000ϵ = 0.1 , γ = 1 , 500 , 000 episodes)的部分结果:
玩家点数
庄家明牌
无 Ace(最优动作)
有 Ace(最优动作)
12
4
Hit (Q=0.12)
Hit (Q=0.08)
12
6
Stick (Q=0.25)
Stick (Q=0.18)
16
5
Hit (Q=-0.05)
Hit (Q=-0.11)
16
10
Hit (Q=-0.38)
Hit (Q=-0.42)
18
6
Stick (Q=0.45)
Stick (Q=0.38)
18
10
Stick (Q=-0.12)
Stick (Q=-0.18)
20
8
Stick (Q=0.72)
Stick (Q=0.65)
20
10
Stick (Q=0.32)
Stick (Q=0.28)
Off-policy MC 控制使用两个策略:
行为策略(Behavior Policy)μ \muμ :用于生成 episode 的探索策略(通常是 ϵ \epsilonϵ -soft)
目标策略(Target Policy)π \piπ :要优化的最终策略(通常是确定性贪心策略)
Off-policy 学习的核心问题是:如何使用行为策略 μ \muμ 生成的样本来估计目标策略 π \piπ 下的期望值?答案是重要性采样比率(Importance Sampling Ratio) :
ρ t : T − 1 = ∏ k = t T − 1 π ( A k ∣ S k ) ∏ k = t T − 1 μ ( A k ∣ S k ) \rho_{t:T-1} = \frac{\prod_{k=t}^{T-1} \pi(A_k|S_k)}{\prod_{k=t}^{T-1} \mu(A_k|S_k)}
ρ t : T − 1 = ∏ k = t T − 1 μ ( A k ∣ S k ) ∏ k = t T − 1 π ( A k ∣ S k )
这个比率衡量了在行为策略和目标策略下观察到同一轨迹的概率比。
V ( s ) = ∑ t ∈ T ( s ) ρ t : T ( t ) − 1 G t ∣ T ( s ) ∣ V(s) = \frac{\sum_{t \in \mathcal{T}(s)} \rho_{t:T(t)-1} G_t}{|\mathcal{T}(s)|}
V ( s ) = ∣ T ( s ) ∣ ∑ t ∈ T ( s ) ρ t : T ( t ) − 1 G t
其中 T ( s ) \mathcal{T}(s)T ( s ) 是访问状态 s ss 的时间步集合。
OIS 的数值问题 :
问题
描述
影响
高方差
重要性比率可能非常大
估计不稳定,收敛慢
极端值
一个罕见轨迹导致 ρ \rhoρ 极大
单一样本主导估计
样本效率
多数 episode 被部分或完全浪费
需要大量数据
V ( s ) = ∑ t ∈ T ( s ) ρ t : T ( t ) − 1 G t ∑ t ∈ T ( s ) ρ t : T ( t ) − 1 V(s) = \frac{\sum_{t \in \mathcal{T}(s)} \rho_{t:T(t)-1} G_t}{\sum_{t \in \mathcal{T}(s)} \rho_{t:T(t)-1}}
V ( s ) = ∑ t ∈ T ( s ) ρ t : T ( t ) − 1 ∑ t ∈ T ( s ) ρ t : T ( t ) − 1 G t
OIS vs WIS 对比 :
特性
普通 IS (OIS)
加权 IS (WIS)
偏差
无偏
有偏(渐进无偏)
方差
高(可能无限)
低(有界)
极端值敏感度
高
低
适合场景
理论上保证无偏
实践中更稳定
收敛
需更多样本
收敛更快
Off-Policy MC Control (with Weighted Importance Sampling)
初始化:
Q(s, a) ← 任意值,s ∈ S, a ∈ A(s)
C(s, a) ← 0 (累积权重)
循环(每个 episode):
b ← 任意策略(保证覆盖π,如 ε-soft)
根据 b 生成 episode: S_0, A_0, R_1, ..., S_{T-1}, A_{T-1}, R_T
G ← 0
W ← 1
对于 t = T-1, T-2, ..., 0:
G ← γG + R_{t+1}
C(S_t, A_t) ← C(S_t, A_t) + W
Q(S_t, A_t) ← Q(S_t, A_t) + W/C(S_t, A_t) * [G - Q(S_t, A_t)]
π(S_t) ← argmax_a Q(S_t, a)
如果 A_t ≠ π(S_t):跳出内层循环
W ← W * 1/μ(A_t|S_t) # 简化为 W ← W * 1/(ε/|A|) 如果 A_t 不是ε-greedy下被选中的动作
关键优化 :当 A t A_tA t 与贪心动作不匹配时,目标策略 π \piπ 在该步选择 A t A_tA t 的概率为 0,导致 ρ = 0 \rho = 0ρ = 0 。此时直接跳出循环,避免无效计算。
根据大数定律,MC 估计的误差随样本量增加以 O ( 1 / N ) O(1/\sqrt{N})O ( 1/ N ) 的速率衰减。中心极限定理给出了更精确的刻画:
N ( V ^ N ( s ) − V ( s ) ) → d N ( 0 , σ 2 ) \sqrt{N} \left( \hat{V}_N(s) - V(s) \right) \xrightarrow{d} \mathcal{N}(0, \sigma^2)
N ( V ^ N ( s ) − V ( s ) ) d N ( 0 , σ 2 )
其中 σ 2 \sigma^2σ 2 是回报 G t G_tG t 的方差。
以下演示了在简单 MDP 中首次访问 MC 对不同状态价值的估计收敛过程(基于一个 5 状态链式环境,γ = 0.9 \gamma=0.9γ = 0.9 ):
Episode 数
V ( A ) V(A)V ( A )
V ( B ) V(B)V ( B )
V ( C ) V(C)V ( C )
V ( D ) V(D)V ( D )
V ( E ) V(E)V ( E )
10
-0.52
0.18
0.93
1.87
2.95
50
-0.31
0.42
1.12
2.01
3.12
100
-0.28
0.47
1.18
2.08
3.18
500
-0.25
0.49
1.22
2.12
3.22
1000
-0.24
0.50
1.23
2.13
3.23
真实值
-0.23
0.50
1.24
2.14
3.25
可以看到,MC 估计值在大约 1000 个 episode 后接近真实值,标准差约在 0.02 0.020.02 以内。
优势
解释
无模型
不需要环境转移概率或奖励函数的先验知识
无偏估计
使用完整回报而非自举估计,理论上无偏
简单直观
算法概念简单,易于理解和实现
聚焦采样
计算资源集中在实际可到达的状态空间
无马尔可夫假设
不要求环境具有马尔可夫性(不对 P ( s t + 1 ∣ s t , a t ) P(s_{t+1}|s_t, a_t)P ( s t + 1 ∣ s t , a t ) 做假设)
局限性
解释
仅限 Episode 任务
必须有明确的终止状态
高方差
完整回报的方差通常大于自举方法
学习速度慢
必须等到 episode 结束才能更新
维度灾难
大状态空间需要大量样本
探索不充分
难以保证覆盖所有状态-动作对
延迟更新
无法利用部分轨迹进行在线学习
MC 方法的高方差源自其使用完整回报:
Var [ G t ] = Var [ R t + 1 + γ R t + 2 + γ 2 R t + 3 + … ] \text{Var}[G_t] = \text{Var}[R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \dots]
Var [ G t ] = Var [ R t + 1 + γ R t + 2 + γ 2 R t + 3 + … ]
每一步的奖励 R t + k R_{t+k}R t + k 都是随机变量,其方差累积。对于长度为 T TT 的 episode:
\textVar[G_t] = \sum_k=1^T \gamma^2(k-1) \textVar[R_t+k] + \sum_i \neq j \textCov(\gamma^i-1 R_i, \gamma^j-1 R_j)
>
当 $T$ 很大或 $\gamma$ 接近 1 时,方差可以非常大,导致 MC 估计需要海量样本才能获得精确结果。
**方差降低策略**:
策略 方法 效果
------------------
折扣因子 降低 $\gamma$ 值(如 0.9→0.5) 降低远期奖励权重,减少方差贡献
基线方法 使用基线函数 $b(s)$ 减小方差 保持期望不变,降低方差
控制变量 引入与回报相关的控制变量 利用已知期望减小方差
分层采样 将状态空间分层后独立采样 降低层内方差
## 蒙特卡洛方法的实际应用案例
### 案例 1:21 点游戏(经典示例)
特点:Episode 式任务,状态空间小(200 个状态),回合有限。
```python
import numpy as np
def mc_control_blackjack(episodes=500000, gamma=1.0, epsilon=0.1):
# Q表:玩家点数(12-21), 庄家明牌(1-10), 有无Ace(0/1), 动作(0=Stick, 1=Hit)
Q = np.zeros((22, 11, 2, 2))
N = np.zeros((22, 11, 2, 2))
for _ in range(episodes):
# 生成episode
episode = generate_episode(epsilon, Q) # (S, A, R) tuples
G = 0
visited = set()
for t in range(len(episode)-1, -1, -1):
state, action, reward = episode[t]
G = gamma * G + reward
sa_pair = (state[0], state[1], state[2], action)
if sa_pair not in visited:
visited.add(sa_pair)
N[sa_pair] += 1
Q[sa_pair] += (G - Q[sa_pair]) / N[sa_pair]
return Q
```
训练 500,000 个 episode 后,贪心策略在 21 点中的胜率约为 **41.8%**(庄家优势约 8%,与实际 21 点的约 8-10% 庄家优势吻合)。
### 案例 2:简单的连续迷宫导航
**环境**:$10 \times 10$ 网格世界,起点在左下角 (1,1),终点在右上角 (10,10)。
- **状态**:$(x, y)$ 坐标(100 个离散状态)
- **动作**:上、下、左、右(4 个动作)
- **奖励**:到达终点 +100,每步 -1,撞墙 -5
- **折扣**:$\gamma = 0.99$
**On-Policy MC 控制($\epsilon=0.1$)结果**:
Episodes 平均 episode 长度 平均回报 收敛状态
--------------------------------------------
0-1000 85.3 -23.4 探索中
1000-5000 42.1 42.8 部分优化
5000-10000 28.6 71.9 接近最优
10000-20000 22.4 78.1 收敛
50000+ 18.7 82.3 稳定最优
**与 TD 方法的对比(同环境下):**
方法 收敛所需 episodes 最终平均回报 每 episode 计算时间
-------------------------------------------------------
首次访问 MC 15,000 82.1 0.8ms
每次访问 MC 12,000 82.3 0.7ms
SARSA($\lambda=0.9$) 3,000 82.5 1.2ms
Q-Learning 2,500 83.0 0.4ms
可见 MC 方法收敛速度慢于 TD 方法,但最终性能接近。
### 案例 3:围棋中的蒙特卡洛树搜索
现代围棋 AI 的核心算法是**蒙特卡洛树搜索(MCTS, Monte Carlo Tree Search)**,它将蒙特卡洛方法与树搜索结合:
```
MCTS 四步迭代:
1. 选择 (Selection) — 使用 UCT 公式选择最有希望的子节点
2. 扩展 (Expansion) — 除非到达终端状态,否则创建新子节点
3. 模拟 (Simulation) — 从新节点开始随机模拟到终端
4. 反向传播 (Backpropagation) — 将模拟结果沿路径向上传播
```
**UCT (Upper Confidence Bound applied to Trees)** 的核心公式:
\text{UCT} = \frac{w_i}{n_i} + c \sqrt{\frac{\ln N}{n_i}}
其中 $w_i$ 是节点 $i$ 的获胜次数,$n_i$ 是节点的访问次数,$N$ 是父节点的访问次数,$c$ 是探索常数。
AlphaGo 的成功(2016 年击败李世石)证明了蒙特卡洛方法在复杂决策中的强大能力:
系统 年份 方法 对阵人类 Elo 评分
------------------------------------
AlphaGo Fan 2015 MCTS + 策略网络 + 值网络 5:0 胜 樊麾 3,140
AlphaGo Lee 2016 MCTS + 深度神经网络 4:1 胜 李世石 3,738
AlphaGo Master 2017 改进版 MCTS 3:0 胜 柯洁 4,858
AlphaZero 2017 通用 MCTS + 自对弈学习 无需人类数据 超 5,000
## 蒙特卡洛方法的优化变体
### 1. 增量式 MC 控制
使用固定学习率 $\alpha$(而非 1/N):
Q(s,a) \leftarrow Q(s,a) + \alpha [G_t - Q(s,a)]
**优点**:
- 跟踪非平稳环境
- 最近 episode 的权重大于历史 episode
- 可结合 decaying $\alpha$ 实现早期快速学习 + 后期收敛
### 2. 批处理蒙特卡洛(Batch MC)
多个 episode 收集完成后批量更新:
```
收集 batch_size 个完整 episodes
计算每个 (s,a) 的平均回报
一次性更新所有 Q 值
```
适用于离线强化学习场景,稳定性高但实时性差。
### 3. λ-回报 (λ-Return)
TD($\lambda$) 方法中的 λ-回报融合了 MC 和 TD:
G_t^\lambda = (1-\lambda) \sum_{n=1}^\infty \lambda^{n-1} G_
其中 $G_t:t+n$ 是 n 步回报。当 $\lambda=1$ 时等价于 MC,当 $\lambda=0$ 时等价于 TD(0)。
$\lambda$ 值 等效方法 偏差 方差
---------------------------------
0.0 TD(0) 高 低
0.5 混合 TD/MC 中等 中等
0.9 偏向 MC 低 中高
1.0 蒙特卡洛 无偏 高
## 与策略梯度方法的关系
蒙特卡洛方法与策略梯度(Policy Gradient)方法有深刻的联系。REINFORCE 算法本质上就是使用蒙特卡洛回报的策略梯度方法:
\nabla J(\theta) = \mathbb{E}_\pi \left[ G_t \nabla \ln \pi(A_t|S_t, \theta) \right]
REINFORCE 的梯度估计使用完整 episode 回报 $G_t$,这是典型的 MC 思想。
**REINFORCE with Baseline** 进一步降低方差:
\nabla J(\theta) = \mathbb{E}_\pi \left[ (G_t - b(S_t)) \nabla \ln \pi(A_t|S_t, \theta) \right]
其中基线 $b(S_t)$ 通常设置为 $V(S_t)$,即当前状态的价值函数。
## 实战注意事项
### 实现中的关键点
注意事项 说明
---------------
**折扣因子选择** 任务短期:$\gamma \in [0.8, 0.95]$;长期任务:$\gamma \in [0.99, 0.999]$
**探索策略** $\epsilon$ 不宜过大(0.05-0.2),可随时间衰减
**Episode 长度** 极长 episode 导致高方差和慢收敛
**数值稳定性** 对大状态空间使用函数近似(而非表格)
**重要性采样截断** 设置 $\rho$ 上限防止极端值主导
**增量式更新** 使用 $1/N$ 衰减 $\alpha$ 或固定较小的 $\alpha$
### 代码模板:通用 MC 控制框架
```python
import numpy as np
from collections import defaultdict
class MonteCarloControl:
def __init__(self, actions, gamma=0.99, epsilon=0.1, alpha=None):
self.Q = defaultdict(lambda: np.zeros(len(actions)))
self.N = defaultdict(lambda: np.zeros(len(actions)))
self.actions = actions
self.gamma = gamma
self.epsilon = epsilon
self.alpha = alpha # None → 使用 1/N
def policy(self, state):
"""ε-greedy 策略"""
if np.random.random() < self.epsilon:
return np.random.choice(self.actions)
return np.argmax(self.Q[state])
def update(self, episode):
"""使用完整 episode 进行增量更新"""
G = 0
visited = set()
for t in range(len(episode)-1, -1, -1):
state, action, reward = episode[t]
G = self.gamma * G + reward
sa_pair = (state, action)
if sa_pair not in visited:
visited.add(sa_pair)
self.N[sa_pair][action] += 1
if self.alpha is None:
lr = 1.0 / self.N[sa_pair][action]
else:
lr = self.alpha
self.Q[state][action] += lr * (G - self.Q[state][action])
```
## 总结与实践建议
### 何时选择蒙特卡洛方法
蒙特卡洛方法并非总是最佳选择,但它有以下最优适用场景:
✅ 适合使用 MC ❌ 不适合使用 MC
------------------------------
Episode 式任务(有明确终点) 连续任务(无终止状态)
环境模型不可得 已有精确环境模型
状态空间可接受(中、小规模) 状态空间极大,需函数近似
需要无偏价值估计 需要快速在线学习
单步奖励噪声大 奖励信号稀疏
离线学习(batch 模式) 实时交互学习需求
### 实践阶梯
1. **从小规模离散环境开始**:先在 21 点、Grid World 等经典环境调试
2. **优先尝试首次访问 MC**:理论性质更好,实现简单
3. **使用加权重要性采样**:Off-policy 场景中稳定性和收敛性更好
4. **探索率衰减**:$\epsilon$ 从 0.3 衰减到 0.01 可平衡探索和收敛
5. **结合 $\lambda$-return**:在 MC 和 TD 之间寻找平衡
6. **扩展到函数近似**:对于大规模任务,使用神经网络逼近 Q 值
## 扩展阅读
- [马尔可夫决策过程](/zh/rl/mdp) — MC 方法的基础环境模型
- [时序差分学习](/zh/rl/td-learning) — MC 的在线替代方案
- [策略梯度方法](/zh/rl/policy-gradient) — MC 与策略优化的结合
- [强化学习基础](/zh/rl/basics) — 从零开始的强化学习导论
## 参考文献
1. Sutton, R.S. & Barto, A.G. (2018). *Reinforcement Learning: An Introduction* (2nd ed.). MIT Press. — Chapter 5: Monte Carlo Methods
2. Silver, D. et al. (2016). "Mastering the game of Go with deep neural networks and tree search." *Nature*, 529(7587), 484-489.
3. Kocsis, L. & Szepesvári, C. (2006). "Bandit based Monte-Carlo planning." *ECML*, 282-293.
4. Precup, D. (2000). "Eligibility traces for off-policy policy evaluation." *Computer Science Department Faculty Publication Series*, 80.
5. Rubinstein, R.Y. & Kroese, D.P. (2016). *Simulation and the Monte Carlo Method* (3rd ed.). Wiley.