Programowanie różniczkowalne
Programowanie różniczkowe to paradygmat programowania , w którym numeryczny program komputerowy może być różnicowany poprzez automatyczne różnicowanie . Pozwala to na parametrów w programie opartą na gradiencie , często poprzez opadanie gradientu , a także inne podejścia do uczenia się, które są oparte na informacjach pochodnych wyższego rzędu. Programowanie różniczkowe znalazło zastosowanie w wielu różnych dziedzinach, zwłaszcza w obliczeniach naukowych i sztucznej inteligencji . Jedna z pierwszych propozycji systematycznego przyjęcia takich ram w celu ulepszenia algorytmów uczenia się została złożona przez zespół ds. zaawansowanych koncepcji w Europejskiej Agencji Kosmicznej na początku 2016 r.
Podchodzi do
Większość struktur programowania różniczkowego działa na zasadzie konstruowania grafu zawierającego przepływ sterowania i struktury danych w programie. Próby generalnie dzielą się na dwie grupy:
- Statyczne, skompilowane podejścia oparte na grafach , takie jak TensorFlow , Theano i MXNet . Zwykle pozwalają na dobrą optymalizację kompilatora i łatwiejsze skalowanie do dużych systemów, ale ich statyczny charakter ogranicza interaktywność i typy programów, które można łatwo tworzyć (np. te obejmujące pętle lub rekurencję ), a także utrudnia użytkownikom rozumowanie skutecznie o swoich programach. Łańcuch narzędzi kompilatora sprawdzającego koncepcję o nazwie Myia wykorzystuje podzbiór Pythona jako interfejs użytkownika i obsługuje funkcje wyższego rzędu, rekursję i pochodne wyższego rzędu.
- Przeciążanie operatorów , dynamiczne podejścia oparte na wykresach, takie jak PyTorch i AutoGrad. Ich dynamiczny i interaktywny charakter pozwala na łatwiejsze pisanie i uzasadnianie większości programów. Jednak prowadzą one do tłumacza (szczególnie podczas tworzenia wielu małych operacji), gorszej skalowalności i mniejszych korzyści z optymalizacji kompilatora. Pakiet dla Julii – Zygote – działa bezpośrednio na pośredniej reprezentacji Julii , umożliwiając jej optymalizację przez kompilator just-in-time Julii.
Ograniczeniem wcześniejszych podejść jest to, że są one w stanie odróżnić kod napisany w sposób odpowiedni dla frameworka, co ogranicza ich interoperacyjność z innymi programami. Nowsze podejścia rozwiązują ten problem, konstruując wykres na podstawie składni języka lub IR, umożliwiając rozróżnienie dowolnego kodu.
Aplikacje
Programowanie różniczkowe zostało zastosowane w takich dziedzinach, jak łączenie głębokiego uczenia się z silnikami fizyki w robotyce , rozwiązywanie problemów ze strukturą elektronową za pomocą teorii funkcjonału gęstości różniczkowej, śledzenie promieni różniczkowalnych , przetwarzanie obrazu i programowanie probabilistyczne .