Понимание автоматического дифференцирования более высокого порядка

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

Основная обратная AD очень проста и легка для понимания, но более продвинутый материал слишком абстрактен, слишком технический, и я не смог найти никаких хороших объяснений в Интернете (на самом деле мне потребовалось довольно много времени, чтобы разобраться с ним). понять, что базовая обратная AD даже существует.)

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

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

Я изучил библиотеку DiffSharp и заметил, что она использует что-то вроде прямого дифференцирования для вычисления гессиана. Запуская через отладчик, я действительно видел, что он на самом деле смешивает шаги вперед и назад за один прогон. Какие принципы лежат в основе этого механизма?

DiffSharp использует произведение якобианского вектора для вычисления гессиана для каждой переменной, которая представляет собой отображение R^m -> R^n. Как это возможно получить из исходного графика? Обратное AD — это отображение R -> R^n, откуда берутся дополнительные измерения?

Наконец, как работает вложенный AD?


person Marko Grdinic    schedule 10.12.2015    source источник


Ответы (2)


Я написал статью о edge_pushing. Сначала вы начинаете с вычислительного графика градиента. Под градиентом здесь я подразумеваю вычислительный график метода обратного градиента. Алгоритм edge_pushing затем просто применяет алгоритм обратного градиента к этому графу градиента, который даст вам гессиан. Подвох здесь в том, что он делает это разумно. В частности, пунктирные ребра — это искусственно добавленные ребра, представляющие нелинейное взаимодействие между двумя узлами (оба узла являются входными данными нелинейной функции, расположенной выше по графику). Нелинейные пунктирные ребра позволяют легко визуализировать, где возникают основные затраты на вычисление этого обратного градиента на графике градиента и как лучше всего накапливать полную производную. Это помогает?

person Robert Mansel Gower    schedule 28.03.2017

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

Все еще не уверен насчет edge_pushing, но я не думаю, что это имеет большое значение для нейронных сетей.

person Marko Grdinic    schedule 07.01.2016