Estoy intentando implementar automatic differentiation para un paquete de estadísticas de Python (la formulación del problema es similar a las formulaciones de problemas de optimización).Implementando la diferenciación automática para la 2da derivada: algoritmo para atravesar el gráfico computacional?
El gráfico computacional se genera utilizando la sobrecarga del operador y las funciones de fábrica para operaciones como sum(), exp(), etc. He implementado la diferenciación automática para el gradiente utilizando la acumulación inversa. Sin embargo, he encontrado que implementar la diferenciación automática para la segunda derivada (Hessian) es mucho más difícil. Sé cómo hacer los 2dos cálculos de gradientes parciales individuales, pero he tenido problemas para encontrar una forma inteligente de recorrer el gráfico y hacer las acumulaciones. ¿Alguien sabe de buenos artículos que dan algoritmos para la diferenciación automática para la segunda derivada o bibliotecas de código abierto que implementan la misma que puedo intentar aprender?
"fuera del tema" mi pie (comentando al único SOer que votó de esa manera) - esto es todo sobre programación, ¿qué otra cosa podría "atravesar la computación gráfico "¿se trata ?! (Aunque no entiendo por qué @John no puede hacer la segunda derivada simplemente aplicando su funcionalidad de primera derivada dos veces, eso puede deberse a que no sé qué es un "Hessian" [[excepto un soldado nacido en Alemania] luchando por los británicos en 1776! -)]]). –
Para responder a su pregunta, diferenciar dos veces no es trivial debido a las interacciones entre variables. Si su función es un escalar (con n entradas), la 1ª derivada es una longitud vectorial n, la 2da derivada es una matriz n^2, la 3ª derivada es n^3, etc. Para la primera derivada, debe viajar 1 ruta de variable dependiente independiente por término, para la segunda derivada debe recorrer dos rutas diferentes. Me preocupaba/estaba un poco preocupado de que fuera tema, pero no sé cuál es el mejor foro para esta pregunta; Definitivamente no es una cuestión de desbordamiento matemático. –
¿Es absolutamente necesaria la diferenciación automática?Cada vez que lo he considerado, descubrí que diferenciar manualmente el algoritmo a mano es más sencillo, pero, una vez más, mis Hessians generalmente han sido bastante simples (como diagonales o computables mediante una fórmula analítica). –