Сжатие — это предсказание
Недавно я разбирался, как компьютеры уменьшают файлы, и наткнулся на красивую идею: хороший компрессор и языковая модель во многом выигрывают по одной причине — они умеют находить закономерности и предсказывать продолжение.
Ниже пройдём путь от самого примитивного уменьшения кода до вероятностей и увидим, почему хорошее предсказание буквально позволяет тратить меньше информации.
Как работает сжатие
Есть много способов сделать данные меньше. Самый простой пример — минификация: мы убираем из кода всё, что удобно человеку, но не обязательно компьютеру. Длинные имена сокращаются, комментарии и лишние пробелы исчезают.
Нажми «Минифицировать» и посмотри, что изменится:
// Sum every number in the list
function sumNumbers(numbers) {
let total = 0;
for (const number of numbers) {
total += number;
}
return total;
}Исходник: 156 символов.
Результат становится меньше, но это ещё не самая интересная часть. Настоящее сжатие начинает выигрывать там, где в данных есть повторяемость.
Возьмём строку AAAAAAAAABBBBCCDAAADDDDDDDDD. В ней много повторов. Вместо того чтобы хранить каждый символ отдельно, можно хранить символ и количество его повторений подряд.
В обычной 8-битной записи исходная строка требует 224 бита, а короткая запись A9B4C2D1A3D9 — 96 бит. Мы ничего не потеряли: просто описали структуру короче.
Компрессору нужна модель
Повторы — только начало. Более сильный компрессор строит модель данных: оценивает, что встречается часто, а что редко. Частое событие можно описывать короче, редкое — длиннее.
Введи строку. Чем чаще встречается символ, тем выше его наблюдаемая вероятность.
Попробуй менять строку. Если один символ начинает доминировать, он становится менее неожиданным. В теории информации это означает, что на его описание в среднем можно тратить меньше битов.
Мост к языковым моделям
LLM делает похожий шаг: смотрит на контекст и выдаёт вероятности того, какой токен появится следующим. Чем выше вероятность правильного продолжения, тем лучше модель его предсказала.
Модель даёт правильному следующему символу вероятность 80%.
Именно здесь две темы сходятся. Хороший предсказатель обнаруживает структуру данных. Компрессор может превратить эту обнаруженную структуру в более короткую запись.