COMRAD404 / GLOSSARY

Функция потерь (Loss Function)

Loss Function

Функция потерь (loss function) — это правило, которое измеряет расхождение между предсказанием модели и правильным ответом. Ниже — простое объяснение, связь с риском и ERM, а также практический смысл loss в Keras и PyTorch.

TL;DR

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

Функция потерь (loss function) — это правило, которое измеряет, насколько предсказание модели расходится с целевым значением. Во время обучения параметры модели подбирают так, чтобы это значение уменьшалось; в теории обучения именно такое расхождение лежит в основе риска и эмпирической минимизации риска.

Английский термин: loss function. Также встречается: loss, criterion, «критерий», иногда «целевая функция» или «ошибка», но эти слова не всегда полностью взаимозаменяемы. По состоянию на 2026-08-18 в официальных API Keras и PyTorch словом loss обычно называют критерий, который сравнивает предсказания с целями, а в логах обучения — ещё и его численное значение.

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

Грубо говоря, функция потерь — это «шкала недовольства» моделью. Если модель ответила близко к правильному значению, loss маленький; если промахнулась сильно, loss больше.

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

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

В теоретической формулировке из статистической теории обучения loss задаёт расхождение вида L(y, f(x, w)), где x — вход, y — правильный ответ, а f(x, w) — предсказание модели с параметрами w. Ожидаемое значение этого расхождения называют риском, а эмпирическая минимизация риска (ERM) заменяет неизвестный риск средним loss по обучающей выборке.

Вход x -> модель f(x, w) -> предсказание y_pred
                         
Цель y_true --------------> функция потерь L(y_true, y_pred)
                                   |
                                   v
                     loss на примере / батче
                                   |
                    усреднение или иная reduction
                                   |
                                   v
                       эмпирический loss на данных
                                   |
                                   v
                    обновление параметров модели w

На уровне фреймворков это выглядит проще:

  1. Вы передаёте модели целевые значения и предсказания.
  2. Loss-функция вычисляет тензор со значением потерь.
  3. Это значение агрегируется. В Keras для классов потерь важен режим reduction, то есть способ сведения потерь по примерам.
  4. Во время обучения именно loss используется как сигнал, который нужно уменьшать.
  5. В Keras Model.compile() принимает loss, а fit() и evaluate() используют и выводят значения потерь.

Официальные документы Keras прямо определяют loss как любой вызываемый объект с сигнатурой fn(y_true, y_pred), который возвращает тензор с числом потерь. В PyTorch документация описывает loss-функции как критерии, измеряющие, насколько предсказания совпадают с целями.

Где применяется

  • Классификация. Для задач, где нужно выбрать правильный класс, в PyTorch доступны, например, CrossEntropyLoss и BCEWithLogitsLoss, а в функциональном API — cross_entropy и binary_cross_entropy_with_logits.
  • Регрессия. Когда модель предсказывает численное значение, используются критерии вроде L1Loss, MSELoss и функциональные аналоги mse_loss или huber_loss.
  • Последовательности и выравнивание. Для некоторых задач последовательностного обучения PyTorch выделяет CTCLoss.
  • Metric learning и сравнение объектов. Для обучения по относительным расстояниям документация PyTorch приводит TripletMarginLoss и triplet_margin_loss.

В Keras это обычно проявляется в момент компиляции модели: вы выбираете loss из встроенных семейств — вероятностные, регрессионные, hinge-losses — или задаёте собственную реализацию.

Практический пример

Самый практичный сценарий для начинающего — понять, где loss живёт в тренировочном цикле Keras. Документация Keras 3 описывает это так: loss передаётся в compile(), затем fit() использует его во время обучения, а evaluate() возвращает итоговое значение на проверочных данных.

# Keras: loss — любой callable вида fn(y_true, y_pred)
def my_loss_fn(y_true, y_pred):
    return ...  # тензор со значением потерь

model.compile(
    optimizer=...,
    loss=my_loss_fn,
)

history = model.fit(x_train, y_train)
val_loss = model.evaluate(x_val, y_val)

Как читать этот сценарий на практике:

  1. Вы явно определяете, что для вашей задачи считается ошибкой.
  2. Фреймворк применяет этот критерий к предсказаниям и целям на каждом шаге обучения.
  3. По журналу loss вы видите, уменьшается ли выбранный критерий на обучении и проверке.
  4. Если одной функции мало, Keras позволяет добавлять дополнительные слагаемые через add_loss().

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

Чем отличается от…

Термин Что это Ключевое отличие
Функция потерь Критерий расхождения между целью и предсказанием Считается на примере, батче или ином наборе и служит прямым сигналом для обучения
Риск Ожидаемое значение loss Это теоретическая величина; в реальности она обычно неизвестна полностью
Эмпирический риск Среднее значение loss на обучающей выборке Именно его минимизируют в схеме ERM вместо неизвестного истинного риска
Дополнительный loss-терм Дополнительное слагаемое в общей цели В Keras оно может добавляться отдельно через add_loss(), то есть общий objective не обязан сводиться только к сравнению y_true и y_pred

Ограничения и заблуждения

  • Заблуждение: loss — это просто «ошибка модели» в бытовом смысле. Точнее сказать, это формализованное расхождение по выбранному критерию. Один и тот же набор предсказаний можно оценить разными loss-функциями.
  • Заблуждение: слово loss всегда означает одно и то же. В источниках есть важная оговорка: термин контекстный. В зависимости от задачи и фреймворка под ним могут иметь в виду критерий, objective, surrogate loss или дополнительный штрафной терм.
  • Заблуждение: в логе обучения число loss всегда сравнимо само по себе. В Keras есть разные режимы reduction, а также возможность добавлять дополнительные слагаемые через add_loss(). Без этого контекста голое число объясняет не всё.
  • Заблуждение: минимальный loss на трейне и есть истинный риск. По Vapnik это не одно и то же: риск — ожидаемое расхождение, а ERM работает с эмпирическим средним по доступным данным.
  • Ограничение статьи. Этот материал объясняет термин, теоретическую рамку ERM и текущие API Keras/PyTorch, но не пытается дать универсальный рецепт выбора «лучшей» loss для любой задачи: в supplied sources такого общего правила нет.

Связанные термины, инструменты и исследования

Если вы разбираете обучение моделей дальше, полезно связать loss с соседними понятиями: функцией активации, аугментацией данных, инструкционным обучением и дистилляцией модели. Для практики по API смотрите официальные справочники Keras Losses и PyTorch Loss Functions в разделе источников ниже.

Источники

Вопросы и ответы

Функция потерь и риск — это одно и то же?

Нет. Loss — это расхождение для конкретного критерия, а риск — ожидаемое значение этого расхождения. В ERM неизвестный риск заменяют средним loss по обучающей выборке.

Можно ли задать свою функцию потерь?

Да. В Keras loss может быть любым callable вида fn(y_true, y_pred); также можно наследоваться от базового класса Loss и добавлять дополнительные термы через add_loss().

Почему в логах обучения показывается loss?

Потому что в Keras именно loss используется в fit() и evaluate(), а значения потерь выводятся как часть процесса обучения и проверки.

Loss — это всегда только сравнение предсказания и правильного ответа?

Не всегда. В Keras общий objective может включать и дополнительные термы через add_loss(), поэтому итоговая цель обучения может быть шире, чем одно сравнение y_true и y_pred.

Источники

SOURCES

Вопросы и ответы

FAQ
Функция потерь и риск — это одно и то же?

Нет. Loss — это расхождение по выбранному критерию, а риск — ожидаемое значение этого расхождения. В ERM неизвестный риск заменяют средним loss по обучающей выборке.

Можно ли задать свою функцию потерь?

Да. В Keras loss может быть любым callable вида fn(y_true, y_pred); также можно наследоваться от базового класса Loss и добавлять дополнительные термы через add_loss().

Почему в логах обучения показывается loss?

Потому что в Keras именно loss используется в fit() и evaluate(), а значения потерь выводятся как часть процесса обучения и проверки.

Loss — это всегда только сравнение предсказания и правильного ответа?

Не всегда. В Keras общий objective может включать и дополнительные термы через add_loss(), поэтому итоговая цель обучения может быть шире, чем одно сравнение y_true и y_pred.

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

LINKS