Oct, 2018

不展开伴随:对 SSA 形式程序进行微分

TL;DR本文介绍了基于源代码转换的逆向模式算法微分(AD),特别是现代编译器使用的静态单赋值(SSA)形式。该方法可以支持控制流、嵌套、变异、递归、数据结构、高阶函数和其他语言结构,并将输出的微分代码交由现有编译器来生成高效微分代码。我们的实现是 Julia 语言的一种新 AD 工具,称为 Zygote,它呈现高级动态语义,同时在内部透明地编译伴随代码。我们讨论了这种方法对 AD 工具的易用性和性能的好处。