一、移动平均(Moving Average)
移动平均是一种对时间序列数据进行平滑的方法,核心思想是:用过去若干个数据点的平均值来代替当前值,从而消除短期波动、看清长期趋势。
简单移动平均(Simple Moving Average, SMA)
最直观的版本:取过去 \(k\) 个数据点的算术平均:
通俗比喻:你每天记录气温,但数据忽高忽低。简单移动平均就是"取最近 7 天的平均气温"来代表今天的气温趋势。窗口每往前滑动一天,就丢掉最老的一天、纳入最新的一天。
缺点:窗口内所有数据点权重相等,但直觉上,越近的数据应该越重要;而且需要存储过去 \(k\) 个数据点,有内存开销。
二、指数加权平均(Exponentially Weighted Moving Average, EWMA)
指数加权平均是移动平均的一种改进,它用一个递推公式来解决上述两个问题。
公式
其中 \(\beta \in (0, 1)\) 是一个超参数,称为衰减系数,\(x_t\) 是当前时刻的观测值,\(v_t\) 是当前时刻的指数加权平均值。
就这一行公式,不需要存储历史数据,只需要记住上一时刻的 \(v_{t-1}\)。
通俗比喻
你每天估计"近期平均气温"。指数加权平均的做法是:今天的估计 = 昨天的估计 × 大部分 + 今天实测值 × 小部分。
\(\beta = 0.9\) 意味着:你有 90% 相信昨天的估计,10% 相信今天新来的数据。明天你会再用同样的方式更新。
三、为什么叫"指数"加权?
把递推公式展开,就能看出"指数"从哪里来。以 \(v_3\) 为例:
继续展开 \(v_1\),最终得到:
可以看到,\(x_{t-i}\) 的权重是 \((1-\beta)\beta^i\),随着 \(i\) 增大(即数据越老),权重以指数速度衰减:
这就是"指数"加权的由来——越新的数据权重越大,越老的数据权重越小,且衰减速度是指数级的。
四、\(\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\) 为例:
但实际上此时只有一个数据点,合理的估计应该是 \(10\),而不是 \(1\)。
偏差修正的做法是用 \(\hat{v}_t\) 代替 \(v_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 这些优化器,本质上都是用指数加权平均来估计梯度的一阶矩(均值)或二阶矩(方差),然后用这些估计来调整每个参数的学习率。如果你理解了指数加权平均,这些优化器的设计逻辑就会豁然开朗。
浙公网安备 33010602011771号