Какую лосс функцию применять при обучении модели
Что проверяют
Умеете ли вы вывести функцию потерь из постановки задачи, а не вспомнить таблицу «регрессия значит MSE». Следом обычно спрашивают, чем loss отличается от метрики и что делать с дисбалансом классов.
Как отвечать
Начните с разделения: loss оптимизируется градиентным спуском и поэтому должен быть дифференцируемым, а метрика вроде F1 или ROC AUC оценивает результат и напрямую обычно не оптимизируется. Дальше по типам задач:
- регрессия: MSE штрафует большие ошибки квадратично и в оптимуме даёт среднее, MAE устойчив к выбросам и даёт медиану, Huber совмещает оба через порог δ. Quantile (pinball) loss нужен, когда предсказываете квантиль, например верхнюю границу спроса. Для счётных величин есть Poisson и Tweedie;
- бинарная классификация: бинарная кросс-энтропия (log loss). В PyTorch это
BCEWithLogitsLoss, он принимает логиты и численно устойчивее связки сигмоиды сBCELoss; - многоклассовая: кросс-энтропия, в PyTorch
nn.CrossEntropyLossс логитами и индексами классов,log_softmaxуже внутри. Для нескольких меток на объект снова BCE по каждой метке; - дисбаланс: веса классов (
weight,pos_weight) или focal loss, который приглушает вклад лёгких примеров; - особые задачи: Dice loss в сегментации, contrastive, triplet или InfoNCE для эмбеддингов, pairwise и listwise функции для ранжирования.
В градиентном бустинге то же самое задаётся параметром objective в XGBoost и LightGBM или loss_function в CatBoost.
Свяжите выбор с ценой ошибки: если бизнесу нужен суммарный прогноз продаж, медианный MAE даст систематический сдвиг, а если в данных много выбросов от ошибок разметки, MSE будет гоняться за ними.
Где спотыкаются
Применяют softmax к выходу модели перед nn.CrossEntropyLoss. Функция делает это сама, двойной softmax сглаживает градиенты, и обучение тихо ухудшается.
Путают loss с метрикой и говорят, что будут «оптимизировать F1». Обучают на кросс-энтропии, а порог подбирают отдельно под нужную метрику.
Берут MSE для целевой переменной с тяжёлым хвостом, например цены или выручки. Часто лучше логарифмировать таргет или взять Huber, иначе несколько больших значений определяют всю модель.