博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

什么是“移动平均” 和 ”指数加权平均“?

Posted on 2026-02-24 12:16  steve.z  阅读(2)  评论(0)    收藏  举报

一、移动平均(Moving Average)

移动平均是一种对时间序列数据进行平滑的方法,核心思想是:用过去若干个数据点的平均值来代替当前值,从而消除短期波动、看清长期趋势。

简单移动平均(Simple Moving Average, SMA)

最直观的版本:取过去 \(k\) 个数据点的算术平均:

\[\bar{v}_t = \frac{1}{k} \sum_{i=0}^{k-1} x_{t-i} = \frac{x_t + x_{t-1} + \cdots + x_{t-k+1}}{k} \]

通俗比喻:你每天记录气温,但数据忽高忽低。简单移动平均就是"取最近 7 天的平均气温"来代表今天的气温趋势。窗口每往前滑动一天,就丢掉最老的一天、纳入最新的一天。

缺点:窗口内所有数据点权重相等,但直觉上,越近的数据应该越重要;而且需要存储过去 \(k\) 个数据点,有内存开销。


二、指数加权平均(Exponentially Weighted Moving Average, EWMA)

指数加权平均是移动平均的一种改进,它用一个递推公式来解决上述两个问题。

公式

\[v_t = \beta \cdot v_{t-1} + (1 - \beta) \cdot x_t \]

其中 \(\beta \in (0, 1)\) 是一个超参数,称为衰减系数\(x_t\) 是当前时刻的观测值,\(v_t\) 是当前时刻的指数加权平均值。

就这一行公式,不需要存储历史数据,只需要记住上一时刻的 \(v_{t-1}\)

通俗比喻

你每天估计"近期平均气温"。指数加权平均的做法是:今天的估计 = 昨天的估计 × 大部分 + 今天实测值 × 小部分

\(\beta = 0.9\) 意味着:你有 90% 相信昨天的估计,10% 相信今天新来的数据。明天你会再用同样的方式更新。


三、为什么叫"指数"加权?

把递推公式展开,就能看出"指数"从哪里来。以 \(v_3\) 为例:

\[v_3 = \beta v_2 + (1-\beta) x_3 \]

\[= \beta(\beta v_1 + (1-\beta) x_2) + (1-\beta) x_3 \]

\[= \beta^2 v_1 + \beta(1-\beta) x_2 + (1-\beta) x_3 \]

继续展开 \(v_1\),最终得到:

\[v_t = (1-\beta) \sum_{i=0}^{t-1} \beta^i \cdot x_{t-i} + \beta^t v_0 \]

可以看到,\(x_{t-i}\) 的权重是 \((1-\beta)\beta^i\),随着 \(i\) 增大(即数据越老),权重以指数速度衰减:

\[\text{权重} \propto \beta^0,\ \beta^1,\ \beta^2,\ \beta^3, \ldots \]

这就是"指数"加权的由来——越新的数据权重越大,越老的数据权重越小,且衰减速度是指数级的


四、\(\beta\) 控制的是"记忆长度"

一个常用的近似:由于 \(\beta^{1/(1-\beta)} \approx \dfrac{1}{e} \approx 0.37\),可以认为权重衰减到约 \(\frac{1}{e}\) 时对应的历史长度大约是 \(\dfrac{1}{1-\beta}\) 个时间步。

\(\beta\) 约等效于过去多少步的平均
0.5 约 2 步
0.9 约 10 步
0.99 约 100 步

\(\beta\) 越大,记忆越长,曲线越平滑,但对最新变化的响应越迟钝;\(\beta\) 越小,记忆越短,曲线越跟得上最新数据,但越容易受噪声干扰。


五、偏差修正(Bias Correction)

指数加权平均有一个小问题:初始时 \(v_0 = 0\),导致训练初期的估计值偏小

\(\beta = 0.9\)\(x_1 = 10\) 为例:

\[v_1 = 0.9 \times 0 + 0.1 \times 10 = 1 \]

但实际上此时只有一个数据点,合理的估计应该是 \(10\),而不是 \(1\)

偏差修正的做法是用 \(\hat{v}_t\) 代替 \(v_t\)

\[\hat{v}_t = \frac{v_t}{1 - \beta^t} \]

\(t\) 很小时,\(1 - \beta^t\) 接近 \(0\),分母变小,把 \(v_t\) 放大,修正初期的低估;当 \(t\) 很大时,\(\beta^t \approx 0\)\(1 - \beta^t \approx 1\),修正项自动消失,不影响后期。


六、两种移动平均的对比

简单移动平均(SMA) 指数加权平均(EWMA)
权重分配 窗口内均等 越新权重越大,指数衰减
是否需要存历史数据 需要存 \(k\) 只需存上一个值
计算复杂度 \(O(k)\) \(O(1)\)
参数 窗口大小 \(k\) 衰减系数 \(\beta\)
对最新数据的响应 滞后 \(k/2\) 响应更灵活,由 \(\beta\) 控制

七、为什么深度学习里到处都是指数加权平均?

指数加权平均在深度学习优化器中无处不在,原因很简单:只用一行递推公式、只存一个数,就能追踪历史趋势

Adam、RMSProp、Momentum 这些优化器,本质上都是用指数加权平均来估计梯度的一阶矩(均值)或二阶矩(方差),然后用这些估计来调整每个参数的学习率。如果你理解了指数加权平均,这些优化器的设计逻辑就会豁然开朗。