【深度学习】通俗易懂的基础知识:指数加权平均

一、什么是指数加权平均?

        指数在数学中表示一个数的幂次运算(如aⁿ中的n),而在统计学中特指随时间变化的几何衰减系数,加权指对不同数据赋予不同权重,使重要数据对结果产生更大影响。指数加权平均指是一种时间序列数据的加权计算方法,其特点是随着时间推移,数据权重呈指数级衰减——近期数据具有更高权重,而早期数据影响逐渐减弱。该方法的核心在于"动态平衡历史与当前数据,同时突出近期信息的可靠性"。

二、什么叫数据权重呈指数级衰减?

        我在之前写过的一篇文章【人工智能】神经网络的优化器optimizer(一):Momentum动量优化器中有所提及,现在先把神经网络中指数加权平均的公式贴出来:

        展开推导如下:

         基于以上公式,我们可以假设下:

          可以看到,越远的梯度权重呈现指数级衰减

三、数学推导‌

        抛开神经网络单纯讲指数加权平均的核心公式为:

        v_{t}=β⋅v_{t-1}+(1−β)⋅x_{t}

其中:

  • v_{t}:当前时刻的加权平均值
  • v_{t-1}:上一时刻的加权平均值(初始值 v_{0}=0
  • x_{t}:想要观察的时刻 t 的值
  • \beta:衰减因子(0<β<1),控制历史数据的权重分布‌

        ‌推导过程

        递推展开‌(假设 v_{0}=0):

v_{1}=(1−β)⋅x_{1}

v_{2}=β⋅v_{1}+(1−β)⋅x_{2}=β(1−β)x_{1}+(1−β)x_{2}

v_{3}=β⋅v_{2}+(1−β)⋅x_{3}=β^{2}(1−β)x_{1}+β(1−β)x_{2}+(1−β)x_{3}

 ⋮

 ⋮

v_{t}=(1-\beta)[x_{t}+\beta x_{t-1} + \beta^{2} x_{t-2} + ...... +\beta^{t-1} x_{1}]

        ‌权重系数规律‌:
        从展开式可见,历史数据 x_{k}的权重为 (1−β)β^{t-k}。权重随 k(时间距离)增大而‌指数衰减‌:

  • 当前时刻 x_{t}:权重 =(1−β)
  • 前一时刻 x_{t-1}:权重 =(1−β)β
  • 前 n 时刻x_{t-n}:权重 =(1−β)β^{n}
  • 权重总和收敛于1‌:\sum_{k=0}^{t-1}(1-\beta)\beta^{k}=(1-\beta)^\frac{1-\beta^{t}}{1-\beta}=1-\beta^{t}\rightarrow 1  (当 t→∞)‌

四、权重的取值

        那么我们的权重究竟取多少是合适的呢?其实并没有一个具体的值可以确定,需要根据不同的情况确定不同的值,大概的范围如下:

β 值平滑性响应速度典型曲线特征
0.98(最大)极高极慢平坦,滞后实际变化
0.9(适中)中等中等平衡平滑与响应,历史数据权重衰减慢,平均结果更平滑,但响应延迟明显。
0.5(较小)极低极快抖动明显,紧跟最新数据,近期数据主导,对波动更敏感,但噪声抑制弱。

        以下通过一个例子:正弦波加噪声数据,来对比β=0.1/0.5/0.9/0.98 时的平滑效果:

        可以观察到以下几个规律:

β=0.1(蓝线):几乎跟随噪声波动,响应快但平滑效果差

β=0.5(橙线):平衡噪声抑制与趋势跟踪

β=0.9(绿线):极度平滑但明显滞后原始信号峰值

β=0.98(红线):滞后严重

        β越小曲线越贴近原始数据,β越大平滑效果越强但滞后越明显。

        代码如下:

import numpy as np
import matplotlib.pyplot as plt

# 生成模拟数据(正弦波+噪声)
np.random.seed(42)
t = np.linspace(0, 10, 100)
data = np.sin(t) + np.random.normal(0, 0.2, 100)

def ewma(data, beta):
    v = [0]  # 初始化v0
    for x in data:
        v.append(beta * v[-1] + (1 - beta) * x)
    return v[1:]  # 去掉初始v0

# 计算不同β值的EWMA
beta_list = [0.1, 0.5, 0.9,0.98]
results = {f'β={beta}': ewma(data, beta) for beta in beta_list}

# 可视化
plt.figure(figsize=(10, 6))
plt.plot(t, data, 'k.', label='data')
for label, result in results.items():
    plt.plot(t, result, label=label, linewidth=2)
plt.legend()
plt.grid(True)
plt.show()

五、指数加权平均和普通平均的区别

        我们通过一个简单的例子说明:

(一)假设你连续10天记录的气温数据为:[22, 23, 24, 25, 26, 27, 28, 29, 30, 31]℃:

普通平均:将所有温度相加后除以天数
(22+23+24+25+26+27+28+29+30+31)/10 = 26.5℃
这种方法赋予每天相同权重,但会稀释近期温度变化的影响。

指数加权平均(衰减因子β=0.5):
第10天权重:50%(31×0.5=15.5)
第9天权重:25%(30×0.25=7.5)
第8天权重:12.5%(29×0.125≈3.6)
...
最终加权值≈15.5+7.5+3.6+1.8+0.9+0.4+0.2+0.1+0.05+0.02≈30.1℃

        对比可见:这种计算明显更贴近近期升温趋势(第10天31℃),而普通平均则被早期低温数据拉低。由此可知指数加权平均对短期变化更敏感,适合捕捉天气趋势;普通平均则更适合分析长期稳定状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

师兄师兄怎么办

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值