Дифференцируемое программирование - Differentiable programming

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

Подходы

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

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

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

Более свежие пакеты в Юля язык программирования - Зигота, то Swift язык программирования - Swift для TensorFlow, и новый язык программирования - Myia, решите проблемы, с которыми сталкивались ранее попытки, рассматривая синтаксис языка как график. В промежуточное представление произвольного кода можно напрямую дифференцировать, оптимизированный, и скомпилирован.[5][8][6]

Приложения

Дифференцируемое программирование применялось в таких областях, как комбинирование глубокое обучение с участием физические двигатели в робототехника, дифференцируемый трассировка лучей, обработка изображений, и вероятностное программирование.[9][10][11][12][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. ^ а б c d Иннес, Майк; Эдельман, Алан; Фишер, Кено; Rackauckas, Крис; Саба, Эллиот; Viral B Shah; Теббут, Уилл (2019), ∂P: дифференцируемая система программирования для объединения машинного обучения и научных вычислений, arXiv:1907.07587
  5. ^ а б c Иннес, Майкл; Саба, Эллиот; Фишер, Кено; Ганди, Дхайрья; Рудилоссо, Марко Кончетто; Джой, Ниту Мария; Кармали, Теджан; Пал, Авик; Шах, Вирал (2018-10-31). «Модное моделирование с помощью флюса». arXiv:1811.01457 [cs.PL ].
  6. ^ а б c «Автоматическая дифференциация при Myia» (PDF). Получено 2019-06-24.
  7. ^ а б «TensorFlow: статические графики». Получено 2019-03-04.
  8. ^ Иннес, Майкл (2018-10-18). "Не разворачивайте сопутствующие: дифференциация программ SSA-формы". arXiv:1810.07951 [cs.PL ].
  9. ^ Дегрейв, Йонас; Hermans, Michiel; Дамбре, Джони; Вайффельс, Фрэнсис (5 ноября 2016 г.). «Дифференцируемый физический движок для глубокого обучения робототехнике». arXiv:1611.01652 [cs.NE ].
  10. ^ «Дифференцируемая трассировка лучей по методу Монте-Карло посредством выборки краев». people.csail.mit.edu. Получено 2019-02-13.
  11. ^ «Дорожная карта организации программного обеспечения с открытым исходным кодом для научного машинного обучения SciML». sciml.ai. Получено 2020-07-19.
  12. ^ «Дифференциальное программирование для обработки изображений и глубокого обучения в галогениде». people.csail.mit.edu. Получено 2019-02-13.