我见过doc,tf.train.ExponentialMovingAverage实现了这个公式:
shadow_variable = decay * shadow_variable + (1 - decay) * variable
我没有找到tf.train.MomentumOptimizer的公式。但我认为可能是:
v = γ*v - learning_rate*dx
θ = θ - v
我认为这两个功能有相似的效果,所以它们可以相互交换吗?或者它们有不同的应用场景?或者我完全错了?
shadow_variable是否相当于θ?
感谢任何指导。
答案 0 :(得分:2)
你完全错了。
tf.train.ExponentialMovingAverage
实现只是指数移动平均线:shadow_variable
是当前时间步的移动平均线,并使用您发布的公式进行更新。
每次执行保持移动平均线的节点时,会发生什么只是执行该公式。
tf.train.MomentumOptimizer
是一种更复杂的对象。
简而言之,它实现了一个名为Gradient Descent with Momentum的参数更新算法,该算法计算模型参数的梯度,并使用计算的梯度+在训练步骤中累积的动量项来执行每个网络参数的更新步骤。
动量项当然是梯度的移动平均值。但是这两个函数执行不同的操作并且有不同的目标。