Featured image of post «Сложность» нельзя измерить числом символов: колмогоровская сложность и истинная природа случайности

«Сложность» нельзя измерить числом символов: колмогоровская сложность и истинная природа случайности

От длины кратчайшей программы, несжимаемости и случайности по Мартин-Лёфу до теоремы об инвариантности, парадокса Берри, невычислимости, константы Хайтина Ω, энтропии Шеннона и современных языковых моделей (LLM).

Введение: Загадка трёх строк длиной в миллион бит — Слепое пятно теории информации Шеннона

Представьте, что перед вами лежат три двоичные строки, каждая длиной ровно $1\,000\,000$ бит:

  • Первая строка $S_1$ — это пятьсот тысяч раз повторённая комбинация 01: 01010101...01.
  • Вторая строка $S_2$ — первые $1\,000\,000$ двоичных знаков после запятой числа $\pi$: 1100100100001111110110....
  • Третья строка $S_3$ получена в результате миллиона реальных подбрасываний симметричной монеты (орёл = 1, решка = 0).

Какая из этих трёх строк содержит больше «информации»? Какая из них «сложнее», и какая является по-настоящему «случайной»? Если мы обратимся к классической теории информации Клода Шеннона (1948), мы столкнёмся с неожиданным парадоксом: шенноновская энтропия $H(X) = -\sum P(x)\log_2 P(x)$ измеряет среднюю неопределённость распределения вероятностей (ансамбля источника), но совершенно ничего не говорит о внутренней сложности отдельного конкретного объекта $x$! В модели честной монеты вероятность выпадения идеально регулярной строки $S_1$ и хаотичной строки $S_3$ абсолютно одинакова и равна $2^{-1\,000\,000}$; а для детерминированной константы $\pi$ ($S_2$) распределение вообще вырождено в одну точку с нулевой энтропией ($H=0$), хотя частота нулей и единиц в ней проходит любые статистические тесты на псевдослучайность!

Чтобы дать строгое математическое определение сложности и случайности индивидуального объекта, Рэй Соломонофф (1960), Андрей Николаевич Колмогоров (1965) и Грегори Хайтин (1966) независимо друг от друга создали алгоритмическую теорию информации (Algorithmic Information Theory, AIT). Их ключевая идея проста и гениальна: истинная сложность объекта определяется не количеством символов в нём, а длиной самой короткой компьютерной программы, способной этот объект породить!

  flowchart TD
    S1["String S1: 010101...01 (1M bits)"] -->|"Short Loop Program"| K1["K(S1) = O(log n) bits (Highly Compressible)"]
    S2["String S2: Binary Digits of Pi (1M bits)"] -->|"Spigot Algorithm"| K2["K(S2) = O(log n) bits (Deterministic Law)"]
    S3["String S3: Fair Coin Flips (1M bits)"] -->|"No Pattern / Hardcoded"| K3["K(S3) >= n - O(1) bits (Algorithmically Random)"]

1. Колмогоровская сложность $K(x)$ и теорема об инвариантности

Зафиксируем универсальную машину Тьюринга $U$ (или любой Тьюринг-полный язык программирования, такой как C или Python). Колмогоровской сложностью $K_U(x)$ двоичной строки $x \in \{0,1\}^*$ называется битовая длина $|p|$ кратчайшей программы $p$, которая при запуске на машине $U$ выводит строку $x$ и останавливается. Чтобы выполнялось неравенство Крафта $\sum 2^{-|p|} \le 1$, в современной теории обычно используется беспрефиксная сложность (сложность Левина — Хайтина) $K(x)$, при которой ни одна допустимая программа не является началом другой.

Взглянем на наши три строки длиной в миллион бит сквозь призму $K(x)$:

  • Для $S_1$ достаточно крошечной программы print("01" * 500000). Поскольку в программе нужно закодировать лишь двоичную запись счётчика цикла $n/2$, получаем $K(S_1) = O(\log_2 n) pprox 20$ бит — эта строка алгоритмически тривиальна.
  • Для $S_2$ (первые $n$ бит числа $\pi$), несмотря на кажущийся хаос битов, программа длиной в несколько сотен байт, реализующая формулу Мэчина или капельный алгоритм BBP, вычисляет $S_2$ абсолютно точно. Следовательно, и здесь $K(S_2) = O(\log_2 n)$! Это открывает глубокую философскую истину: закон природы — это не что иное, как предельное алгоритмическое сжатие эмпирических наблюдений.
  • Напротив, для строки $S_3$, полученной бросками монеты, не существует никакой скрытой закономерности. Кратчайшая программа для вывода $S_3$ вынуждена буквально хранить все миллион бит в явном виде (print("1011001...")), поэтому $K(S_3) pprox n + O(1) pprox 1\,000\,000$ бит!

Возникает естественный вопрос: не зависит ли $K_U(x)$ от произвольного выбора языка программирования $U$? Теорема Колмогорова об инвариантности (Invariance Theorem) доказывает, что нет: для любых двух универсальных машин Тьюринга $U_1$ и $U_2$ существует константа $c_{12}$, зависящая только от $U_1$ и $U_2$ (и не зависящая от строки $x$), такая что $|K_{U_1}(x) - K_{U_2}(x)| \le c_{12}$. Доказательство прозрачно: $c_{12}$ — это просто фиксированный размер интерпретатора (симулятора) машины $U_2$, написанного на языке $U_1$! При стремлении длины данных $n o \infty$ эта константа становится пренебрежимо малой.

$$ H(X) = -\sum_{x \in \mathcal{X}} P(X = x) \log_2 P(X = x) $$$$ K_U(x) = \min_{p \in \{0,1\}^*} \Big\{ |p| \;\Big|\; U(p) = x \Big\}, \qquad \Big| K_{U_1}(x) - K_{U_2}(x) \Big| \le c_{12} $$

2. Природа случайности: принцип Дирихле, несжимаемость и случайность по Мартин-Лёфу

До Колмогорова теория вероятностей не могла объяснить, почему индивидуальная строка 0000000000 не случайна, а 0110100110 кажется случайной. Алгоритмическая теория информации дала первое строгое определение: случайность есть несжимаемость — полное отсутствие алгоритмических закономерностей!

Более того, с помощью элементарного принципа Дирихле (Pigeonhole Principle) в две строчки доказывается, что подавляющее большинство двоичных строк алгоритмически случайны (несжимаемы): Всего существует ровно $2^n$ двоичных строк длины $n$. А сколько существует двоичных программ длины строго меньше $n - c$ бит? Суммируя количество программ длины $0, 1, \dots, n-c-1$, получаем $\sum_{i=0}^{n-c-1} 2^i = 2^{n-c} - 1$ возможных программ. Поскольку каждая программа выдаёт не более одного результата, из $2^n$ строк длины $n$ не более чем $2^{n-c} - 1$ строк могут быть сжаты хотя бы на $c$ бит ($K(x) < n - c$)! Иными словами, доля строк длины $n$, поддающихся сжатию на $c$ бит и более, строго меньше $2^{-c}$. При $c = 20$ свыше $99,9999\,\%$ всех строк невозможно сжать даже на $20$ бит никаким мыслимым алгоритмом! Пер Мартин-Лёф в 1966 году доказал, что бесконечная двоичная последовательность проходит все вычислимые статистические тесты на случайность (случайность по Мартин-Лёфу) тогда и только тогда, когда все её префиксы $x_{1:n}$ несжимаемы ($K(x_{1:n}) \ge n - O(1)$).

$$ \sum_{i=0}^{n-c-1} 2^i = 2^{n-c} - 1 \implies \mathbb{P}_{x \sim \text{Unif}(\{0,1\}^n)}\big( K(x) < n - c \big) < \frac{2^{n-c}}{2^n} = 2^{-c} $$$$ \Omega = \sum_{p:\, U(p)\text{ halts}} 2^{-|p|} \in (0, 1), \qquad K(\Omega_{1:n}) \ge n - O(1) $$
  flowchart TD
    A["Assume Program P_K Computes K(x)"] --> B["Construct Program Q of Length L = |Q|"]
    B --> C["Q Searches Lexicographically for First String s with K(s) > L + 1000"]
    C --> D["Q Outputs s, so by Definition K(s) <= |Q| = L"]
    D --> E["Contradiction: L + 1000 < K(s) <= L (Berry Paradox / Uncomputability)"]

3. Парадокс Берри, невычислимость $K(x)$, константа Хайтина $\Omega$ и современный ИИ

Можно ли написать идеальный архиватор, который для любой входной строки $x$ вычисляет её точную сложность $K(x)$? Ответ категоричен: нет, функция $K(x)$ алгоритмически невычислима!

Это ограничение восходит к классическому парадоксу Берри («наименьшее натуральное число, которое нельзя описать менее чем двадцатью словами» — фраза из двенадцати слов, описывающая это число!). Грегори Хайтин формализовал его так: допустим, существует подпрограмма ComputeK(x) фиксированной длины $L$ бит, вычисляющая $K(x)$. Построим главную программу $Q$, которая перебирает все строки $s$ в лексикографическом порядке, вызывает ComputeK(s) и выводит первую же строку $s^*$, для которой $K(s^*) > L + 10000$. Полная длина программы $Q$ составляет всего $L + O(1)$ бит, но она выдаёт $s^*$! По определению $K(s^*)$ как длины кратчайшей программы должно выполняться $K(s^*) \le |Q| < L + 10000$, что прямо противоречит условию $K(s^*) > L + 10000$! Отсюда следует теорема Хайтина о неполноте: никакая формальная аксиоматическая система сложности $C$ бит не способна доказать оценку $K(x) > C + O(1)$ ни для какой конкретной строки $x$.

Хайтин также определил вероятность остановки универсальной беспрефиксной машины Тьюринга — легендарную константу Омега $\Omega = \sum_{U(p) ext{ останавливается}} 2^{-|p|}$. Число $\Omega \in (0,1)$ строго определено, но абсолютно невычислимо и алгоритмически случайно ($K(\Omega_{1:n}) \ge n - O(1)$): знание первых $n$ бит числа $\Omega$ позволяет решить проблему остановки Тьюринга для всех программ длины до $n$!

В современной инженерии и искусственном интеллекте вычислимые оценки сверху для $K(x)$ лежат в основе прорывных технологий:

  1. Связь с энтропией Шеннона: для стационарных эргодических источников математическое ожидание $ rac{1}{n}\mathbb{E}[K(X_{1:n})]$ сходится к скорости энтропии Шеннона $H(X)$.
  2. Универсальная индукция Соломоноффа и принцип минимальной длины описания (MDL): бритва Оккама формализуется через универсальное априорное распределение $P_M(x) \propto 2^{-K(x)}$.
  3. Нормализованное расстояние сжатия (NCD): аппроксимируя $K(x)$ реальными архиваторами (zstd, lzma, gzip), формула $ ext{NCD}(x,y) = rac{C(xy) - \min(C(x),C(y))}{\max(C(x),C(y))}$ позволяет строить эволюционные деревья геномов и классифицировать вредоносный код без ручного выделения признаков.
  4. Большие языковые модели (LLM): сжатие есть интеллект: как показали Маркус Хаттер (Hutter Prize) и Илья Суцкевер, минимизация кросс-энтропийной функции потерь $-\sum \log_2 P_ heta(x_t \mid x_{математически эквивалентна поиску кратчайшего сжатия данных без потерь. Чтобы сжать человеческие тексты до предела, нейросеть вынуждена усвоить грамматику, логику и причинно-следственную модель мира.
Измерение / КонцепцияЭнтропия Шеннона $H(X)$Колмогоровская сложность $K(x)$Инженерные аппроксимации (MDL / LLM / NCD)
Объект измеренияРаспределение вероятностей (ансамбль)Индивидуальный объект / строка $x$Реальные файлы, геномы, текстовые корпуса
Оценка первых $10^6$ бит числа $\pi$Детерминированная константа ($H=0$); частоты равномерны$K(\pi_{1:n}) = O(\log n)$ (проста благодаря короткому алгоритму)Арифметическое кодирование и нейросети находят структуру
ВычислимостьТочно вычислима при известном распределении $P(X)$Строго невычислима (эквивалентна проблеме остановки)Оценки сверху через zstd/LZMA или Transformer $P_ heta$
Ключевые теоремы и философияТеорема Шеннона о кодировании источникаТеорема об инвариантности, неполнота Хайтина, число $\Omega$Бритва Оккама, «Сжатие = Предсказание = Интеллект»
$$ P_M(x) = \sum_{p:\, U(p)=x} 2^{-|p|} \approx 2^{-K(x)}, \qquad \text{NCD}(x, y) = \frac{C(xy) - \min\{C(x), C(y)\}}{\max\{C(x), C(y)\}} $$
comments powered by Disqus