¿Cuál es el mejor recurso para aprender cómo funciona la diferenciación automática?

Esta es mi primera exposición al tema también, así que perdóname si me equivoco. Después de buscar un poco, encontré este artículo sobre números duales.

Un barrio de infinito

Y esta sencilla implementación de AD Adelante en Haskell.

Cosas que me divierten

La idea básica es introducir un nuevo tipo de número llamado números duales, y luego usar el polimorfismo en su lenguaje de programación para incluir números duales en sus funciones en lugar de dobles.

Los números duales son muy parecidos a los números complejos, excepto que en lugar de [math] i ^ 2 = -1 [/ math], tenemos [math] d ^ 2 = 0 [/ math]. Así que las reglas para sumar y multiplicar números duales funcionan para ser

[math] (p + qd) + (r + sd) = (p + r) + (q + s) d [/ math]

[math] (p + qd) (r + sd) = (pr) + (ps + qr) d [/ math]

Pero la verdadera magia sucede cuando se considera la expansión de Taylor de [math] f (x + d) [/ math].

[math] f (x + d) = f (x) + f ^ \ prime (x) d [/ math]

Todos los términos de orden superior en d desaparecen desde [math] d ^ 2 = 0 [/ math].

De ello se deduce que si podemos evaluar f (Dual (x, 1)), terminaremos con Dual (f (x), f ‘(x)) – podemos encontrar tanto f como su derivado en un punto, y el costo computacional es solo ligeramente mayor que el cálculo de f solo.