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

Кросс-энтропия и перплексия

Функция потерь, которой обучают почти всё — и почему она равна минус log-правдоподобию

Шаг 55 из 117 · ~30 мин

Цена неверного кода

Энтропия из прошлого урока — длина оптимального кода, построенного под то самое распределение. Но что если код построен под другое?

Пусть данные приходят из pp, а вы, полагая, что они из qq, назначили исходу xx код длины log21q(x)\log_2 \frac{1}{q(x)}. Средняя длина получается такой:

H(p,q)=xp(x)log2q(x)\htmlData{k=ce}{H(p, q)} = -\sum_x \htmlData{k=real}{p(x)}\log_2 \htmlData{k=believed}{q(x)}

Асимметрия в записи содержательна: берутся из реальности, а — из модели. Именно поэтому H(p,q)H(q,p)H(p, q) \ne H(q, p), и порядок аргументов путать нельзя.

Ключевое неравенство: H(p,q)H(p)H(p, q) \ge H(p), с равенством только при p=qp = q. Никакой неверный код не бывает короче оптимального.

Разложение, которое всё объясняет

H(p,q)=H(p)+KL(pq)H(p, q) = H(p) + \text{KL}(p \,\|\, q)

Первое слагаемое от qq не зависит вообще, второе неотрицательно и обращается в нуль только при q=pq = p. Отсюда сразу два вывода:

  • минимизировать кросс-энтропию по модели = минимизировать KL до данных. Энтропия данных — константа, на которую вы не влияете;
  • у функции потерь есть непреодолимый минимум, равный H(p)H(p). Если лосс перестал падать около 0.60.6, возможно, модель хороша, а данные шумны.

Подвигайте ползунки qq в виджете. H(p)H(p) не шевелится, а кросс-энтропия и KL меняются синхронно — потому что их разность и есть та самая константа.

данные p

a 0.5
b 0.25
c 0.125
d 0.125

модель q

a 0.25
b 0.25
c 0.25
d 0.25
H(p) — предел
1.75 бит
H(p, q) — лосс
2 бит
KL(p‖q) — зазор
0.25 бит
KL(q‖p)
0.25 бит
H(q)
2 бит

Два состояния стоит посетить кнопками. «Подогнать qq под pp» — KL обращается в нуль, кросс-энтропия садится ровно на H(p)=1.75H(p) = 1.75, и это дно. «Сделать qq равномерной» — кросс-энтропия становится 22 бита (=log24= \log_2 4, длина наивного кода), а KL показывает цену незнания: 0.250.25 бита.

Бесконечность

Обнулите в qq исход, у которого pp не нуль. Кросс-энтропия становится бесконечной, и это не артефакт: код для исхода, который модель считает невозможным, имеет бесконечную длину.

Практически это и есть причина, по которой в классификации никогда не используют жёсткие нули:

  • softmax физически не может выдать ровно нуль — экспонента положительна;
  • сглаживание Лапласа в наивном Байесе (блок 3, урок 190) — та же защита;
  • label smoothing делает симметричное: не даёт целевому распределению быть жёстким.

Если у вас inf или nan в лоссе классификации, первое место, куда смотреть, — не learning rate, а логарифм от нуля.

Кросс-энтропия — это MLE

Пусть pp — эмпирическое распределение выборки, то есть 1/n1/n на каждом наблюдении. Тогда

H(p^,q)=1ni=1nlogq(xi)H(\hat{p}, q) = -\frac{1}{n}\sum_{i=1}^{n} \log q(x_i)

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

язык теории информацииязык статистики
минимизировать H(p^,q)H(\hat p, q)максимизировать правдоподобие
минимизировать KL(p^q)\text{KL}(\hat p \| q)то же самое
энтропия данных H(p^)H(\hat p)константа, не зависящая от модели

Ничего нового по сравнению с блоком 3 здесь не происходит — но переформулировка полезна, потому что на языке KL естественно ставятся задачи, где данных нет вовсе (вариационный вывод, дистилляция), а на языке правдоподобия — нет.

Перплексия

Перплексия — это кросс-энтропия, возведённая в экспоненту:

PPL=2H(p,q)(в битах),PPL=eH(p,q)(в натах)\text{PPL} = 2^{H(p, q)} \quad\text{(в битах)}, \qquad \text{PPL} = e^{H(p,q)} \quad\text{(в натах)}

Читается как эффективное число вариантов, между которыми модель колеблется на каждом шаге. Перплексия 5050 означает «модель в среднем так же неуверенна, как при выборе из пятидесяти равновероятных слов».

Зачем экспонента, если это та же величина: логарифм плохо воспринимается на глаз. Улучшение лосса с 4.04.0 до 3.73.7 выглядит скромно; перплексия при этом падает с 54.654.6 до 40.440.4, то есть на четверть. Одно и то же улучшение, две разные интонации.

Три вещи, которые ломают сравнение перплексий между моделями:

  • основание логарифма. 2H2^H и eHe^H — разные числа. Всегда проверяйте;
  • токенизация. Перплексия на токен зависит от того, что считать токеном. Модель с крупным словарём имеет меньше токенов на текст и потому другую перплексию на токен — сравнивать надо перплексию на символ или на слово;
  • корпус. Перплексия на своём домене и на чужом различается в разы.

Из этих трёх вторая ловит больше всего людей: перплексии двух моделей с разными токенизаторами несравнимы напрямую, каким бы одинаковым ни выглядело определение.

Источники

Проверки

0 из 2
  1. Кросс-энтропия как функция потерь

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

  2. Кросс-энтропия, KL и перплексия

    Даны два списка ненормированных весов: p_weights (данные) и q_weights (модель). Нормируйте оба и верните [entropy, cross_entropy, kl, perplexity] в битах.

    • entropy = H(p)H(p);
    • cross_entropy = H(p,q)=ipilog2qiH(p,q) = -\sum_i p_i \log_2 q_i;
    • kl = H(p,q)H(p)H(p,q) - H(p);
    • perplexity = 2H(p,q)2^{H(p,q)}.

    Если модель обнулила исход, который в данных возможен — то есть существует ii с pi>0p_i > 0 и qi=0q_i = 0 — верните entropy как обычно, а остальные три числа как -1.0. Сентинель однозначен: ни кросс-энтропия, ни KL, ни перплексия отрицательными не бывают.

    Слагаемые с pi=0p_i = 0 пропускайте: такой исход не вносит вклада, даже если qiq_i тоже равно нулю.

    функция ce_facts

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

    Ctrl/⌘ + Enter