Принцип автоматического дифференцирования (AutoDiff)

машинное обучение

1/ Преимущества и недостатки различных автоматических дифференцирований1

Важной задачей машинного обучения является вывод параметров для получения частной производной функции потерь для каждого параметра, а затем выполнение градиентного спуска.

Для частичного дифференцирования вы можете выбрать один из следующих вариантов: ручное дифференцирование, символьное дифференцирование, числовое дифференцирование, автодифференцирование в прямом и обратном режимах).

В пакете Flux от Джулии, как и в Tensorflow, используется обратное автоматическое дифференцирование.

ручная дифференциация: Ручная дифференциация станет очень утомительной и подверженной ошибкам для сложных функций.

символическая дифференциация: Используйте вычислительные графики для обработки. Однако для сложных функций граф вычислений будет очень огромным, что снижает производительность, а один из самых больших недостатков заключается в том, что символьное дифференцирование не может обрабатывать функции с произвольными кодировками.

Численное дифференцирование: Численное дифференцирование по формуле:

h'(x)=limxx0h(x)h(x0)xx0=limϵ0h(x0+ϵ)h(x0)ϵ\begin{aligned} h^{\prime}(x)&=\lim_{x\rightarrow x_0}\frac{h(x)-h(x_0)}{x-x_0}\\ &=\lim_{\epsilon\rightarrow 0}\frac{h(x_0+\epsilon)-h(x_0)}{\epsilon} \end{aligned}

Чтобы вычислить функциюf(x1,x2,,xn)f(x_1,x_2,\cdots,x_n)в какой-то момент оxix_iЧастную производную нужно вычислять только тогда, когдаϵ\epsilonкогда я был очень молодf(x1,x2,,xiϵ,,xn)f(x_1,x_2,\cdots,x_i-\epsilon,\cdots,x_n)наказанϵ\epsilonбизнес.

Однако недостатком численного дифференцирования является то, что результат не является точным, это приближение, и функция вызывается многократно.f(x)f(x)Много раз, при многих параметрах машинного обучения, оно становится неэффективным. Но поскольку численное дифференцирование выполнить легко, оно может быть полезным инструментом для проверки правильности других алгоритмов.

прямое автоматическое дифференцирование: Хотя ни символическое, ни числовое дифференцирование, но в некотором смысле прямое автоматическое дифференцирование представляет собой комбинацию символического и числового дифференцирования.

Прямая автоматическая дифференциация зависит отdual number, в видеa+bϵa+b\epsilona,ba,bдва - два действительных числа,ϵ\epsilonявляется бесконечно малым числом. Когда хранится двойное число, оно представляется парой чисел с плавающей запятой, например42+24ϵ42+24\epsilonиспользовать(42,0,24.0)(42,0,24.0)Выражать.

Основные операции для двойного номера следующие: (Примечаниеϵ2=0\epsilon^2=0)

λ(a+bϵ)=λa+λbϵ(a+bϵ)+(c+dϵ)=(a+c)+(b+d)ϵ(a+bϵ)×(c+dϵ)=ac+(ad+bd)ϵ+(bd)ϵ2=ac+(ad+bc)ϵ\begin{aligned} \lambda(a+b\epsilon)&=\lambda a+\lambda b\epsilon\\ (a+b\epsilon)+(c+d\epsilon)&=(a+c)+(b+d)\epsilon\\ (a+b\epsilon)\times(c+d\epsilon)&=ac+(ad+bd)\epsilon+(bd)\epsilon^2\\ &=ac+(ad+bc)\epsilon \end{aligned}

Важнее h(a+bϵ)=h(a)+b×h'(a)ϵh(a+b\epsilon)=h(a)+b\times h^{\prime}(a)\epsilon, поэтому, когда мы вычисляемh(a+ϵ)h(a+\epsilon), можно дать один разh(a)h(a)иh'(a)h^{\prime}(a).

если функцияf(x,y)=x2y+y+2f(x,y)=x^2y+y+2, мы хотим вычислить околоxxЧастная производная от , все, что нужно сделать, это вычислитьf(3+ϵ,4)f(3+\epsilon,4), получается двойное число42+24ϵ42+24\epsilon, то можно получитьf(3,4)=42f(3,4)=42и частная производнаяxf(3,4)=24\partial_xf(3,4)=24

Недостаток прямого автоматического дифференцирования заключается в том, что после однократного прохода по графику можно вычислить только частную производную одного параметра.Хотя результат является точным, при наличии нескольких параметров его необходимо пройти по графику много раз.

Обратное автоматическое дифференцирование: пройти по графику вперед, чтобы вычислить значение каждого узла, затем пройти по графику в обратном направлении второй раз, вычислив все частные производные.

Автодифф в обратном режиме основан на цепном правиле:fx=fni×nix\frac{\partial f}{\partial x}=\frac{\partial f}{\partial n_i}\times \frac{\partial n_i}{\partial x}.

Автоматическое дифференцирование полагает, что суть любого численного вычисления на самом деле представляет собой сериюКомбинации дифференцируемых операторов. Тогда мы можем предположить, что мы не можем найти производную этой функции, но после разборки функции на другие части части могут быть получены обычными методами вывода, и, наконец, каждая часть объединяется для получения окончательного результат.2