Tensorflow 计算图vs(计算机代数)符号表达式

Tensorflow 计算图vs(计算机代数)符号表达式,tensorflow,pytorch,theano,backpropagation,automatic-differentiation,Tensorflow,Pytorch,Theano,Backpropagation,Automatic Differentiation,我在读(),它区分了符号微分和自动微分(AD)。然后它说: 广告不是象征性的区别。 符号微分是对[符号]表达式的自动操作 AD可以被认为是对计算机程序执行非标准的解释 这种解释涉及用各种导数的计算来增加标准计算 评估痕迹构成AD技术的基础。 [计算图显示评估跟踪中(输入、工作、输出)变量的依赖关系。] 然后描述如何使用AD(正向或反向模式)计算导数。描述基本上是转换评估跟踪/计算图 Autograd、Chainer和PyTorch提供通用反向模式广告 它还讨论了Theano、TensorFlow

我在读(),它区分了符号微分和自动微分(AD)。然后它说:

广告不是象征性的区别。 符号微分是对[符号]表达式的自动操作

AD可以被认为是对计算机程序执行非标准的解释 这种解释涉及用各种导数的计算来增加标准计算

评估痕迹构成AD技术的基础。 [计算图显示评估跟踪中(输入、工作、输出)变量的依赖关系。]

然后描述如何使用AD(正向或反向模式)计算导数。描述基本上是转换评估跟踪/计算图

Autograd、Chainer和PyTorch提供通用反向模式广告

它还讨论了Theano、TensorFlow和其他,但它基本上比较了定义和运行/静态计算图(Theano,TF)与运行/动态计算图(PyTorch,TF)的定义。 (在我的理解中,这与广告是如何执行的问题是正交的,或者主要是改变广告的执行方式,但与广告的概念无关。)

Theano是一个计算图优化器和编译器[…],它目前处理 高度优化的符号微分形式的导数。结果可以解释为 符号微分和反向模式AD的混合,但Theano不使用通用模式 正如我们在本文中描述的那样,反向累积。(与作者的个人交流。)

我不确定作者是否暗示Theano/TF不提供通用反向模式广告(我的理解是错误的)

我不太明白Theano为什么不使用通用的反向累加

而且,我不明白,在这个定义下,符号差异和广告有什么不同

或者:符号表达式与计算图有何不同

相关的也是可微规划

由功能块组装的可微有向图

我再一次看不到计算图的区别

和反向传播(BP):

由此产生的算法本质上等价于在反向模式AD下转换由目标函数组成的网络评估函数,正如我们所说 我们将看到,实际上推广了反向传播的思想

我不认为反向模式广告比反向传播更普遍。它是?怎么做

(第5.5节)规定:

BP也被称为自动微分的反向模式


这是一个很好的问题,它引出了AD中的一些基本差异,以及像PyTorch和TensorFlow这样的大型ML库之间的一些基本设计差异。特别是,我认为理解“按运行定义”和“按运行定义”广告之间的区别令人困惑,需要一些时间来理解

反向传播与反向模式广告?

您可以看到一个堆栈溢出问题,以及我的答案。基本上,区别在于你想要的是标量值函数R^n->R的梯度,还是向量值函数R^n->R^m的向量雅可比积。反向传播假设你想要一个标量损失函数的梯度,并且是机器学习社区中谈论神经网络训练最常用的一个术语

因此,反向模式AD比反向传播更通用

符号差异与广告有什么不同?

符号微分作用于表示输入的符号,而AD计算给定输入的导数的数值

例如:假设我有一个函数y=x^2。如果我要计算y的符号导数,我会得到值2x作为符号导数。现在,对于x的任何值,我知道x处导数的值。但是如果我要执行自动微分,我会首先设置x的值,比如x=5,我的AD工具会告诉我导数是2*5,但它不会知道x=4的导数,因为它只计算x=5的导数,而不是导数的符号表达式

定义和运行/静态计算图与按运行/动态计算图定义之间的区别?

正如您所指出的,TF1和Theano是定义和运行的,而Pytorch、Autograd和TF2是按运行定义的。有什么区别

在TensorFlow 1中,您告诉TensorFlow您将要做什么,然后TensorFlow准备通过构建静态计算图对某些数据执行这些计算,最后您收到数据并执行计算。第一步是告诉TensorFlow你要做什么,第二步是在TensorFlow得到一些数据后进行计算

在Autograd中,你在做之前不会告诉它你要做什么。与TF1不同的是,Autograd会在收到数据后发现您将对数据执行的操作。如果它收到一个向量,它不知道将对该向量执行什么计算,因为它事先没有静态计算图。它通过在代码执行时记录每个变量上的操作来“构建图形”,然后在计算结束时,您会有一个可以向后遍历的操作列表。这使您可以轻松地包含控制流,如if语句。在定义并运行框架中处理控制流要困难得多

为什么Theano和TF1不提供通用反向模式广告?

Theano和TF1不提供通用p