我正在阅读Baydin 等人的《机器学习中的自动微分:一项调查》,2018 年( Arxiv ),其中区分了符号微分和自动微分 (AD)。然后它说:
AD 不是符号区分。符号微分是[符号]表达式的自动操作。
AD 可以被认为是对计算机程序执行非标准解释,其中这种解释涉及通过计算各种导数来增加标准计算。
评估痕迹构成了 AD 技术的基础。[计算图 (Bauer, 1974)在评估跟踪中可视化(输入、工作、输出)变量的依赖关系。]
然后继续描述如何用 AD 计算导数(在前向或后向模式下)。该描述基本上是在转换评估跟踪/计算图。
Autograd、Chainer 和 PyTorch 提供通用反向模式 AD。
它还讨论了 Theano、TensorFlow 等,但它基本上比较了定义运行/静态计算图(Theano,TF)与运行定义/动态计算图(PyTorch,TF Eager)。(在我的理解中,这与如何执行 AD 的问题是正交的,或者主要只是改变了 AD 的实施方式,但不是 AD 的概念。)
Theano 是一个计算图优化器和编译器 [...],它目前以高度优化的符号微分形式处理导数。结果可以解释为符号微分和反向模式 AD 的混合,但 Theano 没有使用我们在本文中描述的通用反向累加。(与作者的个人交流。)
我不确定作者是否暗示 Theano/TF 不提供通用反向模式 AD(我的理解是错误的)。
我不完全理解 Theano 是如何不使用通用反向累积的。
此外,鉴于此定义,我不明白符号差异与 AD 有何不同。
或者:符号表达式与计算图有何不同?
相关的也是可微分编程
由功能块组装而成的可微有向图
我再次看不到计算图的区别。
和反向传播(BP):
得到的算法本质上等效于在反向模式AD下转换由目标函数组成的网络评估函数,正如我们将看到的,这实际上是对反向传播思想的推广。
我看不出反向模式 AD 比反向传播更通用。是吗?如何?
Schmidhuber,神经网络中的深度学习:概述,2014 年(第 5.5 节)(也)指出:
BP也被称为自动微分的反向模式(Griewank,2012)。