1. 为什么学 RL 要学“随机近似”?
本章看似是数学插曲,实则是连接蒙特卡洛 (MC) 和时序差分 (TD) 的桥梁。
所有现代 RL 算法(Q-learning, DQN, Policy Gradient)的更新公式都长这样:
$$ w ← w + α ( ext{Target} - w) $$
这个公式是怎么来的?为什么它能收敛?这背后的数学原理就是 Robbins-Monro 算法。
2. 均值估计:从批量到增量
假设我们想求随机变量 $X$ 的期望 $w = ℕ[X]$。
我们可以采样 $x_1, x_2, …, x_k$。
2.1 批量计算 (Batch)
$$ w_k = rac{1}{k} ∑_{i=1}^k x_i $$
缺点:每次都要把所有数加起来除以 $k$,或者保存所有数。
2.2 增量计算 (Incremental)
我们可以推导出递推公式:
$$ w_{k+1} = w_k + rac{1}{k+1} (x_{k+1} - w_k) $$
这就是最简单的随机近似!
- $w_k$: 当前的估计值。
- $x_{k+1}$: 新的样本。
- $(x_{k+1} - w_k)$: 误差 (Error)。
- $ rac{1}{k+1}$: 步长 (Step Size),通常记为 $α_k$。
3. Robbins-Monro (RM) 算法
RM 算法解决更通用的问题:求解方程 $g(w) = 0$。
难点在于:我们不知道 $g(w)$ 的具体解析式,而且我们每次观测 $g(w)$ 时都带有噪声 $η$。
$$ rig(w) = g(w) + η $$
RM 更新公式:
$$ w_{k+1} = w_k - a_k rig(w_k) $$
收敛条件:
只要步长序列 {$a_k$} 满足:
- $∑ a_k = ∞$ (步子总长足够大,能走到解)。
- $∑ a_k^2 < ∞$ (步子变小的速度足够快,保证最后收敛不震荡)。
那么 $w_k$ 就会以概率 1 收敛到方程的根 $w^*$。
4. 随机梯度下降 (SGD)
SGD 是 RM 算法在优化问题上的应用。
目标:$≈ J(w)$。等价于求梯度为 0 的根:$
abla J(w) = 0$。
这里 $g(w) =
abla J(w)$。
由于我们通常无法计算全量梯度(数据太多),只能用一个样本的梯度 $ƒ}
abla J(w)$ 来近似。
$$ w_{k+1} = w_k - a_k \widehat{\nabla J}(w_k) $$
这就是深度学习中天天用的 SGD。
5. 深度思考:学习率 (Step Size) 的哲学
在 Robbins-Monro 条件中,要求 $\sum a_k = \infty$ 且 $\sum a_k^2 < \infty$(例如 $a_k = 1/k$)。这意味着学习率必须逐渐衰减到 0。
为什么?
因为我们的观测 $g(w) + \eta$ 是含噪的。如果步长不缩小,即便我们到了最优解附近,噪声 $\eta$ 也会推着我们来回震荡,永远无法稳定。衰减步长是为了抵消噪声的方差。
但是,在 Deep RL (如 DQN) 中,我们通常用常数学习率 (Fixed Learning Rate),如 1e-4。为什么违反理论?
因为 RL 的环境往往是 Non-stationary (非平稳) 的:
- Target 在变:在 DQN 中,Target Network 会定期更新,我们追逐的目标 $y$ 本身就在变。
- 分布在变:随着策略 $\pi$ 变好,Agent 访问的状态分布 $d_\pi(s)$ 也在变。
如果我们让 $\alpha \to 0$,Agent 就会失去**“适应变化”**的能力(Tracking ability)。
结论:
- 理论收敛:需要 $\alpha \to 0$。
- 实际工程:使用小的常数 $\alpha$,在“收敛精度”和“追踪速度”之间做 Trade-off。这导致结果会在最优解附近形成一个“震荡区”,而无法精准停在一点。
6. Python 实战:RM 算法找根
我们来模拟一个场景:
求解方程 $g(w) = anh(w - 1) = 0$ (解显然是 $w=1$)。
但我们观测时有高斯噪声。
1 | import numpy as np |
6. RL 中的应用 (Preview)
在下一章 TD Learning 中,我们将看到这样的公式:
$$ V(S_t) ← V(S_t) + α [ (R + γ V(S_{t+1})) - V(S_t) ] $$
对比 RM 公式 $w ← w - α rig(w)$,你会发现:
- $w$ 就是 $V(S_t)$。
- $rig(w)$ 就是 $V(S_t) - (R + γ V(S_{t+1}))$(预测误差)。
- 我们的目标就是让这个误差期望为 0,即 $V(S_t) = ℕ[R + γ V(S_{t+1})]$ (Bellman Equation)。
结论:TD Learning 本质上就是用 RM 算法来解 Bellman Equation!

