Гессиан Vector-Product трюк | OTUS

Гессиан Vector-Product трюк

DS_Deep_21.08_site.png

В некоторых алгоритмах машинного обучения возникает необходимость в расчёте матрицы вторых производных функции Снимок экрана 2018-08-21 в 16.47.49.pngБудем называть её «гессиан»: Снимок экрана 2018-08-21 в 16.48.37.pngПримером может быть метод Ньютона для оптимизации. Зачастую функция может зависеть от миллионов переменных. Это частый случай в глубоком обучении, где оптимизируемая функция зависит от параметров модели, и этих параметров может быть очень много. Прямой расчёт гессиана для такой функции был бы очень сложен, поскольку даже объём памяти, требуемый для хранения элементов гессиана, уже растёт как квадрат числа переменных.

Вместе с тем, далеко не всегда необходима сама матрица гессиана. Иногда нужно лишь произведение этой матрицы на какой-то вектор: Hv (например, в методе сопряжённых градиентов для оптимизации). В этом случае можно избежать вычисления всего гессиана и рассчитать всего лишь 1 производную по направлению.

Будем обозначать градиент функции Снимок экрана 2018-08-21 в 16.50.54.pngи получаем:

Снимок экрана 2018-08-21 в 16.52.43.pngРассмотрим одну компоненту этого вектора:

Снимок экрана 2018-08-21 в 16.53.11.pngКак видно, это всего лишь производная по направлению для функции Снимок экрана 2018-08-21 в 16.54.34.pngИ её легко сосчитать с помощью конечных разностей для произвольной функции F(x):Снимок экрана 2018-08-21 в 16.55.14.pngЗапишем итоговую формулу:Формула 2.png

Дополнительные материалы: 1. Hessian Free Optimization; 2. Fast Exact Multiplication by the Hessian; 3. Посмотреть формулы из заметки можно здесь.

Есть вопрос? Напишите в комментариях!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто