EMA指数滑动平均(Exponential Moving Average)
指数滑动平均(Exponential Moving Average)
指数滑动平均也叫权重移动平均(Weighted Moving Average),是一种给予近期数据更高权重的平均方法。
假设有nnn个权重数据:[θ1,θ2,⋯,θn][\theta_1,\theta_2,\cdots,\theta_n][θ1,θ2,⋯,θn],EMA的计算公式:
vt=βvt−1+(1−β)θt(1)v_t=\beta v_{t-1}+(1-\beta)\theta_t\tag{1} vt=βvt−1+(1−β)θt(1)
其中vtv_tvt称为影子权重,v0=0v_0=0v0=0。
当β\betaβ越大时,滑动平均得到的值越和θ\thetaθ的历史值相关。如果β=0.9\beta=0.9β=0.9,则大致等于过去 10 个 θθθ 值的平均;如果 β=0.99\beta=0.99β=0.99,则大致等于过去 100 个θ\thetaθ值的平均。EMA可以近似看作过去1/(1−β)1/(1-\beta)1/(1−β)个时刻vvv值的平均。过去nnn时刻的平均为:
vt=(n−1)vt−1+θtn=n−1nvt−1+1nθt(2)v_t=\frac{(n-1)v_{t-1}+\theta_t}{n}=\frac{n-1}{n}v_{t-1}+\frac{1}{n}\theta_t\tag{2} vt=n(n−1)vt−1+θt=nn−1vt−1+n1θt(2)
类比可得β=n−1n\beta=\cfrac{n-1}{n}β=nn−1
EMA计算,会将过去1/(1−β)1/(1-\beta)1/(1−β)个时刻前的数据衰减到 1e\cfrac{1}{e}e1 的比例:
vt=βvt−1+(1−β)θt=β(βvt−2+(1−β)θt−1)+(1−β)θt=⋯=βnvt−n+(1−β)(βn−1θt−n+1+⋯+β0θt)(3)\begin{aligned} v_t&=\beta v_{t-1}+(1-\beta)\theta_t\\ &=\beta(\beta v_{t-2}+(1-\beta)\theta_{t-1})+(1-\beta)\theta_t\\ &=\cdots\\ &=\beta^nv_{t-n}+(1-\beta)(\beta^{n-1}\theta_{t-n+1} + \cdots + \beta^0\theta_t) \end{aligned}\tag{3} vt=βvt−1+(1−β)θt=β(βvt−2+(1−β)θt−1)+(1−β)θt=⋯=βnvt−n+(1−β)(βn−1θt−n+1+⋯+β0θt)(3)
vt−nv_{t-n}vt−n的系数βn=β1/(1−β)≈1e\beta^n=\beta^{1/(1-\beta)}\approx \cfrac{1}{e}βn=β1/(1−β)≈e1。
滑动平均的好处:占内存少,不需要保存过去101010个或者100100100个历史θ\thetaθ值,就能够估计其均值。(当然,也可以将历史值全保存下来计算均值准确,但后者占用更多内存和计算成本更高)。
公式(1)当滑动的步数较少时,vtv_tvt容易受到初始值v0=0v_0=0v0=0的影响,所以添加一个偏差修正vt=vt1−βtv_t=\cfrac{v_t}{1-\beta^t}vt=1−βtvt,当ttt很大时,修正近似111
ema为什么有效
滑动平均可以使模型在测试数据上更鲁棒(robust)。对于目前普遍的mini-batch训练方式,参数的更新可能存在抖动,采用滑动平均可以使得参数的更新更平滑。
设 β=0.999\beta=0.999β=0.999,一个更直观的理解,在最后的 1000 次训练过程中,模型早已经训练完成,正处于抖动阶段,而滑动平均相当于将最后的 100010001000 次抖动进行了平均,这样得到的权重会更加 robust。
也有一种解释,是将ema视作学习率衰减。近似的推导:
θn=θn−1−gn−1=θn−1−gn−1−gn−2=⋯=θ1−∑i=1n−1gi(4)\begin{aligned} \theta_n&=\theta_{n-1}-g_{n-1}\\ &=\theta_{n-1}-g_{n-1}-g_{n-2}\\ &=\cdots\\ &=\theta_1-\sum_{i=1}^{n-1}g_i \end{aligned}\tag{4} θn=θn−1−gn−1=θn−1−gn−1−gn−2=⋯=θ1−i=1∑n−1gi(4)
继续推导公式(3),令t=nt=nt=n时刻n的影子权重为:
vn=βnv0+(1−β)(βn−1θ1+⋯+β0θn)(5)v_n=\beta^nv_{0}+(1-\beta)(\beta^{n-1}\theta_{1} + \cdots + \beta^0\theta_n)\tag{5} vn=βnv0+(1−β)(βn−1θ1+⋯+β0θn)(5)
将θn\theta_nθn代入影子权重的公式,v0v_0v0取θ1\theta_1θ1:
vn=βnv0+(1−β)(βn−1θ1+⋯+β0θn)=βnv0+(1−β)(θ1−∑i=1n−1gi+β(θ1−∑i=1n−2gi)+⋯+βn−2(θ1−∑i=11gi)+βn−1θ1)=βnv0+(1−β)(θ1+βθ1+⋯+βn−1θ1−(∑i=1n−1gi+β∑i=1n−2gi+⋯+βn−2∑i=11gi))=βnv0+(1−β)((1−βn1−β)θ1−∑i=1n−11−βn−i1−βgi)=βnv0+(1−βn)θ1−∑i=1n−1(1−βn−i)gi=θ1−∑i=1n−1(1−βn−i)gi(6)\begin{aligned} v_n&=\beta^nv_{0}+(1-\beta)(\beta^{n-1}\theta_{1} + \cdots + \beta^0\theta_n)\\ &=\beta^nv_0+(1-\beta)(\theta_1-\sum_{i=1}^{n-1}g_i + \beta(\theta_1-\sum_{i=1}^{n-2}g_i)+\cdots+\beta^{n-2}(\theta_1-\sum_{i=1}^1g_i)+\beta^{n-1}\theta_1)\\ &=\beta^nv_0+(1-\beta)\left(\theta_1+\beta\theta_1+\cdots+\beta^{n-1}\theta_1 -(\sum_{i=1}^{n-1}g_i+\beta\sum_{i=1}^{n-2}g_i+\cdots+\beta^{n-2}\sum_{i=1}^1g_i)\right)\\ &=\beta^nv_0+(1-\beta)\left((\frac{1-\beta^n}{1-\beta})\theta_1-\sum_{i=1}^{n-1}\frac{1-\beta^{n-i}}{1-\beta}g_i\right)\\ &=\beta^nv_0+(1-\beta^n)\theta_1-\sum_{i=1}^{n-1}(1-\beta^{n-i})g_i\\ &=\theta_1-\sum_{i=1}^{n-1}(1-\beta^{n-i})g_i \end{aligned}\tag{6} vn=βnv0+(1−β)(βn−1θ1+⋯+β0θn)=βnv0+(1−β)(θ1−i=1∑n−1gi+β(θ1−i=1∑n−2gi)+⋯+βn−2(θ1−i=1∑1gi)+βn−1θ1)=βnv0+(1−β)(θ1+βθ1+⋯+βn−1θ1−(i=1∑n−1gi+βi=1∑n−2gi+⋯+βn−2i=1∑1gi))=βnv0+(1−β)((1−β1−βn)θ1−i=1∑n−11−β1−βn−igi)=βnv0+(1−βn)θ1−i=1∑n−1(1−βn−i)gi=θ1−i=1∑n−1(1−βn−i)gi(6)
对比公式(4)可的EMA对第iii步梯度更新增加了权重系数1−βn−i1-\beta^{n-i}1−βn−i,类似于learning rate decay。
【炼丹技巧】指数移动平均(EMA)的原理及PyTorch实现
理解滑动平均(exponential moving average)
第二周:优化算法 (Optimization algorithms)
EMA指数滑动平均(Exponential Moving Average)相关推荐
- 理解滑动平均(exponential moving average)
1. 用滑动平均估计局部均值 滑动平均(exponential moving average),或者叫做指数加权平均(exponentially weighted moving average),可以 ...
- YOLOv5的Tricks | 【Trick7】指数移动平均(Exponential Moving Average,EMA)
如有错误,恳请指出. 文章目录 1. 移动平均法 2. 指数移动平均 3. TensorFlow中的EMA使用 4. Yolov5中的EMA使用 这篇博客主要用于整理网上对EMA(指数移动平均)的介绍 ...
- BN/Batch Norm中的滑动平均/移动平均/Moving Average
BN中的滑动平均是怎么做的 训练过程中的每一个batch都会进行滑动平均的计算[1]: moving_mean = moving_mean * momentum + batch_mean * (1 - ...
- 指数移动平均值(exponential moving average)常用于平滑曲线
https://baike.baidu.com/item/EMA/12646151 https://blog.csdn.net/kuweicai/article/details/80517284 ht ...
- 滑动平均(Moving Average Models,MA)模型
这里我们直接给出MA(q)模型的形式: c0为一个常数项.这里的at,是AR模型t时刻的扰动或者说新息(也就是白噪声误差项),则可以发现,该模型,使用了过去q个时期的随机干扰或预测误差来线性表达当前的 ...
- 炼丹系列2: Stochastic Weight Averaging (SWA) Exponential Moving Average(EMA)
这个系列将记录下本人平时在深度学习方面觉得实用的一些trick,可能会包括性能提升和工程优化等方面. 该系列的代码会更新到Github 炼丹系列1: 分层学习率&梯度累积 炼丹系列2: Sto ...
- TENSORFLOW GUIDE: EXPONENTIAL MOVING AVERAGE FOR IMPROVED CLASSIFICATION
Parameter Selection via Exponential Moving Average When training a classifier via gradient decent, w ...
- 计算MACD(指数平滑移动平均线)Moving Average Convergence / Divergence
移动平均值:EMA 离差值:DIF DEA:9日DIF移动平均值 MACD:指数平滑移动平均线 1. EMA(12)=(前一日EMA(12)*11+今日收盘价*2)/13 2. EMA(26)=( ...
- 神经网络优化:指数衰减计算平均值(滑动平均)
Polyak平均会平均优化算法在参数空间访问中的几个点.如果t次迭代梯度下降访问了点,那么Polyak平均算法的输出是. 当应用Polyak平均于非凸问题时,通常会使用指数衰减计算平均值: 1. 用滑 ...
最新文章
- 湖北生态工程职业技术学院计算机分数线,湖北生态工程职业技术学院录取分数线2021是多少分(附历年录取分数线)...
- java安全编码指南之:Mutability可变性
- 从零开始实现ASP.NET Core MVC的插件式开发(五) - 插件的删除和升级
- 使用.NET Core创建Windows服务(一) - 使用官方推荐方式
- java mvc 导出excel_Java springMVC POI 导出 EXCEL
- oracle关于分区,关于Oracle分区
- 站点简介(欢迎大家踊跃参与本站站点的建设,谢谢)
- hive时间函数入门
- 苹果 macOS Monterey 桌面抽象风格不好看,如何换成自己喜欢的照片?
- 配置Gitlab Push自动触发jenkins构建
- 混合罚函数c语言程序,混合惩罚函数法.ppt
- Unity经验分享——如何实现黑洞吸附效果
- Mysql读写分离的原理及配置--amoeba
- execute()方法
- 5G无线系统设计与国际标准 pdf和Word
- 详解 CatBoost 原理
- Oracle最新练习题
- GO学习笔记1.5:第一个GO项目常见问题
- 自然语言词向量模型:Glove和Bert
- 【kubernetes】coredns报错