自动微分(又称autodiff,广告,或算法的区别)是优化的广泛使用的工具。这解决
默认情况下,使用自动分化在基于问题的优化中,用于一般非线性目标函数和约束;看优化工具箱中的自动区分.
自动微分是一套数值计算导数(梯度)的技术。该方法使用符号规则进行微分,它比有限差分近似更精确。与纯粹的符号方法不同,自动微分在计算的早期就对表达式进行数值计算,而不是执行大型的符号计算。换句话说,自动微分在特定的数值上计算导数;它不为导数构造符号表达式。
前进模式自动微分通过同时执行初等微分运算和求值函数本身的运算来计算数值导数。在下一节中详细介绍,该软件在一个计算图上执行这些计算。
反向模式自动差异使用前向模式计算图的扩展,以通过曲线图的反向遍历来实现梯度的计算。由于软件运行代码来计算函数及其导数,它将其记录在称为a的数据结构中的操作痕迹.
正如许多研究人员所指出的那样(例如,Baydin,Pearlmutter,乌贼和Xiskind[1]),对于多变量的标量函数,反向模态比正向模态更有效地计算梯度。因为目标函数是标量,解决
自动微分使用逆模式进行标量优化。然而,对于向量值函数,如非线性最小二乘和方程求解,解决
使用前向模式进行某些计算。看到优化工具箱中的自动区分.
考虑评估此功能及其渐变的问题:
自动差异化特定点。在这种情况下,采取x1= 2,x2= 1/2。
下面的计算图对函数的计算进行编码f(x)。
来计算梯度f(x),在相同的方向上计算相同的图形,但根据基本的微分规则修改计算。为了进一步简化计算,您填写每个子表达式的导数值u我当你去时。要计算整个渐变,必须两次遍历图,一旦偏见相对于每个独立变量的部分导数。链规则中的每个子表达式具有数值,因此整个表达式具有与函数本身相同的评估图。
这个计算是对链式法则的重复应用。在这个例子中,的导数f关于x1展开到这个表达式:
让 代表表达的衍生物u我关于x1.使用评估的值u我从函数评估中,您将计算部分导数f关于x1如下图所示。的所有值 在您从上到下遍历图表时变得可用。
求偏导数x2,您遍历类似的计算图表。因此,当计算函数的梯度时,图形遍历的数量与变量的数量相同。当客观函数或非线性约束取决于许多变量时,此过程对于许多应用程序可能会慢。
反向模式使用一个向前遍历计算图来设置跟踪。然后它在相反方向上计算在图形的一个遍历中的功能的整个梯度。对于许多变量的问题,这种模式更有效。
反向模式背后的理论也是基于链规则,以及相关的伴随变量用螺栓表示。伴随变量u我是
在计算图中,一个变量的每个向外的箭头通过其在链式法则中的项贡献给相应的伴随变量。例如,变量u1向两个变量传出箭头,u1和u6.图中有相关的方程
在这个计算中,回顾一下 和u6=u5u1,你获得
在图的前向遍历过程中,软件计算中间变量u我.在反向遍历期间,从种子值开始 ,反向模式计算得到所有变量的伴随值。因此,反向模式只需一次计算梯度,比正向模式节省大量时间。
下图显示了函数反向模式的渐变计算
再一次,计算需要x1= 2,x2= 1/2。反向模式计算依赖于u我在计算原始计算图中的函数期间获得的值。在图的右侧部分中,使用来自图的左侧部分的公式,邻接变量的计算值在伴随变量名称旁边。
最终的梯度值显示为 和 .
更多详细信息,请参见Baydin、Pearlmutter、Radul和Siskind[1]或者维基百科上关于自动微分的文章[2].
自动区分(AD)适用于解决
和prob2struct
在以下条件下的功能:
如上所述,支持目标和约束函数金宝app金宝app支持优化变量和表达式的操作.它们不需要使用FCN2Optimexpr.
函数。
对于优化问题,则'目标'
和'约束扩展'
名称 - 值对参数解决
或者prob2struct
将“汽车”
,'自动前进'
,或'自动反转'
.
对于等式问题,'arealderivative'
选项设置为“汽车”
,'自动前进'
,或'自动反转'
.
当广告应用 | 所有约束函数都支持金宝app | 不支持一个或多个约束金宝app |
---|---|---|
目标函数的支持金宝app | AD用于客观和约束 | AD仅用于客观 |
不支持目标函数金宝app | AD仅用于约束 | 广告未使用 |
当这些条件不满足时,解决
用有限差分估计梯度prob2struct
不会在其生成的函数文件中创建渐变。
默认情况下,求解器选择以下类型的广告:
对于一般非线性目标函数,fmincon
默认为目标函数的反向广告。fmincon
当非线性约束个数小于变量个数时,默认对非线性约束函数进行反向AD。否则,fmincon
默认为非线性约束函数转发AD。
对于一般非线性目标函数,fminunc
默认为反向广告。
对于最小二乘目标函数,fmincon
和fminunc
默认为目标函数转发广告。对于基于问题的最小二乘目标函数的定义,请参阅写入基于问题的最小二乘函数.
lsqnonlin
当目标向量中的元素个数大于等于变量个数时,默认转发AD。否则,lsqnonlin
默认为反向广告。
FSOLVE.
当方程数大于或等于变量数时,默认转发AD。否则,FSOLVE.
默认为反向广告。
请注意
在由。转换的问题中使用自动导数prob2struct
,指定这些衍生品的传递选项。
选项= Optimoptions('粉丝','specifyobjectivegrient',真的,...'specifyconstraintgradient',真的);问题.Options =选项;
目前AD只适用于一阶导数;它不适用于二阶或更高阶导数。所以,例如,如果你想使用分析Hessian来加速你的优化,你不能使用解决
直接,并且必须使用所描述的方法基于问题的工作流程的供应衍生品.
Baydin, Atilim Gunes, Barak A. Pearlmutter, Alexey Andreyevich Radul和Jeffrey Mark Siskind。机器学习中的自动分化:一项调查机器学习研究杂志,18(153),2018,PP。1-43。可用AT.https://arxiv.org/abs/1502.05767.
[2]自动差异化。维基百科。可用AT.https://en.wikipedia.org/wiki/automatic_differential..