Оптимизаторы и backpropagation

Урок про то, как сеть обновляет веса: градиентный спуск, backpropagation, SGD и Adam.

Оптимизатор — это алгоритм, который по градиенту loss корректирует веса сети, шаг за шагом уменьшая ошибку.

Loss говорит «насколько плохо», градиент — «в какую сторону лучше», а оптимизатор делает сам шаг. Без него модель не училась бы. Разберём механику и два главных оптимизатора.

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

Базовая идея: вес меняем против направления градиента, умноженного на скорость обучения (learning rate). Сэмулируем спуск к минимуму функции f(x)=(x-3)^2 — код запускается:

# минимизируем f(x) = (x-3)^2, минимум в x=3
x = 0.0
lr = 0.1
for step in range(20):
    grad = 2 * (x - 3)   # производная f
    x = x - lr * grad    # шаг против градиента
print("x после 20 шагов:", round(x, 4))

Вывод:

x после 20 шагов: 2.9654

Параметр x сполз почти к 3 — именно так оптимизатор сползает к весам с минимальным loss.

Backpropagation

В сети из многих слоёв градиент по каждому весу считают методом обратного распространения ошибки (backprop): ошибка с выхода «протекает» назад по слоям через цепное правило производной. TF делает это автоматически — вам не нужно выводить формулы вручную.

forward:  вход -> слой1 -> слой2 -> выход -> loss
backward: вход <- grad1 <- grad2 <- grad_выход <- loss
                (градиенты текут назад через слои)

SGD против Adam

ОптимизаторИдеяКогда
SGDпростой шаг против градиентабазовый, требует тонкой настройки lr
SGD + momentumучитывает инерцию прошлых шаговустойчивее, быстрее
Adamадаптивный lr для каждого весахороший выбор по умолчанию

В Keras (требует TF):

from tensorflow.keras import optimizers

model.compile(optimizer=optimizers.Adam(learning_rate=0.001), loss="mse")
# или просто строкой:
model.compile(optimizer="adam", loss="mse")

Как работает под капотом

Adam хранит для каждого веса два «средних»: момент градиента (как импульс) и момент его квадрата (масштаб). Деля шаг на масштаб, он автоматически делает большие шаги там, где градиенты малы, и маленькие — где велики. Поэтому Adam обычно сходится быстрее SGD «из коробки» и менее чувствителен к выбору learning rate.

Частые ошибки

  • Слишком большой learning rate. Шаги «перепрыгивают» минимум, loss скачет или уходит в бесконечность (NaN).
  • Слишком маленький lr. Обучение ползёт мучительно медленно.
  • Считать, что Adam всегда лучше. Для некоторых задач хорошо настроенный SGD+momentum обобщает лучше.

Итог

  • Оптимизатор обновляет веса по градиенту loss; learning rate задаёт размер шага.
  • Backpropagation автоматически считает градиенты, проводя ошибку назад через слои.
  • SGD — простой; Adam — адаптивный и хороший выбор по умолчанию.
  • Слишком большой lr ломает обучение (NaN), слишком малый — замедляет.
Проверьте себя
1. Что делает оптимизатор?
AИзмеряет ошибку
BКорректирует веса по градиенту loss
CСчитает активацию
DЗагружает данные
2. Что такое backpropagation?
AПрямой проход данных
BМетод подсчёта градиентов проведением ошибки назад через слои
CСпособ загрузки данных
DФункция активации
3. Что обычно случается при слишком большом learning rate?
AОбучение идёт идеально
BLoss скачет или уходит в NaN, минимум перепрыгивается
CМодель не использует bias
DActivation отключается