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