Дифференцируемое программирование
Дифференцируемое программирование — это парадигма программирования , в которой числовая компьютерная программа может быть дифференцирована посредством автоматического дифференцирования . [1] [2] [3] [4] [5] Это позволяет на основе градиента оптимизировать параметры программы , часто посредством градиентного спуска , а также использовать другие подходы к обучению, основанные на информации о производных более высокого порядка. Дифференцируемое программирование нашло применение в самых разных областях, особенно в научных вычислениях и машинном обучении . [5] Одно из первых предложений по систематическому внедрению такой структуры для улучшения алгоритмов обучения было сделано группой перспективных концепций Европейского космического агентства в начале 2016 года. [6]
Подходы [ править ]
Большинство дифференцируемых сред программирования работают путем построения графа, содержащего поток управления и структуры данных в программе. [7] Попытки обычно делятся на две группы:
- Статические подходы на основе скомпилированных графов , такие как TensorFlow , [примечание 1] Теано и MXNet . Они, как правило, обеспечивают хорошую оптимизацию компилятора и более простое масштабирование для больших систем, но их статическая природа ограничивает интерактивность и типы программ, которые можно легко создавать (например, программы, включающие циклы или рекурсию ), а также усложняют пользователям рассуждать. эффективно о своих программах. [7] Инструментарий для проверки концепции компилятора под названием Myia использует подмножество Python в качестве внешнего интерфейса и поддерживает функции высшего порядка, рекурсию и производные более высокого порядка. [8] [9] [10]
- Перегрузка операторов , подходы на основе динамических графов такие как PyTorch и NumPy пакет autograd , . Их динамичный и интерактивный характер позволяет легче писать и анализировать большинство программ. Однако они приводят к накладным расходам интерпретатора (особенно при составлении множества небольших операций), ухудшению масштабируемости и снижению выгоды от оптимизации компилятора. [9] [10] Пакет для языка программирования Julia — Zygote Julia — работает непосредственно с промежуточным представлением его , что позволяет оптимизировать с помощью JIT-компилятора Julia. [7] [11] [5]
Ограничением более ранних подходов является то, что они способны различать только код, написанный подходящим для платформы способом, что ограничивает их взаимодействие с другими программами. Новые подходы решают эту проблему путем построения графа на основе синтаксиса языка или IR, что позволяет дифференцировать произвольный код. [7] [9]
Приложения [ править ]
Дифференцируемое программирование применялось в таких областях, как сочетание глубокого обучения с физическими двигателями в робототехнике , [12] решение задач электронной структуры с помощью теории дифференцируемого функционала плотности , [13] дифференцируемая трассировка лучей , [14] обработка изображений , [15] и вероятностное программирование . [5]
Многопрофильное приложение [ править ]
Дифференцируемое программирование добилось значительных успехов в различных областях, выходящих за рамки традиционных приложений. Например, в здравоохранении и науках о жизни он используется для глубокого обучения при моделировании молекулярных механизмов на основе биофизики. Это предполагает использование дифференцируемого программирования в таких областях, как предсказание структуры белков и открытие лекарств. Эти приложения демонстрируют потенциал дифференцируемого программирования, способствуя значительному прогрессу в понимании сложных биологических систем и совершенствовании решений для здравоохранения. [16]
См. также [ править ]
Примечания [ править ]
- ^ TensorFlow 1 использует подход статического графа, тогда как TensorFlow 2 по умолчанию использует подход динамического графа.
Ссылки [ править ]
- ^ Иззо, Дарио; Бискани, Франческо; Мерета, Алессио (2017). «Дифференцируемое генетическое программирование». Генетическое программирование . Конспекты лекций по информатике. Том. 10196. стр. 35–51. arXiv : 1611.04766 . дои : 10.1007/978-3-319-55696-3_3 . ISBN 978-3-319-55695-6 . S2CID 17786263 .
- ^ Байдин, Атилим Гюнес; Перлмуттер, Барак А.; Радуль Алексей Андреевич; Сискинд, Джеффри Марк (2018). «Автоматическая дифференциация в машинном обучении: опрос» . Журнал исследований в области маржинального обучения . 18 (153): 1–43.
- ^ Ван, Фэй; Декер, Джеймс; Ву, Силун; Эссертель, Грегори; Ромпф, Тиарк (2018). «Обратное распространение ошибки с обратными вызовами: основы эффективного и выразительного дифференцируемого программирования» (PDF) . Ин Бенджио, С.; Уоллах, Х.; Ларошель, Х.; Грауман, К. (ред.). NIPS'18: Материалы 32-й Международной конференции по нейронным системам обработки информации . Карран Ассошиэйтс. стр. 10201–10212.
- ^ Иннес, Майк (2018). «О машинном обучении и языках программирования» (PDF) . Конференция SysML 2018 . Архивировано из оригинала (PDF) 17 июля 2019 г. Проверено 4 июля 2019 г.
- ^ Перейти обратно: а б с д Иннес, Майк; Эдельман, Алан; Фишер, Кено; Ракаукас, Крис; Саба, Эллиот; Вирал Б. Шах; Теббутт, Уилл (2019). «Дифференцируемая система программирования, соединяющая машинное обучение и научные вычисления». arXiv : 1907.07587 .
- ^ «Дифференциальный интеллект» . Октябрь 2016 года . Проверено 19 октября 2022 г.
- ^ Перейти обратно: а б с д Иннес, Майкл; Саба, Эллиот; Фишер, Кено; Ганди, Дайрия; Марко Кончетто Рудилоссо; Ниту Мария Джой; Кармали, Теджан; Пал, Авик; Шах, Вирус (2018). «Модное моделирование с помощью флюса». arXiv : 1811.01457 .
- ^ Мерриенбур, Барт ван; Брелё, Оливье; Бержерон, Арно; Ламблин, Паскаль (3 декабря 2018 г.). «Автоматическая дифференциация в ML: где мы находимся и куда нам следует двигаться» . НИПС'18 . Том. 31. стр. 8771–81.
- ^ Перейти обратно: а б с Брелё, О.; ван Мерриенбоер, Б. (2017). «Автоматическая дифференциация в Myia» (PDF) . Архивировано из оригинала (PDF) 24 июня 2019 г. Проверено 24 июня 2019 г.
- ^ Перейти обратно: а б «TensorFlow: статические графики» . Учебники: изучение PyTorch . PyTorch.org . Проверено 4 марта 2019 г.
- ^ Иннес, Майкл (2018). «Не развертывайте Adjoint: дифференциация программ SSA-формы». arXiv : 1810.07951 .
- ^ Деграв, Йонас; Херманс, Мишель; Дамбре, Джони; Виффелс, Фрэнсис (2016). «Дифференцируемый физический двигатель для глубокого обучения в робототехнике». arXiv : 1611.01652 .
- ^ Ли, Ли; Хойер, Стефан; Педерсон, Райан; Солнце, Руокси; Чубук, Экин Д.; Райли, Патрик; Берк, Кирон (2021). «Уравнения Кона-Шэма как регуляризатор: использование предварительных знаний в физике машинного обучения» . Письма о физических отзывах . 126 (3): 036401. arXiv : 2009.08551 . Бибкод : 2021PhRvL.126c6401L . doi : 10.1103/PhysRevLett.126.036401 . ПМИД 33543980 .
- ^ Ли, Цзы-Мао; Айттала, Миика; Дюран, Фредо; Лехтинен, Яакко (2018). «Дифференцируемая трассировка лучей Монте-Карло посредством выборки по краям» . Транзакции ACM с графикой . 37 (6): 222:1–11. дои : 10.1145/3272127.3275109 . S2CID 52839714 .
- ^ Ли, Цзы-Мао; Гарби, Микаэль; Адамс, Эндрю; Дюран, Фредо; Рэган-Келли, Джонатан (август 2018 г.). «Дифференцируемое программирование для обработки изображений и глубокого обучения в Halide» . Транзакции ACM с графикой . 37 (4): 139:1–13. дои : 10.1145/3197517.3201383 . S2CID 46927588 .
- ^ Аль-Курайши, Мохаммед; Зоргер, Питер К. (октябрь 2021 г.). «Дифференцируемая биология: использование глубокого обучения для моделирования молекулярных механизмов на основе биофизики и данных» . Природные методы . 18 (10): 1169–1180. дои : 10.1038/s41592-021-01283-4 . ПМЦ 8793939 . ПМИД 34608321 .