Sobes.tech
Back to questions
Middle — Senior
11

Можно ли использовать кросс-энтропию для двух классов и почему это не рекомендуется?

Companies where asked
Hybrid

Answer from AI

sobes.tech AI

Что хотят услышать интервьюеры:

Да, кросс-энтропию можно применять и для бинарной классификации, но обычно используют специальный бинарный вариант. Это удобнее, стабильнее и проще в реализации. Для двух классов чаще рекомендуют binary cross-entropy или BCEWithLogitsLoss, а не softmax + categorical cross-entropy.

Определение:

Кросс-энтропия — это функция потерь, которая измеряет, насколько предсказанное распределение вероятностей отличается от истинного.
Для двух классов есть два близких подхода: либо один выход с сигмоидой и бинарная кросс-энтропия, либо два выхода с softmax и многоклассовая кросс-энтропия.
На практике для бинарной задачи первый вариант обычно предпочтительнее, потому что он проще и численно устойчивее.

Пример использования:

Допустим, модель определяет, есть ли у клиента отток: 0 — не уйдёт, 1 — уйдёт.
В этом случае достаточно одного логита на выходе и бинарной кросс-энтропии.

import torch
import torch.nn as nn

logits = torch.tensor([2.0, -1.0, 0.5])   # выходы модели до sigmoid
targets = torch.tensor([1.0, 0.0, 1.0])    # истинные метки

loss_fn = nn.BCEWithLogitsLoss()
loss = loss_fn(logits, targets)

print(loss.item())

Пояснение кода:

Код показывает типичный и рекомендуемый способ обучения бинарного классификатора.

  1. logits — это сырые выходы модели, не вероятности.
  2. targets — истинные метки 0/1 в формате float.
  3. BCEWithLogitsLoss внутри себя объединяет sigmoid и binary cross-entropy, поэтому вычисления стабильнее.
  4. Если бы использовались softmax и два выхода, это тоже работало бы, но было бы избыточно для двух классов.

Ключевые моменты:

  • Для двух классов кросс-энтропию использовать можно, но обычно в бинарной форме.
  • softmax + categorical cross-entropy для бинарной задачи — лишняя сложность.
  • Основная причина отказа от “обычной” кросс-энтропии — избыточность и меньшая численная устойчивость.
  • BCEWithLogitsLoss предпочтительнее, потому что объединяет sigmoid и loss в одном стабильном вычислении.
  • Если классы сильно несбалансированы, дополнительно могут понадобиться веса классов или другие техники балансировки.