在采用随机梯度下降算法训练神经网络时,使用滑动平均模型在很多应用中都可以在一定程度上提高最终模型在测试数据上的表笑。
在Tensorflow中提供了tf.train.ExponentialMovingAverage来实现滑动平均模型。在初始化ExponentialMovingAverage 时,需要提供一个衰减率(decay)。这个衰减率会用于控制模型的更新速度。ExponentialMovingAverage对每一个变量会维护一个影子变量(shadow variable),这个影子变量的初始值就是相应变量的初始值,而每次运行变量更新时,影子变量的值会被更新为:
其中shadow_variable是影子变量,variable是待更新的变量,decay是衰减率。从公式中可以看到,decay决定了模型更新的速度,decay越大模型越稳定。在实际应用中,decay一般被设置为非常接近1的数(0.99、0.999),为了使得模型在训练前期可以更新的更快,ExponentialMovingAverage提供了num_updates参数来动态设置decay的大小。如果ExponentialMovingAverage初始化时提供了num_dates参数,那么每次使用的衰减率将会是:
tf.Varialbe():trainable: 如果为True(默认也为Ture),这个变量就会被添加到图的集合GraphKeys.TRAINABLE_VARIABLES.中去 ,这个collection被作为优化器类的默认列表。
代码: