Kolmogorov復雜性


原文-wiki

看Kolmogorov復雜性看到雲里霧里,於是干脆把wiki上的翻譯了一下。

Chaitin complexity, algorithmic entropy, program-size complexity


定義

Kolmogorov 復雜性可被定義到任意數學對象,為簡化本文的范圍,限制到字符串。必須首先為字符串指定一個描述語言。這種描述語言可以基於任意計算機編程語言。如果\(P\)是一個程序,輸出字符串\(x\),則\(P\)\(x\)的一個__描述__。描述的長度只是\(P\)作為字母串的長度,再乘與每個字母的bit數。

另外,我們可以選擇一個圖靈機編碼,這里__編碼__指一個把每個圖靈機\(M\)關聯到一個bit串\(<M>\)的函數。假如\(M\)是一個圖靈機,對於輸入\(w\),輸出字符串\(x\),則字符串的聯合\(<M>w\)則為\(x\)的一個__描述__。為了進行理論上的分析,這個方法更適合於構造詳細的正式證明,且通常被研究性文本所采用。本文中,我們討論一種非正式的方法。

任意串\(s\)至少有一個__描述__,即程序:

function GenerateFixedString()
    return s

如果\(s\)的描述,\(d(s)\),長度最小,即使用最少的bit數,即稱 \(d(s)\)\(s\) 的__最小描述__。因此,\(d(s)\) 的長度(即,描述中的bit數)即為 \(s\) 的__Kolmogorov__復雜性,記為 \(K(s)\) 。用符號表示,

\( K(s)=|d(s)| \)

最小描述的長度取決於所選擇的描述語言;但是改變描述語言的效果是有范圍的(一個結果稱之為_invariance_定理)。


Invariance 定理

非正式方法

從下面這些方面講,存在一些描述語言是最優的:用某個描述語言得到的對某個對象的描述,可以將其連同一個固定的頭信息放到最優描述語言中。頭信息只取決於所用的語言,不受對象的描述影響,或者對象本身。
下面是最優描述語言的例子。一個描述由兩個部分組成:

  • 描述另一個描述語言的部分
  • 用這種語言描述的對象部分

更技術性的術語中,第一個部分是一個計算機程序,第二個部分是能讓程序輸出此對象的輸入。
Invariance定理如下:任意描述語言\(L\),連同頭信息,最優描述語言至少等於\(L\)的效率。

證明:

通過先把 \(L\) 表述成一個計算機程序 \(P\) (第一個部分),然后用原描述D作為程序的輸入(第二個部分),可以把\(L\)中的任意一個描述\(D\)轉換到最優語言。新的描述\(D\prime\)的長度為(近似地):

\(|D\prime|=|P| + |D|\)

\(P\)的長度固定且不取決於\(D\)。因此,最多有一個固定的開銷,且與被描述的對象無關。因此,最優語言一般最多是附加的固定開銷。

更正式些的方法

定理

如果 \(K1\)\(K2\) 是對於圖靈完備的描述語言 \(L1\)\(L2\) 的復雜性函數,那么有一個常量 \(c\) -- \(c\) 只取決於選擇 \(L1\) 還是 \(L2\) -- 使得

$ \forall s. - c \leq K1(s) - K2(s) \leq c. $

證明:

根據對稱性,有某個常量\(c\)使得對於所有串\(s\)

$ K1(s) \leq K2(s) + c $

假設有\(L1\)語言的程序作為\(L2\)的解釋器:

function InterpretLanguage(string p)

\(p\)\(L2\) 語言的程序。解釋器的特征由以下屬性決定:

  • 對輸入 \(p\) 運行 InterpreLanguage 返回 \(p\) 的執行結果

因此,如果 \(P\) 是一個 \(L2\) 程序,是 \(s\) 的最小描述,那么 \(InterpreteLanguage(P)\) 返回串 \(s\)\(s\) 的描述的長度是:

  1. InterpreLanguage程序的長度,即常量 \(c\)

  2. \(P\) 的長度,即 $K2(s) $

以上二者之和。復雜性的上限得到證明。


歷史與環境

算法信息理論是計算機科學的一個領域,研究對於字符串(或其他數據結構)的Kolmogorov復雜性和其他復雜性度量。

Kolmogorov復雜性的概念和理論基於一個關鍵的定理,此定理首先被Ray Solomonoff發現,於1960年發表,在_"A Preliminary Report on a General Theory of Inductive Inference"中,作為他發明的__算法概率__的一部分得到描述。在1964年出版的_"A Formal Theory of Inductive Inference"__中,他給出了一個更完整的描述,在__Information And Control__的第一部分和第二部分。

Andery Kolmogorov后來在1965,__Proglems Inform. Transmission__上獨立發表了這個定理。Gregory Chaitin也在__J.ACM__上提出了他的定理 - Chaitin的論文於1966年10月提交並修改於1968年12月,引用了Solomonoff和Kolmogorov的論文。

定理表述,把字符串從其描述(編碼)解碼的算法當中,存在一個最優的算法。此算法,對於所有字符串,它可以使得編碼可以與其他算法允許的編碼一樣短,到一個附加的取決於算法但並不取決於字符串自身的常量。Solomonoff用這個算法和其允許的編碼長度,定義了一個字符串的_"普遍概率"_,字符串的后續數字的歸納推理可以基於此概率。Kolmogorov使用這個定理定義了幾個字符串函數,包括,復雜性,隨機性和信息。

Kolmogorov知道Solomonoff的工作時,他知道了Solomonoff 優先。幾年來,比起在西方世界,Solomonoff的工作在蘇聯更多人知道。然而,科學界的一般共識是把這類復雜性歸功於Kolmogorov,他關注序列的隨機性,而算法概率歸功於Solomonoff,Solomonoff 專注於用他發明的普遍優先概率分布去做預測。在更廣泛的包含描述復雜性和概率的領域中,這個領域則通常稱為Kolmogorov復雜性。

還有幾個其他Kolmogorov復雜性或者算法信息的變體。應用最廣泛的一個基於self-delimiting program,主要歸功於 Leonid Levin。

對Kolmogorov復雜性的一個不證自明的方法基於 Blum 公理,由Mark Burgin在Andrey Kolmogorov發表的論文中引入。(TODO:??)


基本結論

下面的討論中,\(K(s)\)是字符串\(s\)的復雜性。

不難看出,字符串的最小描述不能比它自身更長 -- 輸出s的程序GenerateFixedString是一個固定的大於s的數量。

定理:

存在一個常量\(c\),使得

$ \forall s. K(s) \leq |s| + c $

Kolmogorov復雜性的不可計算

定理:

存在有任意大Kolmogorov復雜性的字符串。形式化表述:對於每個屬於自然數的數\(n\), 有一個字符串 \(s\)\(K(s) \geq n\)

證明:

否則所有無限多的可能的字符串可以由有限多的復雜性低於\(n\) bit的程序產生。

定理:

K不是一個可計算函數。換句話說,沒有程序可以接受字符串\(s\)作為輸入,產生一個整數\(K(s)\)作為輸出。

下面的非直接的證明使用了類似 Pascal 的語言表示程序;為簡化證明,假設其描述(即解釋器)長度為1,400,000bit。為得到矛盾,假設有這樣一個程序,

function KolmogorovComplexity(string s)

接受\(s\)作為輸入,返回\(K(s)\);為簡化證明,假設長度為7,000,000,000bit。思考長度為1,288bit的程序:

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

使用KolmogorovComplexity作為子程序,嘗試每個字符串,由最短的開始,直到返回一個字符串,其Kolmogorov復雜性至少是8,000,000,000bit,即,字符串不能由任意短於8,000,000,000bit的程序產生。但是,上面產生\(s\)的程序長度僅僅是7,001,401,288 bit,得到矛盾。(如果KolmogorovComplexity的代碼更短一些,矛盾仍然存在。更長一些的話,則GenerateComplexString的常量可以任意改變。)

上面的證明用了和Berry悖論一樣的矛盾:"The smallest positive integer that can not be defined in fewer than twenty English words"。通過從停機問題 \(H\)歸約,同樣可以用來顯示\(K\)的不可計算性,因為\(K\)\(H\)是圖靈等價的。

有一個引理,在編程語言社區叫做"全雇佣定理",說的是沒有完美的對長度進行優化的編譯器。

Kolmogorov復雜性的鏈式法則

Klmogorov復雜性的鏈式法則:

\( K(X,Y) = K(X)+K(Y|X) + O(log(K(X,Y))) \)

表述產生\(X\)\(Y\)的最短程序,比產生\(X\)的程序加上對給定的\(X\)產生\(Y\)的程序,不會多於對它所取的對數。


壓縮

計算K(s)的上限是很直接的 - 只要用某個方法壓縮字符串\(s\),用特定語言實現相應的解壓縮程序,然后把解壓縮程序與壓縮后的字符串連接起來,再測量其長度即可。

\(c\)是一個整數,如果對字符串\(s\),存在一個描述,其長度不超過\(|s|-c\)bit,則\(s\)對於\(c\)是__可壓縮__的。否則,\(s\)對於\(c\)是不可壓縮的。不能被1壓縮的字符串簡單地稱為不可壓縮 - 根據鴿巢原理,鴿巢原理所以適用是因為每個被壓縮串只映射到一個未壓縮串,不可壓縮串一定存在,因為長度為\(n\)的,\(2^n\)bit的串只有\(2^n-1\)個更短的串存在,即,長度(0,1,...,n-1)小於\(n\)的串。

同樣原因,從不能對他們高度壓縮這個方面看來,很多串是復雜的 -- 比起|s|,他們的\(K(s)\)不是很小。要更精確的的話,則固定一個n的值。有長度為\(n\)\(2^n\)個bit串。此空間上的bit串的一致概率分布准確地分派相等的權重\(2^{-n}\)到每個長度為\(n\)的字符串。

定理:

長度為n的bit串的空間上的一致概率分布,使得字符串對於\(c\)不可壓縮的概率至少是\(1-2^{-c+1}+2^{-m}\)

要證明這個定理,注意長度不超過\(n-c\)的描述的數量由以下幾何級數指定:

\( 1+2+2^n+ ... +2^{n-c}=2^{n-c+1}-1 \)

有至少\(2^n-2^{n-c+1}+1\)個長度為n的bit串對於\(c\)是不可壓縮的。要得到此概率,則用它除與\(2^n\).


Chaitin的不完備定理

【略】


最小消息長度

【略】


Kolmogorov隨機性

【略】


與熵的關系

【略】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM