Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Дифференцируемое программирование - это парадигма программирования, в которой числовая компьютерная программа может быть дифференцирована через автоматическое различение . [1] [2] [3] [4] Это позволяет проводить оптимизацию параметров программы на основе градиента , часто с помощью градиентного спуска . Дифференцируемое программирование нашло применение в самых разных областях, особенно в научных вычислениях и искусственном интеллекте . [4]

Подходы [ править ]

Большинство дифференцируемых сред программирования работают путем построения графа, содержащего поток управления и структуры данных в программе. [5] Более ранние попытки обычно делятся на две группы:

  • Подходы на основе статических скомпилированных графов, такие как TensorFlow , [примечание 1] Theano и MXNet . Они, как правило, обеспечивают хорошую оптимизацию компилятора и более легкое масштабирование для больших систем, но их статический характер ограничивает интерактивность и типы программ, которые можно легко создавать (например, те, которые включают циклы или рекурсию ), а также затрудняет пользователям рассуждение эффективно о своих программах. [5] [6] [7]
  • Перегрузка операторов , подходы на основе динамических графиков, такие как PyTorch и AutoGrad . Их динамический и интерактивный характер позволяет легко писать и рассуждать о большинстве программ. Однако они приводят кнакладным расходам интерпретатора (особенно при составлении множества небольших операций), ухудшению масштабируемости и затруднениям в получении выгоды от оптимизации компилятора. [6] [7] [4]

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

Более свежий пакет для языка программирования Julia - Zygote  - решает проблемы, с которыми сталкивались ранее попытки, путем обработки синтаксиса языка как графа. Промежуточное представление произвольного кода , то можно дифференцировать непосредственно, оптимизированная и скомпилированы. [5] [8]

Язык программирования «в настоящее время находится в разработке и еще не готов к использованию» под названием Myia [6], который позволяет определять модель с использованием подмножества Python , которое скомпилировано в Myia.

Приложения [ править ]

Дифференцируемое программирование применялось в таких областях, как сочетание глубокого обучения с физическими механизмами в робототехнике , решение задач электронной структуры с помощью теории дифференцируемого функционала плотности , дифференцированная трассировка лучей , обработка изображений и вероятностное программирование . [9] [10] [11] [12] [13] [4]

См. Также [ править ]

  • Дифференцируемая функция
  • Машинное обучение

Заметки [ править ]

  1. ^ TensorFlow 1 использует подход статического графа, тогда как TensorFlow 2 использует подход динамического графа по умолчанию.

Ссылки [ править ]

  1. ^ Байдин, Атилим Гунеш; Перлмуттер, Барак; Радул Алексей Андреевич; Сискинд, Джеффри (2018). «Автоматическая дифференциация в машинном обучении: обзор» . Журнал исследований в области машинного обучения . 18 : 1–43.
  2. ^ Ван, Фэй; Декер, Джеймс; У, Силунь; Эссертель, Грегори; Rompf, Tiark (2018), Bengio, S .; Wallach, H .; Larochelle, H .; Грауман, К. (ред.), «Обратное распространение с обратными вызовами : основы эффективного и выразительного дифференцируемого программирования» (PDF) , « Достижения в системах обработки нейронной информации» 31 , Curran Associates, Inc., стр. 10201–10212 , получено 2019-02 -13
  3. ^ Иннес, Майк (2018). «О машинном обучении и языках программирования» (PDF) . Конференция SysML 2018 .
  4. ^ a b c d Иннес, Майк; Эдельман, Алан; Фишер, Кено; Rackauckas, Крис; Саба, Эллиот; Viral B Shah; Теббут, Уилл (2019), ∂P: Дифференцируемая система программирования для соединения машинного обучения и научных вычислений , arXiv : 1907.07587
  5. ^ a b c Иннес, Майкл; Саба, Эллиот; Фишер, Кено; Ганди, Дхайрья; Рудилоссо, Марко Кончетто; Джой, Ниту Мария; Кармали, Теджан; Пал, Авик; Шах, Вирал (2018-10-31). «Модное моделирование с помощью флюса». arXiv : 1811.01457 [ cs.PL ].
  6. ^ a b c «Автоматическая дифференциация при Myia» (PDF) . Проверено 24 июня 2019 .
  7. ^ a b «TensorFlow: статические графики» . Проверено 4 марта 2019 .
  8. ^ Иннес, Майкл (2018-10-18). «Не разворачивайте сопутствующие: дифференциация программ SSA-формы». arXiv : 1810.07951 [ cs.PL ].
  9. ^ Дегрейв, Йонас; Hermans, Michiel; Дамбре, Джони; Вайффельс, Фрэнсис (5 ноября 2016 г.). «Дифференцируемый физический движок для глубокого обучения робототехнике». arXiv : 1611.01652 [ cs.NE ].
  10. ^ Ли, Ли; Хойер, Стефан; Педерсон, Райан; Сунь, Руокси; Кубук, Экин Д .; Райли, Патрик; Берк, Кирон (2021). "Уравнения Кона-Шэма как регуляризатор: построение предшествующих знаний в физике с машинным обучением" . Письма с физическим обзором . 126 (3): 036401. DOI : 10,1103 / PhysRevLett.126.036401 .
  11. ^ «Дифференцируемая трассировка лучей Монте-Карло через выборку краев» . people.csail.mit.edu . Проверено 13 февраля 2019 .
  12. ^ "Дорожная карта организации программного обеспечения с открытым исходным кодом научного машинного обучения SciML" . sciml.ai . Проверено 19 июля 2020 .
  13. ^ «Дифференциальное программирование для обработки изображений и глубокого обучения в галогениде» . people.csail.mit.edu . Проверено 13 февраля 2019 .