符号分化和自动分化之间的区别?

Moo*_*ody 15 symbolic-math automatic-differentiation

我似乎无法理解其中的差异.对我而言,看起来两者都只是通过一个表达并应用链规则.我错过了什么?

Sal*_*ali 15

有三种流行的方法来计算衍生物:

  1. 数值差异
  2. 象征性的分化
  3. 自动区分

数值微分依赖于衍生物的定义:在此输入图像描述,你h在两个地方放一个非常小的评估函数.这是最基本的公式,在实践中人们使用其他公式,这些公式给出较小的估计误差.这种计算导数的方法主要适用于您不了解函数并且只能对其进行采样的情况.此外,它需要大量的计算才能实现高调功能.

符号微分操纵数学表达式.如果您曾经使用过matlab或mathematica,那么您会看到类似这样的东西 在此输入图像描述

这里对于每个数学表达式,他们知道衍生物并使用各种规则(产品规则,链规则)来计算得到的导数.然后,他们简化结束表达式以获得结果表达式.

自动微分操纵计算机程序块.微分器具有获取程序的每个元素的导数的规则(当您在核心TF中定义任何操作时,您需要为此操作注册梯度).它还使用链规则将复杂表达式分解为更简单的表达式.这是一个很好的例子,它如何在真正的TF程序中有一些解释.


您可能认为自动微分与符号微分相同(在一个地方它们在数学表达式上运行,在另一个地方运行在计算机程序上).是的,它们有时非常相似.但是对于控制流语句(`if,while,loops),结果可能非常不同:

符号差异会导致代码效率低下(除非经过仔细研究),并且面临将计算机程序转换为单个表达式的难度


小智 7

人们普遍认为,自动微分和符号微分是不同的。然而,事实并非如此。前向模式自动微分和符号微分实际上是等价的。请参阅本文

简而言之,它们都将链式法则从输入变量应用到表达式图的输出变量。人们常说,符号微分作用于数学表达式,自动微分作用于计算机程序。最后,它们实际上都表示为表达式图。

另一方面,自动微分也提供了更多的模式。例如,当将链式法则从输出变量应用到输入变量时,这称为反向模式自动微分。

  • 许多作者声称 AD 和 SD 有本质上的不同,但未能显示出任何差异。它们不仅“在算法上等效”,而且在数值和计算上也是等效的。事实上,许多首先描述 AD 的作者后来都承认了这种等价性,包括 Griewank (2019)“对于“自动”、“符号”和“分析”微分之间的区别仍然存在混淆。在我的书中,它们都是相同”,以及 Elliott (2018),“AD *是* SD 由编译器执行。” (3认同)
  • 您写了这篇论文(实际上是预印本)。作为局外人,您似乎不适合将其作为客观来源推荐。 (3认同)