原文-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\) 的描述的長度是:
-
InterpreLanguage程序的長度,即常量 \(c\);
-
\(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隨機性
【略】
與熵的關系
【略】