指数加权平均与其偏差消除

指数加权平均

对于一个呈序列形式的数据集,一种统计并获得连续曲线的方法是指数加权平均。具体来讲,对于一个数据序列
θ1,θ2,⋯ ,θm \theta_1,\theta_2,\cdots,\theta_m θ1,θ2,,θm
如果直接把这些点相连,得到的曲线会包含大量噪声,杂乱而无规律:
在这里插入图片描述
所以我们重新计算一下每个点的值,令
v0=0v1=βv0+(1−β)θ1⋯vi=βvi−1+(1−β)θi⋯vm=βvm−1+(1−β)θm v_0=0\\ v_1=\beta v_0+(1-\beta)\theta_1\\ \cdots\\ v_i=\beta v_{i-1}+(1-\beta)\theta_i\\ \cdots\\ v_m=\beta v_{m-1}+(1-\beta)\theta_m\\ v0=0v1=βv0+(1β)θ1vi=βvi1+(1β)θivm=βvm1+(1β)θm
通过该平均方法,我们实际上是对1∼i1\sim i1i的数据进行了加权平均,且权重从iii111呈指数递减,越靠近当前索引所占的权重越高。一个经验的估计是viv_ivi大概代表着前11−β\frac{1}{1-\beta}1β1个数据求平均,因为超过该范围的样本所占的权重已经比较小了。

参数β\betaβ影响的就是之前的样本所占权重的衰减速率,β\betaβ越接近1,样本权重衰减就越慢,我们囊括的样本就越多,此时曲线会比较平滑,但不能及时反映出当前点产生的效应,通常会比较滞后。而KaTeX parse error: Undefined control sequence: \bata at position 1: \̲b̲a̲t̲a̲越接近0,样本权重衰减就越快,曲线就会波动更剧烈,但是对当前数据非常敏感,反应很及时。

下图为β=0.9\beta=0.9β=0.9(红色)和β=0.98\beta=0.98β=0.98(绿色)时我们得到的曲线:
在这里插入图片描述

偏差消除

在实际应用中,我们得到的曲线其实和上图的曲线还有一点偏差,如果β=0.98\beta=0.98β=0.98,我们实际得出的应该是紫色线:
在这里插入图片描述
这是因为在指数加权平均的前期,我们的初始值v0=0v_0=0v0=0还占据了很大的权重,使得曲线的前端都被拉低了,直到曲线的中后程,v0v_0v0的权重衰减的足够低,紫色线才逐渐与绿色线重合。

想要避免这种情况,可以在之前的运算中再加上一项,得到
vi=βvi−1+(1−β)θi1−βi v_i=\frac{\beta v_{i-1}+(1-\beta)\theta_i}{1-\beta^i} vi=1βiβvi1+(1β)θi
因为初始项v0=0v_0=0v0=0viv_ivi中所占的权重就是βi\beta^iβi,所以除以1−βi1-\beta^i1βi就可以排除掉v0v_0v0带来的影响,得到一个合理的曲线。

### 深度学习中的指数加权平均偏差修正 在深度学习中,指数加权平均(EWA)是一种常用的技术,用于平滑数据和加速优化过程。然而,在训练初期阶段,由于初始值的影响较大,可能会导致估计值存在较大的偏差。因此引入了 **偏差修正** 的方法来提高早期迭代的准确性。 #### 偏差修正公式 假设我们正在计算某个变量 \( \theta_t \) 的指数加权平均值 \( v_t \),其更新公式为: \[ v_t = \beta v_{t-1} + (1-\beta)\theta_t \] 其中 \( \beta \) 是一个接近于 1 的超参数,控制过去观测值的重要性程度。当 \( t \) 较小时,\( v_t \) 可能会显著偏离实际均值,因为此时累积的历史信息较少[^3]。 为了校正这种偏差,可以采用以下公式调整 \( v_t \): \[ v_t^{corrected} = \frac{v_t}{1 - \beta^t} \] 这里的分母项 \( 1 - \beta^t \) 被用来补偿因初始化带来的误差影响。随着 \( t \to \infty \), \( \beta^t \to 0 \),所以最终该因子趋于消失,不会干扰长期行为[^2]。 #### Python实现代码示例 下面是一个简单的Python程序演示如何利用上述公式完成带偏差修正的指数加权平均运算: ```python def ewa_with_bias_correction(theta_list, beta): """ 计算带有偏差修正的指数加权平均 参数: theta_list -- 输入的时间序列列表 beta -- 平滑系数 返回: vt_corrected_values -- 经过偏差修正后的 EWA 列表 """ vt = 0 vt_corrected_values = [] for t, theta in enumerate(theta_list, start=1): vt = beta * vt + (1 - beta) * theta vt_corrected = vt / (1 - beta**t) vt_corrected_values.append(vt_corrected) return vt_corrected_values # 测试数据 theta = [1, 2, 4, 5, 6, 8, 10, 14, 18, 22] beta_value = 0.9 result = ewa_with_bias_correction(theta, beta_value) for idx, val in enumerate(result, start=1): print(f"Corrected v{idx}: {val}") ``` 此脚本定义了一个函数 `ewa_with_bias_correction` 来执行包含偏差矫正机制的指数加权平均操作,并打印每一步的结果以便观察效果变化情况[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ShadyPi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值