從隨機開始

在忙著看似沒有盡頭的各種事的時候零碎想到的,所以就先給記錄下來。


關于隨機

隨機和信息,是大家在日常生活中經常在用的兩個術語。
  尤其在計算機、統計學以及信息學領域,而這三個領域現在又幾乎已經滲透到了所有人生活的方方面面,不管是什么領域。
  比如社會學現在也用統計的方法,物理學也開始關注信息,計算機作為現代社會的基礎也就更不說了。
  最讓人關注的,便是計算機科學的基礎,計算理論,這貨和統計學、信息學的關系非常密切。
  而在這些領域中,隨機和信息這兩個被大家使用了很久的術語,其準確的定義卻并沒有大家所想的那么確切。

個人所理解的隨機,大概可以這么來表示吧:
  從一個足夠長序列中的任意位置開始提取任意足夠長的子序列,其元素的分布在統計上都和原序列的元素分布相同,那么這個序列就是隨機的。
  但這樣的定義顯然是不夠好的,因為一來這里存在太多無法被精確定義的東西(比如什么叫“足夠長”?),二來這樣的定義很容易構造出反例來。
  后來個人所想的隨機是這樣的:
  一個足夠長的序列,取值范圍為R,則對任何的n和e,存在l,使得下面的命題成立,則該序列成為是隨機的:將R做n等分,子序列落在每一個子區域的元素個數的方差小于e,對于從原序列任意位置開始的長度為l的子序列都成立。
  這樣的提法規避了之前的第一個問題,就是沒有可操作的定義,但依然會有第二個問題。比如這樣一個鋸齒波:第一個元素為1,此后遞推關系為(下面的a為[0, 1]之間的常數):


  當a是無理數的時候,通過上述方法構造的序列是可以滿足上面這條對隨機序列的定義的,但實際上卻不是隨機的。
  事實上,這里就存在一個問題,那便是如果一個序列僅僅滿足一個統計特征的話,那我們還是很難判定這貨就是隨機的。
  說到底,統計特征是去除大量細節后的整體特性,而信息或者說規律或者說非隨機性往往就是藏在細節中的,可隨機本身所說的就是規律性、信息量都盡可能地小,最好為零。
  而,反映規律性的一個手段,就是可以用數學公式的形式來表達,比如逐項公式。
  沿著這個思路往下走,我發現最終要達到的狀態,其實是這樣的:
  如果一個序列及其各連續子序列如果無法被表達為任何形式的數學公式,那么這個序列是隨機的。
  這個提法就已經朝著計算理論邁進了一步。
  這個提法的好處就是,能用數學公式所表達的,基本肯定是有規律的,反過來說,不能用任何形式的數學公式表達的東西就肯定是無規律的。
  當然,這個提法本身還有問題,因為數學公式本身并不能涵蓋所有可能的規律性,至少不夠直觀。因此,更往前走一步,這個提法就可以被升級為:
  <u>如果除了將序列原封不動地打印出來外,不存在任何別的與此不可通約的圖靈機可以給出該序列,那么這個序列就是隨機的。</u>
  這樣,這條東西在保持了上面一個提法的特性的同時,還增加了對信息量的考量。。
  而這個東西,便是與“描述復雜度”,或者更應該稱其為“Kolmogorov-Chaitin復雜度”,也可以稱為“算法熵”,這么個東西非常相關。

在算法信息學(Algorithmic Information Theory,AIT)中,Kolmogorov-Chaitin復雜度是這么定義的[1]

能夠輸出形式化對象s的所有圖靈機中代碼最短的長度值為s的K-C復雜度:K(s)=min(len(T(s)))。
  這么一來,所謂“隨機”就可以被這么定義:如果序列s滿足len(s)<=K(s),則s為隨機序列[2]

我們可以發現,我們從統計的角度來考慮隨機開始,最后逐漸還是走到了計算理論與算法的領域中來了。
  通過算法復雜度來定義的隨機的本質其實就是這么一句話:
  除了這個序列本身,沒有任何方法可以給出這個序列。
  這其實便暗含了Kolmogorov與Martin-Lof關于隨機的理念了:
  1,如果知道隨機序列的前n項,無法推測出第n+1項;
  2,序列不可壓縮。
  當然,如果必要的話還可以繼續給出第三點要求:
  3,具有隨機的統計特性。


關于算法復雜度

K氏復雜度具有一些很有趣的性質,比如對于任意自然數n,總從存在s使得K(s)>n。這點直接與“不可定義數”相關。
  而另一個有趣的性質則和“不可計算數”相關:存在一個僅和圖靈機及語言的選擇相關的n,使得所有K(s)>n的K(s)的具體值都是無法計算給出的,也無法證明存在這樣的s。這里無法計算表明了K的不可計算性,而無法證明則給出了K的不完備性(Chaitin不完備性定理)。

第一個性質的證明很簡單顯然,而第二個性質的證明則頗好玩。
  我們假定對于任意n都可以證明存在某個s使得K(s)>n,那么如下的偽代碼就會帶來很有意思的效果:

T(n)=>for (s in AllString) if K(s)>n then return s

上述代碼的“長度”可以被寫為len(K)+ln(n)/ln(2)+C,其中C是語言本身所要求的上述函數的字節數。這里因為代碼都是二進制的,所以K(s)>n中的n的“長度”就成了ln(n)/ln(2)。而這樣的話,我們總能找到一個L使得L>len(K)+ln(n)/ln(2)+C成立,于是T(L)按照代碼的邏輯給出的就是使大于L的K(s)的s,但代碼T本身的長度小于L,于是按理說就不可能給出K(s)=L而最多只能給出K(s)=len(K)+ln(n)/ln(2)+C<L,從而矛盾,因此不能給出大于某個極限L的K(s)的s。如果將if的條件換成函數“check(s, n)=>可以證明K(s)>n”,那么我們非但無法計算K(s),也無法證明存在這樣的s。
  這樣的性質當然是很有意思的,但,有趣的是,它本質上似乎更應該說是證明了這么一件事:

如果要構造一個對所有s都有效的K,即通用K,那么這樣的K非但是不可計算的,也是不完備的。

但,如果我們將問題改變一下,也許會變得更有趣。

我們假定,存在一個K1函數,它的作用是計算len(s)<=L1的所有s的算法復雜度,如果len(s)>L1則不停機,而這個函數本身的長度為C1。從而我們發現,在上面構造的函數T(n)中如果將K(s)替換為K1(s),那么T本身的長度為C1+ln(n)/ln(2)+c。因此,只要C1可以保證C1+ln(L1)/ln(2)+c>L1,甚至更強一點只要C1>L1,那么K1本身的存在不會引起任何悖論。
  接著,構造K2函數,它的作用是計算所有L2>=len(s)>L1的s的算法復雜度,其函數本身的長度C2>L2,從而這樣的K2也不會引起任何的問題。
  因此,K的不可計算性實際上所證明的是:如果我們要計算長度為n的字符串s的算法復雜度,那么這個計算算法復雜度的函數本身的長度不小于n-ln(n)/ln(2)-c,其中c是一個與語言和圖靈機的選擇相關而與n或者字符串本身無關的常數。
  因此,當我們要計算任意字符串的時候,所要用的K本身也就必須足夠大,從而不存在通用的確定的K,對任意n有效。

事實上,從很久以前就在考慮這么一個問題,那就是雖然已經證明通用的停機判定圖靈機是不可能存在的,比如下面這個函數就是一個簡單的反例,但是否存在對部分特定的圖靈機有效的停機判定圖靈機呢?

C()=>while(HaltCheck(C))

其中HaltCheck就是通用停機判定函數。顯然如果存在這樣的通用判定,那么如果C是可以停機的,那么就陷入了死循環無法停機;而如果C是不會停機的,那么就立刻停機了。
  很顯然,如果是通用停機判定,那么HaltCheck必然會導致這樣的自指悖論。但如果我們換一個思路,假定存在SpecialHaltCheck函數,只對部分特定的圖靈機有效,那么上述自指陷阱對這樣的SHC函數就是無效的,因為SHC可以不包含這樣的自指陷阱,從而避免被自指搞壞。
  當然,這里就帶來了很多很有趣的問題,比如是否所有不包含自指的圖靈機都可以被歸到某一類SHC中?是否存在自指的圖靈機可以被某臺SHC判定?什么樣的自指圖靈機可以被SHC判定?
  然后,假定一臺SHC1可以判定的圖靈機集為A,另一臺SHC2可以判定的圖靈機集為B,如果A是B的真子集,那么就說SHC1是SHC2的特例。那么是否存在兩臺SHC,它們彼此不是對方的特例,也不存在一臺SHC可以使它們倆是其特例?
  發現這樣的問題想想還特別有助于睡眠。。。


從隨機到理論

讓我們回到關于隨機的問題上來。

隨機如果是要求滿足上述三點的字符串的話,那么是否可能存在某個圖靈機可以用來生成隨機字符串呢?

首先可以證明,不存在一個不需要輸入參數的可以生成隨機字符串的函數,因為這樣顯然違反第一條:如果知道隨機序列的前n項,無法推測出第n+1項。
  但,是否可能存在一系列Rn(init)函數,每一個都可以通過一組初始條件init作為輸入,來獲得一系列的隨機字符串呢?
  這樣,比如所有上述Rn(init)函數構成的集合中,有一個子集,其中每個圖靈機生成的字符串序列的前n項都是相同的,那么我們自然就無法通過前n項來判斷到底是其中的Ri生成的,還是Rj生成的了,從而第一點要求被保持。
  這一現象與量子力學中量子混合態在塌縮到本征態前我們雖然知道有哪些本征態卻無法得知到底塌縮到哪個本征態這么一個現象非常類似。
  在進一步,如果Rn(init)真的可以生成一串足夠隨機的字符串,那么就等于說len(Rn)必須比其生成的結果的長度len(Rn(init))要長,否則就違反了第二條。
  因而,這就是說,生成隨機字符串的函數的長度,不管選擇何種通用圖靈機,不管選擇何種語言,都必須比其能生成的隨機字符串的長度要長。

PS,我們可以構造圖靈機T的復雜度計算函數,也記為K,定義就是所有與T等價的圖靈機中長度最短的T'的代碼長度,就是K(T),以取代上面的len(Rn)。當然,結論不會改變。

從這里開始,問題就變得有趣了起來,因為讓我們考慮下面這段偽代碼:

R()=>if 雙本征態混合量子態塌縮到本征態A then 1 else 0

這個函數使用了一個物理過程,通過雙本征態等比例混合的量子態(這個實驗上很容易構造出來)在塌縮后是否塌縮到本征態A來作為輸出1還是0的條件。
  通過量子力學我們知道,這是一個真隨機過程,而且可以無限次地重復實驗,從而可以生成一個可數無限長的真隨機序列。
  而,通過前面的分析我們知道,這個隨機函數的長度不得比生成的隨機序列的長度短,這就導致了一個很有趣的現象——
  如果量子塌縮這個物理過程是可以被形式化表述的,那么量子塌縮的形式化表達的長度為無限長。

現在,讓我們更進一步,假定物理世界不是傳統的主流量子力學所告訴我們的那樣,在量子塌縮過程中是真隨機的——比如說,是隱變量的,那么情況會怎么樣?
  PS:當然,除了真隨機的流派和隱變量的流派,還有別的流派,比如退相干大概既不是真隨機也不是隱變量吧?不過到底是否真的是真隨機也難說。。。
  隱變量理論不承認量子過程中的隨機性,而將那種貌似隨機的現象視為對隱變量的不可知而導致的純粹視現象,而非本質。
  因此,對于他們來說,雙本征態混合量子態的塌縮不是一個隨機過程,而是一個隱變量參與其中的確定過程,從而就消除了真隨機過程所要求的無限長代碼長度。

好了,接下來,讓我們考慮一個物理理論。
  理論主要用來實現兩點:
  1,檢驗一組狀態是否可能存在,即Check(state);
  2,根據已知條件來推測下一時刻的系統狀態,即Deducate(state)。
  如果理論可以形式化,那么我們可以選擇一個真理系統Axiomatic System和恰當的語言L,使得上述兩個函數都可以在某臺通用圖靈機上用L中的語句表達為函數的形式。
  當然,將這兩個函數合并為一個函數Theory也是可以的,只不過這里要更加精妙地定義state即可。
  因而,一個含有真隨機的理論,如果我們看K(Theory),就會發現這個值為無窮大。而一個隱變量的理論,其K(Theory)為有限值,至少不包含真隨機所要求的無窮大。
  因此,如果我們站在集智俱樂部planeheart的文章《利用Martin-lof隨機性改造證偽主義》的觀點,利用算法復雜度取代可證偽性,選擇算法復雜度更小的理論作為更科學的理論,這么一個思路的話,似乎隱變量是一個比以哥本哈根流派為代表的連帶著各種衍生詮釋流派的理論更科學的理論。
  當然,這里不得不說的是,現在物理實驗對隱變量為代表的理論的約束是:實在性和定域性必須放棄一個。所以如果我們不放棄隱變量的話,現在的事實就是很多人都在考慮放棄定域性。這點其實就算是在廣義相對論體系內,在考慮引力場或者說時空的能量的定義的時候我們也發現,似乎定域性是需要被拋棄的東西——比如引力場的ADM能量定義就部分地放棄了定域性。

當然,我們還有另外一個選擇,那就是選擇“隨機”是一個圖靈機無能為力的對象,即圖靈機不能給出真正的隨機。
  如果這樣的話,那么包含真隨機的量子理論就無論如何都不能被形式化到可以用圖靈機表達的程度,這樣的話planeheart的文章《利用Martin-lof隨機性改造證偽主義》中想法的可行性就從根本上被瓦解了。
  就個人來看,雖然我認為真實的自然是不能被圖靈機描繪的,但自然的規律應該還是可以的吧,所以真隨機理應被包含在圖靈機中。

那么,一個含有“上帝”這個因素的理論到底是否比含有真隨機的理論更科學呢?
  至少,上帝是不怎么隨機的吧?不過也有人說上帝是喜怒無常的小女孩,就這點來說,大概上帝也是很隨機的吧,所以K(TheoryWithGod)應該也是一個無窮大的東西吧。。。
  或者,我們也可以說,至少包含真隨機的哥本哈根流派的理論并不比上帝理論更科學,如果我們真的認為算法復雜度可以取代可證偽性而成為理論是否科學的一個評判標準的話。

PS:個人是不贊同可證偽性來作為理論是否科學的評判標準的,這個以前已經寫過文章來論述了,不重復。當然我個人也不支持用算法復雜度來作為評判標準,原因現在看來顯而易見。


隨機、圖靈機與生命

當然,K這個東西不單在關于理論的理論也就是算法信息論的層面上有很有趣的應用,在別的方面也有有趣的體現,比如生命。

在Chaitin的《證明達爾文》中,他試圖通過將算法與生命基因的等同,來利用證明算法的自然演化的可能性來證明生命是可以通過自然演化而來的而不需要神創。
  這點的相關論述可以看我寫的《圖靈,蔡汀,達爾文:計算中的上帝》
  這里其實就有了一個很有趣的東西。
  我們可以利用代碼復雜度來作為算法演化的選擇壓力,即如果兩根基因可以完成相同的任務,比如都給出T()>n,那么K(T)就是這兩根基因在環境下的選擇壓力,K(T)越大就越容易被環境淘汰。當然,如果T()<=n,那就是直接死亡了。。。
  這么一來,只有用更少的代碼實現特定的任務,才能在演化中“生存”下來。

在這個過程中,似乎隨機就完全不是一件好事了,因為真隨機代表著無限長的代碼,從而這樣的基因就完全會被瞬間淘汰。
  在演化的過程中,隨機的來源應該更多是基因以外的,是從環境中來的。
  但,進化過程中基因的演變又離不開隨機性。
  接著,我們考慮到算法熵也即算法復雜度在很多情況下都可以被視為一種真正的熵,從而高算法復雜度就意味著高溫,這么一來真隨機就是一個超高溫區域,而生命的基因顯然是一個低算法復雜度的區域,因此上面的過程就可以被這么來翻譯:

低溫系統通過與高溫系統的接觸來保持低溫。

這倒是一個非常反物理直覺的過程啊。。。不過也不算太反物理直覺,比如對于黑洞來說,黑洞的質量越大,熵越小,而一個黑洞通過從伴星或者星際物質中吸收物質來不斷增加自己的質量,從而也可以看作是在不斷地通過接觸高溫物體(僅從引力來看)來實現自身的降溫。
  這種類比還有很多,比如有人計算了人腦思考時的信息量,換算成電子比特,然后換算成能量,發現這個能量接近恒星形成黑洞的臨界質量(看到有報道中說是錢德拉塞卡極限,但錢德拉塞卡極限是恒星形成白矮星的臨界質量,不是黑洞喲)。

因此,就個人來說,或許可以通過研究引力與算法這兩個領域中為何低溫系統接觸高溫系統反而能保持低溫這么個問題,來獲得很多有趣的東西喲。

PS:還記得以前本科的時候寫過一個科幻小說(再次沒寫完),其中一個設定就是人的思考與引力微子相關,這么一來,似乎就有趣了很多。


結尾

這篇純粹是沒來得及認真思考的隨筆,肯定有很多有錯的地方,沒有的話反而就不對了。
  所以,歡迎拍磚。


  1. 具體可查這篇Wiki。 ?

  2. 當然這個說法本身不夠嚴格,因為在AIT中可以證明K(s)<=len(s)+c,其中c是一個和s無關而至于圖靈機及語言的選擇相關的常數。 ?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容