Interested Article - Дифференцируемое программирование

Дифференцируемое программирование парадигма программирования , которая использует для вычисления производных функций с учетом входных значений программы. . Дифференцируемое программирование позволяет провести оптимизацию параметров программы с помощью градиентных методов , часто с использованием градиентного спуска , а также с помощью других обучающих подходов, которые основаны на производной высшего порядка. Дифференцируемое программирование нашло применение в широком кругу отраслей, в частности в и искусственном интеллекте . Одним из ранних предложений принятия такого подхода для систематического использования для улучшения алгоритмов обучения было сделано командой в Европейском космическом агентстве в начале 2016 года .

Дифференцируемое программирование применяется при решении таких задач, как комбинирование глубокого обучения c физическими движками в робототехнике , расчёт электронных структур с использованием теории функционала плотности , дифференцируемая трассировка лучей , цифровая обработка изображений и .

Подходы

Работа большинства дифференцируемых фреймворков программирования основана на построении в программе графа , содержащего поток управления и структуры данных . Выделяется две группы подходов — статические и динамические.

Подходы, основанные на статистическом, компилируемом графе используются в TensorFlow , Theano , и MXNet ; их преимущества раскрываются при использовании оптимизурующего компилятора , они легче масштабируются до размера больших систем, но их статический характер ограничивает интерактивность и типы программ, которые без особенных затрат могут созданы с их помощью (например, программы, использующие циклы или рекурсию ), также, стоит отметить, что подобные подходы затрудняют объяснение работы программы. . Набор инструментов компилятора для проверки концепции , называемый Miya использует подмножество программного языка Python в качестве фронтенда и поддерживает функции высшего порядка , рекурсию, а также производные высшего порядка.

Подходы, основанные на перегрузке операторов , динамическом графе используются в PyTorch и . Их динамический и интерактивный характер позволяет создавать большинство программ и аргументировать их работу с меньшими затратами. Но это приводит к большой нагрузке на интерпретатор (в частности, при использовании множества небольших операций), худшей масштабируемости, и уменьшению преимуществ использования оптимизирующего компилятора. Одним из исключений является пакет языка программирования Julia , который работает напрямую с промежуточным представлением кода Julia, позволяя оптимизировать его с помощью JIT-компилятора языка Julia.

Ограничение ранних подходов дифференцируемого программирования заключалось в том, что они позволяли дифференцировать только функции, написанные подходящим образом для соответствующего фреймворка, тем самым ограничивая взаимодействие с другими программами. Современные подходы решают данную проблему, позволяя конструировать граф с помощью синтаксиса языка программирования или кода промежуточного представления, тем самым позволяя дифференцировать произвольные функции.

Примечания

  1. TensorFlow 1 использует подход, основанный на статическом графе, тогда как TensorFlow 2 использует по умолчанию подход, основанный на динамическом графе.
Ссылки
  1. . GitHub . Дата обращения: 23 февраля 2023. 23 февраля 2023 года.
  2. . pennylane.ai . Дата обращения: 23 февраля 2023. 23 февраля 2023 года.
  3. Izzo, Dario; Biscani, Francesco; Mereta, Alessio (2017). . European Conference on Genetic Programming (EuroGP) . Lecture Notes in Computer Science. 18 : 35—51. arXiv : . doi : . ISBN 978-3-319-55695-6 . S2CID .
  4. Baydin, Atilim Gunes; Pearlmutter, Barak; Radul, Alexey Andreyevich; Siskind, Jeffrey (2018). . Journal of Machine Learning Research . 18 : 1—43.
  5. Wang, Fei. Backpropagation with Callbacks: Foundations for Efficient and Expressive Differentiable Programming // / Fei Wang, James Decker, Xilun Wu … [ и др. ] . — Curran Associates, 2018. — P. 10201–12.
  6. Innes, Mike (2018). (PDF) . SysML Conference 2018 .
  7. Innes, Mike; Edelman, Alan; Fischer, Keno; Rackauckas, Chris; Saba, Elliot; Viral B Shah; Tebbutt, Will (2019), ∂P: A Differentiable Programming System to Bridge Machine Learning and Scientific Computing , arXiv :
  8. (октябрь 2016). Дата обращения: 19 октября 2022. 19 октября 2022 года.
  9. Degrave, Jonas; Hermans, Michiel; Dambre, Joni; wyffels, Francis (2016-11-05). "A Differentiable Physics Engine for Deep Learning in Robotics". arXiv : [ ].
  10. Li, Li; Hoyer, Stephan; Pederson, Ryan; Sun, Ruoxi; Cubuk, Ekin D.; Riley, Patrick; Burke, Kieron (2021). . Physical Review Letters . 126 (3): 036401. arXiv : . Bibcode : . doi : . PMID .
  11. Li, Tzu-Mao; Aittala, Miika; Durand, Frédo; Lehtinen, Jaakko (2018). . ACM Transactions on Graphics . 37 (6): 222:1–11. doi : . S2CID .
  12. Li, Tzu-Mao; Gharbi, Michaël; Adams, Andrew; Durand, Frédo; Ragan-Kelley, Jonathan (August 2018). . ACM Transactions on Graphics . 37 (4): 139:1–13. doi : . S2CID .
  13. Innes, Michael; Saba, Elliot; Fischer, Keno; Gandhi, Dhairya; Rudilosso, Marco Concetto; Joy, Neethu Mariya; Karmali, Tejan; Pal, Avik; Shah, Viral (2018-10-31). "Fashionable Modelling with Flux". arXiv : [ ].
  14. Merriënboer, Bart van. Automatic differentiation in ML: where we are and where we should be going // / Bart van Merriënboer, Olivier Breuleux, Arnaud Bergeron … [ и др. ] . — 3 December 2018. — Vol. 31. — P. 8771–81.
  15. Breuleux, O.; van Merriënboer, B. (2017). Дата обращения: 24 июня 2019. Архивировано из 24 июня 2019 года.
  16. . Tutorials: Learning PyTorch . PyTorch.org. Дата обращения: 4 марта 2019. 2 сентября 2021 года.
  17. Innes, Michael (2018-10-18). "Don't Unroll Adjoint: Differentiating SSA-Form Programs". arXiv : [ ].
Источник —

Same as Дифференцируемое программирование