TensorFlow使用反向模式自动微分(反向模式AD),如https://github.com/tensorflow/tensorflow/issues/675所示。
反向模式AD需要一个名为Wengert List的数据结构 - 请参阅https://en.wikipedia.org/wiki/Automatic_differentiation#Reverse_accumulation。
但是,使用关键字“Wengert List”搜索TensorFlow存储库,但我什么都没得到。
他们使用不同的名字,还是他们摆脱了Wengert List?如果是这样,怎么样?
答案 0 :(得分:4)
AD术语很老。它是在没有Python并且事情变得复杂的时候发明的。现在你可以为此目的使用常规的Python列表。
反向AD的实施位于gradients
here
gradients_impl.py
函数中
用于存储磁带的数据结构在line 532上初始化,它是一个Python队列
# Initialize queue with to_ops.
queue = collections.deque()
答案 1 :(得分:2)
但是,使用关键字“ Wengert List”在TensorFlow存储库中进行搜索,但是却一无所获。
这是因为TensorFlow不是基于
Wengert列表将是描述最初执行操作的顺序的磁带。
还有基于AD的源代码转换,该系统的一个很好的例子是Tangent。
如今,几乎没有人再使用磁带(Wengert列表)。例如检查PyTorch does(第2页)是什么。
答案 2 :(得分:1)
TensorFlow 2使用Wengert列表(磁带),JAX和Autograd也是如此。这是因为这些工具通过某种gradient_tape
来跟踪对变量的操作。
Tensorflow 1没有使用Wengert列表来跟踪正在执行的计算,而是使用静态图来跟踪正在执行的计算。这具有一定的性能优势,但限制了TensorFlow 1的功能。