为什么 Tensorflow 中的分布策略不支持梯度裁剪?

San*_*ta7 5 tensorflow

看起来使用分布策略不支持梯度裁剪

https://github.com/tensorflow/tensorflow/blob/f9f6b4cec2a1bdc5781e4896d80cee1336a2fbab/tensorflow/python/keras/optimizer_v2/optimizer_v2.py#L383

(“使用分布策略时,当前不支持优化器中的梯度裁剪”(通过设置clipnorm或clipvalue)。”)

这有什么原因吗?我很想定义一个def _minimize(strategy, tape, optimizer, loss, trainable_variables):直接剪切渐变的自定义。

van*_*vel 0

GitHub 用户 tomerk写道

当您启用分发策略时,有两个可能的地方可以进行剪辑:

  • 在梯度聚合之前(通常是错误的)
  • 梯度聚合后(通常是正确的并且符合人们的期望)

我们希望它在第二种情况下工作(梯度聚合后进行裁剪)。问题是优化器是在聚合之前在代码中发生剪裁而编写的。

我们考虑改变这一点,但它需要:

  • api 更改会破坏优化器 a​​pply_gradients/其他非最小化方法的现有用户
  • 更改优化器实现者需要实现的方法的签名,破坏现有的自定义优化器

所以而不是:

  • 悄悄地在错误的地方进行剪辑
  • 仅针对此单独功能增加流失并破坏现有用户或现有自定义优化器

相反,我们决定暂时禁用此功能。我们将对这一点的支持纳入更大的优化器重构中,以解决更多的问题。

目前,这一举措已得到落实