19 指数加权平均中的偏差修正(Bias Correction in Exponentially Weighted Averages)
19 指数加权平均中的偏差修正(Bias Correction in Exponentially Weighted Averages)
一、背景:什么是指数加权平均?
在优化算法(如 Momentum、RMSProp、Adam)中,我们经常使用 指数加权平均(Exponentially Weighted Average, EWA) 来平滑序列数据(例如梯度、温度等)。
其递推公式为:
\[v_t = \beta v_{t-1} + (1 - \beta) \theta_t\]其中:
- $v_t$:第 $t$ 步的加权平均值(也称为“动量”或“移动平均”)
- $\theta_t$:第 $t$ 步的原始观测值(如温度、梯度等)
- $\beta \in (0, 1)$:平滑系数(通常取 0.9、0.98 等)
- 初始值 $v_0 = 0$
✅ 直观理解:$\beta$ 越大,平均越“平滑”,但响应越慢;$\beta$ 越小,对新数据越敏感。
二、问题:初始阶段的“偏差”(Bias)
当使用上述公式时,由于初始化 $v_0 = 0$,早期的 $v_t$ 会严重低估真实值,尤其当 $\beta$ 接近 1(如 0.98)时。
举例说明(以 $\beta = 0.98$ 为例):
- $v_1 = 0.98 \cdot v_0 + 0.02 \cdot \theta_1 = 0.02 \theta_1$
- $v_2 = 0.98 v_1 + 0.02 \theta_2 = 0.98 \cdot 0.02 \theta_1 + 0.02 \theta_2 = 0.0196 \theta_1 + 0.02 \theta_2$
可见,$v_1$ 和 $v_2$ 的权重总和远小于 1(分别为 0.02 和 0.0396),导致估计值偏低。
🔴 这种现象称为 初始偏差(initial bias) —— 因为 $v_t$ 在早期被“拉低”了。
三、解决方案:偏差修正(Bias Correction)
为了消除这种偏差,对 $v_t$ 进行如下修正:
\[\hat{v}_t = \frac{v_t}{1 - \beta^t}\]其中:
- $\hat{v}_t$ 是偏差修正后的估计值
- 分母 $1 - \beta^t$ 补偿了因 $v_0 = 0$ 导致的权重不足
为什么有效?
- 当 $t$ 很小时,$\beta^t$ 接近 1,因此 $1 - \beta^t$ 很小,$\hat{v}_t$ 被放大,纠正低估
- 当 $t$ 很大时,$\beta^t \to 0$,所以 $1 - \beta^t \to 1$,修正项趋于 1,不影响后期结果
✅ 效果:修正后,曲线(绿色)能更准确地反映早期数据,而不是像未修正的紫色曲线那样起始过低。
四、数学验证(以 $t=2$ 为例)
未修正:
\[v_2 = 0.0196 \theta_1 + 0.02 \theta_2\]修正后:
\[\hat{v}_2 = \frac{v_2}{1 - \beta^2} = \frac{0.0196 \theta_1 + 0.02 \theta_2}{1 - 0.98^2} = \frac{0.0196 \theta_1 + 0.02 \theta_2}{0.0396}\]注意到分子 ≈ 分母 ×(加权平均),因此 $\hat{v}_2$ 成为 $\theta_1$ 和 $\theta_2$ 的合理加权平均,权重和为 1。
五、实际应用建议
| 场景 | 是否需要偏差修正? |
|---|---|
| 使用 Adam、RMSProp 等现代优化器 | ✅ 需要(Adam 默认包含偏差修正) |
| 手动实现 EWA 且关心早期精度 | ✅ 建议加上 |
| 仅用于可视化或后期稳定阶段 | ❌ 可省略(因后期 $\beta^t \approx 0$) |
💡 吴恩达指出:大多数工程实践中,人们常忽略偏差修正,因为愿意“等待初始阶段过去”。但若你希望从第一步就获得准确估计(如在线学习、实时系统),则应使用偏差修正。
六、总结要点(Key Takeaways)
指数加权平均公式:
\[v_t = \beta v_{t-1} + (1 - \beta) \theta_t,\quad v_0 = 0\]- 初始偏差问题:因 $v_0 = 0$,早期 $v_t$ 严重低估真实值,尤其当 $\beta \to 1$。
偏差修正公式:
\[\hat{v}_t = \frac{v_t}{1 - \beta^t}\]修正效果:
- 早期:显著提升估计准确性
- 后期:几乎无影响(因 $\beta^t \to 0$)
- 在深度学习中:Adam 优化器内部已使用此修正(对一阶矩 $m_t$ 和二阶矩 $v_t$ 都做修正)。
七、延伸:Adam 中的偏差修正(供参考)
Adam 同时维护两个 EWA:
- 一阶矩(均值):$m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t$
- 二阶矩(方差):$v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2$
并进行偏差修正:
\[\hat{m}_t = \frac{m_t}{1 - \beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1 - \beta_2^t}\]然后更新参数:
\[\theta_{t+1} = \theta_t - \frac{\alpha \hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}\] 本文由作者按照 CC BY 4.0 进行授权