优化器类中 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”属性是啥?的主要内容,如果未能解决你的问题,请参考以下文章