tf.keras.optimizers.Adam 中的 Clipnorm、clipvalue 与 global_clipnorm

GAU*_*AVA 6 deep-learning keras tensorflow

我正在这里查看clipvalue, clipnorm, global_clipnorm参数的定义。我有一些与此相关的问题。参数的描述提到以下内容:tf.keras.optimizers.Adam

\n
    \n
  • clipnorm: 漂浮。如果设置,每个权重的梯度将被单独裁剪,使其范数不高于该值。
  • \n
  • clipvalue: 漂浮。如果设置,每个权重的梯度将被裁剪为不高于该值。
  • \n
  • global_clipnorm: 漂浮。如果设置,则所有权重的梯度都会被剪裁,以便它们的全局范数不高于该值。
  • \n
\n

问题:

\n
    \n
  • 由于权重的梯度(正如描述中所说的每个权重)是一维的,因此 Clipnorm 和 ClipValue 应该相同。在某些情况下,clipnorm 和 Clipvalue 是否不同?
  • \n
  • 似乎 global_clipnorm 计算模型中所有权重的范数。从可用选项来看,我们似乎在 tf.keras.optimizers.Adam 中没有\xe2\x80\x99 任何参数来对层的权重进行裁剪规范。我们有这个 api 选项吗?
  • \n
\n

Moh*_*med 0

好吧,如果我们有一个一维梯度,那么你是对的,然后clip_normclip_value做同样的工作。但如果我们深入内部,那么clip_norm控制梯度在不同维度流动的速率速度,另一个最重要的因素是不同维度中梯度的大小。clip_norm仅当达到阈值时,才会将值限制在两个边界之间gradient flowing in a different direction may vary in magnitude。所以,这里clip_norm可以充当正则化器;由于梯度的大小在某些方向上很大而在其他维度上很小可能会影响学习。因此,这里可以充当正则化器,因此它将修剪在训练过程中导致锯齿clip_norm效应的梯度大小。

对于训练期间的其他问题,当您训练时,Model您可以使用clip_normclip_value函数,然后再将其传递给optimizer.update()张量流中的函数。这是一种方法。