Ошибка, loss-функции и зачем они нужны

MSE, log loss – без формального ада.

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

Важно понять одну существенную вещь: модель не знает, что такое "хорошо" и "плохо". Она не понимает смысл задачи. Всё, что она делает во время обучения – пытается уменьшить специальное число, которое мы считаем по её ошибке. Это число называется loss (функция потерь). Формально ошибка (error) – это отклонение между реальным значением y y и предсказанием модели y^ \hat{y}, а loss – функция, которая превращает это отклонение в число, удобное для оптимизации, то есть число, которое модель старается минимизировать в процессе обучения.

Представим простой пример. Пусть модель должна предсказать цену квартиры.

Реальная цена: y = 200 000
Предсказание модели: ŷ = 180 000

Модель ошиблась. Вопрос только в том, как именно измерить эту ошибку.

Ошибка как расстояние

Пусть у нас есть реальное значение y и предсказание модели y^\hat{y}. Самое естественное, что приходит в голову – посмотреть на разницу:

error=yy^error = y - \hat{y}

Но само по себе это значение неудобно использовать для обучения модели. Она может быть отрицательной и положительной. Если у нас много объектов, положительные и отрицательные ошибки могут компенсировать друг друга.

Например:

+10
-10

Средняя ошибка будет равна нулю, хотя модель явно ошибается.

Поэтому вводят loss-функцию – функцию, которая преобразует ошибку в неотрицательное число, удобное для оптимизации. Именно это число модель пытается минимизировать во время обучения.

Геометрически это выглядит так: мы смотрим, насколько далеко предсказание отстоит от реального значения на числовой прямой.

10.1 Расстояние между y и ŷ на числовой оси

По сути, мы хотим превратить отклонение в число, которое ведёт себя как расстояние. Давайте поясним почему. В задачах регрессии ошибку удобно интерпретировать как расстояние между реальным значением и предсказанием, то есть всегда неотрицательное число, которое увеличивается при росте ошибки.

Однако не каждая loss-функция является расстоянием в строгом математическом смысле:

  • В MSE – да, это квадрат евклидова расстояния между предсказанием и реальным значением

  • В log loss (logarithmic loss) – это уже не метрическое расстояние, а дивергенция

А значит, мы сразу приходим к идее: ошибка должна быть неотрицательной.

Квадрат ошибки как наказание за промах

Самый простой способ избавиться от знака – взять модуль ошибки.

L=yy^L = |y - ŷ|

Но модуль не дифференцируем в точке 0, что усложняет оптимизацию. Поэтому в ML чаще используют квадрат ошибки:

L=(yy^)2L = (y - \hat{y})^2

Почему?

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

Во-вторых, квадрат сильно усиливает большие ошибки.

Если ошибка выросла в 2 раза, штраф вырастает в 4 раза:

(2e)2=4e2(2e)^2 = 4e^2

Например:

Из-за этого свойства MSE особенно чувствительна к большим ошибкам и выбросам.

Это важное свойство: мы заранее говорим модели, что редкие, но большие промахи хуже, чем много маленьких.

Mean Squared Error (MSE)

Если у нас много объектов, мы берём квадрат ошибки для каждого из них и затем усредняем:

MSE=1ni=1n(yiy^i)2\text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2

С точки зрения геометрии, MSE – это средний квадрат расстояния между реальными значениями и предсказаниями (то есть квадрат вертикальных отклонений точек от модели).

Если представить данные как точки на плоскости, а модель как линию или поверхность, MSE измеряет, насколько далеко точки находятся от этой поверхности.

10.2 Точки данных и линия регрессии, вертикальные отрезки – ошибки

Немного полезной математики

Почему MSE так часто используют? Потому что минимум MSE ведёт себя очень предсказуемо.

Если модель линейная:

y^=wx+b\hat{y} = wx + b

то MSE как функция параметров ww и bb является выпуклой функцией (по параметрам модели).

Это означает:

  • у неё один глобальный минимум

  • антиградиент (обратное направление градиента) указывает путь к уменьшению функции ошибки

  • обучение стабильно

10.3 График выпуклой функции потерь с единственным минимумом

Это одна из причин, почему линейная регрессия – базовый и надёжный инструмент.

Связь MSE и нормального распределения

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

ε=(yy^)N(0,σ2)\varepsilon = (y - \hat{y}) \sim \mathcal{N}(0, \sigma^2)

В этом случае минимизация MSE эквивалентна максимизации правдоподобия.

Иначе говоря, MSE – это не просто удобная формула. Используя её, мы молчаливо предполагаем, что шум ε\varepsilon подчиняется нормальному распределению – тому самому "колоколу Гаусса".

Почему MSE не подходит для классификации

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

Представим задачу типа классификации с двумя вариантами ответа: "да" и "нет". Например, спам или не спам.

Реальное значение:

y{0,1}y \in \{0,1\}

Предсказание модели:

p^[0,1]\hat{p} \in [0, 1]

Если использовать MSE, разница между вероятностями 0.99 и 0.51 оказывается не такой значительной, хотя интуитивно это предсказания совершенно разного качества, когда правильный ответ это 1 (то есть - спам).

В общем, MSE слабо различает степень уверенности и не соответствует вероятностной природе задачи.

Нам важно не просто угадать, а понять насколько модель уверена в ответе.

Log loss как цена уверенности

Log loss решает именно эту проблему. Идея этой функции очень простая: она сильно наказывает модель, если она уверенно ошибается.

Представим, что правильный ответ равен 1 (спам), т.е. y=1y = 1.

Если модель говорит:

То есть чем увереннее модель ошибается, тем сильнее должен быть штраф.

Эту идею математически выражает функция log loss.

Для одного объекта:

LogLoss=(ylog(p^)+(1y)log(1p^))LogLoss = - \left( y \cdot \log(\hat{p}) + (1 - y) \cdot \log(1 - \hat{p}) \right)

Если y=1y = 1, остаётся только:

log(p^)-\log(\hat{p})

Рассмотрим несколько примеров.

Как видим, быть уверенно неправым обходится очень дорого.

На практике модель делает предсказания сразу для многих объектов. Поэтому общая функция потерь – это среднее значение log loss по всем наблюдениям:

LogLoss=1ni=1n(yilog(p^i)+(1yi)log(1p^i))LogLoss = -\frac{1}{n} \sum_{i=1}^{n} \left(y_i \cdot \log(\hat{p}_i) + (1 - y_i) \cdot \log(1 - \hat{p}_i)\right)

Рассмотрим простой пример для трёх объектов.

Средний log loss будет равен:

0.105+0.223+0.51130.28\frac{0.105 + 0.223 + 0.511}{3} \approx 0.28

Именно это значение модель и пытается минимизировать при обучении.

А теперь давайте обратим внимание на график этой функции - он очень показателен.

10.4 График -log(p) при p → 0 и p → 1
  • при p^1\hat{p} \to 1 ошибка стремится к нулю

  • при p^0\hat{p} \to 0 ошибка стремится к бесконечности

Это математическое выражение идеи:

Быть уверенно неправым – почти преступление.

Геометрический смысл log loss

Log loss можно интерпретировать как меру расхождения между реальным распределением и предсказанным распределением вероятностей.

Формально это частный случай кросс-энтропии:

H(p,q)=plog(q)H(p, q) = - \sum p \log(q)

Где:

  • pp – истинное распределение

  • qq – распределение модели

10.5: Два распределения вероятностей и расстояние между ними

Это делает log loss естественным выбором для вероятностных моделей.

Сравнение MSE и log loss интуитивно

MSE спрашивает:

Насколько далеко мы промахнулись по значению?

Log loss спрашивает:

Насколько мы ошиблись в своей уверенности?

Именно поэтому можно использовать практическое правило выбора в большинстве практических случаев:

  • регрессия → MSE

  • классификация → log loss

Итоговая мысль

Loss-функция – это язык, на котором мы разговариваем с моделью. Через неё мы объясняем, что считаем ошибкой, какие ошибки особенно плохи, а какие допустимы.

Модель не знает ничего ни о деньгах, ни о спаме, ни о смысле текста. Она знает только одно: куда двигаться, чтобы уменьшить loss.

В следующей главе мы увидим, как минимизация loss превращается в конкретный алгоритм обучения – через градиенты и обновление параметров.

Last updated