COMRAD404 / GLOSSARY

Функция потерь (loss function)

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

Функция потерь — это численная мера ошибки модели: она показывает, насколько предсказание расходится с целевым значением, и именно её обычно минимизируют при обучении. Для регрессии и классификации это базовый механизм настройки весов, но сама по себе функция потерь не гарантирует полезную бизнес-метрику: если стоимость разных ошибок несимметрична, классы несбалансированы, а цель включает ранжирование, справедливость или отложенный эффект, стандартная loss-функция может быть плохой proxy-целью.

Простыми словами

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

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

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

Как это работает

Во время обучения цикл обычно выглядит так:

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

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

Несколько базовых форм:

  • MSE: (y - y_hat)^2
  • MAE: |y - y_hat|
  • Binary cross-entropy: -(y*log(p) + (1-y)*log(1-p))
  • Categorical cross-entropy: штраф для многоклассовой классификации по вероятности правильного класса
Тип задачи Частая функция потерь Когда подходит Что важно учесть
Регрессия MSE Когда большие ошибки надо штрафовать сильнее Чувствительна к выбросам
Регрессия MAE Когда нужна устойчивость к выбросам Оптимизация может сходиться медленнее
Бинарная классификация Binary cross-entropy Когда модель предсказывает вероятность класса Сильно штрафует уверенные неверные ответы
Многоклассовая классификация Cross-entropy Когда на каждый объект выбирается один класс из многих Нужна корректная постановка меток и logits/probabilities

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

Зачем нужно

Без функции потерь обучение модели в обычной постановке просто не определено: алгоритму нечего минимизировать. Но её роль шире, чем «посчитать ошибку».

  • Задаёт цель оптимизации. Модель будет улучшаться именно относительно того, что вы записали в loss.
  • Позволяет сравнивать шаги обучения. Можно отслеживать, уменьшается ли ошибка на train и validation.
  • Кодирует приоритеты. Через веса классов, margin, штрафы и другие модификации можно отразить цену ошибок.
  • Связывает задачу с оптимизатором. Хорошая функция потерь даёт информативные градиенты, плохая — нестабильное или медленное обучение.

Практический вывод простой: если loss не соответствует реальной цели, модель может честно оптимизировать не то. Например, минимизировать среднюю ошибку по сумме заказов и одновременно систематически промахиваться на дорогих клиентах; хорошо снижать cross-entropy и при этом давать неудобный рабочий порог для модерации; показывать приемлемую среднюю ошибку и проваливаться на хвостовых кейсах.

Пример

Представим бинарную модель антифрода. Она предсказывает вероятность того, что транзакция мошенническая. Возьмём binary cross-entropy.

Транзакция Истинная метка y Вероятность fraud p Потеря
A 1 0.95 -log(0.95) = 0.051
B 0 0.10 -log(0.90) = 0.105
C 1 0.60 -log(0.60) = 0.511
D 0 0.70 -log(0.30) = 1.204

Средняя потеря по батчу — около 0.468. Интересно здесь не только среднее значение, но и структура ошибок. Транзакция D даёт самый большой вклад, потому что модель уверенно ошиблась: она дала 0.70 там, где правильный ответ 0. Это ровно то, за что cross-entropy наказывает сильнее всего.

Если смотреть только на accuracy при пороге 0.5, модель здесь даст 75%. Но loss показывает более тонкую картину: один уверенный промах опаснее, чем несколько неуверенных правильных ответов. Для антифрода это полезно. Однако если пропущенный fraud для бизнеса намного дороже ложной тревоги, одной стандартной cross-entropy уже мало. Тогда обычно добавляют веса классов, меняют sampling, отдельно подбирают decision threshold и оценивают модель по бизнес-метрике.

Заблуждения и ограничения

  • «Чем меньше loss, тем модель лучше». Не обязательно. Важен loss на валидации и тесте, а также соответствие loss реальной метрике. Модель может отлично снижать train loss и переобучиться.
  • «Функция потерь и метрика — одно и то же». Нет. Loss нужен для обучения, метрика — для оценки. Иногда они совпадают, но часто нет.
  • «Есть универсальная функция потерь на все случаи». Нет. Для разных задач, распределений ошибок и ограничений подходят разные функции.
  • «Средняя потеря отражает все риски». Нет. Среднее может скрывать хвостовые ошибки, важные сегменты пользователей и редкие дорогие события.
  • «Если loss падает, модель стала понимать предметную область». Нет. Она лишь лучше подгоняет ответы под заданную цель на доступных данных.

Ограничения особенно заметны в нескольких случаях:

  • Сильный дисбаланс классов. Обычная потеря может смещать модель в сторону большинства.
  • Шумная разметка и выбросы. Некоторые функции, особенно MSE, будут чрезмерно реагировать на плохие точки.
  • Недифференцируемые бизнес-цели. F1, AUC, precision@k и подобные показатели трудно оптимизировать напрямую стандартным backprop.
  • Задачи ранжирования, рекомендаций и RL. Там наблюдаемая цель часто косвенная, отложенная или зависит от политики, и простая supervised loss может быть слабым приближением.
  • Требования к fairness, калибровке и ограничениям. Их обычно нельзя получить автоматически из базовой функции потерь без дополнительных членов или постобработки.

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

Частые вопросы

Чем функция потерь отличается от метрики?

Функцию потерь минимизируют во время обучения. Метрикой обычно оценивают качество уже обученной модели на валидации, тесте или в продакшене. Loss должна быть удобной для оптимизации, а метрика — понятной для принятия решений.

Почему нельзя просто оптимизировать accuracy, F1 или AUC?

Потому что эти показатели часто недифференцируемы или дают слабый градиентный сигнал. Поэтому вместо них используют гладкие surrogate-loss, а сами метрики считают отдельно.

Как выбрать функцию потерь для новой задачи?

Начните с типа цели: для регрессии обычно MSE или MAE, для бинарной классификации — binary cross-entropy, для многоклассовой — cross-entropy. Затем проверьте, как она ведёт себя на валидации, и соответствует ли её снижение нужной бизнес-метрике. Если нет, добавляйте веса, меняйте постановку задачи или используйте специализированную loss-функцию.

Что делать при дисбалансе классов или шумной разметке?

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

Связанные понятия

  • Objective function. Более общее понятие: часто это функция потерь плюс регуляризация и дополнительные штрафы.
  • Метрика качества. Accuracy, RMSE, ROC-AUC, F1 и другие показатели, по которым модель сравнивают после обучения.
  • Регуляризация. Дополнительные слагаемые или методы, которые ограничивают сложность модели и помогают против переобучения.
  • Градиентный спуск. Класс методов оптимизации, который уменьшает функцию потерь через обновление параметров по градиенту.
  • Калибровка вероятностей. Свойство модели выдавать вероятности, соответствующие реальным частотам событий; низкий loss не всегда означает хорошую калибровку.

Читайте также

LINKS