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

问题描述 投票:13回答:2

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

symbolic-math automatic-differentiation
2个回答
15
投票

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

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

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

Symbolic differentiation操纵数学表达式。如果你曾经使用过matlab或mathematica,那么你就是saw something like this enter image description here

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

Automatic differentiation操纵计算机程序块。微分器具有获取程序的每个元素的导数的规则(当您在核心TF中定义任何操作时,您需要为此操作使用register a gradient)。它还使用链规则将复杂表达式分解为更简单的表达式。这是一个good example how it works in real TF programs with some explanation


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

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


0
投票

一种普遍的主张是自动分化和象征性差异是不同的。但是,事实并非如此。前向模式自动区分和符号区分实际上是等同的。请看这个paper

简而言之,它们都将链规则从输入变量应用于表达式图的输出变量。人们常说,象征性的差异化运用数学表达式和计算机程序的自动区分。最后,它们实际上都表示为表达式图。

另一方面,自动差异化也提供了更多模式。例如,当将输出变量的链规则应用于输入变量时,这称为反向模式自动区分。

© www.soinside.com 2019 - 2024. All rights reserved.