Закрыть

Автомат диф: Что такое дифференциальный автомат

Фон автоматической дифференциации — MATLAB & Simulink

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

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

Автоматическое дифференцирование (также известное как autodiff , AD , или алгоритмический дифференциация ) — широко используемый инструмент в оптимизации. решает функция использует автоматическое дифференцирование по умолчанию в проблемно-ориентированной оптимизации для общие нелинейные целевые функции и ограничения; см. Автоматическое дифференцирование в Optimization Toolbox.

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

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

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

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

    трассировка .

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

Прямой режим

Рассмотрим задачу вычисления этой функции и ее градиента:

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

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

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

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

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

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

dfdx1=du6dx1=∂u6∂u−1+∂u6∂u5∂u5∂x1=∂u6∂u−1+∂u6∂u5∂u5∂u 4∂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 представляет производную выражения

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

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

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

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

Теория обратного режима также основана на цепном правиле, наряду с связанные сопряженные переменные, обозначенные чертой сверху. Сопряженная переменная для u i равно

u¯i=∂f∂ui.

С точки зрения вычислительного графа, каждая исходящая стрелка из переменной вносит вклад в соответствующую сопряженную переменную своим членом в цепном правиле. Для например, переменная u –1 имеет исходящий стрелки к двум переменным, u 1 и у

6 . График имеет связанный уравнение

∂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 и u 6 = u 5 u –1 , получаем

u¯−1=u¯12u−1+u¯6u5.

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

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

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

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

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

Подробнее см. Байдин, Перлмуттер, Радул и Сискинд [1] или Википедию. статья об автоматическом дифференцировании [2].

Автоматическое дифференцирование в Optimization Toolbox

Автоматическое дифференцирование (AD) применяется к решению

и prob2struct функции при следующих условиях:

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

  • Решатель, вызываемый solve , это fmincon , fminunc , fsolve или lsqnonlin .

  • Для задач оптимизации 'ObjectiveDerivative' и 'ConstraintDerivative' пара аргументов «имя-значение» для решить или prob2struct установлены в 'авто' (по умолчанию), 'автоматическая переадресация' или

    'автореверс' .

  • Для задач уравнения установлена ​​опция 'EquationDerivative' на 'авто' (по умолчанию), 'авто-вперед' или 'автореверс' .

При применении AD Поддерживаются все функции ограниченияОдно или несколько ограничений не поддерживаются
Целевая функция поддерживается AD используется для цели и ограничений AD используется только для цели
Целевая функция не поддерживается AD используется только для ограничений AD не используется

Когда эти условия не выполняются, решает оценки градиентов с помощью конечные разности и

prob2struct не создает градиенты в своих сгенерированные функциональные файлы.

Решатели выбирают следующий тип AD по умолчанию:

  • Для общей нелинейной целевой функции fmincon значения по умолчанию обратить AD для целевой функции. fmincon по умолчанию обратный AD для нелинейной функции ограничений, когда количество нелинейных ограничений меньше, чем количество переменных. В противном случае, fmincon по умолчанию перенаправляет AD для нелинейного ограничения функция.

  • Для общей нелинейной целевой функции fminunc значения по умолчанию чтобы обратить AD.

  • Для целевой функции метода наименьших квадратов fmincon и fminunc по умолчанию для пересылки AD для целевой функции. Для определения основанной на проблеме целевой функции наименьших квадратов см. Запись целевой функции для основанного на проблеме метода наименьших квадратов.

  • lsqnonlin по умолчанию пересылает AD, когда число элементов в целевом векторе больше или равно числу переменных. В противном случае lsqnonlin по умолчанию реверсирует AD.

  • fsolve по умолчанию пересылает AD, когда количество уравнений больше или равно числу переменных. В противном случае, fsolve по умолчанию реверс AD.

В настоящее время AD работает только для первых производных; это не относится ко второму или выше производные. Так, например, если вы хотите использовать аналитический гессиан для ускорения вашего оптимизации, вы не можете использовать решить напрямую, и вместо этого должны использовать подход, описанный в разделе «Производные предложения в проблемно-ориентированном рабочем процессе».

Ссылки

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

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

См. также

решить | prob2struct

См. также

  • Настройка оптимизации на основе проблем
  • Поддерживаемые операции для переменных и выражений оптимизации
  • Эффект автоматического дифференцирования в проблемно-ориентированной оптимизации

Вы щелкнули ссылку, соответствующую этой команде MATLAB:

Запустите команду, введя ее в командном окне MATLAB. Веб-браузеры не поддерживают команды MATLAB.

Выберите веб-сайт

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

Вы также можете выбрать веб-сайт из следующего списка:

Европа

Обратитесь в местный офис

Автоматическое дифференцирование, объяснение | by Chi-Feng Wang

Название изображения: Source

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

Как объяснялось в предыдущей серии, найдя частную производную функции потерь, мы знаем, насколько (и в каком направлении) мы должны скорректировать наши веса и смещения, чтобы уменьшить потери. В этой серии мы вручную рассчитали производную функции потери среднеквадратичной ошибки однонейронной нейронной сети.

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

Изображение 1: Функция стоимости в скалярной форме

Кроме того, поскольку автоматическое дифференцирование может вычислить частную производную выражения только в определенной точке, мы должны присвоить начальные значения каждой из переменных. Скажем: у=5; ш=2; х=1; и б=1.

Найдем производную функции!

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

Рисунок 2: Расчетный график для скалярной функции стоимости

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

Рисунок 3: Значения каждого узла

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *