Какой лосс использовать при дисбалансе классов?

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

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

Для борьбы с дисбалансом часто используют:

  • Взвешенный кросс-энтропийный лосс (Weighted Cross-Entropy Loss) — каждому классу присваивается вес, обратный его частоте, чтобы ошибки на редких классах имели больший вклад.
  • Focal Loss — модифицирует кросс-энтропию, уменьшая вклад легко классифицируемых примеров и фокусируясь на сложных, что помогает при сильном дисбалансе.
  • Dice Loss / Jaccard Loss — часто применяются в задачах сегментации, хорошо работают при дисбалансе, так как оптимизируют метрики, чувствительные к классам с малой представленностью.

Пример использования взвешенного кросс-энтропийного лосса в PyTorch:

import torch
import torch.nn as nn

# веса для классов, например, обратные частоты
class_weights = torch.tensor([0.1, 0.9])
criterion = nn.CrossEntropyLoss(weight=class_weights)

outputs = model(inputs)  # logits
loss = criterion(outputs, targets)

Выбор конкретного лосса зависит от задачи и данных, но взвешенный кросс-энтропийный и focal loss — самые распространённые при дисбалансе классов.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее