我想知道是否有任何方法可以在图表中重新计算具有更新权重的渐变,或者是否有更好的方法来执行此操作。例如,为了估计粗糙范数,我们需要计算
delta ~ N(0, I)
hessian_norm = 1/M \sum_{1}^{M} gradient(f(x+delta))- gradient(f(x-delta))/(2*delta)
我们需要x+delta
上的渐变值。目前,如果我们直接在None
上使用tf.gradient
,我们会获得var+delta
类型。
更具体地说,如果我们定义
a = tf.Variable
b = some_function(a)
grad = tf.gradients(b, a)
这是正常的梯度计算,但如果我们这样做
grad_delta = tf.gradients(b, a+delta)
它将返回None
。这个特征似乎使得使用上述方法无法逼近粗麻线范数。
答案 0 :(得分:1)
b
不是a+delta
的函数,因此您获得None
s。您需要创建取决于b2
的新值a+delta
,或者只需将a
变量移动delta
并再次移动eval以获得第二个值。
这与您line search in TensorFlow的方式类似。