Функция потерь (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
На уровне фреймворков это выглядит проще:
- Вы передаёте модели целевые значения и предсказания.
- Loss-функция вычисляет тензор со значением потерь.
- Это значение агрегируется. В Keras для классов потерь важен режим reduction, то есть способ сведения потерь по примерам.
- Во время обучения именно loss используется как сигнал, который нужно уменьшать.
- В 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)
Как читать этот сценарий на практике:
- Вы явно определяете, что для вашей задачи считается ошибкой.
- Фреймворк применяет этот критерий к предсказаниям и целям на каждом шаге обучения.
- По журналу
lossвы видите, уменьшается ли выбранный критерий на обучении и проверке. - Если одной функции мало, 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 в разделе источников ниже.
Источники
- GitHub – pytorch/pytorch
- GitHub – tensorflow/tensorflow
- PyTorch 2.13 Release Blog
- What's new in TensorFlow 2.20
- Principles of Risk Minimization for Learning Theory
- Keras 3: Losses
- Keras 3: Model training APIs
- Keras: Training & evaluation with the built-in methods
- PyTorch: Loss Functions
- PyTorch: torch.nn.functional
Вопросы и ответы
Функция потерь и риск — это одно и то же?
Нет. 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.