Diferencovatelné programování (anglicky differentiable programming) je programovací paradigma, ve kterém lze numerický počítačový program automaticky derivovat. To umožňuje optimalizaci parametrů programu, obvykle pomocí metody gradientního sestupu nebo i dalšími metodami strojového učení, založenými na derivacích vyššího řádu. Diferenciovatelné programování se využívá v široké škále oblastí, zejména pro vědecké výpočty a umělou inteligenci. Jeden z prvních návrhů tohoto programovacího paradigmatu byl předložen týmem Advanced Concepts Team Evropské kosmické agentury počátkem roku 2016.

Diferencovatelné programování obvykle funguje na základě grafu popisujícího tok instrukcí a datové struktury počítačového programu. Práce s ním obecně využívá jeden z následujících dvou přístupů:

Statické přístupy s kompilovaným grafem jako TensorFlow, Theano, and MXNet. Programy jsou rychlejší a lépe škálují na větší úlohy, ale limitují interaktivitu a uživatelskou přívětivost. Taktéž mívají potíže s některými prvky programů jako jsou smyčky a rekurze.

Přetěžování operátorů, přístupy založené na dynamických grafech, jaké využívá PyTorch a AutoGrad. Jejich dynamická a interaktivní povaha je uživatelsky přívětivá, ale výpočetně náročnější kvůli využití interpretu (zejména při sestavování mnoha malých operací), horší škálovatelnosti a sníženému přínosu optimalizace kompilátoru (balíček Zygota pro programovací jazyk Julia však umožňuje stálou just-in-time kompilaci).

Půodní přístupy jsou schopny zpracovat jen svůj nativní programovací jazyk, což omezuje jejich interoperabilitu s jinými programy. Novější přístupy umožňují derivovat libovolný program.

Diferenciovatelné programování bylo aplikováno v oblastech, jako je kombinace hlubokého učení s fyzikálními jevy v robotice, řešení strukturálních problémů fyziky pomocí teorie funkcionálu hustoty, sledování paprsku, zpracování obrazu, a pravděpodobnostní programování.

Reference

Kategorie:Paradigmata programování Kategorie:Diferenciální počet