Недавно только что закончил свой базовый реверсивный режим AD для машинного обучения, я обнаружил, что хочу узнать об этой области, но я наткнулся на стену твердости с методами более высокого порядка.
Основная обратная AD очень проста и легка для понимания, но более продвинутый материал слишком абстрактен, слишком технический, и я не смог найти никаких хороших объяснений в Интернете (на самом деле мне потребовалось довольно много времени, чтобы разобраться с ним). понять, что базовая обратная AD даже существует.)
В принципе, я понимаю, как брать вторые производные в контексте исчисления, но я не понимаю, как преобразовать обратный граф AD, чтобы получить производные второго порядка.
В таком алгоритме, как проталкивание границ, что означают эти пунктирные соединения?
Я изучил библиотеку DiffSharp и заметил, что она использует что-то вроде прямого дифференцирования для вычисления гессиана. Запуская через отладчик, я действительно видел, что он на самом деле смешивает шаги вперед и назад за один прогон. Какие принципы лежат в основе этого механизма?
DiffSharp использует произведение якобианского вектора для вычисления гессиана для каждой переменной, которая представляет собой отображение R^m -> R^n. Как это возможно получить из исходного графика? Обратное AD — это отображение R -> R^n, откуда берутся дополнительные измерения?
Наконец, как работает вложенный AD?