Skip to content

E.2.3 蒙特卡洛、增量平均与重要性采样

前置知识E.2.2 随机变量、回报与状态价值——你需要知道期望和方差的定义。


上一节定义了期望——"把所有可能的结果按概率加权求平均"。问题在于,真实环境中往往不知道所有的概率和结果,没法直接算期望。怎么办?最直觉的办法是:多试几次,然后取平均。

蒙特卡洛估计

假设从同一个状态出发,采样了 5 条轨迹,得到回报:

8,10,7,9,6.8, \quad 10, \quad 7, \quad 9, \quad 6.

样本平均值是:

v^(s)=8+10+7+9+65=8.\hat{v}(s)=\frac{8+10+7+9+6}{5}=8.

如果继续采样,平均值会越来越接近真实期望。这就是蒙特卡洛方法——用样本平均来逼近真实期望。

在代码里,蒙特卡洛价值估计长这样:

V(s)G1+G2++GNN.V(s) \leftarrow \frac{G_1+G_2+\cdots+G_N}{N}.

它不需要知道环境转移概率,只需要能采样轨迹就行。


增量平均

蒙特卡洛方法虽然直觉简单,但它有一个实际工程问题:如果每次都保存所有历史回报来重新算平均,内存会越来越大,计算也越来越慢。能不能只保留一个"当前平均值",来一个新样本就更新一次,不需要回头翻旧数据?增量平均就是解决这个问题的——它让蒙特卡洛估计变成了一个在线算法,每来一个样本就能立即更新,不用存储历史。

假设当前已经看过 4 次,平均回报是 77。现在来了第 5 次回报 1111。新平均值是:

4×7+115=7.8.\frac{4\times7+11}{5}=7.8.

也可以写成:

7+15(117)=7.8.7 + \frac{1}{5}(11-7)=7.8.

一般形式是:

μn=μn1+1n(xnμn1).\mu_n = \mu_{n-1}+\frac{1}{n}(x_n-\mu_{n-1}).

这个形式看起来简单,但它是时序差分、随机近似和很多 RL 更新规则的共同骨架:

新估计=旧估计+步长×(目标旧估计).\text{新估计} = \text{旧估计} + \text{步长} \times (\text{目标} - \text{旧估计}).

和 RL 更新的对应关系

这个"骨架"在 RL 中到处出现。对比几个具体例子:

算法更新公式骨架对应
蒙特卡洛V(s)V(s)+1N[GV(s)]V(s)\leftarrow V(s)+\frac{1}{N}[G-V(s)]步长 1/N1/N,目标 GG
TD(0)V(s)V(s)+α[r+γV(s)V(s)]V(s)\leftarrow V(s)+\alpha[r+\gamma V(s')-V(s)]步长 α\alpha,目标 r+γV(s)r+\gamma V(s')
Q-learningQ(s,a)Q(s,a)+α[r+γmaxQV(s)]Q(s,a)\leftarrow Q(s,a)+\alpha[r+\gamma\max Q-V(s)]步长 α\alpha,目标 r+γmaxaQ(s,a)r+\gamma\max_{a'}Q(s',a')

共同点是:旧估计朝"目标"走一小步。区别在于"目标"怎么构造——蒙特卡洛用完整回报,TD 用一步引导,Q-learning 用最大动作价值。后面的 GAE 则是在这些目标之间做折中。

--- ## 重要性采样的直觉 蒙特卡洛和增量平均都假设数据是由"正在评估的策略"直接采样的——也就是说,要评估策略 A,就必须用策略 A 去跑数据。但 RL 中经常遇到一种困境:用策略 A 跑数据很贵(需要和环境交互),而旧策略 B 已经收集了大量数据,能不能复用这些旧数据来评估策略 A?问题在于,新策略和旧策略选动作的概率不同——旧策略喜欢选 left,新策略偏好 right,直接用旧数据算平均值会有偏差。**重要性采样**就是为了解决"用旧策略的数据来评估新策略"这个异策略(off-policy)问题而引入的,它的核心思想是:按概率比修正每条样本的权重。 怎么办?按概率比修正。比如: - 行为策略选择动作 right 的概率是 $0.5$。 - 目标策略选择动作 right 的概率是 $0.8$。 如果一条样本中确实选择了 right,那么这条样本在目标策略下比在行为策略下”更常见”——应该给它更高的权重。修正权重是:

\rho=\frac{0.8}{0.5}=1.6.

如果这条样本回报是 $10$,加权后贡献为 $1.6 \times 10 = 16$。这就是重要性采样:**用概率比修正”样本来自哪个策略”的偏差**。 --- ## 小结 本篇介绍了三种在实践中计算期望的方法: | 方法 | 核心思想 | RL 角色 | | ------------ | -------------------------------- | ------------------------------------ | | 蒙特卡洛估计 | 用样本平均逼近期望 | 不知道转移概率时估计价值 | | 增量平均 | 来一个样本更新一次,不存历史 | TD 更新、随机近似的共同骨架 | | 重要性采样 | 用概率比修正”数据来自旧策略”的偏差 | 异策略学习、PPO 的数学基础 | 蒙特卡洛解决了”不知道转移概率就没法直接算期望”的问题——多试几次取平均就行。增量平均解决了蒙特卡洛的内存问题——只保留当前估计、增量更新。重要性采样解决了”数据是旧策略收集的”问题——按概率比加权修正偏差。这三个方法组合起来,构成了 RL 中几乎所有价值估计和策略更新算法的基础。 > **下一篇**:[E.2.4 轨迹概率、Baseline 与 GAE](./probability-trajectory-td) —— 从单步采样到整条轨迹,从期望到方差控制。

Built for reusable bilingual course delivery