Скорость обучения и оптимизаторы
Урок разбирает скорость обучения и идеи оптимизаторов SGD, momentum и Adam.
Оптимизатор — это правило, по которому веса обновляются на основе градиента. Простейший — SGD; более умные добавляют «инерцию» и подстройку шага.
Скорость обучения решает судьбу обучения
Learning rate (lr) — самый важный гиперпараметр. Покажем на минимизации f(w) = (w - 3)^2, как три разных lr ведут себя после 15 шагов.
def f(w): return (w - 3) ** 2
def grad(w): return 2 * (w - 3)
for lr in [0.1, 0.9, 1.01]:
w = 0.0
for _ in range(15):
w = w - lr * grad(w)
print(f"lr={lr}: после 15 шагов w={w:.3f}, f(w)={f(w):.3f}")
Вывод:
lr=0.1: после 15 шагов w=2.894, f(w)=0.011 lr=0.9: после 15 шагов w=3.106, f(w)=0.011 lr=1.01: после 15 шагов w=7.038, f(w)=16.302
С lr=0.1 параметр аккуратно подползает к 3. С lr=0.9 он тоже сходится, но колеблется вокруг цели. А с lr=1.01 шаги слишком велики — параметр расходится и улетает от минимума. Эта грань между сходимостью и расхождением и есть главная головная боль настройки.
SGD: стохастический градиентный спуск
Базовый оптимизатор обновляет веса по градиенту на одном батче: w = w - lr * grad. «Стохастический» — потому что градиент считается не по всем данным сразу, а по случайному батчу, что вносит шум, но ускоряет работу.
Momentum: добавляем инерцию
Чистый SGD буксует в узких «оврагах» функции потерь, дёргаясь из стороны в сторону. Momentum накапливает скорость: к шагу добавляется доля предыдущего шага, как у катящегося с горы мяча. Это сглаживает колебания и ускоряет движение по пологим участкам.
Adam: адаптивный шаг для каждого веса
Adam — сегодня дефолтный выбор. Он сочетает momentum с индивидуальной подстройкой шага для каждого веса: редко обновляемые веса получают больший шаг, часто меняющиеся — меньший. Adam обычно сходится быстро и устойчиво почти без ручной настройки lr.
| Оптимизатор | Идея |
| SGD | шаг строго по текущему градиенту |
| SGD + momentum | накапливает инерцию, сглаживает путь |
| Adam | momentum + свой адаптивный шаг на каждый вес |
Расписание скорости обучения
Часто один фиксированный lr — не лучший выбор на всё обучение. В начале выгоден крупный шаг, чтобы быстро добраться до окрестности минимума, а ближе к концу — мелкий, чтобы аккуратно осесть на дно и не скакать вокруг него. Поэтому применяют расписания (learning rate schedule): step decay уменьшает lr в несколько раз через заданное число эпох, а cosine annealing плавно снижает его по косинусу. Отдельный приём — warmup: первые несколько сотен шагов lr плавно поднимают от нуля, чтобы не сорвать обучение на ещё «холодных» случайных весах. Эти приёмы особенно важны при обучении больших трансформеров, где неудачный lr на старте легко уводит обучение в расходимость.
Практический совет: даже с Adam стоит подобрать базовый lr. Удобный приём — запустить короткий прогон с постепенно растущим lr и посмотреть, при каком значении потеря падает быстрее всего, а где начинает расти; рабочий lr берут чуть левее точки разворота.
Итог
- Learning rate балансирует на грани сходимости и расхождения.
- Momentum добавляет инерцию и сглаживает спуск.
- Adam адаптирует шаг под каждый вес и работает «из коробки».