转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/80786469
本文出自【我是干勾鱼的博客】
在神经元网络中,梯度下降算法是用来优化反向传播算法中的参数的取值的。但是梯度下降算法有两个问题:
1.优化过程可能得到的是局部最优。
2.计算时间太长。
为了加速训练过程,一般使用随机梯度下降算法(stochatic gradient descent)。而在使用随机梯度下降算法训练神经元网络的时候,又经常通过滑动平均模型来提高最终模型在测试数据上的表现。
TensorFlow中提供了tf.train.ExponentialMovingAverage来实现滑动平均模型,对其进行初始化的时候,需要提供一个衰减率(decay)来控制模型更新的速度,同时又会维护一个影子变量(shadow variable)。影子变量与衰减率的关系如下:
shadow_variable = decay * shadow_variable + (1 - decay) * variable
这里面影子变量的含义是:variable的变量值改变之后,并不是直接给shadow_variable变量赋值的,而是shadow_variable以衰减率decay的程度保持原有值,再加上(1 - decay)部分新变量值variable,这样构成了新的影子变量shadow_variable。
也就是说,每次提供一个新变量的时候,影子变量以衰减率decay变化,再加上(1 - decay)倍的新变量,共同构成新的影子变量。下次再提供一个新变量的时候,同样以这种方式生成新的影子变量。