Теория информации

Энтропия

Сколько бит нужно, чтобы записать исход — и почему это же число измеряет неопределённость

Шаг 54 из 117 · ~28 мин

Сколько бит стоит исход

Начнём не с определения, а с задачи. Вы хотите передать по каналу, какой из четырёх равновероятных исходов случился. Очевидный код — два бита: 00, 01, 10, 11.

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

исходвероятностькоддлина
aa1/21/2011
bb1/41/41022
cc1/81/811033
dd1/81/811133

Средняя длина: 121+142+183+183=1.75\frac12 \cdot 1 + \frac14 \cdot 2 + \frac18 \cdot 3 + \frac18 \cdot 3 = 1.75 бита вместо двух. И лучше 1.751.75 не сделать — это доказанный предел.

Заметьте закономерность: длина кода каждого исхода равна log21p\log_2 \frac{1}{p}. Отсюда и определение.

H(p)=xp(x)log21p(x)=xp(x)log2p(x)\htmlData{k=h}{H(p)} = \sum_x \htmlData{k=weight}{p(x)} \cdot \htmlData{k=surprise}{\log_2 \frac{1}{p(x)}} = -\sum_x p(x)\log_2 p(x)

— это средняя , взвешенная по . Два прочтения одного числа, и оба верны: минимальное среднее число бит на исход, и мера неопределённости распределения.

Соглашение 0log0=00 \log 0 = 0 принимается по непрерывности: plogp0p \log p \to 0 при p0p \to 0. Невозможный исход не добавляет неопределённости.

Границы

Подвигайте ползунки. Энтропия максимальна, когда все исходы равновероятны, и равна нулю, когда один исход достоверен.

распределение p

a 0.5
b 0.25
c 0.125
d 0.125
H(p)
1.75 бит
максимум log₂ 4
2 бит
перплексия 2^H
3.3636 бит

Начальное состояние — тот самый пример из таблицы: H=1.75H = 1.75 бита, ровно средняя длина кода. Три наблюдения стоит сделать самому:

  • выровняйте все четыре ползунка: H=2H = 2 бита, то есть log24\log_2 4. Это максимум, и достигается он только на равномерном распределении;
  • обнулите три из четырёх: H=0H = 0. Неопределённости нет, передавать нечего;
  • обнулите один исход из четырёх и выровняйте остальные: H=log23=1.585H = \log_2 3 = 1.585. Энтропия не знает, сколько исходов «было предусмотрено» — только сколько их реально участвует.

Общие границы: 0H(p)log2n0 \le H(p) \le \log_2 n. Верхняя — потому что равномерное распределение максимизирует энтропию; это следствие неравенства Йенсена, и мы получим его в уроке про KL как KL(puniform)0\text{KL}(p \| \text{uniform}) \ge 0.

Что энтропия не измеряет

Три ошибки, которые стоит отсечь сразу.

Энтропия не зависит от значений исходов, только от их вероятностей. У распределения [0.5,0.5][0.5, 0.5] на исходах {0,1}\{0, 1\} и на исходах {0,109}\{0, 10^9\} энтропия одна и та же — один бит. Дисперсия у них разная в 101810^{18} раз. Это разные вещи: дисперсия измеряет разброс значений, энтропия — непредсказуемость.

Энтропия — не «беспорядок» в бытовом смысле. Она свойство распределения, а не конкретного объекта. У одной строки битов энтропии нет; у источника, который её выдал, есть.

Единицы важны. log2\log_2 даёт биты, ln\ln даёт наты, log10\log_{10} — дитыи. Формулы одинаковые, числа различаются множителем: 11 бит =ln2=0.693= \ln 2 = 0.693 ната. В машинном обучении почти всегда используют наты — просто потому, что torch.log это натуральный логарифм, — а в теории информации биты. При сравнении чисел из разных источников это первое, что стоит проверить.

Непрерывный случай, коротко

Для плотности определяют дифференциальную энтропию:

h(p)=p(x)logp(x)dxh(p) = -\int p(x)\log p(x)\,dx

Формула выглядит так же, но объект другой, и путать их не стоит:

дискретная HHдифференциальная hh
знаквсегда 0\ge 0может быть отрицательной
смыслчисло бит на исходне число бит
при замене координатне меняетсяменяется на $\log

Отрицательность легко получить: у равномерного на [0,0.5][0, 0.5] выходит h=log20.5=1h = \log_2 0.5 = -1. Ничего парадоксального — это следствие того, что плотность может превышать единицу, а мы уже знаем, что плотность не вероятность (блок 3, урок 040).

Третья строка — самая важная практически. Дифференциальная энтропия зависит от того, в каких единицах измерена величина: перейдите от метров к сантиметрам, и hh изменится. Поэтому её редко используют в одиночку, а вот KL-дивергенция и взаимная информация от координат не зависят, потому что якобианы в них сокращаются. Это причина, по которой в машинном обучении почти всё формулируется через KL, а не через энтропию.

Источники

Проверки

0 из 2
  1. Что измеряет энтропия

    Отметьте все верные утверждения об энтропии.

  2. Энтропия, перплексия и носитель

    Дан список ненормированных весов weights. Нормируйте его и верните [entropy, perplexity, max_entropy, support], всё в битах:

    • entropy = ipilog2pi-\sum_i p_i \log_2 p_i, с соглашением 0log0=00\log 0 = 0;
    • perplexity = 2H2^{H};
    • max_entropy = log2n\log_2 n, где nnдлина списка, а не число ненулевых элементов;
    • support — сколько pip_i строго больше нуля, как число с плавающей точкой.

    Соглашение 0log0=00\log 0 = 0 реализуйте пропуском нулевых слагаемых, иначе получите nan: в Python 0 * math.log2(0) — это ошибка домена, в JavaScript 0 * Math.log2(0) — это NaN.

    функция entropy_facts

    Загрузка редактора…

    Ctrl/⌘ + Enter