No single Automatic Differentiation (AD) system is the optimal choice for all problems. This means informed selection of an AD system and combinations can be a problem-specific variable that can greatly impact performance. In the Julia programming language, the major AD systems target the same input and thus in theory can compose. Hitherto, switching between AD packages in the Julia Language required end-users to familiarize themselves with the user-facing API of the respective packages. Furthermore, implementing a new, usable AD package required AD package developers to write boilerplate code to define convenience API functions for end-users. As a response to these issues, we present AbstractDifferentiation.jl for the automatized generation of an extensive, unified, user-facing API for any AD package. By splitting the complexity between AD users and AD developers, AD package developers only need to implement one or two primitive definitions to support various utilities for AD users like Jacobians, Hessians and lazy product operators from native primitives such as pullbacks or pushforwards, thus removing tedious -- but so far inevitable -- boilerplate code, and enabling the easy switching and composing between AD implementations for end-users.
翻译:没有单一的自动区分系统(AD)是所有问题的最佳选择。 这意味着对自动交换系统和组合进行知情选择, 这可能是一个问题特有的变量, 能够极大地影响业绩。 在Julia 编程语言中, 主要的自动交换系统针对相同的输入, 理论上也可以组成。 久且, 朱丽亚语言中的自动交换软件包需要终端用户熟悉各自软件包中用户的用户自定义的API 。 此外, 实施一个新的、 可用的自动交换软件包需要AD软件包开发商写入锅炉代码, 以定义终端用户的便利 API 功能。 作为对这些问题的响应, 我们为任何自动交换软件包的自动化生成提供了“ 抽象差异化” jl 。 通过将自动交换用户和自动交换软件包开发者之间的复杂度分开, AD软件包开发者只需要执行一两个原始定义, 来支持亚各用户的各种公用事业, 如Jacobian、 Hesian 和懒惰的产品操作者, 等来自本地原始用户的用户, 诸如拉倒或推倒, 等, 从而消除迟钝的 -- 但是的 -- 如此不可避免的 -- -- 锅压紧不可避免的用户之间的转换和共同实施。