优化器类中 tensorflow 最小化()函数中的“gate_gradients”属性是啥?

Posted

技术标签:

【中文标题】优化器类中 tensorflow 最小化()函数中的“gate_gradients”属性是啥?【英文标题】:What is "gate_gradients" atribute in tensorflow minimize() function in the optimzer class?优化器类中 tensorflow 最小化()函数中的“gate_gradients”属性是什么? 【发布时间】:2017-04-04 17:17:22 【问题描述】:

这是 TF 优化器类的链接https://www.tensorflow.org/versions/r0.12/api_docs/python/train/optimizers

【问题讨论】:

这似乎与如何并行化梯度计算和应用有关。在这里查看评论github.com/tensorflow/tensorflow/blob/master/tensorflow/python/… 【参考方案1】:

GATE_NONE:以两个向量“x”和“y”上的 matmul 操作为例。设输出为 L。现在 L wrt x 的梯度为 y,L wrt y 的梯度为 xT(x 转置)。使用 GATE_NONE 可能会发生这样的情况,即在计算 y 的梯度之前应用梯度 wrt x 来修改 x。现在,当计算梯度 wrt y 时,它将被计算为等于修改后的 x,这是一个错误。当然,在这么简单的情况下不会发生,但你可以想象它可能会发生在更复杂/极端的情况下

GATE_OP:对于每个 Op,确保在使用之前计算所有梯度。这可以防止 Ops 的竞争条件为多个输入生成梯度,其中梯度取决于输入。 (您可以看到这如何防止 GATE_NONE 的问题,尽管代价是一些并行性)。

GATE_GRAPH:确保在使用其中任何一个变量之前计算所有变量的所有梯度。这提供了最少的并行性,但如果您想在应用任何渐变之前处理所有渐变,这可能很有用。(用例示例是在应用之前根据全局规范裁剪渐变)

【讨论】:

【参考方案2】:

在您链接的同一页面中,如果您向下滚动一点,它会显示:

gate_gradients 参数控制梯度应用期间的并行度

【讨论】:

是的。我看到了。他们提到的并行性是什么?对于 matmul 操作,认为我们得到两个输入 X 和 Y,他们说我们可以先计算 X 的梯度,然后在尚未计算 Y 时应用于 X。这是什么?

以上是关于优化器类中 tensorflow 最小化()函数中的“gate_gradients”属性是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow一些常用基本概念与函数

自定义 TensorFlow Keras 优化器

TensorFlow基础——常用函数

『TensorFlow』网络操作API_下

在安全管理器类中检查 Create ClassLoader 这个方法是啥

DRF框架serializer之ModelSerializer