Sto tentando di implementare automatic differentiation per un pacchetto di statistiche Python (la formulazione del problema è simile alle formulazioni del problema di ottimizzazione).Implementazione della differenziazione automatica per la derivata 2: algoritmo per attraversare il grafico computazionale?
Il grafico computazionale viene generato utilizzando l'overloading dell'operatore e le funzioni di fabbrica per operazioni come sum(), exp(), ecc. Ho implementato la differenziazione automatica per il gradiente utilizzando l'accumulo inverso. Tuttavia, ho trovato molto più difficile implementare la differenziazione automatica per la seconda derivata (l'Hessiana). So come eseguire i singoli calcoli del 2 ° gradiente parziale, ma ho avuto problemi a trovare un modo intelligente per attraversare il grafico e fare gli accumuli. Qualcuno sa di buoni articoli che forniscono algoritmi per la differenziazione automatica per la seconda libreria derivata o open source che implementa lo stesso da cui posso provare a imparare?
"Off-topic" il mio piede (commentando il solitario SOer che ha votato in quel modo) - questo è tutto sulla programmazione, cos'altro potrebbe "attraversare il calcolo" grafico "circa ?! (Anche se non capisco perché @John non possa fare la seconda derivata semplicemente applicando la sua funzionalità first-derivative due volte, ciò potrebbe essere dovuto al fatto che non so cosa sia una "Hessian" [[ad eccezione di un soldato nato in Germania combattendo per gli inglesi nel 1776! -)]]). –
Per rispondere alla tua domanda, la differenziazione due volte non è banale a causa delle interazioni tra variabili. Se la tua funzione è uno scalare (con n ingressi), la prima derivata è una lunghezza vettore n, la seconda derivata è una matrice n^2 la derivata 3 è n^3 ecc. Per la prima derivata, devi risalire 1 percorso da variabile dipendente indipendente per termine, per la derivata seconda devi percorrere due percorsi diversi. Ero/un po 'preoccupato che fosse fuori tema, ma non so quale sia il forum migliore per questa domanda; non è sicuramente una questione di trabocco di matematica. –
La differenziazione automatica è assolutamente necessaria?Ogni volta che l'ho preso in considerazione, ho scoperto che manualmente differenziare manualmente l'algoritmo per essere più semplice, ma di nuovo, i miei Hessiani erano solitamente abbastanza semplici (come diagonale, o calcolabili con una formula analitica). –