Ответ
Формула бинарной кросс-энтропии (log loss) для одного примера:
L = -[y * log(p) + (1 - y) * log(1 - p)]
Где:
y— истинная метка (0 или 1).p— предсказанная моделью вероятность принадлежности к классу 1 (0 ≤ p ≤ 1).
Для всей выборки из N примеров используется усредненная кросс-энтропия:
L = -1/N * Σ [y_i * log(p_i) + (1 - y_i) * log(1 - p_i)]
Почему используется логарифм? Логарифмическое преобразование сильно штрафует модель за уверенные, но неверные предсказания (например, когда p близко к 1 для y=0). Это заставляет алгоритм обучения быстрее корректировать ошибочные веса.
Пример расчета на Python с NumPy:
import numpy as np
def binary_crossentropy(y_true, y_pred):
# Добавление эпсилона для численной стабильности (избегаем log(0))
epsilon = 1e-15
y_pred = np.clip(y_pred, epsilon, 1 - epsilon)
return -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))
# Пример данных
y_true = np.array([1, 0, 1, 1])
y_pred = np.array([0.9, 0.1, 0.8, 0.4]) # Модель уверена в первых трех случаях, неуверена в последнем
loss = binary_crossentropy(y_true, y_pred)
print(f"Binary Cross-Entropy Loss: {loss:.4f}") # ~0.164
Эта функция потерь является стандартной для задач бинарной классификации в нейронных сетях и градиентном бустинге (например, в model.compile(loss='binary_crossentropy') в Keras).