# Градиентный спуск

> Градиентный спуск для собеседования: шаг, learning rate, локальные минимумы, batch/SGD и почему алгоритм обучает от регрессии до нейросетей.

Раздел: [Основы машинного обучения](https://ml-book.com/s/ml-basics/) · Страница темы: https://ml-book.com/t/gradient-descent/ · Обновлено: 2026-09-16 · Источник: ml-book.com, учебник делается сообществом

## Интуиция: спуск с горы в тумане

Представь, что ты стоишь на склоне горы в густом тумане и хочешь спуститься в долину. Карты нет, видно только землю под ногами. Разумная стратегия: нащупать, в какую сторону склон уходит вниз круче всего, сделать шаг туда — и повторять, пока не окажешься в низине.

В машинном обучении «гора» — это поверхность функции потерь (loss function) L(θ): каждой комбинации параметров модели θ соответствует своя высота — величина ошибки. «Нащупать склон» позволяет производная: она говорит, как изменится лосс при малом изменении параметра. Для многих параметров таких производных много, и вектор из них называется градиентом (gradient) ∇L — он указывает направление *наискорейшего роста* функции. Значит, чтобы спускаться, идти надо против него.

## Как это работает

Весь алгоритм — одна строка, повторяемая в цикле:

`θ ← θ − η·∇L(θ)`

Здесь η (эта) — скорость обучения (learning rate): множитель, задающий длину шага. Минус — потому что градиент смотрит вверх, а мы идём вниз. Подбор η — главный практический вопрос:

- **Слишком маленький** — спуск верный, но мучительно медленный: тысячи шагов там, где хватило бы десятков.
- **Умеренный** — быстрое и стабильное приближение к минимуму.
- **Слишком большой** — шаг перелетает через долину на противоположный склон, ошибка начинает расти, и процесс расходится (divergence): лосс улетает в бесконечность.

> **💡 Ключевая мысль**
>
> Градиент — это направление наискорейшего роста лосса, поэтому шаг делается со знаком минус. Всё остальное в оптимизации — надстройки над этой строчкой.

> 🎛 Интерактивная визуализация — на странице темы: https://ml-book.com/t/gradient-descent/

Проведи три эксперимента: 1) η ≈ 0.05 — шарик ползёт и застревает в ближайшей долине; 2) η ≈ 0.3–1 — шаги перепрыгивают мелкие ямы и находят долину поглубже; 3) η > 7 — каждый шаг закидывает шарик всё выше, лосс растёт: это и есть расходимость.

## Локальные минимумы и сёдла

Спуск гарантированно находит *глобальный* минимум только у выпуклых (convex) функций — как у MSE в [линейной регрессии](https://ml-book.com/t/linear-regression/). У нейросетей поверхность лосса изрезана: есть локальные минимумы (local minima) — долины, из которых чисто градиентным шагом не выбраться, и седловые точки (saddle points) — места, где градиент почти нулевой, но это не минимум: по одним направлениям функция растёт, по другим убывает. В высоких размерностях сёдла встречаются гораздо чаще локальных минимумов и именно они тормозят обучение. На практике помогают шум стохастического градиента, момент и адаптивные методы из темы [про оптимизаторы](https://ml-book.com/t/optimizers/).

## SGD, batch и mini-batch

Честный градиент считается по *всему* датасету (batch gradient descent) — точно, но дорого: один шаг требует прохода по миллионам примеров. Другая крайность — стохастический градиентный спуск (SGD, stochastic gradient descent): градиент оценивается по одному случайному примеру. Шаги получаются шумными, зато очень дешёвыми, а шум иногда даже полезен — помогает выскакивать из плохих локальных минимумов.

Индустриальный стандарт — компромисс: **mini-batch** градиентный спуск, где градиент усредняется по небольшой пачке примеров (обычно 32–1024). Это одновременно снижает шум оценки и отлично ложится на параллелизм GPU. Когда в статьях пишут «SGD», почти всегда имеют в виду именно mini-batch вариант. Двигатель обучения глубоких сетей — он же: [backpropagation](https://ml-book.com/t/backprop/) лишь эффективно вычисляет градиент, а шаг делает всё тот же спуск.

> **⚠️ Подводный камень**
>
> «Лосс перестал падать» не означает «learning rate слишком мал». Если лосс скачет вверх-вниз или растёт — η, наоборот, велик. Диагностируй по форме кривой лосса: плавное, но медленное падение — можно увеличить η; пила и взрывы — уменьшить; NaN в лоссе — почти всегда расходимость от слишком большого шага.

> **🎤 На собеседовании**
>
> - «Почему шаг делается против градиента?» — градиент указывает направление наискорейшего роста функции, а мы минимизируем.
> - «Что будет при слишком большом/маленьком learning rate?» — расходимость или осцилляции / медленная сходимость и застревание. Идеальный ответ упоминает расписание (learning rate schedule): начать больше, к концу уменьшать.
> - «Чем SGD лучше полного batch-градиента?» — шаг в тысячи раз дешевле, шум помогает исследовать поверхность; сходимость по числу шагов хуже, но по времени — быстрее.
> - «Почему нельзя просто решить ∇L = 0 аналитически?» — для нейросетей замкнутой формы решения нет, уравнения нелинейны по миллиардам параметров.

## Связанные темы

- [Линейная регрессия](https://ml-book.com/t/linear-regression/)
- [Логистическая регрессия и классификация](https://ml-book.com/t/logistic-regression/)
- [Оптимизаторы: SGD, Momentum, Adam](https://ml-book.com/t/optimizers/)
- [Обратное распространение ошибки](https://ml-book.com/t/backprop/)

---

Интерактив, тест из 12 вопросов и карточки терминов — на странице темы: https://ml-book.com/t/gradient-descent/
Весь учебник в markdown: https://ml-book.com/llms-full.txt · Оглавление для агентов: https://ml-book.com/llms.txt
