Теория информации
Энтропия
Сколько бит нужно, чтобы записать исход — и почему это же число измеряет неопределённость
Сколько бит стоит исход
Начнём не с определения, а с задачи. Вы хотите передать по каналу, какой из четырёх
равновероятных исходов случился. Очевидный код — два бита: 00, 01, 10, 11.
Теперь пусть исходы неравновероятны: первый случается в половине случаев, второй в четверти, остальные два по одной восьмой. Двух битов на каждый по-прежнему хватит, но это расточительно — частый исход можно записать короче за счёт редких:
| исход | вероятность | код | длина |
|---|---|---|---|
0 | |||
10 | |||
110 | |||
111 |
Средняя длина: бита вместо двух. И лучше не сделать — это доказанный предел.
Заметьте закономерность: длина кода каждого исхода равна . Отсюда и определение.
Соглашение принимается по непрерывности: при . Невозможный исход не добавляет неопределённости.
Границы
Подвигайте ползунки. Энтропия максимальна, когда все исходы равновероятны, и равна нулю, когда один исход достоверен.
распределение p
- H(p)
- 1.75 бит
- максимум log₂ 4
- 2 бит
- перплексия 2^H
- 3.3636 бит
Начальное состояние — тот самый пример из таблицы: бита, ровно средняя длина кода. Три наблюдения стоит сделать самому:
- выровняйте все четыре ползунка: бита, то есть . Это максимум, и достигается он только на равномерном распределении;
- обнулите три из четырёх: . Неопределённости нет, передавать нечего;
- обнулите один исход из четырёх и выровняйте остальные: . Энтропия не знает, сколько исходов «было предусмотрено» — только сколько их реально участвует.
Общие границы: . Верхняя — потому что равномерное распределение максимизирует энтропию; это следствие неравенства Йенсена, и мы получим его в уроке про KL как .
Что энтропия не измеряет
Три ошибки, которые стоит отсечь сразу.
Энтропия не зависит от значений исходов, только от их вероятностей. У распределения на исходах и на исходах энтропия одна и та же — один бит. Дисперсия у них разная в раз. Это разные вещи: дисперсия измеряет разброс значений, энтропия — непредсказуемость.
Энтропия — не «беспорядок» в бытовом смысле. Она свойство распределения, а не конкретного объекта. У одной строки битов энтропии нет; у источника, который её выдал, есть.
Единицы важны. даёт биты, даёт наты, — дитыи. Формулы
одинаковые, числа различаются множителем: бит ната. В машинном
обучении почти всегда используют наты — просто потому, что torch.log это натуральный
логарифм, — а в теории информации биты. При сравнении чисел из разных источников это
первое, что стоит проверить.
Непрерывный случай, коротко
Для плотности определяют дифференциальную энтропию:
Формула выглядит так же, но объект другой, и путать их не стоит:
| дискретная | дифференциальная | |
|---|---|---|
| знак | всегда | может быть отрицательной |
| смысл | число бит на исход | не число бит |
| при замене координат | не меняется | меняется на $\log |
Отрицательность легко получить: у равномерного на выходит . Ничего парадоксального — это следствие того, что плотность может превышать единицу, а мы уже знаем, что плотность не вероятность (блок 3, урок 040).
Третья строка — самая важная практически. Дифференциальная энтропия зависит от того, в каких единицах измерена величина: перейдите от метров к сантиметрам, и изменится. Поэтому её редко используют в одиночку, а вот KL-дивергенция и взаимная информация от координат не зависят, потому что якобианы в них сокращаются. Это причина, по которой в машинном обучении почти всё формулируется через KL, а не через энтропию.
Источники
- MacKay — Information Theory, Inference, and Learning Algorithms, гл. 2, 4 — Энтропия, кодирование, неравенство Крафта
- Cover, Thomas — Elements of Information Theory, гл. 2 — Энтропия и её свойства
Проверки
0 из 2Что измеряет энтропия
Отметьте все верные утверждения об энтропии.
Энтропия, перплексия и носитель
Дан список ненормированных весов
weights. Нормируйте его и верните[entropy, perplexity, max_entropy, support], всё в битах:entropy= , с соглашением ;perplexity= ;max_entropy= , где — длина списка, а не число ненулевых элементов;support— сколько строго больше нуля, как число с плавающей точкой.
Соглашение реализуйте пропуском нулевых слагаемых, иначе получите
nan: в Python0 * math.log2(0)— это ошибка домена, в JavaScript0 * Math.log2(0)— этоNaN.Загрузка редактора…
Ctrl/⌘ + Enter