Я пытаюсь реализовать автоматическое дифференцирование для пакета статистики Python (проблемная формулировка подобна проблемным формулировкам оптимизации).
Вычислительный график сгенерирован с помощью перегрузки оператора и функций фабрики для операций как сумма (), exp (), и т.д. Я реализовал автоматическое дифференцирование для градиента с помощью обратного накопления. Однако я нашел реализующее автоматическое дифференцирование для второй производной (Гессиан) намного более трудный. Я знаю, как сделать отдельные 2-е частичные вычисления градиента, но я испытал затруднения, придумывающие интеллектуальный способ пересечь график и сделать накопления. Кто-либо знает о хороших статьях, которые дают алгоритмы для автоматического дифференцирования для вторых производных или библиотек с открытым исходным кодом, которые реализуют то же, что я могу попытаться извлечь уроки из?
Обычным методом аппроксимации гессиана в 3 измерениях является BFGS
Метод L-BFGS аналогичен.
Здесь вы можете найти исходный код L-BFGS (который вычисляет гессиан как промежуточный результат для решения ODE) на нескольких языках (C #, C ++, VBA и т. Д.), Но не на python. Я думаю, это непросто перевести.
Если вы собираетесь перевести алгоритм с другого языка, обратите особое внимание на числовые ошибки и проведите анализ чувствительности (вам нужно будет вычислить обратную матрицу Гессе)