已用于项目,模型训练Tricks——EMA权重滑动平均

权重滑动平均(EMA)是深度学习中的一种技术,它在训练过程中保持权重备份并进行滑动平均更新,以提高模型的稳定性和预测性能。通常,decay参数设置接近1,以确保更新的稳定性。在每个epoch结束时,可以使用Keras回调保存最优的EMA_weights,并在验证集上评估以决定是否保存。利用EMA的原因可能是它让模型在训练后期更加稳定,减少近期梯度的影响。
摘要由CSDN通过智能技术生成

一、 一句话总结权重滑动平均(Exponential Moving Average)就是:Copy一份模型所有权重(记为Weights)的备份(记为EMA_weights),训练过程中每次更新权重时同时也对EMA_weights进行滑动平均更新,训练阶段结束后用EMA_weights替换模型权重进行预测。

具体地,EMA的超参decay一般设为接近1的数,从而保证每次EMA_weights的更新都很稳定。每batch更新流程为:

		Weights=Weights+LR*Grad; (模型正常的梯度下降)
		
		EMA_weights=EMA_weights*decay+(1-decay)*Weights; (根据新weight更新EMA_weights)

		需要知道训练阶段无关EMA_weights,它只在测试阶段时导入进行预测。
		

二、如何保存最优EMA_weights?

keras可以通过回调on_epoch_end在每个epoch结束时,将EMA_weights加载至模型并save_weights,计算验证集Metrics从而决定是否保存。(注意要在下一个epoch开始前将模型参数替换为Weights)

三、可参考推导:

在这里插入图片描述

这个想法用到了mean teacher模型上,但是为什么利用滑动平均更新模型,就会使teacher模型好呢

可能是因为EMA使训练后得到的模型更稳定吧,直观上模型训练到后期就会在优化的极值附近波动,EMA通常decay设的很大,比如0.9999,这样再根据推导过程的最后一个公式理解,对于较近的时间步的梯度,n-i更小,1-α^(n-i)更小,则训练后期的梯度对EMA参数的影响更小,所以EMA的参数更新随着训练的进行越来越稳定吧,我一般都是当成个通用trick用的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浪子私房菜

给小强一点爱心呗

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

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

打赏作者

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

抵扣说明:

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

余额充值