Próbuję wdrożyć automatic differentiation dla pakietu statystyk Python (formułowanie problemu jest podobne do formułowania problemów optymalizacji).Implementacja automatycznego różnicowania dla drugiej pochodnej: algorytm do przechodzenia przez wykres obliczeniowy?
Wykres obliczeniowy jest generowany z wykorzystaniem przeciążenia operatora i funkcji fabrycznych dla operacji takich jak sum(), exp() itp. Zaimplementowałem automatyczne różnicowanie gradientu przy użyciu odwrotnej akumulacji. Jednakże, stwierdziłem, że wprowadzenie automatycznego różnicowania dla drugiej pochodnej (heskiego) jest o wiele trudniejsze. Wiem, jak wykonywać poszczególne obliczenia drugiego gradientu częściowego, ale miałem problemy z wymyśleniem inteligentnego sposobu na przechodzenie przez wykres i robienie nagromadzeń. Czy ktoś wie o dobrych artykułach, które dają algorytmy automatycznego różnicowania dla drugiej pochodnej lub bibliotek open source, które implementują to samo, z czego mogę próbować się uczyć?
"Off-topic" moja stopa (komentując samotnego SOERA, który głosował w ten sposób) - to wszystko o programowaniu, co jeszcze może "przemierzać obliczenia wykres "być około ?! (Chociaż nie rozumiem, dlaczego @John nie może wykonać drugiej pochodnej przez dwukrotne zastosowanie swojej funkcji pierwszej pochodnej, może to być spowodowane tym, że nie wiem, co to jest "Hesjanin" [[z wyjątkiem żołnierza pochodzącego z Niemiec walczyć o Brytyjczyków w 1776 roku! -)]]). –
Aby odpowiedzieć na pytanie, dwukrotne odróżnienie jest nietrywialne z powodu interakcji między zmiennymi. Jeśli twoja funkcja jest skalarem (z n wejściami), pierwsza pochodna jest długością wektora n, druga pochodna jest macierzą n^2 trzecia pochodna to n^3 itd. Dla pierwszej pochodnej musisz podążać w górę 1 ścieżkę od niezależnej zmiennej zależnej w perspektywie, dla drugiej pochodnej musisz podążać dwiema różnymi ścieżkami. Byłem/byłem trochę zaniepokojony tym tematem, ale nie wiem, jakie jest lepsze forum dla tego pytania; to zdecydowanie nie jest rzecz z przelewem matematycznym. –
Czy automatyczne różnicowanie jest absolutnie konieczne?Za każdym razem, gdy to rozważałem, stwierdziłem, że ręczne rozróżnianie algorytmu ręcznie jest prostsze, ale z drugiej strony, moi hessańczycy zwykle byli dość proste (jak przekątna lub obliczalne przez formułę analityczną). –