Теория информации
Кросс-энтропия и перплексия
Функция потерь, которой обучают почти всё — и почему она равна минус log-правдоподобию
Цена неверного кода
Энтропия из прошлого урока — длина оптимального кода, построенного под то самое распределение. Но что если код построен под другое?
Пусть данные приходят из , а вы, полагая, что они из , назначили исходу код длины . Средняя длина получается такой:
Асимметрия в записи содержательна:
Ключевое неравенство: , с равенством только при . Никакой неверный код не бывает короче оптимального.
Разложение, которое всё объясняет
Первое слагаемое от не зависит вообще, второе неотрицательно и обращается в нуль только при . Отсюда сразу два вывода:
- минимизировать кросс-энтропию по модели = минимизировать KL до данных. Энтропия данных — константа, на которую вы не влияете;
- у функции потерь есть непреодолимый минимум, равный . Если лосс перестал падать около , возможно, модель хороша, а данные шумны.
Подвигайте ползунки в виджете. не шевелится, а кросс-энтропия и KL меняются синхронно — потому что их разность и есть та самая константа.
данные p
модель q
- H(p) — предел
- 1.75 бит
- H(p, q) — лосс
- 2 бит
- KL(p‖q) — зазор
- 0.25 бит
- KL(q‖p)
- 0.25 бит
- H(q)
- 2 бит
Два состояния стоит посетить кнопками. «Подогнать под » — KL обращается в нуль, кросс-энтропия садится ровно на , и это дно. «Сделать равномерной» — кросс-энтропия становится бита (, длина наивного кода), а KL показывает цену незнания: бита.
Бесконечность
Обнулите в исход, у которого не нуль. Кросс-энтропия становится бесконечной, и это не артефакт: код для исхода, который модель считает невозможным, имеет бесконечную длину.
Практически это и есть причина, по которой в классификации никогда не используют жёсткие нули:
- softmax физически не может выдать ровно нуль — экспонента положительна;
- сглаживание Лапласа в наивном Байесе (блок 3, урок 190) — та же защита;
- label smoothing делает симметричное: не даёт целевому распределению быть жёстким.
Если у вас inf или nan в лоссе классификации, первое место, куда смотреть, — не
learning rate, а логарифм от нуля.
Кросс-энтропия — это MLE
Пусть — эмпирическое распределение выборки, то есть на каждом наблюдении. Тогда
Это в точности минус среднее log-правдоподобие из блока 3. То есть кросс-энтропия и MLE — не два похожих принципа, а один, записанный на двух языках:
| язык теории информации | язык статистики |
|---|---|
| минимизировать | максимизировать правдоподобие |
| минимизировать | то же самое |
| энтропия данных | константа, не зависящая от модели |
Ничего нового по сравнению с блоком 3 здесь не происходит — но переформулировка полезна, потому что на языке KL естественно ставятся задачи, где данных нет вовсе (вариационный вывод, дистилляция), а на языке правдоподобия — нет.
Перплексия
Перплексия — это кросс-энтропия, возведённая в экспоненту:
Читается как эффективное число вариантов, между которыми модель колеблется на каждом шаге. Перплексия означает «модель в среднем так же неуверенна, как при выборе из пятидесяти равновероятных слов».
Зачем экспонента, если это та же величина: логарифм плохо воспринимается на глаз. Улучшение лосса с до выглядит скромно; перплексия при этом падает с до , то есть на четверть. Одно и то же улучшение, две разные интонации.
Три вещи, которые ломают сравнение перплексий между моделями:
- основание логарифма. и — разные числа. Всегда проверяйте;
- токенизация. Перплексия на токен зависит от того, что считать токеном. Модель с крупным словарём имеет меньше токенов на текст и потому другую перплексию на токен — сравнивать надо перплексию на символ или на слово;
- корпус. Перплексия на своём домене и на чужом различается в разы.
Из этих трёх вторая ловит больше всего людей: перплексии двух моделей с разными токенизаторами несравнимы напрямую, каким бы одинаковым ни выглядело определение.
Источники
- Cover, Thomas — Elements of Information Theory, гл. 5 — Кодирование и цена неверного кода
- Jurafsky, Martin — Speech and Language Processing, гл. 3 — Перплексия языковых моделей
Проверки
0 из 2Кросс-энтропия как функция потерь
Отметьте все верные утверждения о кросс-энтропии и перплексии.
Кросс-энтропия, KL и перплексия
Даны два списка ненормированных весов:
p_weights(данные) иq_weights(модель). Нормируйте оба и верните[entropy, cross_entropy, kl, perplexity]в битах.entropy= ;cross_entropy= ;kl= ;perplexity= .
Если модель обнулила исход, который в данных возможен — то есть существует с и — верните
entropyкак обычно, а остальные три числа как-1.0. Сентинель однозначен: ни кросс-энтропия, ни KL, ни перплексия отрицательными не бывают.Слагаемые с пропускайте: такой исход не вносит вклада, даже если тоже равно нулю.
Загрузка редактора…
Ctrl/⌘ + Enter