1. 为什么学 RL 要学“随机近似”?

本章看似是数学插曲,实则是连接蒙特卡洛 (MC) 和时序差分 (TD) 的桥梁。
所有现代 RL 算法(Q-learning, DQN, Policy Gradient)的更新公式都长这样:

这个公式是怎么来的?为什么它能收敛?这背后的数学原理就是 Robbins-Monro 算法


2. 均值估计:从批量到增量

假设我们想求随机变量的期望
我们可以采样

2.1 批量计算 (Batch)


缺点:每次都要把所有数加起来除以,或者保存所有数。

2.2 增量计算 (Incremental)

我们可以推导出递推公式:

这就是最简单的随机近似!

  • : 当前的估计值。
  • : 新的样本。
  • : 误差 (Error)
  • : 步长 (Step Size),通常记为

3. Robbins-Monro (RM) 算法

RM 算法解决更通用的问题:求解方程
难点在于:我们不知道的具体解析式,而且我们每次观测时都带有噪声

RM 更新公式:

收敛条件:
只要步长序列 {} 满足:

  1. (步子总长足够大,能走到解)。
  2. (步子变小的速度足够快,保证最后收敛不震荡)。
    那么就会以概率 1 收敛到方程的根

4. 随机梯度下降 (SGD)

SGD 是 RM 算法在优化问题上的应用。
目标:最小化。等价于求梯度为 0 的根:
这里
由于我们通常无法计算全量梯度(数据太多),只能用一个样本的梯度来近似。


这就是深度学习中天天用的 SGD。


5. 深度思考:学习率 (Step Size) 的哲学

在 Robbins-Monro 条件中,要求(例如)。这意味着学习率必须逐渐衰减到 0

为什么?
因为我们的观测是含噪的。如果步长不缩小,即便我们到了最优解附近,噪声也会推着我们来回震荡,永远无法稳定。衰减步长是为了抵消噪声的方差

但是,在 Deep RL (如 DQN) 中,我们通常用常数学习率 (Fixed Learning Rate),如 1e-4。为什么违反理论?
因为 RL 的环境往往是 Non-stationary (非平稳) 的:

  1. Target 在变:在 DQN 中,Target Network 会定期更新,我们追逐的目标本身就在变。
  2. 分布在变:随着策略变好,Agent 访问的状态分布也在变。

如果我们让,Agent 就会失去**“适应变化”**的能力(Tracking ability)。
结论

  • 理论收敛:需要
  • 实际工程:使用小的常数,在“收敛精度”和“追踪速度”之间做 Trade-off。这导致结果会在最优解附近形成一个“震荡区”,而无法精准停在一点。

6. Python 实战:RM 算法找根

我们来模拟一个场景:
求解方程(解显然是)。
但我们观测时有高斯噪声。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import numpy as np
import matplotlib.pyplot as plt

def true_function(w):
return np.tanh(w - 1)

def noisy_observation(w):
return true_function(w) + np.random.normal(0, 0.5) # 添加噪声

def robbins_monro(w_init, num_iter):
w = w_init
w_history = [w]

for k in range(1, num_iter + 1):
# 满足 RM 条件的步长: a_k = 1/k
# 实际 RL 中常设为固定小常数 (如 0.01),牺牲收敛性换取非平稳适应性
a_k = 1.0 / k

# 获取含噪观测
measurement = noisy_observation(w)

# RM 更新
w = w - a_k * measurement
w_history.append(w)

return w_history

# 运行模拟
w_hist = robbins_monro(w_init=-5.0, num_iter=1000)

print(f"Final Estimate: {w_hist[-1]:.4f}") # 应该接近 1.0

6. RL 中的应用 (Preview)

在下一章 TD Learning 中,我们将看到这样的公式:

对比 RM 公式,你会发现:

  • 就是
  • 对应的就是(预测误差)。
  • 我们的目标就是让这个误差期望为 0,即(Bellman Equation)。

结论:TD Learning 本质上就是用 RM 算法来解 Bellman Equation!