问题描述
在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是最合理的选择,但我不知道它是如何实现的。
可以类似地询问clipvalue
和adam
以及其他基于动量的算法。
PS:如果未按照B的建议实施clipnorm
,那么如果也有可能通过使用其他选项在keras中获得B,我会感到困惑吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)