TensorFlow如何计算tf.train.GradientDescentOptimizer的渐变?

Pau*_*aul 3 python optimization gradient tensorflow

我试图了解TensorFlow如何计算渐变tf.train.GradientDescentOptimizer.

如果我理解TensorFlow白皮书中的4.1节是正确的,它会通过向TensorFlow图添加节点来计算基于反向传播的渐变,TensorFlow图计算原始图中节点的推导.

当TensorFlow需要相对于C所依赖的某个张量I计算张量C的梯度时,它首先在I到C中找到计算图中的路径.然后它从C回溯到I,并且对于每个操作在向后路径它将一个节点添加到TensorFlow图形,使用链规则沿着向后路径组成部分梯度.新添加的节点计算前向路径中相应操作的"梯度函数".可以通过任何操作来注册梯度函数.该函数不仅将已经沿后向路径计算的部分梯度作为输入,而且还可选地作为前向操作的输入和输出. [第4.1节TensorFlow白皮书]

问题1:每个TensorFlow节点是否有第二个节点实现,它表示原始TensorFlow节点的派生?

问题2:有没有办法可视化哪些派生节点被添加到图表(或任何日志)?

Yar*_*tov 5

每个节点都有相应的方法来计算backprop值(使用Python中的@ ops.RegisterGradient("Sum")注册)

您可以在此处使用方法可视化图形

但请注意,由于自动微分代码适用于各种条件,因此它创建的图形非常复杂,并且看起来不是很有用.对于可以用1-2个节点实现的简单梯度计算,有10个ops节点并不罕见