文章

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)

  1. 指数加权平均公式

    \[v_t = \beta v_{t-1} + (1 - \beta) \theta_t,\quad v_0 = 0\]
  2. 初始偏差问题:因 $v_0 = 0$,早期 $v_t$ 严重低估真实值,尤其当 $\beta \to 1$。
  3. 偏差修正公式

    \[\hat{v}_t = \frac{v_t}{1 - \beta^t}\]
  4. 修正效果

    • 早期:显著提升估计准确性
    • 后期:几乎无影响(因 $\beta^t \to 0$)
  5. 在深度学习中: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 进行授权