Bir Python istatistik paketi için automatic differentiation uygulamasını denemeye çalışıyorum (sorun formülasyonu, en iyi duruma getirme sorun formülleriyle benzerdir).2. türev için otomatik farklılaşma uygulanması: hesaplamalı grafiğin geçişi için algoritma?
Hesaplama grafiği, operatörün aşırı yüklenmesi ve sum(), exp() vb. Gibi işlemler için fabrika işlevleri kullanılarak oluşturulur. Ters birikimi kullanarak degrade için otomatik farklılaşma uyguladık. Ancak, ikinci türev (Hessian) için otomatik farklılaştırmanın uygulanmasını çok daha zor buldum. Bireysel kısmi gradyan hesaplamaları nasıl yapacağımı biliyorum, ancak grafiğin üstesinden gelmek ve birikimi yapmak için akıllıca bir yol bulmakta zorlandım. Herhangi biri, öğrenmeyi deneyebileceğim aynı şeyi uygulayan ikinci türev veya açık kaynak kütüphaneleri için otomatik farklılaştırma algoritmaları veren iyi makaleler biliyor mu?
"Off-topic" ayağım (bu şekilde oy veren yalnız SOER'e yorum yapıyor) - bu programlama ile ilgili başka bir şey olabilir. grafik "hakkında ?! (Neden John'un ilk türevi işlevselliğini iki kez uygulayarak 2. türevi yapamadığını anlamamasına rağmen, bunun sebebi "Hessian" ın ne olduğunu bilmemem olabilir [[Alman doğumlu bir asker hariç] 1776 yılında Brits için mücadele! -)]]). –
Sorunuzu yanıtlamak için, değişkenler arasındaki etkileşimler nedeniyle iki kez ayırt etmek önemsizdir. Fonksiyonunuz bir skalar (n girişleri ile) ise, 1. türevin bir vektör uzunluğu n, ikinci türevi bir n^2 matrisidir 3. türev türevi n^3'tür. İlk türev için, yukarı çıkmanız gerekir 1 Dönem başına bağımsız bağımlı değişkenden gelen yol, ikinci türev için iki farklı yoldan ilerlemeniz gerekir. Bu konuyla ilgili biraz endişeliydim, ama bu soru için daha iyi bir forumun ne olduğunu bilmiyorum; kesinlikle bir matematik taşma meselesi değil. –
Otomatik farklılaşma kesinlikle gerekli midir?Her düşündüğümde, algoritmayı elle daha kolay anlaşılır kıldığını buldum, ama yine Hessyalılarım oldukça basit (diyagonal veya analitik formül tarafından hesaplanabilir). –