¿Hay alguna aplicación que trabaja de modo automático reversible de la diferenciación de Haskell?

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

  •  02-10-2019
  •  | 
  •  

Pregunta

La aplicación relacionada más cercana en Haskell que he visto es el modo de avance en http://hackage.haskell.org/packages/archive/fad/1.0/doc/html/Numeric-FAD.html .

La investigación relacionada relacionada más cercana parece ser el modo inverso para otro lenguaje funcional relacionado con el Esquema en http://www.bcl.hamilton.ie/~qobi/stalingrad/ .

Veo modo inverso en Haskell como una especie de santo grial para una gran cantidad de tareas, con la esperanza de que se podría utilizar paralelismo de datos anidada de Haskell para obtener una aceleración agradable en la optimización numérica pesada.

¿Fue útil?

Solución

En respuesta a esta pregunta, he subido un paquete llamado anuncio a Hackage para la manipulación -modo inverso diferenciación automática en Haskell.

Internamente, se aprovecha un truco de Andy Gill Kansas lava para observar la participación en la cinta se registra con fines de propagación hacia atrás, y el nivel de tipo de usos marca para evitar confundir las sensibilidades.

he tratado de mantener el API relativamente cercana a la de Barak Pearlmutter y el paquete de moda de la marca Jeffrey Siskind, pero no pudo resistirse a hacer un par de ajustes menores aquí y allá para la generalidad.

Todavía tengo que ir a través y terminar el resto de los combinadores de moda no implementadas, encontrar una buena manera de construir una torre AD-modo inverso, validar que no me equivoco mi recuerdo de cálculos básicos, y proporciona una agradable API para utilizar este enfoque para obtener los puestos de control modo de inversión locales en un programa de modo de AD de otro modo hacia delante, pero estoy bastante contento con cómo las cosas han progresado hasta el momento.

Otros consejos

Tenemos un montón de implementaciones modo de AD hacia adelante (I incluso tener una en mi biblioteca monoides!), Pero el modo AD inversa para todos Haskell parece ser intratable.

Por desgracia, mientras que Pearlmutter y Siskind dan una traducción para un cálculo lambda, no mapa en algo que puede hacer por lambdas Haskell arbitrarias, que no te dan las propiedades de introspección derecha y dada la forma en que la forma del cambio de tipos en la traducción no se consigue algo que es susceptible de ser embalado en una mónada, flecha, u otra estructura de control.

Yo tenía un ir en él a través de una serie de intercambios de correo electrónico con Pearlmutter, pero en última instancia, lo mejor que pude obtener fue una solución inversa modo de AD para un pequeño EDSL en Haskell, y no una solución por sí mismo Haskell.

No es que yo sepa. Yo sé que algunos Haskell gente son interesado en la diferenciación automática, pero algo de investigación rápida encontró poco más que apartes cortos que mencionan el modo inverso; Espero que ya ha encontrado el mismo material que hice.

También nota que el paquete fad y Stalingrado proyecto que has encontrado son, de hecho, el trabajo de la misma href="http://cobweb.ecn.purdue.edu/~qobi/" rel="nofollow noreferrer"> personas , y que al menos el Prof. Pearlmutter ha escrito en el la href="http://www.haskell.org/mailman/listinfo/haskell-cafe" rel="nofollow noreferrer"> Haskell-cafe lista de correo

Lo siento, no podía subir nada más útil; Si alguien quiere seguir perforando, al menos los enlaces de arriba son un punto de partida.

Creo hacia adelante es el camino a seguir en Haskell. Usted no debe ser capaz de hacerlo en modo inverso funciones arbitrarias, como Edward señaló. Pero usted respondió que debería ser capaz de hacerlo en ciertas funciones limitadas. Y dijo que las barreras pueden conducir fácilmente a modo de avance. P.ej. si tiene una función:

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

A continuación, se puede crear una instancia a con un tipo diferenciable, y por lo tanto foo diferencian en modo de avance.

Ver la href="http://hackage.haskell.org/package/vector-space" rel="nofollow noreferrer"> biblioteca espacio vectorial en Hermosa Diferenciación por Conal Elliott.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top