它使用自动微分。它使用链式法则并在图中分配梯度。
假设我们有一个张量 C 这个张量 C 经过一系列操作后得到让我们说通过加法、乘法、经历一些非线性等
所以如果这个 C 依赖于一组称为 Xk 的张量,我们需要得到梯度
Tensorflow 总是跟踪操作的路径。我的意思是节点的顺序行为以及它们之间的数据流动方式。这是由图表完成的
如果我们需要从 X 输入中获取成本的导数,首先要做的是通过扩展图来加载从 x 输入到成本的路径。
然后它以河流顺序开始。然后用链式法则分配梯度。(与反向传播相同)
无论如何,如果您阅读属于 tf.gradients() 的源代码,您会发现 tensorflow 以一种很好的方式完成了这个梯度分布部分。
在回溯 tf 与 graph 交互时,在 backword pass 中,TF 会遇到不同的节点在这些节点内部有我们称之为(ops)matmal、softmax、relu、batch_normalization 等的操作所以我们 tf 所做的就是自动将这些操作加载到图形
这个新节点构成了操作的偏导数。获取梯度()
先说一下这些新增的节点
在这些节点中,我们 tf 添加了 2 件事 1. 我们计算的导数更早) 2. 前向传递中对应 opp 的输入也是
所以通过链式法则我们可以计算
所以这就像一个 backword API
所以tensorflow总是考虑图的顺序以便做自动微分
所以我们知道我们需要前向传递变量来计算梯度然后我们需要在张量中存储中间值这可以减少内存对于许多操作 tf 知道如何计算梯度并分配它们。