Кросс-энтропия простыми словами: от gzip до обучения LLM

Кросс-энтропия простыми словами: от gzip до обучения LLM

В 2002 году вышла статья «Language Trees and Zipping», которая показала нечто странное: генеалогическое древо языков можно восстановить обычным архиватором. Без лингвистики, без нейросетей, без статистики корпусов. Просто gzip. Авторы брали тексты на разных языках, сжимали их по особому правилу и получали дерево родства языков, похожее на то, что лингвисты строили десятилетиями. Тот же трюк работал и для определения авторства документа.

Авторы определили метрику расстояния между документами исключительно на том, насколько хорошо они сжимаются вместе. Результат впечатлил: построенное по этой метрике древо почти совпало с классической классификацией языков, а та же схема без изменений решала задачу атрибуции, определяя автора текста. Статья стала чистым примером того, как теория сжатия оказывается полезной в задачах, которые вроде бы относятся к машинному обучению.

Концепция, которая стоит за этим фокусом, называется кросс-энтропией. И она же является функцией потерь, на которой обучаются современные языковые модели. Грант Сандерсон (3Blue1Brown) в серии «Compression is Intelligence» разбирает эту связь детально, и его объяснение стоит того, чтобы пересказать его по-русски. Потому что когда одна и та же формула всплывает в архиваторе и в обучении GPT, математика как бы подмигивает: тут спрятана глубокая связь.

Что такое кросс-энтропия

Кросс-энтропия это мера того, насколько хорошо схема кодирования, оптимизированная под одно распределение вероятностей, работает с данными из другого распределения. Измеряется в битах на символ. Если оба распределения совпадают, кросс-энтропия минимальна и равна обычной энтропии. Чем сильнее расхождение, тем больше бит вы тратите впустую.

Определение звучит сухо, поэтому дальше только конкретика.

Робот и четыре команды

Представьте, что вы передаёте далёкому роботу последовательности из четырёх команд: вверх, вниз, влево, вправо. Каждая команда появляется со своей вероятностью: «вверх» в половине случаев, «вниз» в четверти, «влево» и «вправо» по одной восьмой.

Из первой части серии про сжатие следует: оптимальный код выделяет каждому символу количество бит, равное минус логарифму по основанию два от его вероятности. «Вверх» получает один бит, «вниз» два, «влево» и «вправо» по три. Клод Шеннон назвал выражение −log₂(p) информационным содержанием события. Среднее число бит на команду в такой схеме и есть энтропия распределения.

Теперь космическое агентство меняет план. Робот должен чаще двигаться вправо: «вправо» теперь выпадает в половине случаев, «влево» в четверти, а «вверх» и «вниз» лишь по одной восьмой. Но ваш кодировщик зашит под старое распределение. Насколько это плохо?

Считаем: однобитная команда «вверх» теперь приходит только в 12,5% случаев, трёхбитные «влево» и «вправо» в 75%. Взвешенная сумма даёт 2,625 бита на сообщение. Это и есть кросс-энтропия исходного распределения относительно нового. Вопрос, который она задаёт: как схема, заточенная под один контекст, справляется с другим?

Формула и её главное свойство

Обозначим новое распределение буквой P, а то, под которое оптимизирован код, буквой Q. Код выделяет символу i количество бит −log₂(qᵢ), а встречается символ с частотой pᵢ. Кросс-энтропия это сумма по всем символам: pᵢ × (−log₂ qᵢ). Ширина столбика на диаграмме это pᵢ, высота это информационное содержание по Q.

Самое важное свойство: если зафиксировать P и варьировать Q, кросс-энтропия достигает минимума ровно тогда, когда Q совпадает с P. И значение этого минимума равно энтропии P. Порядок аргументов критичен. Если Q это честные 50/50, а реальность P перекошена в 90/10, кросс-энтропия равна одному биту, как и энтропия. Переверните роли, и вы получите около 1,74 бита: код, заточенный под редкое-событие-как-частое, расточительно тратит биты в мире, где всё равновероятно.

Именно тут становится ясно, при чём тут gzip. Когда авторы статьи 2002 года приклеивали кусочек документа B к документу A и смотрели, насколько вырастет сжатый файл, они по сути измеряли, насколько хорошо компрессор, настроенный на паттерны A, справляется с B. Это эмпирическая оценка кросс-энтропии. Gzip далёк от шенноновского предела, он просто заменяет повторы ссылками, но даже такого приближения хватило, чтобы восстановить древо языков.

Почему при обучении нейросети логарифм не выбор, а необходимость

Теперь вторая половина истории: языковые модели. Модель это функция, которая принимает последовательность токенов и выдаёт распределение вероятностей для следующего токена. Чтобы её обучить, нужна функция потерь, число, которое говорит, насколько предсказания плохи.

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

Но почему именно логарифм? Убывающих функций бесконечно много. Сандерсон приводит аргумент, который переворачивает вопрос. Рассмотрим паттерн «моё имя это …». В корпусе он встречается тысячи раз с разными именами. Частота каждого имени в данных это P. Модель выдаёт своё распределение Q. Если мы хотим, чтобы полный средний лосс по всем примерам этого паттерна достигал минимума только тогда, когда Q совпадает со статистикой данных, то функция потерь обязана быть логарифмом. Доказательство идёт через множители Лагранжа: условие минимума сводится к требованию, чтобы производная f′(q) была пропорциональна 1/q, а такое свойство есть только у логарифма. Рука принуждена, выбора нет.

Небольшая техническая деталь: в машинном обучении почти всегда берут натуральный логарифм вместо двоичного. На результат это не влияет, выражения отличаются константным множителем, который поглощается learning rate. Причина в удобстве: производные натурального логарифма чище, а производные это ядро градиентного спуска.

И вот тут формула кросс-энтропии возникает сама собой: средний лосс по примерам одного паттерна это в точности взвешенная сумма pᵢ × (−log qᵢ). Кросс-энтропия выхода модели относительно статистики данных.

Что лосс говорит на практике: перплексия

Число, которое вы видите в логах обучения, имеет прямой физический смысл. Если кросс-энтропийный лосс равен двум битам на токен, модель в среднем удивляется так, словно выбирает из четырёх равновероятных вариантов. Экспонента лосса, 2 в степени кросс-энтропии, называется перплексией и показывает эффективный размер словаря, из которого модель «выбирает» каждый токен. Перплексия 50 означает, что неопределённость модели на слове сравнима с равномерным выбором из пятидесяти вариантов.

Идеальный предел для лосса это энтропия самого языка: даже совершенная модель не может предсказать текст точнее, чем позволяет его внутренняя случайность. Оценки энтропии английского текста по Шеннону давали значения около одного бита на символ. Когда исследователи сообщают, что новая модель «снизила лосс на 0,05», они сообщают, что модель стала чуть лучшим компрессором человеческого языка.

Дистилляция: кросс-энтропия в чистом виде

Обычный предтрейн сравнивает распределение модели с вырожденным: вся вероятностная масса сосредоточена на одном настоящем следующем токене. Это грубый сигнал. Дистилляция работает тоньше.

Задача дистилляции: обучить маленькую модель, приближающую большую и умную. Вместо сравнения с одним правильным токеном маленькая модель на каждом шаге сравнивает своё полное распределение с полным распределением учителя. Лосс на токене это кросс-энтропия распределения ученика относительно распределения большой модели.

Разница как между изучением шахмат по записям партий и разбором с мастером, который на каждом ходу проговаривает все сильные продолжения и их веса. В примере с именами обычному предтрейну нужны миллионы примеров, чтобы лосс приблизил кросс-энтропию к честному распределению имён. При дистилляции тот же эффект даёт один пример, потому что учитель уже несёт в себе статистику мира. Именно поэтому дистилляция так эффективна: она передаёт не только ответы, но и форму неопределённости учителя.

KL-дивергенция: цена расточительства

Раз кросс-энтропия минимальна при Q = P и минимум равен энтропии P, естественно дать имя разнице между ними. Эта разница называется дивергенцией Кульбака-Лейблера. На языке сжатия: сколько бит на символ вы теряете, пользуясь плохо подобранным кодом. В примере с роботом вычтите 2,625 бита неоптимального кода и энтропию нового распределения, получите KL-дивергенцию, меру вашего расточительства.

В машинном обучении KL-дивергенция играет роль расстояния между распределениями: ноль при совпадении, рост при расхождении. Только это не настоящее расстояние, оно несимметрично. KL от Q к P не равна KL от P к Q, что мы уже видели на примере с перевёрнутыми распределениями. Сандерсон оставляет слушателям вопрос на подумать: что случится, если при дистилляции вместо кросс-энтропии использовать KL-дивергенцию? Подсказка спрятана в том, что энтропия распределения учителя не зависит от параметров ученика.

Сжатие это интеллект

Соберём всё вместе. В первой половине кросс-энтропия возникла из вопроса о том, как код для одного мира работает в другом. Во второй она выросла из constrained optimization, из требования, чтобы минимум лосса достигался на совпадении со статистикой данных. Два разных пути к одной формуле.

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

Отсюда и провокационный тезис «сжатие это интеллект». Модель, которая лучше предсказывает, лучше сжимает. Модель, которая лучше сжимает, глубже уловила структуру данных. Архиватор 2002 года, восстанавливающий древо языков, и GPT, минимизирующий кросс-энтропию на триллионах токенов, стоят на одном и том же фундаменте.

Часто задаваемые вопросы

Чем кросс-энтропия отличается от энтропии?

Энтропия измеряет неопределённость одного распределения: минимальное среднее число бит на символ при идеальном коде. Кросс-энтропия измеряет цену несовпадения двух распределений: сколько бит вы тратите, если код оптимизирован под Q, а реальность следует P. Кросс-энтропия всегда не меньше энтропии.

Почему функцию потерь нейросети называют кросс-энтропией, если формулы не видно?

При обычном обучении сравнение идёт с вырожденным распределением, где вся масса на одном токене, и формула сворачивается до −log p. Но если усреднить лосс по всем повторяющимся паттернам данных, получается честная кросс-энтропия между выходом модели и статистикой корпуса. Название оправдано на уровне всей выборки.

Что такое дистилляция модели простыми словами?

Маленькая модель учится не на правильных ответах, а на полных распределениях вероятностей большой модели. Учитель показывает не только лучший следующий токен, но и всю структуру своей неопределённости. Такой сигнал богаче, и ученик достигает сопоставимого качества с меньшими данными и параметрами.

Итог

Кросс-энтропия это мост между теорией информации 1948 года и обучением современных LLM. Она отвечает на один вопрос: как схема, оптимизированная под один контекст, работает в другом. Gzip отвечает на него для языков, функция потерь для нейросети, дистилляция для пары учитель-ученик. В следующий раз, когда увидите cross entropy loss в коде, вспомните робота с четырьмя командами: вы смотрите на компрессор, который учится сжимать человеческий язык. А если хотите проверить понимание, попробуйте объяснить коллеге, почему логарифм в лоссе не соглашение, а математическая необходимость.

← Все записи