指数加权平均(MEA)

滑动平均,也称为指数加权平均,是一种用于估算变量局部均值的方法,它考虑了历史数据的影响。在机器学习中,指数滑动平均(EMA)常用于模型参数的平滑更新,以提高模型性能。本文通过代码示例展示了如何在Python中实现EMA,并用两个epoch的参数更新进行了演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 定义

滑动平均(exponential moving average),或者叫做指数加权平均(exponentially weighted moving average),可以用来估计变量的局部均值,使得变量的更新与一段时间内的历史取值有关。

2. 通俗解释

变量 v在 𝑡 时刻记v_{t}\theta _{t} 为变量 𝑣在 𝑡 时刻的取值,即在不使用滑动平均模型时 \theta _t = v_t,在使用滑动平均模型后,v_t的更新公式如下: 

v_t = \beta \cdot v_{(t-1)}+(1-\beta) \cdot v_{(t)}

上式中,𝛽∈[0,1)β∈[0,1)。若β=0 相当于没有使用滑动平均。

3. 代码实现

class EMA():
    def __init__(self, decay):
        self.decay = decay
        self.shadow = {}

    def register(self, name, val):
        self.shadow[name] = val

    def get(self, name):
        return self.shadow[name]

    def update(self, name, x):
        assert name in self.shadow
        new_average = (1.0 - self.decay) * x + self.decay * self.shadow[name]
        print(new_average)
        self.shadow[name] = new_average
# 假如a是第一个epoch后的参数
a = {"a":0.1,"b":0.2,'c':0.3,'d':1}
ema = EMA(0.5)


for name in a:
    ema.register(name, a[name])
# 假如a是第二个epoch后的参数
a = {"a":0.2,"b":0.3,'c':0.4,'d':2}
for name in a:
    ema.update(name, a[name]) 

 输出结果如下:

0.15000000000000002
0.25
0.35
1.5

4. 参考

理解滑动平均(exponential moving average) - wuliytTaotao - 博客园

机器学习模型性能提升技巧:指数加权平均(EMA)_mikelkl的博客-优快云博客_模型ema

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值