Gibt es eine funktionierende Implementierung von Reverse-Modus automatischer Unterscheidung für Haskell?

StackOverflow https://stackoverflow.com/questions/2744973

  •  02-10-2019
  •  | 
  •  

Frage

Die nächstgelegene bezogene Umsetzung in Haskell ich gesehen habe, ist der Vorwärts-Modus unter http://hackage.haskell.org/packages/archive/fad/1.0/doc/html/Numeric-FAD.html .

Die am engsten verwandten verwandten Forschungsgebieten erscheint Reverse-Modus für eine andere funktionale Sprache Schema in Bezug auf sein unter http://www.bcl.hamilton.ie/~qobi/stalingrad/ .

Ich sehe Reverse-Modus in Haskell als eine Art heiligen Grals für viele Aufgaben, mit der Hoffnung, dass es Haskells verschachtelte Datenparallelität verwenden könnte eine schöne Speedup in schwerer numerischer Optimierung zu gewinnen.

War es hilfreich?

Lösung

Als Antwort auf diese Frage habe ich ein Paket hochgeladen namens ad Hackage für die Handhabung Reverse-Modus automatische Unterscheidung in Haskell.

Intern es nutzt einen Trick von Andy Gill Kansas Lava-Sharing in dem Band zu beobachten es für Backpropagation Zwecke aufzeichnet, und Verwendungen Typebene Branding verwirrend Empfindlichkeiten zu vermeiden.

Ich habe versucht, die API zu halten relativ nahe an dem von Barak Pearlmutter und Jeffrey Mark Siskinds fad Paket, aber ich konnte nicht widerstehen, ein paar kleinere Verbesserungen machen hier und da für Allgemeinheit.

Ich muss noch gehen und die restlichen unimplemented fad combinators zu beenden, Figur aus einem schönen Weg, um einen Reverse-Modus AD Turm zu bauen, Validieren, dass ich habe meine Erinnerung an Grund Kalkül nicht vermasseln, und einen schönen bieten API für diesen Ansatz mit lokalen Reverse-Modus Checkpoints in einem ansonsten Vorwärtsmodus AD-Programm zu erhalten, aber ich bin ganz zufrieden, wie die Dinge haben sich so weit fortgeschritten ist.

Andere Tipps

Wir haben eine Reihe von Forward-Modus AD-Implementierungen (Ich habe auch in meiner Monoide Bibliothek!), Aber Reverse-Modus AD für alle Haskell scheint unlösbar zu sein.

Leider während Pearlmutter und Siskind eine Übersetzung für ein Lambda-Kalkül gibt, ist es nicht in etwas abbildet Sie für beliebiges Haskell lambda tun kann, bekommt man nicht die richtige Selbstbeobachtung Eigenschaften und die Art und Weise, die Form der Typ Änderung gegeben in der Übersetzung, die Sie nicht etwas, das zu werden, verpackt in eine Monade zugänglich ist, Pfeil oder andere Kontrollstruktur.

hatte ich einen geht an ihn über eine Reihe von E-Mail-Austausch mit Pearlmutter, aber letztlich das Beste, was ich konnte eine Reverse-Modus AD Lösung für eine kleine EDSL in Haskell, und nicht eine Lösung für Haskell erhalten war selbst.

Nicht, dass ich wüsste. Ich weiß, dass einige Haskell Leute sind interessiert in automatischer Differenzierung, aber einige schnelle Graben fanden wenig mehr als kurzer asides den Reverse-Modus zu erwähnen; Ich erwarte, dass Sie bereits das gleiche Material gefunden ich.

Ich stelle auch fest, dass das Paket fad und Stalingrad-Projekt Sie ist in der Tat fanden die Arbeit des gleichen zwei Menschen , und dass zumindest hat Prof. Pearlmutter geschrieben die Haskell-cafe Mailingliste. Sie können ihn zu prüfen, direkt über seine Arbeit in Kontakt -. Es ist möglich, dass er etwas im Gange ist, oder schlagen ernsthafte Hindernisse beim Versuch, Reverse-Modus AD zu implementieren

Leider konnte ich nicht wieder auftauchen etwas mehr nützlich; wenn jemand anderes will weiter graben, zumindest die Links oben ein Ausgangspunkt sind.

Ich denke, nach vorne ist der Weg in Haskell zu gehen. Sie sollten die Lage zu tun Reverse-Modus auf beliebige Funktionen nicht, wie Edward hingewiesen. Aber Sie antworteten, dass Sie in der Lage sein sollten, es auf bestimmte eingeschränkte Funktionen zu tun. Und die Einschränkungen leicht zu Forward-Modus führen kann. Z.B. wenn Sie eine Funktion:

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

Dann können Sie a mit differenzierbar Art und damit differenzierbare foo in Vorwärtsmodus instanziiert.

Sehen Sie die Vektor-Raum Bibliothek auf Hackage für sehr elegant Forward-Modus automatische Unterscheidung . Es ist vielleicht nicht ganz klar sein, wie es auf den ersten Einsatz. Lesen Sie das Papier darüber, Schöne Differenzierung von Conal Elliott.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top