神经网络中的滑动平均模型

在采用随机梯度下降(SGD)算法训练神经网络时,使用滑动平均模型可以一定程度增强参数的稳定性,提高最终模型在测试数据上的表现,使模型在测试数据上更健壮。

在TensorFlow中提供了tf.train.ExponentialMovingAverage(decay, steps)来实现滑动平均模型。ExponentialMovingAverage对每一个变量会维护一个影子变量,并且保存在ExponentialMovingAverage.average(variable),这个影子变量的初始值就是相应变量的初始值,而多次运行变量跟新时,影子变量的值会更新为:
影子变量=衰减率x影子变量+(1-衰减率)x待更新的变量
从公式中可以看到,衰减率决定了模型更新的速度,衰减率越大模型就越趋于稳定。在实际应用中,衰减率一般会设成非常接近1的数(比如0.999或0.9999)。为了使得模型在训练前期可以更新的更快,ExponentialMovingAverage还提供了num_updates参数来动态设置decay的大小。如果在ExponentialMovingAverage初始化时提供了num_updates参数,那么每次使用的衰减率将是:
decay= min(decay,(1+steps)/(10+steps))
其中这里的steps等于ExponentialMovingAverage中的参数num_updates,函数会内部自动计算min(decay,(1+steps)/(10+steps))从而确定decay的值。decay变化如下图:
这里写图片描述
确定好ExponentialMovingAverage中的参数后,通过ExponentialMovingAverage(decay,num_updatas).apply([v1])来对变量v1进行滑动平均的操作。
下面是用python演示的一个案例:
这里写图片描述
每次更新为以后,影子变量(ema.average(v1))的值会更新,待更新的变量为你设定的值。如果在下一次运行这个函数的时候你不再指定新的变量值,那么待更新的变量值不变,影子变量会更新,如果待更新的变量值改变,影子变量也改变。

在梯度下降优化的几个算法里,滑动加权平均的思想体现在动量梯度下降法(Gradient descent with Momentum)中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值