Haskell是否有任何反向模式自动区分的工作实现?

Ian*_*ske 13 haskell automatic-differentiation

我在Haskell中看到的最接近相关的实现是http://hackage.haskell.org/packages/archive/fad/1.0/doc/html/Numeric-FAD.html上的前向模式.

最近的相关相关研究似乎是与http://www.bcl.hamilton.ie/~qobi/stalingrad/上与Scheme相关的另一种功能语言的反向模式.

我认为Haskell中的反向模式对于许多任务来说都是一种圣杯,希望它可以使用Haskell的嵌套数据并行性来在繁重的数值优化中获得良好的加速.

Edw*_*ETT 55

在回答这个问题时,我已经将一个名为ad的软件包上传到Hackage,用于处理Haskell中的反向模式自动区分.

在内部,它利用Andy Gill的Kansas Lava的技巧来观察其录制的磁带中的共享以用于反向传播目的,并使用类型级别的品牌来避免混淆敏感性.

我试图保持API与Barak Pearlmutter和Jeffrey Mark Siskind的时尚包相对接近,但我无法抗拒在这里和那里进行一些小调整以获得通用性.

我还需要经过并完成了剩余的未实现的时尚组合程序,找出一个很好的方式来建立反向模式广告塔,验证我没有搞砸我的基本演算的回忆,以及使用提供了一个很好的API这种方法可以在其他正向模式的AD程序中获得本地反向模式检查点,但我对目前为止的进展感到非常满意.

  • 实现一个完整的库,以便给这个问题一个正确的答案 - 现在*这是*奉献! (17认同)
  • 我已经添加了一个范围更广的新软件包,http://hackage.haskell.org/package/ad,它提供正向和反向模式以及智能关于来回切换的组合器. (4认同)
  • 特别是因为我的其他答案已被标记为已被接受.;) (3认同)

Edw*_*ETT 5

我们有一堆正向模式AD实现(我甚至在我的monoids库中有一个!),但所有Haskell的反向模式AD似乎都是难以处理的.

可悲的是,虽然Pearlmutter和Siskind为lambda演算提供了翻译,但它并没有映射到你可以为任意Haskell lambdas做的事情,你没有得到正确的内省属性,并且给出了类型的形状在翻译中的变化方式你没有得到适合装入monad,arrow或其他控制结构的东西.

我通过与Pearlmutter的一系列电子邮件交流获得了它,但最终我能够获得的最好的是针对Haskell中的小型EDSL的反向模式AD解决方案,而不是Haskell本身的解决方案.