質問

私が見た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のリバースモード自動分化を処理するためのハッキングに。

内部的には、アンディ・ギルのカンザス溶岩のトリックを活用して、伝播の目的でテープで記録したテープでの共有を観察し、タイプレベルのブランドを使用して感度を混乱させないようにします。

Barak PearlmutterとJeffrey Mark SiskindのFADパッケージのAPIを比較的近くに保つようにしましたが、一般性のためにあちこちでいくつかの小さな調整を行うことに抵抗することはできませんでした。

残りの不明瞭なFADコンビネーターを通過して仕上げ、リバースモード広告タワーを構築する良い方法を見つけ、基本的な計算の思い出を台無しにしなかったことを検証し、使用するための素晴らしいAPIを提供する必要があります。それ以外の場合はフォワードモード広告プログラムでローカルリバースモードのチェックポイントを取得するこのアプローチですが、これまでの進行状況に非常に満足しています。

他のヒント

フォワードモード広告の実装がたくさんあります(モノイドライブラリに1つでもあります!)が、Haskellのすべてのリバースモード広告は扱いにくいと思われます。

悲しいことに、PearlmutterとSiskindがLambda微積分の翻訳をしている間、任意のHaskell Lambdasのためにできることにはマッピングされません。正しい内省特性が得られず、翻訳のタイプの変化方法を考えるとモナド、矢印、またはその他の制御構造に詰め込まれることに適したものを手に入れることはできません。

Pearlmutterとの一連の電子メール交換を介して進みましたが、最終的に私が取得できる最高のものは、Haskellの小さなEDSLのリバースモード広告ソリューションであり、Haskell自体のソリューションではありませんでした。

私が知っているわけではありません。私はそれを知っています いくつかの ハスケル 皆さん それは 興味がある 自動分化では、いくつかの素早い掘削では、逆モードに言及する短いアサイド以上のものが見つかりました。私はすでに私と同じ素材を見つけたと思います。

また、 fad あなたが見つけたパッケージとstalingradプロジェクトは、実際には同じ仕事です 2 , 、そして少なくともPearlmutter教授が Haskell-Cafe メーリングリスト。彼の仕事について彼に直接連絡することを検討することをお勧めします。それは彼が進行中の何かを持っている可能性があるか、リバースモード広告を実装しようとしている間に深刻な障害にぶつかります。

申し訳ありませんが、これ以上便利なものを見つけることができませんでした。他の誰かがさらに掘り下げたい場合、少なくとも上記のリンクは出発点です。

ハスケルに行く方法だと思います。エドワードが指摘したように、任意の関数で逆モードを実行できないはずです。しかし、あなたは特定の制約された機能でそれを行うことができるはずだと答えました。また、制約は容易にフォワードモードにつながる可能性があります。例えば。関数がある場合:

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

その後、インスタンス化できます a 微分可能なタイプで、したがって区別します foo フォワードモードで。

を参照してください ベクトル空間 非常にエレガントなフォワードモードの自動分化のためのハッキングのライブラリ。最初はそれを使用する方法が完全に明確ではないかもしれません。それについての論文を読んでください、 美しい差別化 コナールエリオット。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top