何时以及何时不使用自动微分

计算科学 优化 有限差分 自动分化
2021-12-02 10:05:19

我只是在学习(更多)关于自动微分(AD)的知识,在这个阶段,对我来说这有点像黑魔法。其Wikipedia 文章的第二段使它听起来好得令人难以置信:它非常快且准确(没有四舍五入,没有离散化)。我想知道为什么有限差分(FD)在科学计算中如此普遍。查找这个,我似乎只找到关于如何实现 AD、AD 的优点以及它在基于梯度的优化器中的应用的教程。但是什么时候使用 AD 而使用 FD 的例子是什么?肯定有很多。

仅举一个例子,在计算电磁学中,FD 方法是非常标准的。为什么我们不能用 AD 传播麦克斯韦方程(FDTD:为什么不是 ADTD?)?这显然不是因为开发人员没有意识到这一点,因为同样的人为了逆向设计目的实现了 AD(为什么用 AD 而不是 FD 来进行逆向设计?)。天真地,在我看来,在传播麦克斯韦方程组时,精确导数似乎比对目标函数求导数更重要。

1个回答

给定计算函数的代码f(x), 自动微分工具生成的代码可以计算f(x)及其衍生产品。求解微分方程是一个完全不同的问题,AD 不能求解微分方程(尽管 AD 工具有时在与 PDE 约束优化结合使用时很有用。)

AD 工具非常擅长计算衍生品,应该更频繁地使用。但是,在某些情况下它们根本无法使用。无法使用 AD 的最常见原因是您拥有的代码是一个“黑匣子”,源代码不可用。其他一些代码非常庞大和复杂,以至于 AD 工具根本无法处理它们。