Сжатие — это предсказание

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

Ниже пройдём путь от самого примитивного уменьшения кода до вероятностей и увидим, почему хорошее предсказание буквально позволяет тратить меньше информации.

Как работает сжатие

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

Нажми «Минифицировать» и посмотри, что изменится:

sum-numbers.js
// Sum every number in the list
function sumNumbers(numbers) {
  let total = 0;
  for (const number of numbers) {
    total += number;
  }
  return total;
}

Исходник: 156 символов.

Результат становится меньше, но это ещё не самая интересная часть. Настоящее сжатие начинает выигрывать там, где в данных есть повторяемость.

Возьмём строку AAAAAAAAABBBBCCDAAADDDDDDDDD. В ней много повторов. Вместо того чтобы хранить каждый символ отдельно, можно хранить символ и количество его повторений подряд.

ИТОГО: 224 бит
AAAAAAAAA
9
BBBB
4
CC
2
D
1
AAA
3
DDDDDDDDD
9

В обычной 8-битной записи исходная строка требует 224 бита, а короткая запись A9B4C2D1A3D9 — 96 бит. Мы ничего не потеряли: просто описали структуру короче.

Компрессору нужна модель

Повторы — только начало. Более сильный компрессор строит модель данных: оценивает, что встречается часто, а что редко. Частое событие можно описывать короче, редкое — длиннее.

ДАННЫЕ
МОДЕЛЬ
ВЕРОЯТНОСТИ
КОДЕР
БИТЫ
ЛАБОРАТОРИЯ ВЕРОЯТНОСТЕЙ

Введи строку. Чем чаще встречается символ, тем выше его наблюдаемая вероятность.

A
43%
N
29%
B
14%
_
7%
D
7%

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

Мост к языковым моделям

LLM делает похожий шаг: смотрит на контекст и выдаёт вероятности того, какой токен появится следующим. Чем выше вероятность правильного продолжения, тем лучше модель его предсказала.

ПРЕДСКАЗАНИЕ → БИТЫ

Модель даёт правильному следующему символу вероятность 80%.

слабое предсказаниеуверенное
0.32идеальных бита

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