Programowanie różniczkowe - Differentiable programming

Programowanie różniczkowe to paradygmat programowania, w którym numeryczny program komputerowy może być różnicowany poprzez automatyczne różnicowanie . Pozwala to na optymalizację parametrów w programie opartą na gradiencie , często poprzez opadanie gradientowe . Programowanie różniczkowe znalazło zastosowanie w wielu różnych obszarach, w szczególności w obliczeniach naukowych i sztucznej inteligencji .

Podejścia

Większość zróżnicowanych struktur programistycznych działa poprzez konstruowanie grafu zawierającego przepływ sterowania i struktury danych w programie. Wcześniejsze próby generalnie dzielą się na dwie grupy:

  • Statyczne, opracowano wykres na podstawie podejścia 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 utworzyć (np. te zawierające pętle lub rekurencję ), a także utrudniają użytkownikom rozumowanie skutecznie o swoich programach.
  • 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ą donarzutuna interpreter (szczególnie podczas komponowania wielu małych operacji), gorszej skalowalności i problemów z uzyskaniem korzyści z optymalizacji kompilatora.

Oba te wczesne podejścia są w stanie jedynie odróżnić kod napisany w odpowiedni sposób dla frameworka, ograniczając ich interoperacyjność z innymi programami.

Nowszy pakiet dla języka programowania JuliaZygote  – rozwiązuje problemy, z jakimi borykały się wcześniejsze próby, traktując składnię języka jako graf. Pośredni przedstawienie dowolnego kodu mogą być zróżnicowane bezpośrednio zoptymalizowane , i zebrane.

Język programowania „obecnie w fazie rozwoju i nie jest jeszcze gotowy do użycia” o nazwie Myia umożliwia zdefiniowanie modelu za pomocą podzbioru Pythona , który jest skompilowany do Myia.

Aplikacje

Programowanie różniczkowe znalazło zastosowanie w takich dziedzinach , jak łączenie uczenia głębokiego z silnikami fizyki w robotyce , rozwiązywanie problemów struktury elektronowej za pomocą teorii funkcjonału różniczkowalnego gęstości , różniczkowalny ray tracing , przetwarzanie obrazów i programowanie probabilistyczne .

Zobacz też

Uwagi

Bibliografia