Проблема урокаВ уроке 1.4.1 мы увидели, что модель — это правило с параметрами: она получает вход x и выдаёт прогноз ŷ. Но откуда берутся подходящие параметры? Почему одна версия модели ошибается сильнее другой? В этом уроке разберём механизм обучения: модель делает прогноз, функция потерь оценивает ошибку, а алгоритм оптимизации изменяет параметры.
Что уже известноВы уже знаете, что такое признаки, целевая переменная, обучающая/проверочная/тестовая выборки (1.2.1–1.2.4), различаете типы задач (1.3.1–1.3.4), понимаете модель, параметры и прогноз (1.4.1). Поэтому здесь мы не повторяем устройство модели и назначение выборок, а рассматриваем, как по обучающим примерам подобрать параметры.

Результаты обучения

1. От готовой модели к обучению

В 1.4.1 модель была задана формулой ŷ = f(x; θ). Здесь θ — параметры, x — признаки, ŷ — прогноз. Пока θ фиксированы, модель просто применяет правило к новым объектам. Обучение отвечает на другой вопрос: как выбрать θ, чтобы прогнозы на известных обучающих примерах были согласованы с целевыми ответами y?

Представьте модель оценки времени ремонта. Для каждого завершённого заказа известны признаки — тип оборудования, возраст, число отказов — и фактическое время ремонта. Модель выдаёт прогноз. Если прогноз систематически отличается от факта, параметры можно изменить. Но «изменить так, чтобы стало лучше» нужно формализовать: что считать ошибкой и как сравнивать варианты параметров?

Цикл обучения моделиПримеры проходят через модель, прогноз сравнивается с целями, функция потерь передаёт сигнал оптимизатору, который обновляет параметры.Обучающие примерыМодельПрогнозФункция потерьОптимизаторНовые параметрыПовторяем цикл, пока критерий остановки не выполнен
Обучение — это замкнутый цикл оценки потерь и обновления параметров.

2. Ошибка и функция потерь

Для одного объекта можно сравнить прогноз ŷᵢ с известным целевым значением yᵢ. Разность показывает направление ошибки, но при суммировании положительные и отрицательные отклонения могут взаимно компенсироваться. Поэтому часто используют не саму разность, а её модуль или квадрат.

Функция потерь (loss function) задаёт правило, по которому численно оценивается несоответствие прогноза целевому ответу. Она превращает качество одного прогноза в число. Значение потерь зависит от задачи и выбранной функции: одна и та же ошибка может иметь разную цену при разных постановках.

Для регрессии часто используют квадрат ошибки. Квадрат делает вклад неотрицательным и сильнее штрафует большие отклонения. Например, ошибка 4 даёт квадрат 16, а ошибка 1 — квадрат 1. Это полезно, когда крупные промахи особенно нежелательны, но одновременно делает метод чувствительным к выбросам.

Квадратичная потеря для одного примераℓ(y, ŷ) = (y − ŷ)²

3. От одной ошибки к цели обучения

Обучающий набор содержит n примеров. Для каждого примера функция потерь вычисляет ℓᵢ. Средняя эмпирическая потеря — среднее этих значений. Обучение часто формулируют как поиск параметров, при которых эта средняя величина минимальна.

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

Не путайте loss с метрикой итоговой оценки. Loss — критерий, который используется в процессе обучения для изменения параметров. Метрики оценки модели и протокол проверки качества будут подробно рассмотрены в теме 1.5. Низкая обучающая потеря сама по себе не гарантирует хорошую работу на новых данных.

Средняя эмпирическая потеряJ(θ) = (1/n) Σᵢ₌₁ⁿ ℓ(yᵢ, f(xᵢ; θ))

4. Как параметры находят минимум: градиентный спуск

Если параметры можно немного изменить и вычислить, как меняется потеря, можно двигаться в направлении её уменьшения. Производная показывает локальную скорость изменения функции по параметру. Градиент объединяет такие производные для всех параметров и указывает направление наиболее быстрого локального роста. Поэтому для уменьшения цели делают шаг в противоположную сторону.

На каждом шаге алгоритм вычисляет градиент текущей функции потерь и обновляет параметры. Размер шага задаёт learning rate (скорость обучения). Слишком большой шаг может перескакивать через минимум или расходиться; слишком маленький — замедляет обучение. Подробная настройка learning rate, batch size и других гиперпараметров относится к уроку 1.4.5.

Для линейной регрессии с MSE задача выпуклая: при стандартной постановке нет нескольких локальных минимумов, и градиентные методы могут найти глобальный минимум при подходящих условиях. Для сложных нейросетей поверхность потерь обычно невыпуклая, поэтому поведение оптимизации сложнее.

Шаг градиентного спускаθₜ₊₁ = θₜ − η ∇J(θₜ)
Функция потерь и минимумКривая показывает, что значение потерь уменьшается по мере приближения параметра к минимуму.МинимумПотеряПараметр
Схематично: оптимизация ищет значения параметров с меньшей целевой функцией.
Обновление параметраПараметр делает последовательные шаги к области меньшей потери.Шаг 1Шаг 2Шаг 3Меньшая потеря
Градиент определяет направление, а learning rate — длину шага.

5. Сквозной пример: линейная модель

Пусть модель прогнозирует потребление энергии по времени работы оборудования: ŷ = wx + b. У нас есть четыре учебных наблюдения. Начнём с w = 0 и b = 0. Модель сначала выдаёт одинаковый прогноз 0. Рассчитаем MSE, затем градиенты по w и b и обновим параметры.

Градиент по w показывает, как средняя квадратичная ошибка меняется при изменении наклона линии; градиент по b — как она меняется при сдвиге линии. После обновления параметры становятся другими, а прогнозы и loss пересчитываются. Повторяя шаги, мы постепенно подбираем линию, лучше согласованную с обучающими точками.

В коде ниже реализован простой batch gradient descent без сторонних библиотек. На каждой итерации используются все четыре наблюдения. Это учебная реализация для понимания механизма, а не замена библиотеке промышленного уровня.

MSEMSE = (1/n) Σᵢ (ŷᵢ − yᵢ)²
x_values = [1.0, 2.0, 3.0, 4.0]
y_values = [3.0, 5.0, 7.0, 9.0]

w = 0.0
b = 0.0
learning_rate = 0.01
epochs = 2000
n = len(x_values)

for epoch in range(epochs):
    predictions = [w * x + b for x in x_values]
    errors = [pred - target for pred, target in zip(predictions, y_values)]
    mse = sum(error ** 2 for error in errors) / n

    grad_w = (2 / n) * sum(error * x for error, x in zip(errors, x_values))
    grad_b = (2 / n) * sum(errors)

    w -= learning_rate * grad_w
    b -= learning_rate * grad_b

print(f"w = {w:.3f}, b = {b:.3f}")
print(f"MSE = {mse:.6f}")
print("predictions =", [round(w * x + b, 2) for x in x_values])

Ожидаемый результат: w будет близок к 2, b — близок к 1, а MSE — близка к нулю. Небольшое отличие связано с конечным числом итераций.

Разбор: сначала вычисляются прогнозы; затем errors = prediction − target; далее MSE и производные по w и b; последними обновляются параметры. Важно, что градиент вычисляется до обновления, а loss в следующей итерации отражает уже новые параметры.

6. Другие функции потерь и ограничения

MSE не универсальна. MAE использует абсолютное отклонение и меньше реагирует на отдельные крупные ошибки, но имеет излом в нуле. Huber loss сочетает квадратичную область для малых ошибок и линейную для больших. В классификации часто применяют cross-entropy, сравнивающую предсказанное распределение вероятностей с истинной меткой.

Выбор loss — содержательное решение, а не косметическая настройка. Если ошибка в 10 единиц вдвое опаснее ошибки в 5, квадратичный штраф может быть оправдан. Если редкие выбросы возникают из-за ошибок измерения, MSE может чрезмерно подстроиться под них. Если важны разные последствия недооценки и переоценки, симметричная функция потерь может быть неподходящей.

Оптимизация также имеет ограничения: чувствительность к масштабу признаков, выбору начальных параметров, шуму и пропускам; возможное переобучение при чрезмерной подгонке к обучающим данным; зависимость от алгоритма и гиперпараметров. Переобучение и недообучение разберём в 1.4.3, обобщение — в 1.4.4, настройку — в 1.4.5.

Цикл обучения моделиПримеры проходят через модель, прогноз сравнивается с целями, функция потерь передаёт сигнал оптимизатору, который обновляет параметры.Обучающие примерыМодельПрогнозФункция потерьОптимизаторНовые параметрыПовторяем цикл, пока критерий остановки не выполнен
Обучение — это замкнутый цикл оценки потерь и обновления параметров.

7. Что важно унести из урока

Обучение связывает данные, модель, функцию потерь и оптимизатор. Данные дают примеры; модель формирует прогноз; loss оценивает несоответствие; оптимизатор изменяет параметры. Эти роли различны, и понимание каждой из них необходимо для анализа поведения модели.

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

Самостоятельное задание

Добавьте в учебный набор одну точку с необычно большим целевым значением. Обучите линейную модель с MSE и сравните результат с MAE.

  1. Запишите loss до и после обучения.
  2. Сравните влияние добавленной точки на MSE и MAE.
  3. Измените learning rate вверх и вниз и опишите поведение loss.
  4. Объясните, почему обучающая потеря сама по себе не доказывает качество на новых данных.

Критерий: воспроизводимый код, расчёты и выводы с указанием ограничений эксперимента.

Ключевые понятия

Обучение моделиПроцедура подбора параметров модели по данным и выбранному критерию.
Целевая переменная (y)Известный ответ или значение, которое модель должна прогнозировать в задаче с учителем.
Прогноз (ŷ)Значение, вычисленное моделью для заданного входного примера.
Функция потерьПравило численной оценки несоответствия прогноза целевому значению.
Потеря на примереЗначение функции потерь для одной пары «прогноз — целевой ответ».
Эмпирический рискСреднее значение потерь на конечном обучающем наборе.
Среднеквадратичная ошибка (MSE)Среднее квадратов разностей между прогнозами и целевыми значениями.
ГрадиентВектор частных производных функции по параметрам.
Градиентный спускМетод оптимизации, обновляющий параметры в направлении, противоположном градиенту.
Скорость обученияГиперпараметр, определяющий размер шага при обновлении параметров.

Источники и дополнительное чтение

  1. James, Witten, Hastie, Tibshirani — An Introduction to Statistical Learning
  2. scikit-learn — Linear Models
  3. scikit-learn — Stochastic Gradient Descent
  4. Goodfellow, Bengio, Courville — Optimization for Training Deep Models
  5. Kevin P. Murphy — Probabilistic Machine Learning: An Introduction

Словарь урока

01Функция потерьLoss function

Правило, которое переводит ошибку прогноза в численную оценку.

02ПотеряLoss

Число, полученное применением функции потерь к одному или нескольким примерам.

03Эмпирический рискEmpirical risk

Средняя потеря на конечном наборе обучающих примеров.

04MSEMean Squared Error

Среднее квадратов ошибок прогноза.

05MAEMean Absolute Error

Среднее абсолютных ошибок прогноза.

06ГрадиентGradient

Вектор производных, показывающий локальное направление роста функции.

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

Итерационный метод уменьшения целевой функции.

08ОптимизаторOptimizer

Алгоритм, который обновляет параметры модели.

09Скорость обученияLearning rate

Размер шага при обновлении параметров.

10ЭпохаEpoch

Один проход алгоритма по всему обучающему набору.

Самопроверка

Вопрос 1

Что происходит при обычном прогнозировании уже обученной модели?

Вопрос 2

Зачем нужна функция потерь?

Вопрос 3

Прогнозы [2, 4] и цели [3, 2]. Чему равна MSE?

Вопрос 4

В каком направлении делает шаг градиентный спуск?

Вопрос 5

Что может произойти при слишком большом learning rate?

Вопрос 6

Что верно о MSE?

Вопрос 7

Что делает оптимизатор?

Вопрос 8

Низкая потеря на обучающих данных доказывает, что модель хорошо работает на новых данных?