自动微分何时便宜?

计算科学 自动分化 效率
2021-12-21 00:08:02

自动微分允许我们以数值方式评估程序在特定输入上的导数。有一个定理,这种计算的成本可以低于运行原始程序成本的五倍。这个因子五是一个上限。

在什么情况下可以进一步降低这个成本?许多现场派生代码以接近原始程序的速度运行。怎样做才能获得这种加速?

可以利用原始程序的哪些特征来加速计算?

可以使用哪些软件工程技巧来加快计算速度?

2个回答

我对 AD 的有限理解与马特所说的相似。为了加快导数的计算,表达式图的结构必须利用雅可比矩阵集中的稀疏性和稀缺性。(见这篇论文1由 Griewank 提供更多见解。)软件工程技巧可能在 AD 代码本身中,以重构表达式图,以利用雅可比矩阵集中的这些属性。了解 AD 代码如何从您正在编写的代码中生成表达式图将反过来帮助您更好地了解如何编写需要较少计算的代码。任何好的 AD 代码都应该已经利用了带有公共子表达式的内在函数,但是好的 AD 代码很难编写。

该领域的标准参考资料是Andreas Griewank 和 Andrea Walther 的Evaluating Derivatives:Principles and Techniques of Algorithmic Differential,第二版,并且应该提供有关如何减少评估程序导数所需的计算数量的更详细信息。

  1. Griewank, A., Naumann, U. 将雅可比矩阵累积为链式稀疏矩阵产品。数学。程序,Ser。A 95, 555–571 (2003)。https://doi.org/10.1007/s10107-002-0329-7

任何 AD 仍然需要提供这些内在函数,所以我看不出这与表达式的通用复杂性有什么关系。我猜您可以通过表达式图的路径数对复杂性进行分类,因为您以这种方式表达 AD。Andrew Lyons 在这里对串并图有很好的工作。