跳转至

05 - 蒙特卡洛方法

学习时间: 4-5小时 重要性: ⭐⭐⭐⭐⭐ 无模型学习的理论基础 前置知识: 概率论、大数定律、条件期望


🎯 学习目标

完成本章后,你将能够: - 从统计推断角度理解蒙特卡洛估计 - 掌握首次访问和每次访问MC的统计性质(无偏性、一致性、方差) - 理解并应用多种方差缩减技术 - 深入理解重要性采样的方差问题与修正方法 - 掌握MC算法的收敛性理论和样本复杂度分析 - 能够实现高效稳定的MC算法


1. 蒙特卡洛方法的统计基础

1.1 从统计推断视角看MC

问题形式化: 给定策略 \(\pi\),估计状态值函数 \(V^\pi(s) = \mathbb{E}_\pi[G_t | S_t = s]\)

蒙特卡洛估计量

\[\hat{V}_n(s) = \frac{1}{n} \sum_{i=1}^n G^{(i)}(s)\]

其中 \(G^{(i)}(s)\) 是第 \(i\) 次访问状态 \(s\) 后获得的回报。

1.2 估计量的统计性质

定理 5.1(MC估计量的无偏性)

首次访问MC估计量是无偏的: $\(\mathbb{E}[\hat{V}_n^{FV}(s)] = V^\pi(s)\)$

每次访问MC估计量是有偏的(但渐近无偏): $\(\mathbb{E}[\hat{V}_n^{EV}(s)] \neq V^\pi(s), \quad \lim_{n \to \infty} \mathbb{E}[\hat{V}_n^{EV}(s)] = V^\pi(s)\)$

证明(首次访问):

对于首次访问,每个 \(G^{(i)}(s)\) 是独立同分布的,且 \(\mathbb{E}[G^{(i)}(s)] = V^\pi(s)\)

因此: $\(\mathbb{E}[\hat{V}_n^{FV}(s)] = \frac{1}{n} \sum_{i=1}^n \mathbb{E}[G^{(i)}(s)] = V^\pi(s)\)$

证明(每次访问):

在同一条轨迹中,多次访问同一状态的回报是相关的(共享后续奖励)。

设一条轨迹访问状态 \(s\) 两次,回报分别为: - \(G_1 = R_1 + \gamma R_2 + \gamma^2 R_3 + ...\) - \(G_2 = R_2 + \gamma R_3 + ...\)

\(G_1\)\(G_2\) 共享 \(R_2, R_3, ...\),导致: $\(\text{Cov}(G_1, G_2) > 0\)$

因此样本不独立,估计量有偏。

定理 5.2(MC估计量的一致性)

首次访问和每次访问MC估计量都是一致的: $\(\hat{V}_n(s) \xrightarrow{a.s.} V^\pi(s) \quad \text{当} \quad n \to \infty\)$

证明:由强大数定律直接得到。

1.3 方差分析

回报方差的来源

\[\text{Var}(G_t) = \text{Var}\left(\sum_{k=0}^{T-t-1} \gamma^k R_{t+k+1}\right)\]

展开得: $\(\text{Var}(G_t) = \sum_{k=0}^{T-t-1} \gamma^{2k} \text{Var}(R_{t+k+1}) + 2\sum_{i<j} \gamma^{i+j} \text{Cov}(R_{t+i+1}, R_{t+j+1})\)$

方差上界

假设奖励有界 \(|R_t| \leq R_{max}\),则:

\[\text{Var}(G_t) \leq \frac{R_{max}^2}{(1-\gamma)^2}\]

MC估计量的方差

\[\text{Var}(\hat{V}_n) = \frac{\text{Var}(G)}{n}\]

要达到精度 \(\epsilon\)(即 \(\text{Var}(\hat{V}_n) \leq \epsilon^2\)),需要:

\[n \geq \frac{\text{Var}(G)}{\epsilon^2} = O\left(\frac{R_{max}^2}{(1-\gamma)^2 \epsilon^2}\right)\]

这表明样本复杂度随 \(1/(1-\gamma)^2\) 增长,对于接近1的折扣因子,需要大量样本。


2. 方差缩减技术

2.1 控制变量法(Control Variates)

核心思想:利用与估计量相关的已知量来减少方差。

设要估计 \(\mu = \mathbb{E}[X]\),已知 \(\mathbb{E}[Y] = \nu\),构造:

\[Z = X - \beta(Y - \nu)\]

\(\mathbb{E}[Z] = \mu\),且:

\[\text{Var}(Z) = \text{Var}(X) + \beta^2 \text{Var}(Y) - 2\beta \text{Cov}(X, Y)\]

最优系数: $\(\beta^* = \frac{\text{Cov}(X, Y)}{\text{Var}(Y)}\)$

最小方差: $\(\text{Var}(Z^*) = \text{Var}(X)(1 - \rho_{XY}^2)\)$

其中 \(\rho_{XY}\) 是相关系数。

2.2 基线控制(Baseline Control)

在策略梯度中常用,也可用于MC:

\[\hat{V}(s) = \frac{1}{n} \sum_{i=1}^n (G^{(i)} - b)\]

其中 \(b\) 是基线,通常取状态值函数的当前估计。

方差缩减效果

\[\text{Var}(G - b) = \text{Var}(G) + \text{Var}(b) - 2\text{Cov}(G, b)\]

\(b \approx \mathbb{E}[G]\) 且与 \(G\) 正相关时,方差显著降低。

2.3 对偶变量法(Antithetic Variates)

思想:成对采样负相关的样本,抵消波动。

对于每个随机数序列 \(\{U_i\}\),同时生成其对偶序列 \(\{1-U_i\}\)

在MC中的应用

对于动作选择,如果策略是确定性的或基于随机数,可以构造对偶轨迹。

方差缩减效果

\[\text{Var}\left(\frac{X_1 + X_2}{2}\right) = \frac{1}{4}[\text{Var}(X_1) + \text{Var}(X_2) + 2\text{Cov}(X_1, X_2)]\]

\(X_1\)\(X_2\) 负相关时,方差减小。

2.4 分层采样(Stratified Sampling)

思想:将状态空间划分为互不相交的子集(层),在每层内分别采样。

分层MC估计量

\[\hat{V}_{strat} = \sum_{k=1}^K w_k \hat{V}_k\]

其中 \(w_k\) 是层 \(k\) 的权重,\(\hat{V}_k\) 是层 \(k\) 内的MC估计。

方差分解

\[\text{Var}(G) = \underbrace{\sum_{k=1}^K w_k \text{Var}(G|S \in \text{层 } k)}_{\text{层内方差}} + \underbrace{\sum_{k=1}^K w_k (V_k - V)^2}_{\text{层间方差}}\]

分层采样消除了层间方差。

2.5 重要性采样的方差问题与修正

普通重要性采样的方差问题

\[\hat{V}_{IS} = \frac{1}{n} \sum_{i=1}^n \rho^{(i)} G^{(i)}\]

其中重要性采样比率:

\[\rho = \prod_{t=0}^{T-1} \frac{\pi(A_t|S_t)}{b(A_t|S_t)}\]

方差爆炸问题

当行为策略 \(b\) 与目标策略 \(\pi\) 差异大时,某些轨迹的比率 \(\rho\) 可能极大,导致:

\[\text{Var}(\rho G) \gg \text{Var}(G)\]

加权重要性采样(Weighted Importance Sampling)

\[\hat{V}_{WIS} = \frac{\sum_{i=1}^n \rho^{(i)} G^{(i)}}{\sum_{i=1}^n \rho^{(i)}}\]

性质: - 有偏但渐近无偏 - 方差显著低于普通IS - 比率之和归一化,防止极端值

增量式WIS更新

\[\hat{V}_{n+1} = \hat{V}_n + \frac{\rho_n}{\sum_{i=1}^n \rho_i}(G_n - \hat{V}_n)\]

2.6 代码实现:带方差缩减的MC

Python
import numpy as np
from collections import defaultdict
from typing import Callable, List, Tuple

def generate_episode(env, policy):
    """
    生成一个episode

    参数:
        env: 环境,需要有reset()和step(action)方法
        policy: 策略函数,输入状态返回动作概率分布或动作
    返回:
        episode: [(state, action, reward), ...]
    """
    episode = []
    state, _ = env.reset()
    done = False

    while not done:
        # 根据策略选择动作
        if callable(policy):
            if hasattr(policy, 'shape'):  # 如果是数组形式的策略
                action = np.random.choice(len(policy[state]), p=policy[state])
            else:
                action = policy(state)
        else:
            action = policy

        next_state, reward, terminated, truncated, _ = env.step(action)
        done = terminated or truncated
        episode.append((state, action, reward))
        state = next_state

        # 防止无限循环
        if len(episode) > 10000:
            break

    return episode

class VarianceReducedMC:
    """带方差缩减技术的蒙特卡洛方法"""

    def __init__(self, n_actions: int, gamma: float = 0.9):
        self.n_actions = n_actions
        self.gamma = gamma
        self.V = defaultdict(float)  # defaultdict访问不存在的键时返回默认值
        self.N = defaultdict(int)  # 访问计数
        self.returns_sum = defaultdict(float)
        self.returns_sq_sum = defaultdict(float)  # 用于方差估计

    def compute_return(self, rewards: List[float], start_idx: int = 0) -> float:
        """计算从start_idx开始的折扣回报"""
        G = 0.0
        for i in range(len(rewards) - 1, start_idx - 1, -1):
            G = self.gamma * G + rewards[i]
        return G

    def update_with_baseline(self, state: int, G: float,
                            baseline: float = None) -> float:
        """使用基线控制的增量更新"""
        if baseline is None:
            baseline = self.V[state]

        self.N[state] += 1
        n = self.N[state]

        # 增量均值更新(标准MC)
        self.V[state] += (G - self.V[state]) / n

        # 记录用于方差估计
        self.returns_sum[state] += G
        self.returns_sq_sum[state] += G * G

        return self.V[state]

    def get_variance_estimate(self, state: int) -> float:
        """估计回报的方差"""
        n = self.N[state]
        if n < 2:
            return float('inf')

        mean_sq = self.returns_sq_sum[state] / n
        mean = self.returns_sum[state] / n
        return mean_sq - mean ** 2

    def sample_complexity_for_accuracy(self, state: int,
                                       epsilon: float,
                                       delta: float = 0.05) -> int:
        """
        计算达到(epsilon, delta)精度所需的样本数

        使用切比雪夫不等式:P(|V_hat - V| >= epsilon) <= Var/(n*epsilon^2)

        参数:
            epsilon: 精度要求
            delta: 失败概率
        返回:
            所需样本数
        """
        var_estimate = self.get_variance_estimate(state)
        # 切比雪夫: n >= Var / (delta * epsilon^2)
        return int(np.ceil(var_estimate / (delta * epsilon ** 2)))

def weighted_importance_sampling_update(Q: dict, C: dict,
                                        state: int, action: int,
                                        G: float, rho: float) -> float:
    """
    加权重要性采样的增量更新

    参数:
        Q: 动作值函数
        C: 累积权重
        state, action: 状态动作对
        G: 回报
        rho: 重要性采样比率
    返回:
        更新后的Q值
    """
    sa = (state, action)
    C[sa] = C.get(sa, 0.0) + rho

    if C[sa] > 0:
        Q[sa] = Q.get(sa, 0.0) + (rho / C[sa]) * (G - Q.get(sa, 0.0))

    return Q[sa]

def stratified_mc_prediction(env, policy, strata_fn: Callable,
                             gamma: float = 0.9,
                             samples_per_stratum: int = 1000) -> dict:
    """
    分层蒙特卡洛预测

    参数:
        env: 环境
        policy: 策略
        strata_fn: 分层函数,将状态映射到层编号
        gamma: 折扣因子
        samples_per_stratum: 每层样本数
    返回:
        V: 状态值函数估计
    """
    # 收集各层数据
    stratum_data = defaultdict(lambda: {'returns': [], 'weights': []})

    # 估计各层权重(通过采样)
    exploration_episodes = 10000
    state_counts = defaultdict(int)

    for _ in range(exploration_episodes):
        episode = generate_episode(env, policy)
        visited_states = set()
        for state, _, _ in episode:
            if state not in visited_states:
                visited_states.add(state)
                stratum_id = strata_fn(state)
                state_counts[stratum_id] += 1

    total_states = sum(state_counts.values())
    stratum_weights = {k: v / total_states for k, v in state_counts.items()}

    # 分层采样
    for stratum_id in stratum_weights.keys():
        returns = []
        for _ in range(samples_per_stratum):
            episode = generate_episode(env, policy)

            # 反向计算回报
            G = 0
            for t in range(len(episode) - 1, -1, -1):
                state, action, reward = episode[t]
                G = gamma * G + reward

                if strata_fn(state) == stratum_id:
                    returns.append((state, G))

        stratum_data[stratum_id]['returns'] = returns

    # 合并各层估计
    V = defaultdict(float)
    for stratum_id, data in stratum_data.items():
        weight = stratum_weights[stratum_id]
        for state, G in data['returns']:
            V[state] += weight * G / len(data['returns'])

    return V

3. MC预测:算法与理论

3.1 首次访问MC的收敛速率

定理 5.3(MC预测的样本复杂度)

设回报有界 \(|G| \leq G_{max}\),要达到精度 \(\epsilon\) 以概率至少 \(1-\delta\)

\[P(|\hat{V}_n(s) - V^\pi(s)| \geq \epsilon) \leq \delta\]

所需样本数:

\[n \geq \frac{2 G_{max}^2 \ln(2/\delta)}{\epsilon^2}\]

证明:使用Hoeffding不等式。

对于独立同分布样本 \(G_1, ..., G_n\)\(|G_i| \leq G_{max}\)

\[P\left(\left|\frac{1}{n}\sum_{i=1}^n G_i - \mathbb{E}[G]\right| \geq \epsilon\right) \leq 2\exp\left(-\frac{n\epsilon^2}{2G_{max}^2}\right)\]

令右边等于 \(\delta\),解得:

\[n \geq \frac{2 G_{max}^2 \ln(2/\delta)}{\epsilon^2}\]

3.2 每次访问MC的渐近性质

定理 5.4(每次访问MC的渐近正态性)

在适当条件下,每次访问MC估计量满足中心极限定理:

\[\sqrt{n}(\hat{V}_n^{EV}(s) - V^\pi(s)) \xrightarrow{d} \mathcal{N}(0, \sigma^2_{EV})\]

其中渐近方差:

\[\sigma^2_{EV} = \text{Var}(G_1) + 2\sum_{k=1}^\infty \text{Cov}(G_1, G_{1+k})\]

\(G_1, G_{1+k}\) 是同一条轨迹中第1次和第1+k次访问的回报。

与首次访问的比较

  • 首次访问:方差 \(\sigma^2_{FV} = \text{Var}(G)\)
  • 每次访问:方差 \(\sigma^2_{EV} = \text{Var}(G) + 2\sum_{k=1}^\infty \gamma^k \text{Var}(G)\)

由于相关性,每次访问的渐近方差通常更大。

3.3 增量更新与步长选择

增量均值更新

\[V_{n+1} = V_n + \frac{1}{n+1}(G_n - V_n)\]

广义步长

\[V_{n+1} = V_n + \alpha_n(G_n - V_n)\]

收敛条件(Robbins-Monro条件):

\[\sum_{n=1}^\infty \alpha_n = \infty, \quad \sum_{n=1}^\infty \alpha_n^2 < \infty\]

常用选择: - \(\alpha_n = 1/n\):样本平均,收敛到真值 - \(\alpha_n = \alpha\)(常数):指数加权平均,跟踪非平稳环境 - \(\alpha_n = 1/n^p\)\(p \in (0.5, 1]\):折中方案


4. MC控制:策略改进理论

4.1 广义策略迭代框架

MC控制遵循广义策略迭代(GPI):

\[\pi_0 \xrightarrow{E} Q^{\pi_0} \xrightarrow{I} \pi_1 \xrightarrow{E} Q^{\pi_1} \xrightarrow{I} \pi_2 \cdots\]

其中: - \(E\):策略评估(MC估计) - \(I\):策略改进(贪心化)

4.2 ε-贪婪策略的理论保证

定理 5.5(ε-贪婪的策略改进定理)

\(\pi\) 是任意ε-贪婪策略,\(\pi'\) 是基于 \(Q^\pi\) 的新ε-贪婪策略:

\[\pi'(a|s) = \begin{cases} 1 - \epsilon + \frac{\epsilon}{|A|} & a = \arg\max_{a'} Q^\pi(s, a') \\ \frac{\epsilon}{|A|} & \text{否则} \end{cases}\]

则:

\[Q^{\pi'}(s, a) \geq Q^\pi(s, a) \quad \forall s, a\]

证明

对于任意状态-动作对 \((s, a)\)

\[\begin{aligned} Q^\pi(s, a) &= \mathbb{E}[R_{t+1} + \gamma V^\pi(S_{t+1}) | S_t=s, A_t=a] \\ &= \sum_{s'} P(s'|s,a)[R(s,a,s') + \gamma V^\pi(s')] \end{aligned}\]

由于 \(\pi'\)\(Q^\pi\) 上是ε-贪婪的:

\[\sum_a \pi'(a|s) Q^\pi(s, a) \geq \sum_a \pi(a|s) Q^\pi(s, a) = V^\pi(s)\]

由策略改进定理,\(Q^{\pi'} \geq Q^\pi\)

4.3 GLIE条件与收敛性

定义(GLIE):Greedy in the Limit with Infinite Exploration

一个探索策略序列 \(\{\pi_k\}\) 满足GLIE,如果: 1. 无限探索:每个状态-动作对被访问无限多次 2. 极限贪心\(\lim_{k \to \infty} \pi_k(a|s) = \mathbb{1}[a = \arg\max_{a'} Q(s, a')]\)(几乎处处)

定理 5.6(GLIE MC控制的收敛性)

如果满足: 1. 策略序列满足GLIE 2. 步长满足Robbins-Monro条件 3. 首次访问MC用于估计

则:

\[Q_k \xrightarrow{a.s.} Q^*, \quad \pi_k \xrightarrow{a.s.} \pi^*\]

ε-贪婪的GLIE实现

\[\epsilon_k = \frac{1}{k}\]

满足: - \(\sum_k \epsilon_k = \infty\)(无限探索) - \(\epsilon_k \to 0\)(极限贪心)

4.4 探索与利用的权衡分析

遗憾(Regret)分析

定义 \(T\) 步的累积遗憾:

\[\text{Regret}(T) = \sum_{t=1}^T [V^*(s_t) - Q^{\pi_t}(s_t, a_t)]\]

ε-贪婪的遗憾界

对于ε-贪婪策略,遗憾增长为 \(O(\epsilon T)\)

如果选择 \(\epsilon_k = O(1/\sqrt{k})\),则累积遗憾为 \(O(\sqrt{T})\)

最优探索

理论上最优的遗憾界是 \(O(\sqrt{SAT})\)(S:状态数,A:动作数),由UCB等算法达到。


5. Off-Policy MC:重要性采样的深入分析

5.1 普通重要性采样 vs 加权重要性采样

普通IS(Ordinary IS)

\[\hat{V}_{OIS} = \frac{1}{n} \sum_{i=1}^n \rho_i G_i\]

性质: - 无偏:\(\mathbb{E}[\hat{V}_{OIS}] = V^\pi\) - 方差可能无界

加权IS(Weighted IS)

\[\hat{V}_{WIS} = \frac{\sum_{i=1}^n \rho_i G_i}{\sum_{i=1}^n \rho_i}\]

性质: - 有偏:\(\mathbb{E}[\hat{V}_{WIS}] \neq V^\pi\) - 渐近无偏:\(\lim_{n \to \infty} \mathbb{E}[\hat{V}_{WIS}] = V^\pi\) - 方差有界,通常远小于OIS

5.2 重要性采样的方差上界

定理 5.7(WIS的方差界)

\(\rho_{max} = \max_i \rho_i\),则:

\[\text{Var}(\hat{V}_{WIS}) \leq \frac{\rho_{max}^2 \cdot \text{Var}(G)}{n}\]

证明

由WIS的定义和比率的有界性可得。

5.3 每决策重要性采样(Per-Decision IS)

问题:完整轨迹的重要性采样比率:

\[\rho_{0:T-1} = \prod_{t=0}^{T-1} \frac{\pi(A_t|S_t)}{b(A_t|S_t)}\]

当轨迹很长时,比率可能极不稳定。

每决策IS

将回报分解为各步贡献:

\[G_t = \sum_{k=t+1}^T \gamma^{k-t-1} R_k\]

则:

\[\mathbb{E}_b[\rho_{0:T-1} G_t] = \mathbb{E}_\pi[G_t]\]

可以重写为:

\[\mathbb{E}_b\left[\sum_{t=0}^{T-1} \gamma^t \rho_{0:t} R_{t+1}\right]\]

这样每一步只需要部分比率 \(\rho_{0:t}\),减少方差累积。

5.4 增量Off-Policy MC算法

Python
def off_policy_mc_control(env, behavior_policy, gamma=0.9, num_episodes=10000):
    """
    Off-Policy MC控制(使用加权重要性采样)

    参数:
        env: 环境
        behavior_policy: 行为策略(用于生成数据)
        gamma: 折扣因子
        num_episodes: episode数量
    返回:
        Q: 最优动作值函数估计
        target_policy: 目标策略(确定性贪心)
    """
    # 初始化
    Q = defaultdict(lambda: np.zeros(env.n_actions))
    C = defaultdict(lambda: np.zeros(env.n_actions))  # 累积权重
    target_policy = {}

    for i_episode in range(num_episodes):
        # 使用行为策略生成episode
        episode = generate_episode(env, behavior_policy)

        G = 0.0
        W = 1.0  # 重要性采样权重

        # 反向遍历
        for t in range(len(episode) - 1, -1, -1):
            state, action, reward = episode[t]

            G = gamma * G + reward

            # 更新累积权重
            C[state][action] += W

            # 加权重要性采样更新
            if C[state][action] > 0:
                Q[state][action] += (W / C[state][action]) * (G - Q[state][action])

            # 更新目标策略(确定性贪心)
            target_policy[state] = np.argmax(Q[state])

            # 如果行为策略选择的动作不是目标策略会选择的,终止
            if action != target_policy[state]:
                break

            # 更新权重
            # 注意:这里假设目标策略是确定性的
            # 如果是随机策略,需要乘以 pi(action|state) / b(action|state)
            W *= 1.0 / behavior_policy(state)[action]

            # 防止权重爆炸
            if W > 1e6:
                break

        if (i_episode + 1) % 1000 == 0:
            print(f"Episode {i_episode + 1}/{num_episodes} 完成")

    return Q, target_policy

6. MC方法的扩展与前沿

6.1 蒙特卡洛树搜索(MCTS)

MCTS结合了MC采样与树搜索,在围棋、象棋等游戏中取得巨大成功。

四个步骤: 1. 选择(Selection):使用UCB1从根节点选择子节点 2. 扩展(Expansion):添加新的子节点 3. 模拟(Simulation):从扩展节点进行MC rollout 4. 反向传播(Backpropagation):更新路径上的统计信息

UCB1公式

\[\text{UCB1}(s, a) = \bar{Q}(s, a) + c\sqrt{\frac{\ln N(s)}{N(s, a)}}\]

其中: - \(\bar{Q}(s, a)\):平均回报估计 - \(N(s)\):状态 \(s\) 的访问次数 - \(N(s, a)\):动作 \(a\) 在状态 \(s\) 的选择次数 - \(c\):探索常数

6.2 蒙特卡洛梯度估计

在策略梯度方法中,需要估计:

\[\nabla J(\theta) = \mathbb{E}_{\pi_\theta}\left[\sum_{t=0}^T \nabla_\theta \log \pi_\theta(A_t|S_t) G_t\right]\]

REINFORCE算法

\[\nabla J(\theta) \approx \frac{1}{n} \sum_{i=1}^n \sum_{t=0}^T \nabla_\theta \log \pi_\theta(A_t^{(i)}|S_t^{(i)}) G_t^{(i)}\]

方差缩减: - 基线:\(G_t - b(S_t)\) - 因果性:只使用未来回报(REINFORCE with baseline)

6.3 与其他方法的联系

MC与TD的关系

方法 目标 偏差 方差
MC \(G_t\) 0
TD(0) \(R_{t+1} + \gamma V(S_{t+1})\) >0
TD(\(\lambda\)) \(G_t^\lambda\) >0(小)

\(\lambda\)-回报

\[G_t^\lambda = (1-\lambda) \sum_{n=1}^\infty \lambda^{n-1} G_{t:t+n}\]

\(\lambda = 0\):TD(0) 当 \(\lambda = 1\):MC


7. 收敛性与复杂度理论

7.1 样本复杂度总结

算法 样本复杂度 备注
首次访问MC \(O\left(\frac{G_{max}^2}{(1-\gamma)^2\epsilon^2}\ln\frac{1}{\delta}\right)\) 无偏,高方差
每次访问MC \(O\left(\frac{G_{max}^2}{(1-\gamma)^2\epsilon^2}\ln\frac{1}{\delta}\right)\) 渐近无偏
MC + WIS \(O\left(\frac{\rho_{max}^2 G_{max}^2}{(1-\gamma)^2\epsilon^2}\ln\frac{1}{\delta}\right)\) 有偏,低方差

7.2 计算复杂度

单次episode的计算: - 时间:\(O(T \cdot A)\),其中 \(T\) 是轨迹长度,\(A\) 是动作数 - 空间:\(O(S \cdot A)\),存储Q函数

达到收敛的总计算: - 时间:\(O\left(\frac{G_{max}^2 T A}{(1-\gamma)^2\epsilon^2}\ln\frac{1}{\delta}\right)\) - 空间:\(O(S \cdot A)\)

7.3 方差下界

定理 5.8(MC估计的方差下界)

对于任何无偏MC估计量,方差满足:

\[\text{Var}(\hat{V}) \geq \frac{\sigma^2_{min}}{n}\]

其中 \(\sigma^2_{min}\) 是回报的内在方差,由环境的随机性决定。


8. 本章总结

8.1 核心概念回顾

Text Only
蒙特卡洛方法 = 基于采样的统计推断

统计基础:
├── 首次访问:无偏估计,独立样本
├── 每次访问:有偏但一致,相关样本
└── 收敛速率:O(1/√n),由中心极限定理决定

方差缩减:
├── 控制变量法:利用相关已知量
├── 基线控制:减去状态值估计
├── 对偶变量:负相关样本对
├── 分层采样:消除层间方差
└── 加权IS:解决普通IS的方差爆炸

算法理论:
├── GLIE条件:保证收敛的必要条件
├── ε-贪婪:简单有效的GLIE策略
└── 遗憾分析:O(√T) 累积遗憾

Off-Policy:
├── 普通IS:无但方差可能无界
├── 加权IS:有偏但方差有界
└── 每决策IS:减少长轨迹的方差累积

8.2 MC vs DP vs TD

特性 动态规划 蒙特卡洛 时序差分
需要模型
学习方式 自举 采样 自举+采样
更新时机 每步 每episode 每步
偏差 0 0 >0
方差
适用任务 小状态空间 Episodic 所有任务

8.3 学习路径

Text Only
下一步学习:
├── 时序差分学习 - 结合DP和MC的优点
│   ├── TD(0):单步自举
│   ├── SARSA:On-Policy TD控制
│   └── Q-Learning:Off-Policy TD控制
└── n-step方法 - MC和TD的统一天桥

✅ 自测问题

  1. 从统计角度,首次访问和每次访问MC的主要区别是什么?各自的优缺点?

  2. 重要性采样的方差为什么会爆炸?加权IS如何解决这个问题?代价是什么?

  3. GLIE条件的两个要求是什么?为什么它们对收敛是必要的?

  4. 证明:ε-贪婪策略满足策略改进定理。

  5. 设计一个分层采样方案用于MC预测,如何确定最优的样本分配?

  6. 计算复杂度分析:要达到ε精度,MC方法需要多少样本?这个复杂度与哪些因素有关?


📚 延伸阅读

理论基础

  1. Sutton & Barto《Reinforcement Learning: An Introduction》
  2. 第5章:Monte Carlo Methods
  3. 第7.3节:Off-Policy Monte Carlo Control

  4. Kearns & Singh (2000)

  5. "Bias-Variance Error Bounds for Temporal Difference Updates"
  6. 分析MC和TD的偏差-方差权衡

  7. Munos (2003)

  8. "Error Bounds for Approximate Policy Iteration"
  9. MC方法的误差分析

方差缩减

  1. Greensmith et al. (2004)
  2. "Variance Reduction Techniques for Gradient Estimates in Reinforcement Learning"
  3. 策略梯度中的方差缩减

  4. Jie & Abbeel (2010)

  5. "On A Bias-Variance Tradeoff Analysis in Importance Sampling"
  6. 重要性采样的偏差-方差分析

前沿研究

  1. Silver et al. (2016)
  2. "Mastering the game of Go with deep neural networks and tree search"
  3. MCTS与深度学习的结合

  4. Nachum et al. (2019)

  5. "AlgaeDICE: Policy Gradient from Arbitrary Experience"
  6. 现代Off-Policy方法

准备好进入下一阶段了吗? 下一章我们将学习时序差分学习,结合DP的自举和MC的采样,实现更高效的学习。

→ 下一步:../02-时序差分学习/01-时序差分学习基础.md