TensorFlow 中的 Wengert List 在哪里?

Where is Wengert List in TensorFlow?

TensorFlow使用反向模式自动微分(reverse mode AD),如图https://github.com/tensorflow/tensorflow/issues/675.

反向模式 AD 需要一个称为 Wengert 列表的数据结构 - 请参阅 https://en.wikipedia.org/wiki/Automatic_differentiation#Reverse_accumulation

但是,使用关键字“Wengert List”搜索 TensorFlow 存储库时,我一无所获。

他们是使用不同的名称,还是摆脱了 Wengert List?如果可以,怎么做?

AD 术语非常古老。它是在没有 Python 并且事情很复杂的时候发明的。现在您可以为此目的使用常规 Python 列表。

反向AD的实现在gradients_impl.pyhere

gradients函数中

用于存储磁带的数据结构在 line 532 上初始化,它是一个 Python 队列

# Initialize queue with to_ops.
queue = collections.deque()

TensorFlow 2 与 JAX 和 Autograd 一样使用 Wengert 列表(磁带)。这是因为这些工具使用某种 gradient_tape 来跟踪对变量的操作。

Tensorflow 1 没有使用 Wengert 列表来跟踪正在执行的计算,而是使用静态图来跟踪正在执行的计算。这具有一定的性能优势,但限制了 TensorFlow 1 的功能。

However, searching through the TensorFlow repository with the keyword "Wengert List", but I get nothing.

这是因为 TensorFlow 不是基于磁带的 AD,它是基于图的 AD 系统。

Wengert 列表是描述操作最初执行顺序的磁带。

还有基于源代码转换的 AD,该系统的一个很好的例子是 Tangent

如今几乎没有人再使用磁带(Wengert 列表)。例如检查什么 PyTorch does (Page 2).