exponenta event banner

Фон автоматического дифференцирования

Что такое автоматическая дифференциация?

Автоматическая дифференциация (также известная как autodiff, AD или алгоритмическая дифференциация) - широко используемый инструмент для глубокого обучения. См. Книги по автоматическому различению. Это особенно полезно для создания и обучения сложных моделей глубокого обучения без необходимости вычисления производных вручную для оптимизации. Примеры создания и настройки моделей глубокого обучения, циклов обучения и функций потери см. в разделе Определение пользовательских циклов обучения, функций потери и сетей.

Автоматическое дифференцирование - это набор методик численной оценки производных (градиентов). Метод использует символические правила дифференцирования, которые точнее конечных аппроксимаций разностей. В отличие от чисто символического подхода, автоматическое дифференцирование вычисляет выражения численно на ранних этапах вычислений, а не выполняет большие символьные вычисления. Другими словами, автоматическая дифференциация оценивает производные при определенных числовых значениях; он не создает символические выражения для производных.

  • Прямой режим оценивает числовую производную, выполняя элементарные производные операции одновременно с операциями оценки самой функции. Как подробно описано в следующем разделе, программное обеспечение выполняет эти вычисления на вычислительном графике.

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

Как отметили многие исследователи (например, Байдин, Перлмуттер, Радул и Сискинд [1]), для скалярной функции многих переменных обратный режим вычисляет градиент более эффективно, чем прямой режим. Поскольку функция потери глубокого обучения является скалярной функцией всех весов, функция автоматического дифференцирования Deep Learning Toolbox™ использует обратный режим.

Форвардный режим

Рассмотрим проблему оценки этой функции и её градиента:

f (x) = x1exp (12 (x12 + x22)).

Автоматическая дифференциация работает в определенных точках. В этом случае возьмем x1 = 2, x2 = 1/2.

Следующий вычислительный граф кодирует вычисление функции f (x).

Чтобы вычислить градиент f (x) с помощью прямого режима, вычислите тот же график в том же направлении, но измените вычисление на основе элементарных правил дифференциации. Для дальнейшего упрощения вычисления необходимо заполнить значение производной каждого подэкспрессии. Чтобы вычислить весь градиент, нужно пройти график дважды, один раз для частной производной относительно каждой независимой переменной. Каждое вложенное выражение в правиле цепочки имеет числовое значение, поэтому всё выражение имеет тот же тип графа вычисления, что и сама функция.

Вычисление представляет собой повторное применение правила цепочки. В этом примере производная f относительно x1 расширяется до этого выражения:

dfdx1=du6dx1=∂u6∂u−1+∂u6∂u5∂u5∂x1=∂u6∂u−1+∂u6∂u5∂u5∂u4∂u4∂x1=∂u6∂u−1+∂u6∂u5∂u5∂u4∂u4∂u3∂u3∂x1=∂u6∂u−1+∂u6∂u5∂u5∂u4∂u4∂u3∂u3∂u1∂u1∂x1.

Пусть u˙i представляет производную выражения ui относительно x1. Используя вычисленные значения ui из вычисления функции, вычисляется частная производная f относительно x1, как показано на следующем рисунке. Обратите внимание, что все значения u˙i становятся доступными при прохождении графика сверху вниз.

Чтобы вычислить частную производную относительно x2, нужно пройти аналогичный вычислительный график. Поэтому при вычислении градиента функции число проходов по графам совпадает с числом переменных. Этот процесс слишком медленный для типичных приложений глубокого обучения, которые имеют тысячи или миллионы переменных.

Обратный режим

Обратный режим использует одно прямое прохождение вычислительного графа для настройки трассировки. Затем вычисляет весь градиент функции в одном прохождении графа в противоположном направлении. Для приложений глубокого обучения этот режим намного эффективнее.

Теория, лежащая в основе обратного режима, также основана на цепном правиле вместе со связанными смежными переменными, обозначаемыми overbar. Смежная переменная для ui

u¯i=∂f∂ui.

В терминах вычислительного графа каждая исходящая стрелка из переменной вносит вклад в соответствующую смежную переменную по её члену в правиле цепочки. Например, переменная u-1 имеет исходящие стрелки для двух переменных, u1 и u6. Граф имеет связанное уравнение

∂f∂u−1=∂f∂u1∂u1∂u−1+∂f∂u6∂u6∂u−1=u¯1∂u1∂u−1+u¯6∂u6∂u−1.

В этом вычислении, напоминая, что u1 = u − 12 и u6 = u5u-1, вы получаете

u pu 1 = u vet12u 1 + u pu6u5.

Во время прямого прохождения графика программное обеспечение вычисляет промежуточные переменные ui. Во время обратного обхода, начиная с начального значения u¯6=∂f∂f=1, вычисление обратного режима получает смежные значения для всех переменных. Следовательно, обратный режим вычисляет градиент только за одно вычисление, экономя много времени по сравнению с прямым режимом.

На следующем рисунке показано вычисление градиента в обратном режиме для функции

f (x) = x1exp (12 (x12 + x22)).

Опять же, вычисление занимает x1 = 2, x2 = 1/2. Вычисление обратного режима основано на значениях ui, которые получаются во время вычисления функции на исходном вычислительном графике. В правой части рисунка вычисленные значения смежных переменных появляются рядом с именами смежных переменных, используя формулы из левой части рисунка.

Конечные значения градиента отображаются как u¯0=∂f∂u0=∂f∂x2 и u¯−1=∂f∂u−1=∂f∂x1.

Для получения более подробной информации см. Baydin, Pearlmutter, Radul и Siskind [1] или статью Википедии об автоматической дифференциации [2].

Ссылки

[1] Байдин, А. Г., Б. А. Перлмуттер, А. А. Радул и Дж. М. Сискинд. «Автоматическая дифференциация в машинном обучении: опрос». Журнал исследований машинного обучения, 18 (153), 2018, стр. 1-43. Доступно по адресу https://arxiv.org/abs/1502.05767.

[2] Автоматическое дифференцирование. Википедия. Доступно по адресу https://en.wikipedia.org/wiki/Automatic_differentiation.

См. также

| | |

Связанные темы