tensorflow笔记之滑动平均模型

tensorflow使用tf.train.ExponentialMovingAverage实现滑动平均模型,在使用随机梯度下降方法训练神经网络时候,使用这个模型可以增强模型的鲁棒性(robust),可以在一定程度上提高模型在测试数据集上的表现。

滑动平均模型为每个变量维护一个影子变量,其初始值是变量的初始值,每次变量更新时,影子变量的值会更新为:

shadow_variable = shadow_variable * decay + (1-decay) * variable

其中shadow_variable为影子变量,variable为初始变量,decay为衰减率。

decay决定了模型更新的速度,decay越大,模型跟新越慢,越稳定。实际工作中,decay一般设置为非常接近1的数(0.99或0.999之类),为了在训练初期加快更新速度,可以提供num_steps参数,提供这个参数后,decay的取值变为:

min(decay, (1+num_step)/(10+num_step))

num_step表示实际的训练步数。

如果提供了num_steps那么在num_step还比较小的时候,min()会取到右边比较小的部分,也就是有一个比较小的decay,这个时候模型更新会很快,当step增大时,模型更新速度会逐渐降低。

在应用滑动平均模型后,并不会改变变量的值,但是会维护一个影子变量来记录其滑动平均值,获取变量的滑动平均值实际上就是获取变量的影子变量的值,影子变量的值是当前值和更新后的值之间的一个值,相当与限制参数的更新速度,让更新比较缓慢,比较稳妥,但是在训练初期会导致更新比较慢,所以才有提供num_steps参数使之在训练初期更新比较快。

原文地址:https://www.cnblogs.com/buxizhizhoum/p/8301284.html