Автоматное программирование
- 1 year ago
- 0
- 0
|
Этот перевод статьи с другого языка
требует улучшения (см.
Рекомендации по переводу
)
.
|
Дифференцируемое программирование — парадигма программирования , которая использует для вычисления производных функций с учетом входных значений программы. . Дифференцируемое программирование позволяет провести оптимизацию параметров программы с помощью градиентных методов , часто с использованием градиентного спуска , а также с помощью других обучающих подходов, которые основаны на производной высшего порядка. Дифференцируемое программирование нашло применение в широком кругу отраслей, в частности в и искусственном интеллекте . Одним из ранних предложений принятия такого подхода для систематического использования для улучшения алгоритмов обучения было сделано командой в Европейском космическом агентстве в начале 2016 года .
Дифференцируемое программирование применяется при решении таких задач, как комбинирование глубокого обучения c физическими движками в робототехнике , расчёт электронных структур с использованием теории функционала плотности , дифференцируемая трассировка лучей , цифровая обработка изображений и .
Работа большинства дифференцируемых фреймворков программирования основана на построении в программе графа , содержащего поток управления и структуры данных . Выделяется две группы подходов — статические и динамические.
Подходы, основанные на статистическом, компилируемом графе используются в TensorFlow , Theano , и MXNet ; их преимущества раскрываются при использовании оптимизурующего компилятора , они легче масштабируются до размера больших систем, но их статический характер ограничивает интерактивность и типы программ, которые без особенных затрат могут созданы с их помощью (например, программы, использующие циклы или рекурсию ), также, стоит отметить, что подобные подходы затрудняют объяснение работы программы. . Набор инструментов компилятора для проверки концепции , называемый Miya использует подмножество программного языка Python в качестве фронтенда и поддерживает функции высшего порядка , рекурсию, а также производные высшего порядка.
Подходы, основанные на перегрузке операторов , динамическом графе используются в PyTorch и . Их динамический и интерактивный характер позволяет создавать большинство программ и аргументировать их работу с меньшими затратами. Но это приводит к большой нагрузке на интерпретатор (в частности, при использовании множества небольших операций), худшей масштабируемости, и уменьшению преимуществ использования оптимизирующего компилятора. Одним из исключений является пакет языка программирования Julia , который работает напрямую с промежуточным представлением кода Julia, позволяя оптимизировать его с помощью JIT-компилятора языка Julia.
Ограничение ранних подходов дифференцируемого программирования заключалось в том, что они позволяли дифференцировать только функции, написанные подходящим образом для соответствующего фреймворка, тем самым ограничивая взаимодействие с другими программами. Современные подходы решают данную проблему, позволяя конструировать граф с помощью синтаксиса языка программирования или кода промежуточного представления, тем самым позволяя дифференцировать произвольные функции.