指数加权平均(EMA)理解
主要内容
什么是EMA?
为什么EMA在测试过程中使用通常能提升模型表现?
Tensorflow实现
PyTorch实现
Refercences
什么是EMA?
滑动平均可以看作是变量的过去一段时间取值的均值,相比对变量直接赋值而言,滑动平均得到的值在图像上更加平缓光滑,抖动性更小,不会因为某次的异常取值而使得滑动平均值波动很大,如图 1所示。
当训练结束的 θ \theta θ的MovingAverage 就是:
v t = β ∗ v t − 1 + ( 1 − β ) ∗ v t v_t=\beta*v_{t-1}+(1-\beta)*v_t vt=β∗vt−1+(1−β)∗vt
β \beta β代表衰减率,该衰减率用于控制模型更新的速度。
图1 不同 β \beta β 值做EMA的效果对比(天气预报数据)
滑动平均的好处:
占内存少,不需要保存过去10个或者100个历史 v v v值,就能够估计其均值。(当然,滑动平均不如将历史值全保存下来计算均值准确,但后者占用更多内存和计算成本更高)
为什么EMA在测试过程中使用通常能提升模型表现?
滑动平均可以使模型在测试数据上更健壮(robust)。“采用随机梯度下降算法训练神经网络时,使用滑动平均在很多应用中都可以在一定程度上提高最终模型在测试数据上的表现。”
- 随机梯度下降,更平滑的更新说明不会偏离最优点很远;
- 梯度下降 batch gradient decent,影子变量作用可能不大,因为梯度下降的方向已经是最优的了,loss 一定减小;
- mini-batch gradient decent,可以尝试滑动平均,因为mini-batch gradient decent 对参数的更新也存在抖动。
Tensorflow实现
TensorFlow 提供了 tf.train.ExponentialMovingAverage来实现滑动平均。
Example usage when creating a training model:
# Create variables.
var0 = tf.Variable(...)
var1 = tf.Variable(...)
# ... use the variables to build a training model...
...
# Create an op that applies the optimizer. This is what we usually
# would use as a training op.
opt_op = opt.minimize(my_loss, [var0, var1])# Create an ExponentialMovingAverage object
ema = tf.train.ExponentialMovingAverage(decay=0.9999)with tf.control_dependencies([opt_op]):# Create the shadow variables, and add ops to maintain moving averages# of var0 and var1. This also creates an op that will update the moving# averages after each training step. This is what we will use in place# of the usual training op.training_op = ema.apply([var0, var1])...train the model by running training_op...
There are two ways to use the moving averages for evaluations:
- Build a model that uses the shadow variables instead of the variables.
For this, use theaverage()
method which returns the shadow variable
for a given variable. - Build a model normally but load the checkpoint files to evaluate by using
the shadow variable names. For this use theaverage_name()
method. See
the tf.train.Saver for more
information on restoring saved variables.
Example of restoring the shadow variable values:
# Create a Saver that loads variables from their saved shadow values.
shadow_var0_name = ema.average_name(var0)
shadow_var1_name = ema.average_name(var1)
saver = tf.train.Saver({shadow_var0_name: var0, shadow_var1_name: var1})
saver.restore(...checkpoint filename...)
# var0 and var1 now hold the moving average values
PyTorch实现
PyTorch官方目前没有提供EMA的实现,不过自己实现也不会太复杂,下面提供一个网上大神的实现方法:
class EMA():def __init__(self, decay):self.decay = decayself.shadow = {}def register(self, name, val):self.shadow[name] = val.clone()def get(self, name):return self.shadow[name]def update(self, name, x):assert name in self.shadownew_average = (1.0 - self.decay) * x + self.decay * self.shadow[name]self.shadow[name] = new_average.clone()
// init
ema = EMA(0.999)// register
for name, param in model.named_parameters():if param.requires_grad:ema.register(name, param.data)// update
for name, param in model.named_parameters():if param.requires_grad:ema.update(name, param.data)
Refercences
[1]. 理解滑动平均(exponential moving average)
[2]. EMA 指数滑动平均原理和实现 (PyTorch)
[3]. tf.train.ExponentialMovingAverage
指数加权平均(EMA)理解相关推荐
- 深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正
接下来介绍一些比梯度下降法计算速度更快的优化算法. 2.3 指数加权平均 为了更好地介绍这些优化算法,这里先介绍一个概念----指数加权平均(exponentially weighted avera ...
- 机器学习模型性能提升技巧:指数加权平均(EMA)
主要内容 什么是EMA? 为什么EMA在测试过程中使用通常能提升模型表现? Tensorflow实现 PyTorch实现 Refercences 什么是EMA? 滑动平均(exponential mo ...
- 2.4 理解指数加权平均-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 2.3 指数加权平均 回到目录 2.5 指数加权平均的偏差修正 理解指数加权平均 (Understanding Exponentially Weighted Averages ...
- PyTorch指数移动平均(EMA)手册
文章目录 PyTorch指数移动平均(EMA)手册 EMA的数学模型 EMA的意义 EMA的偏差修正 EMA在测试阶段的优越性能 PyTorch实现 Reference PyTorch指数移动平均(E ...
- 指数加权平均(EWA)
平时跑模型只知道直接上Adam Optimizer,但具体原理却不甚理解,于是把吴恩达老师的深度学习课翻出来看,记录一下关于动量优化算法的基础-EMA相关内容. 指数加权平均的概念 平时我们计算平均值 ...
- 2.2.2 指数加权平均
指数加权平均 下面介绍一下比梯度下降更快的算法,不过在这之前,你要了解指数加全平均. 如1和2所示,指数加权实际上就是设置一个权值.就像下图所示 通过 11−β11−β \frac{1}{1-\bet ...
- 2.5 指数加权平均的偏差修正-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 2.4 理解指数加权平均 回到目录 2.6 动量梯度下降法 指数加权平均的偏差修正 (Bias Correction in Exponentially Weighted Av ...
- 2.3 指数加权平均-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 2.2 理解 mini-batch 梯度下降法 回到目录 2.4 理解指数加权平均 指数加权平均 (Exponentially Weighted Averages) 我想向你 ...
- 指数加权平均与RmsProp(转载+自己总结)以及Adagrad
一.指数加权平均(先说用途:抗噪声拟合) 假设我们有一年365天的气温数据θ1,θ2,...,θ365\theta_1,\theta_2,...,\theta_{365}θ1,θ2,...,θ36 ...
最新文章
- 网吧ARP双绑定详细策略 -限制P2P绝密版
- python抢票_50 个加速包都抢不到车票,还不如这个 Python 抢票神器!
- Maven项目中获取classpath和资源文件的路径
- DS18B20读数错误排除
- 改变dom样式的方法
- 北京大学:“巍巍上庠 国运所系”北大为时代发展而歌(附历年高考各省投档线)...
- 云+X案例展 | 金融类:青云QingCloud助力泰康人寿云计算演进之路
- java高效写文件_java如何高效读写10G以上大文件
- 冒号课堂§6.4:后台脚本
- 标准化设计解决方案 - 标记语言和样式手册 表单
- 美检方或起诉刘强东;百度对呛微信规则;澳洲调查 Facebook | 极客头条
- 计算机通过逻辑电路实现运算,计算机组成与体系结构数据表示与运算算法和逻辑电路实现.ppt...
- python脚本性能分析
- Ble扫描导致wifi信号弱/断开解决
- 国际计算机网络信息与安全管理,计算机信息网络国际联网单位安全管理制度
- 7.1 认识Access报表
- 关于彻底删除捆绑软件的解决方案
- App启动页倒计时圆形并且跳过功能实现
- cf3月活动大全 3月活动汇总2015
- Win32无边框窗口