Что значит «обучить» сеть

Урок объясняет, что обучение сети — это поиск весов, при которых её ошибка минимальна.

Обучить сеть — значит подобрать такие значения весов и смещений, при которых предсказания сети как можно ближе к правильным ответам на обучающих данных.

Сеть — это функция с настройками

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)честная финальная оценка на невиданных данных

Главная цель — не выучить обучающие примеры наизусть, а обобщить: хорошо работать на данных, которых сеть не видела. Об этом — в разделе про переобучение.

Цикл обучения в двух словах

  1. Forward pass: посчитать предсказания на батче данных.
  2. Посчитать потерю — насколько предсказания далеки от истины.
  3. Посчитать градиент потери по каждому весу (backprop).
  4. Сдвинуть веса в сторону уменьшения потери (градиентный спуск).
  5. Повторять много раз.

Эти пять шагов — универсальный скелет обучения любой нейросети, от нашей сети для XOR до многомиллиардных языковых моделей. Меняются масштаб, архитектура и оптимизатор, но цикл остаётся тем же. В этом курсе мы реализуем каждый его шаг вручную, а в реальном коде фреймворк берёт рутину на себя.

Чем это отличается от обычного программирования

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

Итог

  • Веса — настройки сети; обучение их подбирает.
  • Функция потерь измеряет ошибку одним числом; обучение её минимизирует.
  • Цель — обобщение на новые данные, а не зубрёжка обучающих примеров.
Проверьте себя
1. Что технически означает «обучить нейросеть»?
AЗагрузить в неё побольше данных
BПодобрать веса, минимизирующие функцию потерь
CДобавить больше слоёв
DЗапустить forward pass много раз
2. Что показывает функция потерь?
AСкорость работы сети
BОдним числом — насколько плохи предсказания сети
CЧисло параметров
DКакой класс предсказан
3. Зачем нужна тестовая выборка?
AЧтобы ускорить обучение
BДля честной оценки качества на данных, которых сеть не видела
CЧтобы подбирать веса
DДля увеличения объёма train
Поддержать проект