Перейти к содержимому

Энтропия, Information Gain и Cross-Entropy: одна формула

6 минут чтения
Содержание

Сегодня мы разберём всё, что связано с энтропией. Долгое время я относился к ней как к «мере неопределённости». Но если отследить историю появления энтропии от задачи Шеннона про передачу сообщений по проводу до Information Gain в деревьях и cross-entropy loss в нейросетях, то можно качественно уловить связь между вещами, которые на первый взгляд не имеют ничего общего. То есть, конечно, определение через «меру неопределённости» верно, но не передает полноценно смысл.

Когда XGBoost выбирает сплит и когда нейросеть обновляет веса, они делают одно и то же: минимизируют неопределённость. Под капотом обоих — формула, которую Клод Шеннон написал в 1948 году для совсем другой задачи: как эффективно передавать сообщения по проводу.

Сегодня разберём, как одна формула связывает три мира: теорию информации, деревья решений и нейросети.


Энтропия Шеннона: сколько бит нужно?

Забудьте определение «энтропия – мера хаоса». Начнём с задачи.

У вас есть случайная величина, и вы хотите передать её значение кому-то. Сколько бит вам потребуется?

Монетка (честная). Два исхода, равновероятных. Нужен 1 бит: 0 – орёл, 1 – решка.

Кубик (честный). Шесть исходов. Нужно log262.58\log_2 6 \approx 2.58 бит.

Кубик, который всегда падает на 6. Один исход. Нужно 0 бит – получатель и так знает ответ.

Закономерность: чем предсказуемее исход, тем меньше информации он несёт. Шеннон формализовал это в одной формуле:

H(X)=i=1npilog2piH(X) = -\sum_{i=1}^{n} p_i \log_2 p_i

где pip_i — вероятность ii-го исхода.

Проверим:

  • Честная монетка: H=20.5log20.5=1H = -2 \cdot 0.5 \cdot \log_2 0.5 = 1 бит ✓
  • Честный кубик: H=616log2162.58H = -6 \cdot \frac{1}{6} \cdot \log_2 \frac{1}{6} \approx 2.58 бит ✓
  • Кубик-шестёрка: H=11log21=0H = -1 \cdot 1 \cdot \log_2 1 = 0 бит ✓

Для бинарной классификации (два класса с вероятностями pp и 1p1-p) энтропия принимает вид:

H(p)=plog2p(1p)log2(1p)H(p) = -p \log_2 p - (1-p) \log_2 (1-p)

Кривая энтропии для бинарной классификации: максимум 1 бит при p=0.5, нули в p=0 и p=1

Максимум в p=0.5p = 0.5. Минимумы в p=0p = 0 и p=1p = 1 представляют собой полную определенность. Эта кривая — фундамент всего, что будет дальше.


Information Gain: как деревья выбирают сплит

Дерево решений на каждом шаге решает: по какому признаку и по какому порогу разрезать данные? Критерий Information Gain: насколько сплит снижает неопределённость.

IG=H(до)kSkSH(Sk)IG = H(\text{до}) - \sum_{k} \frac{|S_k|}{|S|} H(S_k)

где SkS_k — подмножества после сплита, Sk/S|S_k|/|S| их доли.

Конкретный пример

100 объектов: 60 положительных, 40 отрицательных. Энтропия до сплита:

H(до)=0.6log20.60.4log20.40.971H(\text{до}) = -0.6 \log_2 0.6 - 0.4 \log_2 0.4 \approx 0.971

Сплит A делит на две группы:

  • Левая: 50 объектов (45 положительных, 5 отрицательных) → H=0.469H = 0.469
  • Правая: 50 объектов (15 положительных, 35 отрицательных) → H=0.881H = 0.881
IGA=0.971(0.50.469+0.50.881)=0.9710.675=0.296IG_A = 0.971 - (0.5 \cdot 0.469 + 0.5 \cdot 0.881) = 0.971 - 0.675 = 0.296

Сплит B делит на две группы:

  • Левая: 50 объектов (35 положительных, 15 отрицательных) → H=0.881H = 0.881
  • Правая: 50 объектов (25 положительных, 25 отрицательных) → H=1.000H = 1.000
IGB=0.971(0.50.881+0.51.000)=0.9710.940=0.031IG_B = 0.971 - (0.5 \cdot 0.881 + 0.5 \cdot 1.000) = 0.971 - 0.940 = 0.031

Сравнение двух сплитов дерева: A даёт IG=0.296, B даёт IG=0.031, разница в 10 раз

Сплит A даёт Information Gain в 10 раз больше. Дерево выберет его, потому что он сильнее снижает неопределённость. Левая ветка после сплита A почти чистая (90% положительных), правая тоже относительно определённая (70% отрицательных). Сплит B почти не помог: правая ветка – чистый хаос (50/50).

Когда XGBoost перебирает тысячи признаков и порогов, он ищет максимум Information Gain. Он ищет разрез, который превращает неопределённость в определённость. Это оптимизация энтропии.


KL-дивергенция: расстояние между распределениями

До сих пор мы измеряли неопределённость одного распределения. Теперь давайте измерим, насколько одно распределение отличается от другого.

Представьте: истинное распределение PP, а вы его аппроксимируете распределением QQ. Если вы используете код, оптимальный для QQ, для передачи данных из PP, вы потратите лишние биты. Сколько именно лишних?

DKL(PQ)=ipilog2piqiD_{KL}(P \| Q) = \sum_{i} p_i \log_2 \frac{p_i}{q_i}

Свойства:

  • DKL0D_{KL} \geq 0 всегда
  • DKL=0D_{KL} = 0 только когда P=QP = Q
  • Не симметрична: DKL(PQ)DKL(QP)D_{KL}(P \| Q) \neq D_{KL}(Q \| P)

KL-дивергенция это не расстояние в строгом смысле (нет симметрии), но она измеряет «информационную стоимость» ошибки: сколько бит вы теряете, используя неправильную модель.


Cross-Entropy Loss: откуда берётся функция потерь

Теперь ключевое соединение. Cross-entropy между PP и QQ определяется как:

H(P,Q)=ipilog2qiH(P, Q) = -\sum_{i} p_i \log_2 q_i

И она разлагается на два компонента:

H(P,Q)=H(P)+DKL(PQ)H(P, Q) = H(P) + D_{KL}(P \| Q)

Cross-entropy = энтропия истинного распределения + KL-дивергенция.

Когда мы обучаем нейросеть, PP — это истинные метки (one-hot вектор), QQ — предсказания модели. Энтропия H(P)H(P) для one-hot меток равна нулю (нет неопределённости, мы точно знаем класс). Значит:

H(P,Q)=DKL(PQ)H(P, Q) = D_{KL}(P \| Q)

Минимизировать cross-entropy loss = минимизировать KL-дивергенцию = приближать предсказания модели к реальности.

Для бинарной классификации формула принимает знакомый вид:

L=1Ni=1N[yilog(y^i)+(1yi)log(1y^i)]L = -\frac{1}{N} \sum_{i=1}^{N} \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right]

где yi{0,1}y_i \in \{0, 1\} — истинная метка, y^i\hat{y}_i — предсказанная вероятность.

Это та же энтропия Шеннона, только теперь не «сколько бит нужно», а «сколько бит мы тратим зря из-за того, что модель ошибается».

Когда нейросеть обучается с cross-entropy loss, она буквально учится кодировать реальность с минимальным количеством лишних бит.


Замыкаем круг

Три мира, одна идея:

КонтекстВопросФормула
Теория информацииСколько бит нужно для кодирования?H(P)H(P)
Деревья решенийКакой сплит снижает неопределённость?IG=H(до)H(после)IG = H(\text{до}) - H(\text{после})
НейросетиКак далеки предсказания от реальности?H(P,Q)=H(P)+DKL(PQ)H(P, Q) = H(P) + D_{KL}(P \| Q)

Связь трёх контекстов через одну формулу Шеннона: теория информации, деревья решений, нейросети

Когда дерево выбирает сплит с максимальным Information Gain — оно минимизирует энтропию.

Когда нейросеть минимизирует cross-entropy loss — она минимизирует KL-дивергенцию.

И то, и другое – это попытка сделать мир предсказуемее. Дерево делает это дискретными разрезами, а нейросеть непрерывной оптимизацией. Но математика одна и та же.


Почему это полезно знать

Понимание связи помогает диагностировать проблемы:

Высокий cross-entropy loss при хорошем AUC: модель правильно ранжирует объекты, но её вероятности врут. Она говорит «0.9» там, где на самом деле «0.6». AUC это не видит (он про ранжирование), а cross-entropy видит (он про расстояние до истинного распределения). Решение: калибровка (Platt scaling, isotonic regression).

Information Gain близок к нулю на всех признаках: ни один признак не снижает энтропию. У вас шум, а не данные. Или задача не решается деревьями. Или нужна feature engineering.

Энтропия целевой переменной близка к нулю: один класс доминирует (99% vs 1%). Энтропия H(0.01)0.08H(0.01) \approx 0.08 бит — почти нет неопределённости, которую можно снижать. Дерево будет строить тривиальные сплиты, а accuracy будет 99% без модели. Это сигнал использовать другие метрики (precision, recall, MCC) и методы работы с дисбалансом.


Итого

Энтропия Шеннона — мера неопределённости: сколько бит нужно, чтобы закодировать исход.

Information Gain — это снижение энтропии при сплите. Деревья решений оптимизируют именно это.

KL-дивергенция — информационная стоимость ошибки: сколько лишних бит вы тратите, используя неправильную модель.

Cross-Entropy Loss — KL-дивергенция между реальностью и предсказаниями (при one-hot метках). Нейросети оптимизируют именно это.

Одна формула 1948 года. Три мира. Одна идея: мир неопределён, и мы хотим сделать его предсказуемее.