什么';Tensorflow和Theano中的动量梯度更新有什么不同?

什么';Tensorflow和Theano中的动量梯度更新有什么不同?,tensorflow,gradient-descent,momentum,Tensorflow,Gradient Descent,Momentum,我正在尝试在我的深度学习项目中使用TensorFlow。 在这里,我需要用以下公式实现梯度更新: 我也在Theano中实现了这一部分,它给出了预期的答案。但是当我尝试使用TensorFlow的动量优化器时,结果非常糟糕。我不知道他们之间有什么不同 西亚诺: def梯度\u更新\u动量\u L2(成本、参数、学习率、动量、重量\u成本\u强度): #确保动量是一个合理的值 断言动量=0 #每个参数的更新步骤列表 更新=[] #只是成本的梯度下降 对于参数中的参数: param_update=th

我正在尝试在我的深度学习项目中使用TensorFlow。
在这里,我需要用以下公式实现梯度更新:

我也在Theano中实现了这一部分,它给出了预期的答案。但是当我尝试使用TensorFlow的
动量优化器
时,结果非常糟糕。我不知道他们之间有什么不同

西亚诺:

def梯度\u更新\u动量\u L2(成本、参数、学习率、动量、重量\u成本\u强度):
#确保动量是一个合理的值
断言动量<1且动量>=0
#每个参数的更新步骤列表
更新=[]
#只是成本的梯度下降
对于参数中的参数:
param_update=theano.shared(param.get_value()*0.,broadcastable=param.broadcastable)
updates.append((参数,参数-学习率*(参数更新+重量成本强度*参数更新)))
更新。追加((参数更新,动量*参数更新+(1.-动量)*T.grad(成本,参数)))
返回更新
TensorFlow:

l2_loss=tf.add_n([tf.nn.l2_loss(v)表示tf.trainable_variables()中的v)
成本=成本+重量成本强度*l2损耗
训练op=tf.train.MomentumOptimizer(学习率、动量)。最小化(成本)

如果您查看TensorFlow[]中动量优化器的实现,它的实现如下所示:

accum = accum * momentum() + grad;
var -= accum * lr();
如你所见,公式有点不同。根据学习速度调整动量项应该可以解决您的差异

自己实现这样的优化器也很容易。结果
代码看起来与您包含的Theano中的代码片段相似。

这不是唯一的区别。OP发布的公式通过添加动量项
\alpha v(t-1)
来更新
w(t)
,而tensorflow代码实际上减去动量项。根据tensorflow代码似乎更正确。