Haskell是否有任何反向模式自动差异化的工作实现?
-
02-10-2019 - |
题
我看到的Haskell中最接近的实现是远期模式 http://hackage.haskell.org/packages/archive/fad/1.0/doc/html/numeric-fad.html.
最接近相关的相关研究似乎是与方案相关的另一种功能语言的反向模式 http://www.bcl.hamilton.ie/~qobi/stalingrad/.
我认为Haskell中的反向模式是许多任务的圣杯,希望它可以使用Haskell的嵌套数据并行性来获得重型数值优化的良好加速。
解决方案
为了回答这个问题,我上传了一个名为的软件包 广告 用于处理Haskell中反向模式自动分化的攻击。
在内部,它利用安迪·吉尔(Andy Gill)的堪萨斯熔岩(Kansas Lava)的技巧观察在磁带中分享它记录的背部传播目的,并使用类型级别的品牌来避免混淆敏感性。
我试图使API相对接近Barak Pearlmutter和Jeffrey Mark Siskind的FAD Package,但我忍不住在这里和那里进行了一些小调整,以进行一般性。
我仍然需要经历并完成剩余的未完成的FAD组合器,找出一种建造反向模式广告塔的好方法,验证我没有搞砸我对基本微积分的回忆,并提供了一个不错的API这种方法可以在其他远期模式广告程序中获取本地反向模式检查点,但我对迄今为止的进展感到非常满意。
其他提示
我们有很多正向模式广告实现(我在Monoids库中什至有一个!),但是Haskell所有的反向模式广告似乎很棘手。
可悲的是,虽然Pearlmutter和Siskind给出了Lambda微积分的翻译,但它不会映射到您可以为任意的Haskell Lambdas做的事情,您没有获得正确的内省属性,并且给定翻译中类型的形状变化的方式您不会得到包装到单子,箭头或其他控制结构中的东西。
我通过与Pearlmutter的一系列电子邮件交流进行了处理,但最终我能获得的最好的是Haskell中的小型EDSL的反向模式广告解决方案,而不是Haskell本身的解决方案。