Cross-Entropy Loss
Функция потерь на основе перекрёстной энтропии сравнивает предсказанные вероятности классов с целевыми метками, помогая обучать модели классификации и сегментации.
Функция потерь на основе перекрёстной энтропии показывает, насколько предсказанные моделью вероятности классов соответствуют целевым меткам. Она назначает небольшой штраф, если правильный класс получает высокую вероятность, и большой штраф, если эта вероятность низкая. В качестве функции потерь для обучения с учителем она задаёт целевую величину, которую нужно минимизировать во время обучения.
В статье Клода Шеннона «Математическая теория связи» 1948 года были заложены основы энтропии. Д. Ф. Керридж ввёл меру перекрёстной энтропии под названием «неточность» в своей статье 1961 года «Неточность и вывод». В классификации её также называют логарифмической функцией потерь; её используют и логистическая регрессия, и нейронные классификаторы.
Как работает функция потерь на основе перекрёстной энтропии#
Для одного примера с одним правильным классом невзвешенная перекрёстная энтропия равна loss = -ln(p_correct). Если вероятность правильного класса составляет 0.9, значение функции потерь будет около 0.105; если 0.1 — около 2.303. Натуральный логарифм выражает результат в единицах, называемых натами. При обучении эти штрафы обычно усредняют по пакету.
В более общем случае перекрёстная энтропия умножает вероятность каждого целевого класса на отрицательный логарифм его предсказанной вероятности и суммирует результаты по классам. При one-hot-разметке правильному классу присваивается 1, а остальным — 0, поэтому остаётся только слагаемое для правильного класса. Для невзвешенной one-hot-разметки минимизация перекрёстной энтропии эквивалентна максимизации правдоподобия наблюдаемых меток. Обратное распространение ошибки вычисляет градиенты, а градиентный спуск обновляет параметры модели.
Бинарная, категориальная и разреженная перекрёстная энтропия#
Подходящий вариант зависит от разметки:
- Бинарная перекрёстная энтропия с сигмоидой: Для целевого значения
y, равного 0 или 1, и предсказанной вероятностиpпринадлежности к классу 1 функция потерь равна-[y * ln(p) + (1 - y) * ln(1 - p)]. При многометочной классификации её независимо применяют к меткам, которые могут встречаться одновременно. - Категориальная перекрёстная энтропия с softmax: Эта функция оценивает взаимоисключающие классы, вероятности которых в сумме дают 1. Softmax преобразует исходные оценки модели, называемые логитами, в такое распределение.
- Разреженная категориальная перекрёстная энтропия: Здесь вместо one-hot-вектора используется целочисленный индекс класса. Функция вычисляет то же значение потерь; слово «разреженная» описывает способ кодирования целевой метки.
Мягкие целевые распределения распределяют вероятность между классами. Они используются при сглаживании меток и дистилляции знаний, когда ученик обучается на распределении вероятностей учителя.
Вычисление перекрёстной энтропии в PyTorch#
PyTorch принимает исходные логиты в CrossEntropyLoss. Для целевых меток в виде индексов классов вычисление эквивалентно последовательному применению log-softmax и отрицательного логарифмического правдоподобия. Если предварительно применить softmax, функция будет интерпретировать вероятности как логиты, что изменит значение потерь и градиенты. Для целевых меток в виде целых чисел используется torch.long; для целевых меток в виде вероятностей используются числа с плавающей точкой, имеющие ту же форму, что и логиты.
import torch
from torch import nn
# Both predictions select class 0; the second is more confident.
logits = torch.tensor([[2.0, 0.0, 0.0], [4.0, 0.0, 0.0]])
targets = torch.tensor([0, 0], dtype=torch.long)
loss_fn = nn.CrossEntropyLoss(reduction="none")
losses = loss_fn(logits, targets)
print(f"Lower confidence loss: {losses[0].item():.4f}")
print(f"Higher confidence loss: {losses[1].item():.4f}")Значения функции потерь снижаются с 0.2395 до 0.0360, хотя оба предсказания остаются правильными. Точность отражает решения о классах, а перекрёстная энтропия также учитывает распределение вероятностей. Для бинарных логитов и логитов многометочной классификации BCEWithLogitsLoss объединяет сигмоиду с бинарной перекрёстной энтропией.
Применение в компьютерном зрении#
При классификации изображений с одной меткой перекрёстная энтропия помогает модели определять один класс для каждого изображения. При обучении классификатора Ultralytics YOLO26 используется средняя перекрёстная энтропия по логитам классов, чтобы обновлять классификатор и приближать его предсказания к размеченной категории.
При сегментации медицинских изображений исходная модель U-Net обучалась на микроскопических биомедицинских изображениях с помощью попиксельного softmax и взвешенной перекрёстной энтропии. Карта весов увеличивала штрафы на границах соприкасающихся клеток, помогая разделять соседние клетки. Такой подход применяет классификацию к каждому пикселю при семантической сегментации.
Интерпретация значений функции потерь#
Дискретная перекрёстная энтропия с допустимыми целевыми распределениями и неотрицательными весами неотрицательна. Для невзвешенной жёсткой разметки она равна нулю, когда вероятность правильного класса равна 1, и неограниченно растёт по мере приближения этой вероятности к нулю. Отрицательные значения указывают на ошибку во входных данных или реализации, например на отрицательные значения целевых меток или весов.
Энтропия измеряет неопределённость внутри одного распределения, а перекрёстная энтропия сравнивает целевые значения с предсказаниями. Перекрёстная энтропия равна энтропии целевого распределения плюс расхождение Кульбака — Лейблера, то есть дополнительный штраф за несовпадение. Поэтому для мягких целевых распределений с положительной энтропией минимальное значение функции потерь также положительно.
Взвешивание классов увеличивает вклад выбранных классов. Фокальная функция потерь уменьшает вклад простых примеров, чтобы компенсировать дисбаланс между фоном и объектами в обнаружении объектов. Для равномерного предсказания невзвешенная логарифмическая функция потерь равна ln(number_of_classes): примерно 0.693 для двух классов и 2.303 для десяти.










