Колмогоровская сложность

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

В алгоритмической теории информации колмогоровская сложность объекта (такого, как текст) есть мера вычислительных ресурсов, необходимых для точного определения этого объекта.

Колмогоровская сложность также известна как описательная сложность, сложность Колмогорова — Хайтина, стохастическая сложность, алгоритмическая энтропия или алгоритмическая сложность.

Выражает возможность фрактального описания.

К примеру, рассмотрим две строки длиной 64 символа, содержащие только символы в нижнем регистре и цифры:

abababababababababababababababababababababababababababababababab
4c1j5b2p0cv4w1x8rx2y39umgw5q85s7uraqbjfdppa0q7nieieqe9noc4cvafzf
На этом изображении представлена часть множества Мандельброта. Простое хранение 24-битного цвета каждого пикселя этого изображения требует 1,62 миллиона бит; но маленькая компьютерная программа может воспроизвести эти 1,62 миллиона бит используя определение множества Мандельброта. Таким образом, колмогоровская сложность «сырого» файла, кодирующего это изображение, много меньше 1,62 миллиона бит.

Первая строка имеет простое описание на естественном языке, а именно ab 32 раза, состоящее из 10 символов. Вторая строка не имеет очевидного простого описания с использованием того же набора символов, кроме собственно самой этой строки, длина которой составляет 64 символа.

Более формально, сложность строки — это длина описания этой строки на некотором универсальном языке описания. Способность сложности к изменению относительно выбора языка описания обсуждается ниже. Колмогоровская сложность любой строки не может быть более, чем на несколько байт больше, чем длина самой этой строки, так как программа может выглядеть как одна команда "напечатать строку", где строка указана в явном виде. Строки, чья колмогоровская сложность слабо зависит от размера самой строки, не считаются сложными.

Определение[править | править код]

Чтобы определить колмогоровскую сложность, мы должны сначала задать язык описания строк. Такой язык описания может быть основан на любом языке программирования, таком как Lisp, Pascal или Java. Если  — программа, выходом которой является строка , то  — описание . Длиной описания является длина как строки. В ходе определения длины должны быть вычислены дли́ны подпрограмм, использующихся в . Длина любой целой константы , которая появляется в  — это количество битов, требующихся для представления , равное (грубо) .

Мы можем альтернативно выбрать кодировку для машины Тьюринга, где кодировка — функция, устанавливающая в соответствие каждой машине Тьюринга битовую строку . Если  — машина Тьюринга, которая на вход даёт на выходе строку , то объединённая строка есть описание для . Это теоретический подход, который является более подходящим для построения детальных формальных доказательств и предпочтителен в исследовательской литературе. Двоичное лямбда-исчисление может дать наиболее простое определение сложности. В этой статье мы используем неформальный подход.

Любая строка имеет как минимум одно описание, то есть программу

  function GenerateFixedString()
    return s

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

Рассмотрим, как выбор языка описания влияет на значение , и покажем, что эффект от смены языка описания является ограниченным.

Теорема. Если и  — функции сложности, относящиеся к языкам описания и , то существует константа (зависящая только от языков и ), такая, что

Доказательство. Обратно, достаточно доказать, что существует некоторая константа , такая, что для всех битовых строк

Положим, что существует программа на языке , которая работает как интерпретатор для :

  function InterpretLanguage(string p)

где  — программа на языке . Интерпретатор характеризуется следующим свойством:

Возвращаемым значением в результате работы InterpretLanguage на входных данных будет результат работы .

Таким образом, если является программой на языке , которая является минимальным описанием , то InterpretLanguage() возвращает строку . Длина этого описания есть сумма:

  1. Длины программы InterpretLanguage, которая может быть принята за константу .
  2. Длины , определяемой .

Это доказывает искомую верхнюю оценку.

История и контекст[править | править код]

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

Идея теории колмогоровской сложности основана на ключевой теореме, впервые открытой Рэем Соломоноффом (англ. Ray Solomonoff), опубликовавшим её в 1960 году, описав в работе «A Preliminary Report on a General Theory of Inductive Inference»[1] как часть своего изобретения алгоритмической вероятности. Он дал более полное описание в своих публикациях «A Formal Theory of Inductive Inference», часть 1 и 2 в журнале «Information and Control»[2][3], сделанных в 1964 году.

Позже А. Н. Колмогоров независимо опубликовал эту теорему в журнале «Проблемы передачи информации»[4], Грегори Хайтин также представил эту теорему в журнале «J. ACM». Работа Хайтина была отправлена в октябре 1966 года, исправлена в декабре 1968 года и цитирует обе работы Соломоноффа и Колмогорова.[5]

Теорема утверждает, что среди алгоритмов, восстанавливающих (декодирующих) строки из их описаний (кодов) существует оптимальный. Этот алгоритм для всех строк даёт такие же короткие коды, как предоставляемые другими алгоритмами, с отличием на константу, зависящую от алгоритма, но не от самой строки. Соломонофф использовал этот алгоритм и предоставляемые им длины кодов для определения «универсальной вероятности» строк, на которой может быть основан индуктивный вывод последующих символов в строке. Колмогоров использовал эту теорему для определения нескольких функций строк: сложности, случайности и информации.

Когда Колмогоров узнал о работе Соломоноффа, он признал его приоритет[6]. Несколько лет работа Соломоноффа была более известна в СССР, чем на Западе. Однако, общепринято в научном сообществе ассоциировать этот тип сложности с Колмогоровым, который говорил о случайности последовательностей, в то время как алгоритмическая вероятность стала связываться с Соломоноффым, который фокусировался на прогнозировании, используя своё открытие распределения универсальной априорной вероятности.

Существуют некоторые другие варианты колмогоровской сложности или алгоритмической информации. Один из наиболее широко используемых основан на самоограниченных программах и в основном связывается с Л. А. Левиным (1974). Аксиоматический подход к колмогоровской сложности, основанный на аксиомах Блума (1967), был введен М. Бургиным (1982).

Некоторые полагают, что название «колмогоровская сложность» — это пример эффекта Матфея[7].

Основные следствия[править | править код]

В последующих рассуждениях под будем подразумевать сложность строки .

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

Теорема. Существует константа , такая, что

Невычислимость колмогоровской сложности[править | править код]

Первое следствие[чего?] заключается в том, что нет эффективного способа вычисления .

Теорема.  — невычислимая функция.

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

  function KolmogorovComplexity(string s)

которая принимает на входе и возвращает . Теперь рассмотрим программу

  function GenerateComplexString(int n)
     for i = 1 to infinity:
        for each string s of length exactly i
           if KolmogorovComplexity(s) >= n
              return s
              quit

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

  function GenerateParadoxicalString()
      return GenerateComplexString(n0)

Эта программа вызывает GenerateComplexString как подпрограмму и также имеет свободный параметр . Эта программа выводит строку , чья сложность составляет как минимум . При благоприятном выборе параметра мы придём к противоречию. Чтобы выбрать это значение, заметим, что описывается программой GenerateParadoxicalString, чья длина не больше, чем

где константа добавлена из-за программы GenerateParadoxicalString. Так как растёт быстрее, чем , существует значение , такое, что

Но это противоречит определению о том, что имеется сложность как минимум . То есть, по определению (), допускается, что строка , возвращаемая программой GenerateParadoxicalString, может быть создана программой длиной или больше, но GenerateParadoxicalString короче, чем . Так программа KolmogorovComplexity на самом деле не может вычислить сложность случайной строки.

Это доказательство от противного, где противоречие похоже на парадокс Берри: «Пусть  — наименьшее положительно целое, которое не может быть названо меньше чем двадцатью английскими словами».[8] Также возможно показать невычислимость путём сведения невычислимости к задаче остановки , так как и тьюринг-эквивалентны.[9]

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

Цепное правило для колмогоровской сложности[править | править код]

Цепное правило для колмогоровской сложности утверждает, что

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

Сжатие[править | править код]

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

Строка сжимается на , если имеет описание, длина которого не превосходит . Это равнозначно утверждению . Если это не выполняется, то не сжимается на . Строка, не сжимаемая на 1, называется просто несжимаемой; по принципу Дирихле, несжимаемые строки должны существовать, так как есть битовых строк длиной , но только строк длиной меньше [10].

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

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

Для доказательства этой теоремы заметим, что количество описаний длин не превосходит , полученное из геометрической прогрессии:

Остаётся как минимум

битовых строк, несжимаемых на . Для определения вероятности разделим на .

Теорема Хайтина о неполноте[править | править код]

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

Теорема. Существует такая константа (которая зависит только от частной аксиоматической системы и выбранного языка описания), что ни для одной строки утверждение

не может быть доказано в рамках .

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

Доказательство теоремы основано на самореферентной конструкции, использованной в парадоксе Берри. Доказательство от противного. Если теорема не верна, то

Предположение (X): Для любого целого числа существует строка , для которой в существует вывод формулы «» (для которой мы предположили, что она может быть формализована в ).

Рассмотрим программу, реализующую эффективное перечисление всех формальных доказательств в

  function NthProof(int n)

принимающую на вход n и выдающую некоторое доказательство. Некоторые из них доказывают формулу вида «», где s и n — константы в языке . Существует программа, проверяющая, доказывает ли n-е доказательство формулу «»:

  function NthProofProvesComplexityFormula(int n)

Обратно, строка s и число L могут быть вычислены программами

  function StringNthProof(int n)
  function ComplexityLowerBoundNthProof(int n)

Рассмотрим теперь следующую программу:

  function GenerateProvablyComplexString(int n)
     for i = 1 to infinity:
        if  NthProofProvesComplexityFormula(i) and ComplexityLowerBoundNthProof(i) ≥ n
           return StringNthProof(i)

Принимая на вход n, эта программа проверяет каждое доказательство, пока не находит некоторую строку s и доказательство формулы K(s) ≥ L для некоторого L ≥ n. Эта программа останавливается по Предположению (X). Пусть эта программа имеет длину U. Существует число n0, такое что U + log2 n0 + C < n0, где C — дополнительная длина программы

  function GenerateProvablyParadoxicalString()
      return GenerateProvablyComplexString(n0)

Заметим, что число n0 также закодировано в этой программе, на что требуется log2(n0) информации. Программа GenerateProvablyParadoxicalString выдает строку s, для которой существует L, такое что K(s) ≥ L может быть выведено в , причём L ≥ n0. В частности для неё верно K(s) ≥ n0. Однако s может быть описана программой длины U + log2 n0 + C, значит её сложность меньше n0. Полученное противоречие доказывает ложность Предположения (X).

Подобные же идеи используются для доказательства свойств константы Хайтина.

Минимальная длина сообщения[править | править код]

Принцип минимальной длины сообщения в статистическом и индуктивном выводе и машинном обучении был разработан Уоллесом (англ. C. S. Wallace) и Болтоном (англ. D. M. Boulton) в 1968 году. Принцип МДС является байесовским (включает априорные вероятности) и информационно-теоретическим. Он обладает желаемыми свойствами статистической инвариантности (вывод трансформируется с репараметризацией), статистической связности (даже для очень трудной задачи принцип сойдётся к нижележащей модели) и эффективности (модель, основанная на принципе МДС, сойдётся к любой достоверной нижележащей модели так быстро, как это возможно). Уоллес и Доу (англ. D. L. Dowe) показали формальную связь между принципом МДС и алгоритмической теорией информации (или колмогоровской сложностью).

Колмогоровская случайность[править | править код]

Согласно определению колмогоровской случайности (также алгоритмической случайности) строка называется случайной тогда и только тогда, когда она короче любой компьютерной программы, способной её воспроизвести. Чтобы сделать это определение точным, нужно зафиксировать универсальный компьютер (или универсальную машину Тьюринга), так что «компьютерная программа» будет обозначать программу для этой универсальной машины. Случайная в этом смысле строка будет «несжимаемой». С помощью принципа Дирихле легко показать, что для любой универсальной машины существуют алгоритмически случайные строки любой длины, однако свойство строки быть алгоритмически случайной зависит от выбора универсальной машины.

Это определение можно расширить на бесконечные последовательности символов конечного алфавита. Определение можно изложить тремя эквивалентными способами. Первый способ использует эффективный аналог теории меры; другой использует эффективный мартингал. Третий способ определения таков: бесконечная последовательность случайна, если колмогоровская сложность её начального сегмента растет достаточно быстро — существует константа c, такая что сложность любого начального сегмента длины n не меньше n − c. Оказывается, что это определение, в отличие от определения случайности конечной строки, не зависит от выбора универсальной машины.

Связь с энтропией[править | править код]

Согласно теореме Брудно, энтропия динамической системы и алгоритмическая сложность траекторий в ней связаны соотношением для почти всех .[11]

Можно показать[12], что колмогоровская сложность результата работы марковского источника информации связана с его энтропией. Более точно, колмогоровская сложность результата работы марковского источника информации, нормализованная на длины результата, сходится почти всегда к энтропии источника.

Примечания[править | править код]

  1. Solomonoff, Ray  (англ.). A Preliminary Report on a General Theory of Inductive Inference (англ.) // Report V-131 : journal. — Cambridge, Ma.: Zator Co., 1960. — 4 February. Архивировано 2 августа 2020 года. revision Архивная копия от 1 августа 2020 на Wayback Machine, Nov., 1960.
  2. Solomonoff, Ray. A Formal Theory of Inductive Inference Part I (англ.) // Information and Control  (англ.) : journal. — 1964. — March (vol. 7, no. 1). — P. 1—22. — doi:10.1016/S0019-9958(64)90223-2. Архивировано 5 июня 2011 года.
  3. Solomonoff, Ray. A Formal Theory of Inductive Inference Part II (англ.) // Information and Control  (англ.) : journal. — 1964. — June (vol. 7, no. 2). — P. 224—254. — doi:10.1016/S0019-9958(64)90131-7. Архивировано 24 декабря 2010 года.
  4. Колмогоров, А. Н. Три подхода к определению понятия «количество информации» // Проблемы передачи информации : журнал. — 1965. — Т. 1, № 1. — С. 3—11. Архивировано 1 июля 2013 года.
  5. Chaitin, Gregory J. On the Simplicity and Speed of Programs for Computing Infinite Sets of Natural Numbers (англ.) // Journal of the ACM : journal. — 1969. — Vol. 16. — P. 407. — doi:10.1145/321526.321530. Архивировано 25 августа 2011 года.
  6. Kolmogorov, A. Logical basis for information theory and probability theory (англ.) // IEEE Transactions on Information Theory  (англ.) : journal. — 1968. — Vol. 14, no. 5. — P. 662—664. — doi:10.1109/TIT.1968.1054210.
  7. Li, Ming; Paul Vitanyi. An Introduction to Kolmogorov Complexity and Its Applications (англ.). — 2nd. — Springer, 1997. — ISBN 0387948686.
  8. В оригинале: «Let be the smallest positive integer that cannot be defined in fewer than twenty English words».
  9. Piter Bro Miltersen. Course notes for Data Compression. 2. Kolmogorov complexity. Дата обращения: 17 февраля 2011. Архивировано из оригинала 9 сентября 2009 года.
  10. Так как существует строк длиной , то количество строк длиной  — , что является конечной геометрической прогрессией с суммой равной .
  11. Архивированная копия. Дата обращения: 6 июня 2013. Архивировано 26 декабря 2011 года.
  12. http://arxiv.org/pdf/cs.CC/0404039

Литература[править | править код]