我看到的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本身的解决方案。

并不是我知道。我知道 一些 哈斯克尔 伙计们 感兴趣的 在自动差异化中,但是一些快速挖掘的发现只不过是提及反向模式的短短。我希望您已经找到了与我相同的材料。

我还注意到 fad 您发现的软件包和斯大林格拉德项目实际上是相同的工作 人们, ,至少珀尔莫特教授已发布给 Haskell-Cafe 邮件列表。您可能需要考虑直接与他联系有关他的工作 - 他可能有一些进展,或者在试图实施反向模式广告时遇到严重的障碍。

抱歉,我无法做出更多有用的东西;如果其他人想进一步挖掘,至少上面的链接是起点。

我认为前进是进入Haskell的方式。正如爱德华指出的那样,您应该无法在任意功能上执行反向模式。但是您回答说,您应该能够在某些受约束的功能上做到这一点。并说的约束可以轻易导致前进模式。例如。如果您有功能:

foo :: Num a => a -> a -> a

那你可以实例化 a 具有可区分的类型,从而区分 foo 在正向模式下。

看到 向量空间 在黑客上的库,以进行非常优雅的前向模式自动差异化。一开始如何使用它可能还不清楚。阅读有关它的论文, 美丽的差异化 由康纳尔·埃利奥特(Conal Elliott)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top