Стохастический градиентный спуск (Stochastic Gradient Descent, SGD)
Оптимизационный алгоритм, широко применяемый в машинном обучении и нейронных сетях для минимизации функции потерь путём итеративного обновления параметров модели на основе случайных подвыборок (мини‑батчей) обучающих данных.
Суть метода заключается в том, что вместо вычисления градиента функции потерь по всему набору данных (как в классическом градиентном спуске) на каждом шаге используется оценка градиента, полученная по небольшому случайному фрагменту данных. Это существенно снижает вычислительные затраты и ускоряет сходимость, особенно на больших датасетах.
Аналогия из бытового мира
Представьте, что вы пытаетесь найти самое глубокое место в обширной, неровной долине, но видите только небольшой участок вокруг себя. Вместо того чтобы медленно обходить всю долину, вы делаете шаги в направлении, где местность кажется наиболее крутой вниз, периодически меняя точку обзора. Так вы быстрее приблизитесь к цели, хотя и не будете точно знать, достигли ли самой глубокой точки, пока не проверите окрестности более детально.
Исторический контекст
Идея стохастической оптимизации восходит к середине XX века. В 1951 году Герберт Робинс и Саттон Монро предложили стохастический алгоритм аппроксимации, заложивший основы стохастического градиентного спуска. В контексте машинного обучения метод получил широкое распространение с развитием глубоких нейронных сетей и больших датасетов в 2000–2010‑х годах, когда вычислительные ресурсы стали позволять эффективно обучать модели на огромных объёмах данных.
Смежные понятия и отличия
- Градиентный спуск (GD) — классический метод, где градиент вычисляется по всему набору данных. Более точен, но вычислительно затратен на больших датасетах.
- Мини‑батч градиентный спуск — промежуточный вариант, где градиент считается по небольшим фиксированным подмножествам данных. Стохастический градиентный спуск можно считать частным случаем мини‑батч спуска с размером батча равным 1 (или очень малым).
- Адаптивные методы оптимизации (Adam, RMSprop и др.) — развивают идею SGD, добавляя адаптивные скорости обучения для разных параметров, что часто ускоряет сходимость.
Примеры использования
- обучение глубоких свёрточных нейронных сетей (CNN) для задач компьютерного зрения (например, ResNet, VGG);
- обучение рекуррентных нейронных сетей (RNN) и трансформеров для обработки естественного языка (например, BERT, GPT);
- оптимизация параметров в рекомендательных системах и задачах ранжирования;
- реализация в популярных фреймворках: в PyTorch —
torch.optim.SGD, в TensorFlow/Keras —tf.keras.optimizers.SGD.
На практике SGD часто используется с дополнительными техниками, такими как:
- momentum (импульс) — учитывает предыдущие обновления для сглаживания траектории спуска;
- адаптивная скорость обучения — динамически корректирует шаг обучения;
- регуляризация (например, L2‑регуляризация) — предотвращает переобучение.
