Дифференцируемое программирование - это парадигма программирования, в которой числовая компьютерная программа могут быть различимы повсюду с помощью автоматического различения. Это дает возможность оптимизации параметров программы на основе градиента, часто с помощью градиентного спуска. Дифференцируемое программирование нашло применение в самых разных областях, в частности научные вычисления и искусственный интеллект.
Большинство дифференцируемых сред программирования работают путем построения графа, содержащего поток управления и структуры данных в программе. Более ранние попытки обычно делятся на две группы:
Оба этих ранних подхода способны различать только код, написанный на подходящий способ для фреймворка, ограничивающий их взаимодействие с другими программами.
Более свежие пакеты на языке программирования Julia - Zygote, языке программирования Swift - Swift для TensorFlow, и новый язык программирования - Myia, решает проблемы, с которыми сталкивались ранее попытки, рассматривая синтаксис языка как граф. Промежуточное представление произвольного кода может быть затем напрямую дифференцировано, оптимизировано и скомпилировано.
Дифференцируемое программирование применялось в таких областях, как как сочетание глубокого обучения с физическими механизмами в робототехнике, дифференцируемой трассировкой лучей, обработкой изображений и вероятностное программирование.