Что значит «обучить» сеть
Урок объясняет, что обучение сети — это поиск весов, при которых её ошибка минимальна.
Обучить сеть — значит подобрать такие значения весов и смещений, при которых предсказания сети как можно ближе к правильным ответам на обучающих данных.
Сеть — это функция с настройками
Forward pass превращает вход в выход с помощью весов. Сами веса — это «настройки» функции. При случайных весах сеть выдаёт чепуху. Обучение — это процесс настройки этих ручек так, чтобы выход совпадал с желаемым. Поскольку весов могут быть миллионы, крутить их вручную невозможно — нужен автоматический способ.
Функция потерь — мера ошибки
Чтобы что-то улучшать, надо это измерять. Функция потерь (loss) — одно число, показывающее, насколько плохо сеть справляется. Чем меньше потеря, тем лучше предсказания. Обучение — это минимизация функции потерь по весам.
Посмотрим на простейшую потерю — квадрат ошибки одного предсказания — и как она зависит от веса в игрушечной модели y = w * x.
# Игрушечная модель: y = w * x. Хотим, чтобы при x=2 выход был 6 (значит w=3).
x_train, y_train = 2.0, 6.0
def loss(w):
pred = w * x_train
return (pred - y_train) ** 2
print("w потеря")
for w in [0, 1, 2, 3, 4, 5]:
print(f"{w} {loss(w):>6.1f}")
print("Минимум потери — при w = 3, там предсказание точное.")
Вывод:
w потеря 0 36.0 1 16.0 2 4.0 3 0.0 4 4.0 5 16.0 Минимум потери — при w = 3, там предсказание точное.
Потеря — это «чаша»: она минимальна в правильной точке (w = 3) и растёт в обе стороны. Задача обучения — скатиться на дно этой чаши. Для одного веса это видно глазами; для миллионов весов чашу не нарисуешь, но математика остаётся той же.
Обучающая, валидационная и тестовая выборки
| Выборка | Зачем |
| обучающая (train) | по ней подбираются веса |
| валидационная (validation) | настройка гиперпараметров, контроль переобучения |
| тестовая (test) | честная финальная оценка на невиданных данных |
Главная цель — не выучить обучающие примеры наизусть, а обобщить: хорошо работать на данных, которых сеть не видела. Об этом — в разделе про переобучение.
Цикл обучения в двух словах
- Forward pass: посчитать предсказания на батче данных.
- Посчитать потерю — насколько предсказания далеки от истины.
- Посчитать градиент потери по каждому весу (backprop).
- Сдвинуть веса в сторону уменьшения потери (градиентный спуск).
- Повторять много раз.
Эти пять шагов — универсальный скелет обучения любой нейросети, от нашей сети для XOR до многомиллиардных языковых моделей. Меняются масштаб, архитектура и оптимизатор, но цикл остаётся тем же. В этом курсе мы реализуем каждый его шаг вручную, а в реальном коде фреймворк берёт рутину на себя.
Чем это отличается от обычного программирования
В классическом программировании человек пишет правила: «если письмо содержит слово X, это спам». В обучении мы не пишем правила — мы задаём цель (минимизировать потерю) и даём примеры, а правила (веса) сеть выводит сама. Это переворачивает процесс: вместо «придумай алгоритм» становится «собери хорошие данные и правильно поставь задачу». Поэтому в глубоком обучении качество и количество данных часто важнее, чем хитрость архитектуры: сеть выучит ровно то, что есть в данных, — со всеми их закономерностями и, увы, ошибками.
Итог
- Веса — настройки сети; обучение их подбирает.
- Функция потерь измеряет ошибку одним числом; обучение её минимизирует.
- Цель — обобщение на новые данные, а не зубрёжка обучающих примеров.