高阶函数前向自动微分中标记扰动的混淆
符号计算
2019-09-23 v4 数学软件
微分几何
摘要
前向自动微分 (AD) 是一种增强程序以计算导数的技术。前向 AD 的本质是将扰动附加到每个数值上,并在计算过程中传播这些扰动。当导数嵌套时,必须区分不同的导数计算及其相关的扰动。这通常通过为每个导数计算创建唯一的标记 (tag),对扰动进行标记,并重载算术运算符来实现。我们揭示了一个存在于已部署实现中的微妙错误,其中尽管有标记机制,扰动仍然发生混淆。该错误的本质在于:每次导数调用都会创建一个唯一标记,但每个导数计算都需要一个唯一标记。在对高阶函数求导时,这两者未必对应!返回函数的高阶函数的导数将是一个返回函数的函数,其中执行导数计算。单次调用将创建一个全新的标记,但该标记将被用于由调用产生的每个导数计算。这种情况出现在对柯里化 (curried) 函数求导时。本文提出了两种潜在的解决方案,并讨论了它们的严重缺陷。一种方案需要展开,以将新标记的创建从的调用延迟到的调用,这在某些情况下可能很困难甚至不可能。另一种方案要求用标记重命名来包装,而这在不违反前向 AD 理想复杂度属性的情况下难以实现。
引用
@article{arxiv.1211.4892,
title = {Confusion of Tagged Perturbations in Forward Automatic Differentiation of Higher-Order Functions},
author = {Oleksandr Manzyuk and Barak A. Pearlmutter and Alexey Andreyevich Radul and David R. Rush and Jeffrey Mark Siskind},
journal= {arXiv preprint arXiv:1211.4892},
year = {2019}
}