1

在 Keras 或 Tensorflow 中,重新clipnorm调整大的“梯度”以具有特定的规范并clipvalue限制“梯度”的所有值。

但是,如果将其中一个与moemntum或类似的东西结合起来会发生什么adam?它是应用于梯度还是速度?

A) 是否clipnorm应用于g损失相对于参数的实际纯数学梯度,然后使用这个剪裁梯度来使用旧梯度的动量和学习率计算更新步骤?

velocity = momentum * velocity - learning_rate * clipnorm(g)
w = w + velocity

或者

B)首先将旧梯度的动量与未修改的新梯度相结合。然后得到的向量(“速度”)被clipnorm缩放。

velocity = clipnorm(momentum * velocity - learning_rate * g)
w = w + velocity

或 B')

velocity = momentum * velocity - learning_rate * g
w = w + clipnorm(velocity)

或者也有可能是A')

velocity = momentum * velocity - clipnorm(learning_rate * g)
w = w + velocity

?

A(和 A')会遇到这样一个问题,即即使梯度的范数是有界的,速度也可能由于动量而变得任意大,并且剪辑范数会使分解速度或改变方向的速度变得更慢。

从我的角度来看,B 是最合理的,但我不知道它是如何实现的。

同样的问题可以类似地询问clipvalueadam其他基于动量的算法。

PS:如果clipnorm没有按照 B 中的建议实施,如果还有可能通过使用不同的选项在 keras 中获得 B 或 B',我会很感兴趣?

4

0 回答 0