1. 从预测收入开始
| 天数 | 营业金额 |
|---|---|
| 第 1 天 | 100 |
| 第 2 天 | 114 |
| 第 3 天 | 118 |
| 第 4 天 | 117 |
| 第 5 天 | 120 |
| 第 6 天 | 122 |
| 第 7 天 | ? |
1.1 方法一:简单平均
全部 6 天等权重:
问题:第 1 天和第 6 天重要性相同,但显然最近的经营情况更有参考价值。
1.2 方法二:加权平均
越近的数据给越大权重:
| 第 1 天 | 第 2 天 | 第 3 天 | 第 4 天 | 第 5 天 | 第 6 天 |
|---|---|---|---|---|---|
| 权重 0.05 | 0.10 | 0.15 | 0.20 | 0.25 | 0.25 |
思想:越新的数据越能反映当前趋势。
2. 指数加权平均(Exponentially Weighted Average)
2.1 递推公式
- :前 天的指数加权平均值
- :第 天的实际值
- :衰减系数(超参数),
2.2 初始条件与逐天计算
设 , :
V₁ = 0.7 × V₀ + 0.3 × θ₁
V₂ = 0.7 × V₁ + 0.3 × θ₂
V₃ = 0.7 × V₂ + 0.3 × θ₃
...
2.3 展开后看到”指数衰减”
把 展开到 的表达式:
| 天数 | 权重系数 |
|---|---|
| (最早) | |
| (最近) |
权重按 的指数衰减 — 名字”指数加权平均”的由来。
2.4 的含义
| 效果 | 含义 | |
|---|---|---|
| 0.9 | 衰减慢 | 近似过去 10 天的平均() |
| 0.98 | 衰减很慢 | 近似过去 50 天的平均 |
| 0.5 | 衰减飞快 | 近似过去 2 天的平均 |
经验公式: 对应的有效窗口 ≈ 。
3. 偏差修正(Bias Correction)
3.1 早期值偏小的问题
导致前几天的 严重偏低:
| 天数 | 原始 | |
|---|---|---|
| 第 1 天 | 100 | 30(远小于 100) |
| 第 2 天 | 114 | 55.2 |
前几天的 受 影响太大,不准确。
3.2 修正公式
修正后:
| 天数 | 原始 | 修正后 | |
|---|---|---|---|
| 第 1 天 | 30 | 0.3 | 100 |
| 第 2 天 | 55.2 | 0.51 | 108.2 |
| … | … | … | … |
| 第 6 天 | 104.3947 | 0.882351 | 118.31 |
当 足够大时 ,修正自动失效——说明偏差只是一个”冷启动”问题。
3.3 实现中的简洁写法
不需要存 一堆变量,只需要一个变量不断更新:
V = 0.0
for theta in daily_revenue:
V = beta * V + (1 - beta) * theta # 一步更新
# V_corrected = V / (1 - beta ** t) # 可选偏差修正
优点:算法简单,只存一个变量 ,极省内存。
4. 在深度学习中的应用
这一节是为后续内容做铺垫。指数加权平均被用在:
| 应用 | 说明 |
|---|---|
| 动量优化器(Momentum) | 对梯度做指数加权平均,平滑更新方向 |
| Adam 优化器 | 对梯度的一阶矩和二阶矩都做指数加权平均 |
| Batch Normalization | 训练时用指数加权平均维护 running mean / running var |
5. 总结
指数加权平均 = 一行代码的平滑预测
公式:V = β·V + (1-β)·θ
├── 新 V = β × 旧 V + (1-β) × 当前值
├── β 大 → 窗口长,平滑但滞后
├── β 小 → 窗口短,灵敏但波动
└── 只需存一个变量,内存友好
偏差修正:V_correct = V / (1-βᵗ)
└── 解决 V₀=0 导致的冷启动偏差
└── 序列足够长后自动失效