Что такое momentum в контексте оптимизации нейронных сетей?

«Что такое momentum в контексте оптимизации нейронных сетей?» — вопрос из категории Нейронные сети и Deep Learning, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Momentum (импульс) — это метод ускорения градиентного спуска, который добавляет инерцию процессу обновления весов. Вместо того чтобы двигаться строго по текущему градиенту, оптимизатор учитывает направление предыдущих обновлений, что помогает быстрее проходить плато и сглаживает колебания в узких оврагах функции потерь.

Механизм работы: Обновление весов происходит по формуле, которая включает в себя "накопленную скорость":

# Псевдокод обновления с импульсом
v = beta * v_prev + learning_rate * gradient
weights = weights - v

Где beta — коэффициент затухания импульса (обычно 0.9 или 0.99), а v_prev — скорость с предыдущего шага.

Практическое применение: В PyTorch импульс используется по умолчанию во многих оптимизаторах. Например, в SGD:

import torch.optim as optim

optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

В Adam и его вариантах импульс интегрирован в алгоритм через вычисление экспоненциально взвешенного среднего градиентов (первый момент).

Почему это работает:

  1. Ускорение на плато: На участках с малым, но постоянным градиентом накопленная скорость увеличивается, ускоряя движение.
  2. Подавление шума: Противоположные по знаку шумовые градиенты частично компенсируют друг друга в накопленной скорости.
  3. Прохождение оврагов: Помогает двигаться вдоль дна узкого оврага, а не осциллировать от склона к склону.