梯度下降优化算法-指数加权平均


1. 指数加权平均的定义

指数加权平均是一种对时间序列数据进行平滑处理的方法。它的核心思想是对历史数据赋予指数衰减的权重,最近的观测值权重较大,而较早的观测值权重逐渐减小。

假设有一系列观测值 x 1 , x 2 , ... , x t x_1, x_2, \dots, x_t x1,x2,...,xt,希望计算这些数据的指数加权平均值 v t v_t vt。


2. 递推公式的推导

2.1 基本形式

指数加权平均的递推公式定义为:

v t = β ⋅ v t − 1 + ( 1 − β ) ⋅ x t v_t = \beta \cdot v_{t-1} + (1 - \beta) \cdot x_t vt=β⋅vt−1+(1−β)⋅xt

其中:

  • v t v_t vt 是当前时刻的指数加权平均值。
  • v t − 1 v_{t-1} vt−1 是上一时刻的指数加权平均值。
  • x t x_t xt 是当前时刻的观测值。
  • β \beta β 是衰减率,通常取值在 [ 0 , 1 ) [0, 1) [0,1) 之间。

2.2 递推展开

假设初始值 v 0 = 0 v_0 = 0 v0=0,则有:

v 1 = β ⋅ v 0 + ( 1 − β ) ⋅ x 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 − β ) ⋅ x t + β ⋅ ( 1 − β ) ⋅ x t − 1 + β 2 ⋅ ( 1 − β ) ⋅ x t − 2 + ⋯ + β t − 1 ⋅ ( 1 − β ) ⋅ x 1 \begin{aligned} v_1 &= \beta \cdot v_0 + (1 - \beta) \cdot x_1 = (1 - \beta) \cdot x_1 \\ v_2 &= \beta \cdot v_1 + (1 - \beta) \cdot x_2 = \beta \cdot (1 - \beta) \cdot x_1 + (1 - \beta) \cdot x_2 \\ v_3 &= \beta \cdot v_2 + (1 - \beta) \cdot x_3 = \beta^2 \cdot (1 - \beta) \cdot x_1 + \beta \cdot (1 - \beta) \cdot x_2 + (1 - \beta) \cdot x_3 \\ &\ \, \vdots \\ v_t &= (1 - \beta) \cdot x_t + \beta \cdot (1 - \beta) \cdot x_{t-1} + \beta^2 \cdot (1 - \beta) \cdot x_{t-2} + \dots + \beta^{t-1} \cdot (1 - \beta) \cdot x_1 \end{aligned} v1v2v3vt=β⋅v0+(1−β)⋅x1=(1−β)⋅x1=β⋅v1+(1−β)⋅x2=β⋅(1−β)⋅x1+(1−β)⋅x2=β⋅v2+(1−β)⋅x3=β2⋅(1−β)⋅x1+β⋅(1−β)⋅x2+(1−β)⋅x3 ⋮=(1−β)⋅xt+β⋅(1−β)⋅xt−1+β2⋅(1−β)⋅xt−2+⋯+βt−1⋅(1−β)⋅x1

从展开式中可以看出, v t v_t vt 是历史观测值 x 1 , x 2 , ... , x t x_1, x_2, \dots, x_t x1,x2,...,xt 的加权和,权重系数为 ( 1 − β ) ⋅ β t − i (1 - \beta) \cdot \beta^{t-i} (1−β)⋅βt−i,其中 i i i 是观测值的时间步。


2.3 权重分析

权重系数 ( 1 − β ) ⋅ β t − i (1 - \beta) \cdot \beta^{t-i} (1−β)⋅βt−i 满足以下性质:

  1. 权重衰减 :随着时间步 i i i 的减小(即观测值越早),权重 β t − i \beta^{t-i} βt−i 越小。
  2. 权重归一化 :所有权重之和为 1,即:
    ∑ i = 1 t ( 1 − β ) ⋅ β t − i = 1 − β t \sum_{i=1}^t (1 - \beta) \cdot \beta^{t-i} = 1 - \beta^t i=1∑t(1−β)⋅βt−i=1−βt
    这是因为:
    ∑ i = 1 t β t − i = 1 − β t 1 − β \sum_{i=1}^t \beta^{t-i} = \frac{1 - \beta^t}{1 - \beta} i=1∑tβt−i=1−β1−βt
    因此:
    ∑ i = 1 t ( 1 − β ) ⋅ β t − i = ( 1 − β ) ⋅ 1 − β t 1 − β = 1 − β t \sum_{i=1}^t (1 - \beta) \cdot \beta^{t-i} = (1 - \beta) \cdot \frac{1 - \beta^t}{1 - \beta} = 1 - \beta^t i=1∑t(1−β)⋅βt−i=(1−β)⋅1−β1−βt=1−βt

3. 偏差校正

3.1 偏差的来源

在初始阶段( t t t 较小时),由于 v 0 = 0 v_0 = 0 v0=0,递推公式中的 v t v_t vt 会偏向 0,导致估计值偏低。这是因为初始时刻的权重分配不均匀。

3.2 偏差校正公式

为了校正这种偏差,我们可以将 v t v_t vt 除以权重之和 1 − β t 1 - \beta^t 1−βt,得到校正后的指数加权平均值 v ^ t \hat{v}_t v^t:

v ^ t = v t 1 − β t \hat{v}_t = \frac{v_t}{1 - \beta^t} v^t=1−βtvt

校正后的 v ^ t \hat{v}_t v^t 能够更好地反映真实的加权平均值。


4. PyTorch 实现

以下是 PyTorch 中实现指数加权平均的代码,包括偏差校正:

python 复制代码
import torch

# 初始化参数
beta = 0.9  # 衰减率
ema_value = 0  # 初始EMA值

# 模拟一些数据
data = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])

# 计算EMA
for t, x in enumerate(data, 1):
    ema_value = beta * ema_value + (1 - beta) * x
    corrected_ema = ema_value / (1 - beta**t)  # 偏差校正
    print(f"Step {t}: EMA = {ema_value}, Corrected EMA = {corrected_ema}")

5. 输出示例

假设输入数据为 [1.0, 2.0, 3.0, 4.0, 5.0],输出如下:

复制代码
Step 1: EMA = 0.1, Corrected EMA = 1.0
Step 2: EMA = 0.29, Corrected EMA = 1.5263157894736843
Step 3: EMA = 0.561, Corrected EMA = 2.0434782608695654
Step 4: EMA = 0.9049, Corrected EMA = 2.5508474576271185
Step 5: EMA = 1.31441, Corrected EMA = 3.048780487804878

相关推荐
极限实验室9 分钟前
Coco AI 实战(一):Coco Server Linux 平台部署
人工智能
杨过过儿20 分钟前
【学习笔记】4.1 什么是 LLM
人工智能
巴伦是只猫29 分钟前
【机器学习笔记Ⅰ】13 正则化代价函数
人工智能·笔记·机器学习
大千AI助手38 分钟前
DTW模版匹配:弹性对齐的时间序列相似度度量算法
人工智能·算法·机器学习·数据挖掘·模版匹配·dtw模版匹配
AI生存日记1 小时前
百度文心大模型 4.5 系列全面开源 英特尔同步支持端侧部署
人工智能·百度·开源·open ai大模型
LCG元1 小时前
自动驾驶感知模块的多模态数据融合:时序同步与空间对齐的框架解析
人工智能·机器学习·自动驾驶
why技术1 小时前
Stack Overflow,轰然倒下!
前端·人工智能·后端
YuTaoShao2 小时前
【LeetCode 热题 100】48. 旋转图像——转置+水平翻转
java·算法·leetcode·职场和发展
超龄超能程序猿2 小时前
(三)PS识别:基于噪声分析PS识别的技术实现
图像处理·人工智能·计算机视觉