Насколько быстро происходит автоматическое дифференцирование? - PullRequest
0 голосов
/ 08 июля 2019

Несмотря на то, что в Интернете, по-видимому, имеется много ссылок, в которых сравниваются методы и структуры автоматического дифференцирования, я не могу найти ничего о том, как следует ожидать автоматического дифференцирования по сравнению с рукописной производной оценкой.

Моя конкретная ситуация: я делаю градиентное снижение скалярной функции стоимости, с несколькими тысячами переменных и значительной (> 99%) редкостью.У меня есть функция C ++ для расчета этой стоимости.Я также вручную вывел и реализовал функции для вычисления градиента и гессиана.(Функция стоимости и ее производные никоим образом не настроены, это просто прямая реализация.) Типичное снижение до минимума занимает около десяти секунд.

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

Я был удивлен, насколько медленнее было AD, но потом понял, что на самом деле не знаю, насколько быстрым он должен быть.Я не ищу столько слов «Как ускорить мои вычисления?», Сколько «Чего мне ожидать?»

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

...