中文

高阶函数前向自动微分中标记扰动的混淆

符号计算 2019-09-23 v4 数学软件 微分几何

摘要

前向自动微分 (AD) 是一种增强程序以计算导数的技术。前向 AD 的本质是将扰动附加到每个数值上,并在计算过程中传播这些扰动。当导数嵌套时,必须区分不同的导数计算及其相关的扰动。这通常通过为每个导数计算创建唯一的标记 (tag),对扰动进行标记,并重载算术运算符来实现。我们揭示了一个存在于已部署实现中的微妙错误,其中尽管有标记机制,扰动仍然发生混淆。该错误的本质在于:每次导数调用都会创建一个唯一标记,但每个导数计算都需要一个唯一标记。在对高阶函数求导时,这两者未必对应!返回函数gg的高阶函数ff的导数将是一个返回函数gˉ\bar{g}的函数ff',其中gˉ\bar{g}执行导数计算。单次调用ff'将创建一个全新的标记,但该标记将被用于由调用gˉ\bar{g}产生的每个导数计算。这种情况出现在对柯里化 (curried) 函数求导时。本文提出了两种潜在的解决方案,并讨论了它们的严重缺陷。一种方案需要η\eta展开,以将新标记的创建从ff'的调用延迟到gˉ\bar{g}的调用,这在某些情况下可能很困难甚至不可能。另一种方案要求ff'用标记重命名来包装gˉ\bar{g},而这在不违反前向 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}
}