Существует ли рабочая реализация автоматической дифференциации обратного режима для Haskell?

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

  •  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.

Внутри он использует трюк от Kansa Lava Andy Gill's Lava, чтобы наблюдать за делением в ленте, который он записывает для целей размножения назад, и использует брендинг уровня типа, чтобы избежать запутанных чувствительных.

Я пытался сохранить API относительно близко к такому из FAD-пакета Barak Pearlmutter и Jeffrey Mark Siskind, но я не мог противостоять сделать пару незначительных твиков здесь и там для общности.

Мне все еще нужно пройти и заканчивать оставшиеся невыполненные причудышевые комбинаторы, выясните хороший способ построить редукторовную башню обратного режима, проверяют, что я не прикрутил мою воспоминание о базовом исчислении и предоставим хорошую API для использования Этот подход Чтобы получить контрольно-пропускные пункты локального обратного режима в программе AD в противном режиме в противном случае, но я вполне доволен тем, как достигнуто до сих пор.

Другие советы

У нас есть куча реализаций AD Forward Mode (у меня даже есть один в моей библиотеке моноидов!), Но реклама обратного режима для всех HASKELL, кажется, нестабилен.

К сожалению, в то время как Pearlmutter и Siskind предъявляют перевод для исчисления лямбда, он не отображается в то, что вы можете сделать для произвольного Haskell Lambdas, вы не получаете правильные свойства самоанализации и дали способ изменения формы ввода Вы не получаете что-то, что поддается упаковке в монаде, стрелу или другую контрольную структуру.

Я пошел на него через серию обменов электронной почты с жемчутником, но в конечном итоге лучшее, что я смог получить, был решением редактора обратного режима для небольшого EDSL в HASKELL, а не решение для самого haskell.

Не то чтобы я осознавал. Я знаю, что некоторый Haskell. близкие находятся заинтересовать в автоматическом дифференцировании, но некоторые быстрые копания обнаружили немного больше, чем короткие, упоминающие обратный режим; Я ожидаю, что вы уже нашли тот же материал, который я сделал.

Я также обращаюсь, что fad пакет и сталинградский проект, который вы нашли на самом деле работа того же два люди, и что, по крайней мере, проф. Перлмутер опубликовал на Haskell-Cafe. список рассылки. Возможно, вы захотите рассмотреть возможность связаться с ним напрямую о своей работе - это возможно, что у него есть что-то в процессе, или попасть в серьезные препятствия, пытаясь реализовать рекламу обратного режима.

Извините, я не мог получить что-то более полезное; Если кто-то еще хочет копать дальше, по крайней мере, ссылки выше являются отправной точкой.

Я думаю, что путь - это путь в Haskell. Вы не должны быть в состоянии сделать обратный режим на произвольных функциях, поскольку Эдвард указал. Но вы ответили, что вы сможете сделать это на определенных ограниченных функциях. И указанные ограничения могут привести к легкому режиму вперед. Например. Если у вас есть функция:

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

Тогда вы можете создать экземпляр a с дифференцируемым типом и таким образом отличаться foo в режиме вперед.

Увидеть Вектор-пространство Библиотека о HACKAGE для очень элегантного передового режима автоматическая дифференцировка. Это может быть не совсем понятно, как сначала использовать его. Прочитайте газету об этом, Красивая дифференциация Conal Elliott.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top