Diferencovatelné programování
Author
Albert FloresDiferencovatelné 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. +more 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 [url=https://github. +morecom/FluxML/Zygote. jl]Zygota[/url] 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í.