Автоматическое дифференцирование (АД) в программировании — это автоматическое преобразование программы, вычисляющей функцию, в программу, вычисляющую производную этой функции по заданному множеству числовых параметров, иначе говоря, её градиент. 1
Алгоритм АД основан на идее обратного распространения ошибки, цепном правиле дифференцирования и аналитических формулах вычисления производных по различным операциям преобразования. 2
Основная идея алгоритма: 2
- Сначала вычисляется значение производной самого последнего операнда относительно значения функции ошибки. 2 Для значения функции ошибки оно равно 1, так как это производная функции ошибки относительно самой себя. 2
- Далее это значение производной используется для вычисления производной операндов, которые участвовали в создании значения функции ошибки. 2 Это происходит по цепному правилу, и для этого нужно знать, как вычисляется производная для каждой операции аналитически. 2
- Далее алгоритм повторяется для родительских узлов, до тех пор, пока не будут обработаны все узлы в графе. 2
Существует два типа дифференцирования: прямое и обратное: 4
- Прямое дифференцирование вычисляет производные всех вершин по всем входам, что может быть неэффективно. 4
- Обратное дифференцирование вычисляет производную выходной вершины по всем вершинам в обратном порядке, что требует меньше вычислений. 4