7
本文作者: 知社學(xué)術(shù)圈 | 2016-04-29 15:07 |
雷鋒網(wǎng)按:本文作者月寶,來自知社學(xué)術(shù)圈
1948年,香農(nóng)(Claude Shannon)在貝爾實驗室發(fā)表論文《通信的數(shù)學(xué)理論》。文章中提出的數(shù)學(xué)工具構(gòu)成了信息論的骨架。香農(nóng)證明了信源編碼的極限是信源的熵,信道編碼的極限則是信道容量。倚天劍一出,天下皆驚。而為達(dá)到香農(nóng)預(yù)測的信道編碼的極限——信道容量,人類卻花費了半個世紀(jì)掙扎。
2016年四月三十日是克勞德·香農(nóng)(Claude Shannon)的一百周年誕辰。雖然香農(nóng)被學(xué)術(shù)屆尊為信息時代之父,聽說過這位科學(xué)巨人名字的想必比知道宋仲基的人少得多。當(dāng)然,熱愛韓星的同學(xué)也都是很有文化的,他們也都會把愛因斯坦視為上個世紀(jì)最偉大最杰出的科學(xué)家,他們在茶余飯后也會聊聊愛老伯的相對論和最近時髦的引力波。只是他們可能不知道,香農(nóng)對人類的貢獻(xiàn)絕對可以和愛老伯媲美。不管你們信不信,俺在這里毫不夸張而且很淡定地告訴同學(xué)們,要是沒有香農(nóng),到今天咱們應(yīng)該還沒有見過手機(jī)或Internet,也沒有用過微信或Facebook,更不能在網(wǎng)上看韓劇、看不雅視頻或秀美圖selfie。
在很多學(xué)者心中,其實香農(nóng)比愛老伯更偉大。南加州大學(xué)(University of Southern California) 電子工程系教授巴特·嗑死磕(Bart Kosko)說:愛因斯坦相對論之革命性在于它顛覆了之前的牛頓力學(xué),而香農(nóng)信息論之革命性在于它前無古人—— 香農(nóng)對信息的認(rèn)知開人類之先河,沒有什么擋在前面需要被顛覆的;香農(nóng)提出了全新的數(shù)學(xué)工具,就是所謂的信息論,并用這個工具回答了人類從未思考過的問題。磕死磕說,在這個意義上,香農(nóng)的發(fā)現(xiàn)像牛頓的引力定律一樣基本。言下之意就是,香農(nóng)跟牛頓一樣牛,而牛頓比愛老伯牛,所以香農(nóng)比愛老伯牛。
那么香農(nóng)的信息論到底是個什么東東呢? 簡單地說,信息論是個博大精深的應(yīng)用數(shù)學(xué)分支。香農(nóng)當(dāng)年創(chuàng)建信息論的時候是為了探討信息的本質(zhì)和通信的理論極限問題,比如什么是信息,怎樣從數(shù)學(xué)上定義衡量信息,數(shù)據(jù)壓縮和數(shù)據(jù)傳輸可達(dá)到的極限在哪里等等。但信息論的應(yīng)用遠(yuǎn)不止于通信領(lǐng)域。在香農(nóng)之后,信息論被當(dāng)作一套通用的數(shù)學(xué)工具,在很多信息科學(xué)領(lǐng)域都有應(yīng)用。比如信息論可以用來做統(tǒng)計分析,可以用來開發(fā)人工智能,可以用來優(yōu)化投資策略等。聽到這個投資二字,很多炒股同學(xué)的眼睛可能都忽然一亮,隨即又被懷疑得不屑浸潤,慢慢黯淡了下來。對,俺沒忽悠你,去網(wǎng)上下一篇已故信息論大牛斯坦福大學(xué)教授托馬斯·科福(Thomas Cover) 1991年的文章“普適投資策略”(universal portfolios)看看吧,那也是信息論里的經(jīng)典。
在學(xué)術(shù)圈子里,人們往往對香農(nóng)高山仰止,覺得信息論深不可測,當(dāng)然那些絕世宗師和自信心爆棚的除外哈。俺在信息論的圈子里也算混了些時日,然而每每說起信息論三個字仍然是一邊怯怯地心虛著,一邊崇敬地仰望著。不過當(dāng)下是個不管老幾都可以向經(jīng)典致敬的年代,所以俺也要裝顆蔥,向香農(nóng)致敬一下子。于是俺決定提筆碼這篇字,試圖用最少的數(shù)學(xué)科普一下信息論里最基礎(chǔ)的概念,熵(entropy)。
“不要責(zé)罵我,都是熵的錯”
先從一個貌似不相干的西方曾經(jīng)流行的游戲,“二十個問題”(the twenty-question game) 說起。游戲是這樣的。俺心里想一樣?xùn)|西,你可以問俺二十個問題,然后猜俺心里想的東西。你的問題必須是“是不是”這種形式的。比如,這個東西是不是可以放進(jìn)冰箱里?這個東西是不是活的?這個東西是不是能吃?諸如此類。對于你問的每一個問題,俺必須如實地回答“是”或者“不是”。你在二十個問題之內(nèi)猜到了我想的東西就算贏。
這個二十個問題的游戲曾經(jīng)很受歡迎,還被做成過電子玩具。
這個游戲的關(guān)鍵是在于如何有效地問你的問題。如果你問“明天是不是下雨”,那你肯定腦子進(jìn)水了,可以不用往下看了。如果你第一個問題問的是“這東西是不是 iPhone 6”,這樣的問法顯然也效率不高,因為俺一旦說“NO”,你只從大量的可能性中排除了一種可能,還是要面對剩下巨大的猜測空間。
這個游戲可以大致等價于這樣一個數(shù)字游戲。假設(shè)M是個大于1的正整數(shù),俺倆在玩游戲之前就商議確定好。俺在1到M之間任意想一個整數(shù),你的任務(wù)是用最少的“是不是”形式的問題問出這個數(shù)是多少。
對于這個數(shù)字版的“二十個問題”游戲,聰明的寶寶都會發(fā)現(xiàn)類似這樣的結(jié)論:M的數(shù)值越大,需要的問題越多。但愛鉆研的同學(xué)可能會想到另一個問題:對于一個給定的問問題策略,所需問題的“多”或“少”又是用什么來衡量的呢?比方說,M=8,而你的問法是依次問如下問題:“這個數(shù)是不是1”,“這個數(shù)是不是2”,“這個數(shù)是不是3”,一直到“這個數(shù)是不是7”(如果問完“這個數(shù)是不是7” 你覺得還需要問“這個數(shù)是不是8”的話,那請你去看韓劇吧)。在這種情況下,如果俺想的數(shù)字是1,你只需要一個問題就可以知道答案;而如果俺想的數(shù)字是8,你必須在問完7個問題之后才能知道答案。換句話說,即使問問題的策略確定,因為俺心里那個神秘數(shù)字的不確定性,你所需要的問題數(shù)目也是不確定的。因此我們需要把這個數(shù)字版“二十個問題”游戲更準(zhǔn)確地描述出來,或者說,把在什么意義上“最少”定義出來。
讓俺先喘口氣,喝口水,扯點概率論,回頭再看這個問題。
隨機(jī)變量
咱們也別講究數(shù)學(xué)的嚴(yán)謹(jǐn)了吧,直接講這個叫隨機(jī)變量的東東。
隨機(jī)變量描述的是一個隨機(jī)實驗可能出現(xiàn)的結(jié)果以及每種可能結(jié)果的可能性,也就是概率。先看一個例子。
例[老千擲硬幣]假設(shè)某老千每次投擲硬幣的結(jié)果有1/3可能性出正面,2/3的可能性出反面。那么擲一次硬幣就是一個隨機(jī)實驗,擲硬幣的結(jié)果就是一個隨機(jī)變量,我們這里記作大寫的 X。如果把正面記作1,反面記作0,那么這個隨機(jī)變量 X 可以通過一個函數(shù)P(x)來描述:函數(shù)的變量 (小寫的)x 的取值范圍是集合{0,1},這個集合此后記作 S;函數(shù)在0和1的取值分別為:P(1)=1/3,P(0)=2/3。
從這個例子可以看出,一個隨機(jī)變量 X 無非是通過在某個集合S上定義的一個函數(shù)P(x)來描述的,而這個函數(shù)不能取負(fù)值,而且必須在對其變量 x 求和的時候結(jié)果為1(在老千擲硬幣的例子中即:P(0)+P(1)=1)。這個函數(shù)通常被稱為隨機(jī)變量X的概率分布。
當(dāng)然,同樣是擲硬幣,可以定義出很多不同的隨機(jī)變量(即不同的概率分布函數(shù)P(x))來。普通人擲硬幣對應(yīng)的隨機(jī)變量基本就是P(0)=P(1)=1/2。賭神擲硬幣對應(yīng)的隨機(jī)變量可能是P(0)=1, P(1)=0。
生活中的隨機(jī)變量比比皆是。比如,在擲骰子的時候,骰子擲出的結(jié)果這個隨機(jī)變量對應(yīng)于一個定義在S={1,2,...,6} 上的概率分布函數(shù) P(x),通常認(rèn)為P(1)=P(2)=...=P(6)=1/6。再比如明天會不會下雨(天氣預(yù)報不準(zhǔn)的啦),會有幾個人給俺這篇吐血之作點贊或轉(zhuǎn)發(fā)(不曉得多少人更喜歡韓劇的啦)這些不確定的事情里都可以定義出隨機(jī)變量來。記得不知道哪一位偉人曾經(jīng)說過,“隨機(jī)變量是到處都有的。對于我們的腦袋,不是缺少隨機(jī)變量,而是缺少發(fā)現(xiàn)?!?/p>
在前面說的那個數(shù)字版“二十個問題”游戲中,俺心里想的神秘數(shù)字對你來說也是一個隨機(jī)變量,它的概率分布P(x) 是定義在S={1,2,...,M} 上的函數(shù)。如果我選數(shù)字是“完全隨機(jī)的”,那么,這個函數(shù)就是P(1)=P(2)=...=P(M)=1/M。這種分布通常被稱為均勻分布。當(dāng)然,取決于俺按什么偏好選數(shù)字,這個函數(shù)也可以取其他形式:如果俺就是喜歡2,也許俺會以更高的概率取2。
隨機(jī)變量的均值
假設(shè)有個隨機(jī)變量 X,它的取值范圍 S={1, 2, …, M},它的概率分布函數(shù)是某個定義在S上的函數(shù) P(x)。那么這個隨機(jī)變量的均值 (更文化點的說法叫數(shù)學(xué)期望值)就是這樣一個東東:
1*P(1)+2*P(2)+3*P(3)+ … +M*P(M).
在上面老千擲硬幣的例子中,隨機(jī)變量 X 的均值就是 1*(1/3)+0*(2/3)=1/3。簡單吧。
很多同學(xué)可能都有直覺的認(rèn)識,能感覺到如果把產(chǎn)生這個隨機(jī)變量 X 的隨機(jī)實驗做很多次,把得到的數(shù)字取平均,那么這個平均數(shù)差不多就是 X 的均值。這個概念,叫做大數(shù)定理,跟俺要講的熵有著本質(zhì)的聯(lián)系,俺這里不敢唐突,稍后會帶同學(xué)們仔細(xì)品味。
獨立隨機(jī)變量
很多時候俺們關(guān)心的不止一個隨機(jī)變量,而是很多隨機(jī)變量。比如,俺們同時關(guān)心兩個隨機(jī)變量 X 和 Y,X 的取值范圍是 {1, 2}, Y 的取值范圍是 {1, 2, 3}。那么俺們可以把這兩個隨機(jī)變量看作一個隨機(jī)變量對,寫作 (X, Y), 而把它的取值范圍理解為所有可能的(X,Y)取值的組合,也就是 {(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3)}。把這個集合叫作S,那么這對隨機(jī)變量就是通過一個定義在S上的概率分布函數(shù) P(x, y) 來描述的。 當(dāng)這個隨機(jī)變量對的分布滿足 P(x, y)=P(x)P(y) 的時候,俺們就稱這兩個隨機(jī)變量是相互獨立的。
P(0, 0) = P(0)P(0) = (2/3)(2/3)=4/9
P(0, 1) = P(0)P(1) = (2/3)(1/3)=2/9
P(1, 0) = P(1)P(0) = (1/3)(2/3)=2/9
P(1, 1) = P(1)P(1) = (1/3)(1/3)=1/9
獨立隨機(jī)變量的概念當(dāng)然可以推廣到更多的隨機(jī)變量上。如果有 n 個隨機(jī)變量,它們的取值無非就對應(yīng)了一個長度為 n 的序列。所有這樣序列的集合就是這組隨機(jī)變量的取值范圍。如果這些隨機(jī)變量是相互獨立的,那么每個序列出現(xiàn)的概率無非就是把這個序列中每個數(shù)出現(xiàn)的概率乘在一起。比如,上面的老千連續(xù)擲了10次硬幣,那么出現(xiàn)1101011110的概率就是
(1/3)(1/3)(2/3)(1/3)(2/3)(1/3)(1/3)(1/3)(1/3)(2/3)=(1/3)^7 * (2/3)^3
均值和大數(shù)定理
大數(shù)定理的英文是 the laws of large number, 它的中文翻譯通常是“大數(shù)定律”而不是大數(shù)定理。但俺卻偏要叫它大數(shù)定理!
定律或是英文里的 law 都是指不需要證明但可以被驗證的理論假設(shè)。比如牛頓的萬有引力定律。從數(shù)學(xué)上說,不需要證明就被接受的假設(shè)被認(rèn)為是公理。但是這個大數(shù)定理并非公理,它是被嚴(yán)格證明出來的(證明也不復(fù)雜,只要用馬爾可夫不等式或切比曬夫不等式就行了),因此準(zhǔn)確的數(shù)學(xué)語言應(yīng)該叫它“定理”。管他叫“定律”會讓人以為這個東東就是假設(shè)出來的公理,從而產(chǎn)生歧義,當(dāng)年也不知道誰這么沒涵養(yǎng)管它叫“l(fā)aw”。所以,不管你們服不服,俺都要管它叫大數(shù)定理。
大數(shù)定理大概說了這樣一個意思。假設(shè)有某個隨機(jī)實驗會產(chǎn)生一個隨機(jī)變量 X。如果你重復(fù)做這個隨機(jī)實驗 n 次, 你就會得到一個隨機(jī)變量序列 X1, X2, X3, …, Xn。這里假定這些隨機(jī)變量相互獨立(即這些隨機(jī)實驗互不影響)而且 n 是個很大的數(shù)(比如,一萬,十萬,百萬),那么把這 n 個數(shù)加起來除以 n (即取平均),得到的數(shù) ( 即 (X1+X2+…+Xn)/n )幾乎總是很接近隨機(jī)變量 X 的均值。同學(xué)們注意一下俺這里“幾乎總是”和“很接近”的用詞哈。雖然俺是個馬虎的人,這里的遣詞造句是極其考究,極負(fù)責(zé)任,極具情懷的。
咱們用老千擲硬幣的例子先看看大數(shù)定理到底說了些啥子嘛。假設(shè)那個老千擲了 n 次硬幣,那么他就得到了 n 個在{0, 1} 里取值的數(shù)。因為這 n 個數(shù)都是隨機(jī)的,這 n 個數(shù)的均值當(dāng)然也是個隨機(jī)變量,就是說也有一個概率分布函數(shù),有一定的不確定性。大數(shù)定理告訴俺們,當(dāng) n 很大的時候,這 n 個數(shù)的平均值“幾乎總是很接近”1/3?!皫缀蹩偸恰焙汀昂芙咏笔强梢栽跀?shù)學(xué)上嚴(yán)格定義的,不過當(dāng)俺講完它們的定義的時候,估保守,但俺碼字已經(jīng)快要吐血,正在后悔俺為什么要攬下這么個差事,所以就隨便套了一下切比曬夫不等式得出下面這些“至少有”的結(jié)論):
當(dāng) n=1000 時,至少有 91.1% 的概率這個平均值很接近1/3。
當(dāng) n=10000 時,至少有 99.1% 的概率這個平均值很接近1/3。
當(dāng) n=100000 時,至少有 99.9% 的概率這個平均值很接近1/3。
如果把“很接近1/3”理解為跟 1/3 相差不到 0.02,那么:
當(dāng) n=1000 時,至少有 44.4% 的概率這個平均值很接近1/3。
當(dāng) n=10000 時,至少有 94.4% 的概率這個平均值很接近1/3。
當(dāng) n=100000 時,至少有 99.4% 的概率這個平均值很接近1/3。
當(dāng) n=1000000 時,至少有 99.9% 的概率這個平均值很接近1/3。
現(xiàn)在展開你想象的翅膀,你應(yīng)該看到當(dāng) n 變成無窮大的時候,這個平均值就不再是“幾乎總是很接近1/3”,而是“就是1/3”了!
至此同學(xué)們可能已經(jīng)體會出俺極其考究、極負(fù)責(zé)任的“幾乎總是很接近”了吧。這里的情懷還是讓俺帶你們領(lǐng)略一下吧。老千擲出的序列當(dāng)然是隨機(jī)的、不確定的、沒有規(guī)律的。這個序列的平均數(shù)雖然也在1/3周圍隨機(jī)跳動,但卻隨著 n 的增大越發(fā)確定起來。當(dāng)n很小、她就在你跟前的時候,變化多端、捉摸不定的她讓你無法看清;當(dāng) n 增大的時候,她漸行漸遠(yuǎn),但她在風(fēng)中顫動的身影卻在你記憶的相機(jī)里慢慢聚焦,越來越清晰;直到她消逝在無限的遠(yuǎn)方,她竟定格成一幅永恒而又無比真切的畫面。
學(xué)霸們可能會覺得俺太矯情了:不就一個簡單的大數(shù)定理嗎,有必要這么忽悠嗎?其實俺也覺得自己有些矯情。但看完本文之后,俺請你再回頭體會一下大數(shù)定理的情懷。
“二十個問題”游戲的準(zhǔn)確規(guī)則及特例
用概率論武裝一下之后,同學(xué)們應(yīng)該已經(jīng)認(rèn)識到,在“二十個問題”游戲中俺心里想的神秘數(shù)字其實就是一個隨機(jī)變量 X。我們可以假設(shè)它的取值范圍S={1, 2,…, M} 和概率分布函數(shù) P(x)都已知。當(dāng)然在實際情況下我們未必真知道 P(x),但往往可以大致估計這個函數(shù)。如果對這個分布函數(shù)我們一無所知,我們不妨認(rèn)為 P(x) 是個均勻分布。
對于任意一個給定的問問題策略,如果俺心里的神秘數(shù)字是 x,我們把所需的問題個數(shù)記作 L(x)。比如 M=8,而我們用前面提到的那個從1問到7的策略問問題,我們就會得到:
L(1)=1, L(2)=2, L(3)=3, L(4)=4,
L(5)=5, L(6)=6, L(7)=7, L(8)=7。
(對,L(8)=7,俺沒敲錯。)
因為俺心里想的是個隨機(jī)變量 X,在這個策略下所需要的問題數(shù)目 L(X) 就也是個隨機(jī)變量。這個隨機(jī)變量 L(X) 也有一個分布,在知道 P(x) 的前提下,如果想算也是可以算出來的。但是俺懶得算它。
既然 L(X) 是個隨機(jī)變量,一個最自然的方式定義這個策略所需要的問題個數(shù)就是用這個隨機(jī)變量的均值,或者說用平均所需要的問題個數(shù)。如果你的數(shù)字直覺好,應(yīng)該可以看到,即使不求 L(X) 的分布,這個隨機(jī)變量的均值其實就是
L(1)*P(1)+L(2)*P(2)+…+L(M)*P(M).
用 L(X) 的均值定義一個問問題策略所需要的問題個數(shù)除了“自然”,還有什么物理意義嗎?當(dāng)然!前面的大數(shù)定理告訴咱們,如果你用這個策略玩這個游戲很多次,你所用問題個數(shù)的平均值“幾乎總是很接近”L(X) 的均值。而當(dāng)你玩了這個游戲無數(shù)次之后,你平均每次用的問題數(shù)就正好是這個 L(X) 的均值。
由此可見,如果俺們準(zhǔn)備玩這個游戲很多次,那么用 L(X) 的均值定義所需要問題的個數(shù),用金星老師的話說就是一個動作兩個字:完美。
至此,俺們已經(jīng)確定這個“二十個問題”游戲的準(zhǔn)確規(guī)則,即:你要設(shè)計一種問問題的策略,當(dāng)用這個策略跟俺玩很多次(更準(zhǔn)確的說,無數(shù)次)這個游戲之后,平均每次用的問題個數(shù)要越少越好!換句話說,我們希望尋找一個最好的問問題策略,同時確定最少需要多少個問題(平均意義上)。
其實在一些特殊的情況下,確定最優(yōu)的問問題策略和最少需要的問題個數(shù)并不困難。
考慮這樣一個特例:俺心里的神秘數(shù)字 X 的取值范圍是 S={1, 2, …, 8},而且 X 的概率分布函數(shù)是個均勻分布。那么最優(yōu)的問問題方法就是所謂的“二分法”:每問一個問題要把這個神秘數(shù)字的可能范圍縮減一半。比如這樣的問法:
問題1: 把集合 {1, 2, …, 8} 分成左右兩份,左邊的是 {1, 2, 3, 4}, 右邊的是 {5, 6, 7, 8}。然后問:你想的數(shù)是不是在左邊???
問題2: 根據(jù)俺的答案,你可以確定這個神秘數(shù)字只剩下四種選擇。你再類似地把四種選擇分成左右兩份,然后問:你想的數(shù)是不是在左邊?。?/p>
問題3: 根據(jù)俺的答案,你現(xiàn)在可以確定這個神秘數(shù)字只有兩種選擇,再把它們一個放左邊,一個放右邊。你再問:你想的數(shù)是不是在左邊???
如此問完三個問題,你一定知道了俺的神秘數(shù)字。相信你的直覺也應(yīng)該告訴你,這就是最優(yōu)問法!那么在這個例子里,所需的最少問題個數(shù)就是 3。從咱們用每個問題把猜測空間一切兩半的問法,同學(xué)們應(yīng)該也已經(jīng)認(rèn)識到,這里得出的最少問題數(shù) 3 正是因為 8=2^3, 或者說,2= log 8. (本文中所有的對數(shù)操作均以2為底數(shù))。
在這個例子中有個現(xiàn)象也值得注意一下:不管俺心里想的是個什么數(shù)字,使用二分法所需的問題數(shù)字都是3,一個完全確定,毫無隨機(jī)性的數(shù)字。
這個特例顯然可以推廣:如果神秘數(shù)字 X 的概率分布函數(shù)是在 2^K 種可能性上的均勻分布,那么“二十個問題”游戲的最優(yōu)策略可以通過二分法實現(xiàn);在這種策略下,不論神秘數(shù)字是什么,問出它所需要的問題數(shù)都是 K,因此所需要的平均問題數(shù)也是 K。同學(xué)們請用紅筆圈下這個結(jié)論,咱么晚點要用到這個結(jié)論。
當(dāng)然,這個二分法只適合于這樣的特例,當(dāng)神秘數(shù)字的可能性總數(shù)不是2的多少次方的時候,或者當(dāng)神秘數(shù)字的分布不均勻的時候,這種問法顯然不是最優(yōu)的。這個問題任意形式的最優(yōu)解法曾讓一個叫大衛(wèi).霍夫曼(David Huffman)的年輕學(xué)生在1951年一夜成名。不過,那已經(jīng)是在香農(nóng)提出信息論三年之后了。
在香農(nóng)獨特的視角里,這個問題并不至關(guān)重要。在俺的想象中,當(dāng)香農(nóng)看到滿屋子小朋友們嘰嘰喳喳地玩這個游戲的時候,他笑了笑,說:你們慢慢玩吧。然后他點起一支煙,凝視著窗外的遠(yuǎn)方。在落霞與孤鶩齊飛的秋色里,他看到了這個游戲的另一種設(shè)計。
“二十個問題”游戲攢著玩和數(shù)據(jù)壓縮
既然用 L(X) 的均值定義所需要問題的個數(shù)依賴于把這“二十個問題”游戲玩很多次,那么考慮一下這個游戲的一個變種,就是把這很多次游戲攢起來一起玩:俺拿出一張很長很長的紙條,然后隨機(jī)想 n 個相互獨立的神秘數(shù)字,X1, X2, …, Xn (每個數(shù)字的分布都是同一個定義在 S={1, 2, …, M} 上的概率分布函數(shù),P(x))。俺把這些數(shù)字一個一個地寫到紙條上。這里 n 很大很大,所以紙條很長很長。然后你再來問俺“是不是”一臺或一百臺電腦來。你問俺的問題要是計算太復(fù)雜,俺也可以去搬電腦來算??傊蹅儾挥霉苡嬎阌卸鄰?fù)雜,俺倆都有無限的計算能力。在這個攢著玩的“二十個問題”游戲中,怎樣的問問題策略才最優(yōu)呢?最優(yōu)的策略所需要的平均問題數(shù)目又是多少呢?
暫且先不討論這個問題的答案,咱們先審視一下這個新的游戲設(shè)計的應(yīng)用意義吧。
想象一下, 俺寫在紙條上的序列其實是俺剛寫好的長篇小說(俺寫下的每一個數(shù)其實對應(yīng)于新華字典里的一個字),又或者俺寫在紙條上的序列其實對應(yīng)于俺長期夜觀星象的結(jié)果,記錄了不為人知的宇宙奧秘(俺寫的每個數(shù)字都是對觀測到的宇宙狀態(tài)的描述)。在你問俺問題的時候,俺的回答將是一個長長的由Yes/No 組成的序列。如果把 Yes 記作 1,No 記作 0,俺的回答其實就是一個0/1組成的序列。
一個可以取 0/1 兩個值的變量,或者一個可以儲存 0/1 兩種不同狀態(tài)的存儲單元,就是人們常說的比特(bit)。所以俺的回答其實就是一個比特序列。你希望用最少的問題就等同于要求這個比特序列最短,或者說要求用最少的比特數(shù)表示俺紙條上的內(nèi)容。這個問題其實就是通信中的數(shù)據(jù)壓縮問題!
數(shù)據(jù)壓縮,又叫“信源編碼”,大約是干這樣一件事。假設(shè)有個信息源,就是一個能不停往外蹦信息的東西,比如一直在想神秘數(shù)字的俺,夜觀星象的俺,寫小說的俺,等等等等。信息源產(chǎn)生的信息從數(shù)學(xué)上說就是一個隨機(jī)變量序列(更有文化的說法叫隨機(jī)過程)。這個隨機(jī)變量序列可以有很多種形式,最簡單形式就是其中的隨機(jī)變量都相互獨立而且服從相同的分布。對這個信息源進(jìn)行數(shù)據(jù)壓縮包括了兩個環(huán)節(jié),編碼和解碼。編碼就是把從信息源蹦出來的隨機(jī)序列表示成比特序列,而且越短越好;解碼就是從比特序列中還原出信息源蹦出來的隨機(jī)序列。數(shù)據(jù)壓縮可以大幅度降低數(shù)據(jù)存儲和通訊需要的資源,已經(jīng)是現(xiàn)代通信技術(shù)的一個重要組成部分。
現(xiàn)在回到“二十個問題”游戲。如果這個游戲一個一個分開玩,其實就是在數(shù)據(jù)壓縮的時候,對信息源里蹦出的每個隨機(jī)變量單獨做壓縮。如果這個游戲攢 n 個一起玩,其實就是對隨機(jī)序列中的 n 個隨機(jī)變量同時進(jìn)行壓縮。顯然,對每個隨機(jī)變量單獨進(jìn)行壓縮一定不會比對整個隨機(jī)序列同時做壓縮效率更高 (這里的效率是用平均每個隨機(jī)變量壓縮后的比特數(shù)來衡量的,比特數(shù)越低,效率越高)。這里的道理是這樣的:比如俺倆攢 n 個“二十個問題”游戲一起玩,但你設(shè)計問題的時候,每個問題只是針對序列中的一個隨機(jī)變量,而不是針對整個序列。這樣的問問題策略顯然等同于把每個游戲分開玩。也就是說, 這個游戲一個一個分別玩可以認(rèn)為是攢起來一起玩的一種特例。因而分別玩能達(dá)到的效率,攢起來玩也可以達(dá)到。因為同樣的道理,如果這個游戲攢 2n 個一起玩,其效率也一定不比攢 n 個一起玩低。也就是說,為了提高效率,n 應(yīng)該越大越好。
那么攢起來玩的效率到底最高可以達(dá)到多少呢?或者說,對一個給定的信息源,平均每個蹦出來的隨機(jī)變量最少需要多少個比特來表示呢?這個數(shù)字通常跟序列的長度 n 相關(guān),而且對于任意一個給定的 n,即使俺們能夠確定最優(yōu)的壓縮方法,精確地確定這個數(shù)字也是一件很棘手的事。不過既然俺們已經(jīng)認(rèn)識到 n 越大越好,那不妨考慮 n 取無窮大吧。
當(dāng) n 取無窮大時,如果俺們能夠計算出信息源里平均每個蹦出的隨機(jī)變量最少需要多少比特來表示,這個數(shù)字不僅標(biāo)記了最優(yōu)的壓縮效率,它同時還有著更深刻的物理意義:它跟序列的長度 n 無關(guān),也跟編碼方法無關(guān);換言之,這個比特數(shù)只取決于信息源本身(即隨機(jī)變量X或其分布 P(x))。因為這個比特數(shù)是由最優(yōu)編碼/解碼方法實現(xiàn)的,它同時說明了兩件事:
1. 只要解碼端接收到的平均比特數(shù)不到這個數(shù)字(平均到每個隨機(jī)變量上),不論用什么編碼/解碼方法都一定無法重建信息源里蹦出的隨機(jī)序列。
2. 只要解碼端接收到的平均比特數(shù)超過這個數(shù)字,就一定有一種編碼/解碼方法可以使解碼端重建這個序列。
這就是說,在平均意義上,你一定需要這么多比特來表達(dá)信息源里蹦出的每一個隨機(jī)變量,而且只要這么多比特就夠了!因此,這個比特數(shù)實際上就標(biāo)注了這個信息源在以什么樣的“速率”釋放“信息”,或者說標(biāo)注了這個信息源里蹦出的每個隨機(jī)變量平均包涵了多少“信息”!
下面俺們就來看看是否可以導(dǎo)出這個最小比特數(shù)。
嗯,沒錯,終于要掀開她的紅蓋頭了。等不及了吧[呲牙笑]。
最小比特數(shù)
還是二十個問題攢著玩吧。不過這次俺也不去想什么隨機(jī)數(shù)了。俺就把之前例子里的那個老千找來,讓他躲在俺身后不停地擲硬幣。俺就把他擲出的0/1結(jié)果寫在紙條上。等俺寫完 n 個數(shù)的時候,就讓你開始問問題。前面說過,這無非就是把這個老千擲硬幣的結(jié)果當(dāng)作一個信息源,對這個信息源做壓縮。
因為 n 很大很大,讓我們先回顧一下大數(shù)定理的情懷:
老千擲出的硬幣序列的平均值幾乎總是很接近1/3。
根據(jù)俺之前對這句話不辭勞苦的解釋,這句話也可以換一種說法,而且這種說法很重要:
老千擲出的序列幾乎可以肯定有差不多 n/3 個1 和 2n/3 個0!
同學(xué)們再好好體會一下俺極其考究、極負(fù)責(zé)任、極具情懷的用詞:“幾乎可以肯定”和“差不多”。
這個重要結(jié)論很容易推廣到擲硬幣之外的任意隨機(jī)變量:假設(shè)隨機(jī)變量 X 是通過一個在集合 S={1, 2, …, M} 上定義的概率分布函數(shù) P(x) 描述的。那么當(dāng)俺們產(chǎn)生 n 個相互獨立的這樣的隨機(jī)變量的時候,如果 n 是個很大的數(shù)字而 a 是 S 中的任意一個數(shù),那么:
產(chǎn)生的隨機(jī)序列幾乎可以肯定有差不多 n*P(a) 個 a !
也就是說,雖然得到的序列本身是隨機(jī)的,不確定的,但是當(dāng) n 很大的時候,這個序列的組成“幾乎”是“差不多確定的”! 而且可以想象,當(dāng) n 無窮大的時候,這里的“幾乎”和“差不多”都可以刪去!
在老千擲硬幣這個例子里,如果一個硬幣的序列有差不多 n/3 個1 和 2n/3 個0,那么俺就管這種序列叫“典型序列”。在更普遍的意義上,相對于一個在S 上定義的分布 P(x),一個由 S 里的數(shù)字組成的長度為 n 的序列俺也管它叫典型序列,如果 S 里的每個數(shù) a 在這個序列中出現(xiàn)了差不多 n*P(a) 次。在典型序列定義中的“差不多”是差多少?呵呵,跟前面的邏輯一樣,如果 n 很大,差不多就是差一丁點,如果 n無窮大,差不多可以是“一點不差”! 老千擲出的序列幾乎可以肯定是典型的!
當(dāng) n 無窮大的時候,這句話里的“幾乎”當(dāng)然也是可以刪掉的。也就是說,在 n 無窮大的時候,不典型的序列根本不會出現(xiàn)!那么,你問問題的時候豈不是只需要針對典型序列問問題就行了?
正是如此!
那咱們看看典型序列一共有多少個。把這個要算的數(shù)記作 T。
首先注意一下每個典型序列有多大的概率被老千擲出來。因為每個典型序列“差不多”由 n/3 個1 和 2n/3 個0 組成,而這個序列中的所有隨機(jī)變量又是相互獨立的,那么,每個典型序列被擲出來的概率“差不多”就是 (1/3)^(n/3)*(2/3)^(2n/3)。不知道同學(xué)們注意到?jīng)]有,每個典型序列被擲出來的概率“差不多”都是這個數(shù)。同時注意到只有典型序列才可能被擲出來,也就是說,所有典型序列出現(xiàn)的概率之和“差不多”就是 1。這樣俺們就可以得出,典型序列的數(shù)目 T “差不多”就是 1 除以每個典型序列出現(xiàn)的概率,也就是
1/((1/3)^(n/3)*(2/3)^(2n/3)) = (1/3)^(-n/3)*(2/3)(-2n/3).
針對這 T 個序列問問題,就“差不多”等同于俺跟你玩一次這樣的“二十個問題”游戲:俺從{1, 2, …, T} 里取一個數(shù),而且這個數(shù)服從均勻分布;然后你問俺“是不是”問題來猜這個數(shù)。那么你最少需要多少問題呢? 現(xiàn)在回頭找到之前讓你們用紅筆圈出的結(jié)論:最優(yōu)解是二分法;你最少需要的問題總數(shù)是 log T!而且不管俺取的是哪個數(shù),你都需要這么多問題!
認(rèn)真的同學(xué)可能會叫板說,哎,這個 T 也未必是 2 的整數(shù)次方啊,二分法能用嗎?!嗯,這個問題不錯。但可以這樣想,只要把 n 弄得足夠大,總可以讓 T 非常接近 2 的某個整數(shù)次方。而且,即使 T 真的不是 2 的整數(shù)次方,還可以換一個角度得到我們后面要得到的結(jié)論,比如,一定存在一個整數(shù)K 使得 T 是在 2^K 和 2^(K+1) 之間。。。??傊?,當(dāng) n 無窮大的時候,凌亂的世界都變整齊了,這個問題不再是問題了。
這個最少問題數(shù) log T 是用來問這個長度為 n 的硬幣序列的。平均到每次擲硬幣,平均需要的最少問題數(shù)就是 (log T)/n。稍微整理一下這個表達(dá)式就應(yīng)該可以看到,這個數(shù)字正好等于
- (1/3) log(1/3)- (2/3) log (2/3)。
這也就是壓縮這個“老千擲硬幣”信息源所需要的最少比特數(shù)。
把這種推演用到任意信息源。如果一個信息源往外蹦的隨機(jī)變量都獨立而且服從同一個定義在S={1, 2, …, M} 上的分布P(x),那么以下結(jié)論依次成立。
信息源里蹦出的隨機(jī)序列幾乎可以肯定是典型的!
每個典型序列出現(xiàn)的概率差不多就是 P(1)^(nP(1))*P(2)^(nP(2))*…*P(M)^(nP(M))!
典型序列的個數(shù) T 差不多就是P(1)^(-nP(1))*P(2)^(-nP(2))*…*P(M)^(-nP(M))!
壓縮這個信息源蹦出的每個隨機(jī)變量平均所需要的最少比特數(shù)就是 (logT)/n!
這個數(shù)字 (logT)/n 就等于:
-P(1)log P(1) - P(2) log P(2) - … - P(M)log P(M).
這個數(shù)字,就是熵。
從熵的表達(dá)式看,熵是通過一個概率分布函數(shù) P(x) 來定義的。因為概率分布函數(shù) P(x) 都對應(yīng)于它所描寫的隨機(jī)變量 X,所以俺們也可以認(rèn)為熵是對隨機(jī)變量 X 的某種特性的度量,而把它記作 H(X)。從壓縮的角度講,熵值 H(X) 是對產(chǎn)生隨機(jī)變量 X 的信息源編碼所需要的平均最小比特數(shù),或隨機(jī)變量 X 中固有的平均信息量。
如果隨機(jī)變量 X 是在 S={1, 2, …, M} 里取值,那么可以證明,熵值 H(X) 的取值必定在 0 和 logM 之間。當(dāng)隨機(jī)變量 X 在 S 上均勻分布的時候,H(X) 取最大值 logM;當(dāng) X 以百分之百的概率取 S 中的某個數(shù)值的時候,H(X) 取最小值 0。前者對應(yīng)于“不確定性”最大的 X,而后者對應(yīng)于“不確定性”最小的(即完全可以確定的)X。所以,也可以把熵值 H(X) 理解為對 隨機(jī)變量 X 的“不確定性“(或“不可預(yù)測性”)的度量。
因此,隨機(jī)變量所包含的“信息量”和它的“不確定性”其實是同一個概念。一個隨機(jī)變量越難以確定,它所包含的信息量越多。這種認(rèn)識對初次接觸熵的人來說或許不夠自然。但仔細(xì)體會一下,確實是有道理的。如果俺想告訴你的事你很容易猜到,或者說你不用問幾個問題就能知道,那俺要說的話對你來說就沒多少信息量。
在熵的定義里 -logP(a) 又是什么物理意義呢?當(dāng)然這個數(shù)字可以理解為 a 編碼所需要的比特數(shù)(在前面例子里,我們能看到以1/8概率出現(xiàn)的事件,需要用3個比特來編碼)。換一個角度理解,-logP(a) 可以理解為 a 的“驚奇度”。一個出現(xiàn)概率極低的事件 a,比如世界末日,它一旦出現(xiàn)就會令人非常驚奇,所以對應(yīng)的 -logP(a) 就會很大;而如果 a 出現(xiàn)的概率很大,它的出現(xiàn)就不會太令人吃驚,所以對應(yīng)的 -logP(a) 就會很小。因此,熵值 H(X) 也可以理解為隨機(jī)變量 X 的“平均驚奇度”。
用不確定性,信息量,或平均驚奇度來理解熵,都只是給它賦予一個直覺的解釋。平均最小編碼長度才是對熵的數(shù)學(xué)理解。但這種理解并不能體現(xiàn)出大數(shù)定理在熵的定義里所起的決定性作用以及“二十個問題”游戲必須攢著玩才能實現(xiàn)最短問題數(shù)等于熵值的深刻認(rèn)識。在大數(shù)定理的情懷下,熵值 H(X)還有另一個數(shù)學(xué)解釋: H(X) 是典型序列的總數(shù)隨序列長度的“翻倍速率”??矗L度為 n 的典型序列總數(shù) T 差不多是 2^(nH(X));也就是說,每當(dāng)序列長度 n 增加 1, T 就增大 2^(H(X)) 倍,或者說,翻倍翻了 H(X) 次。所以把熵理解為典型序列總數(shù)的翻倍速率才能真正體現(xiàn)熵的數(shù)學(xué)本質(zhì)。當(dāng)然,這樣的理解就離韓劇更加遙遠(yuǎn)了。
熵,或英文里的entropy,本來源于物理中的熱力學(xué),用來描寫系統(tǒng)的“混亂度”。香農(nóng)在定義信息熵的時候借用了這個詞。雖然俺經(jīng)常夜觀星象,也能在夜空沒有霧霾的時候認(rèn)出北斗星,但對宇宙、相對論,或是熱力學(xué),都一竅不通。所以俺就不試圖解釋物理熵和信息熵的聯(lián)系了。
但在通信的范疇,熵是人類第一次對信息有了數(shù)學(xué)的認(rèn)識。人類剛剛開始研究數(shù)字通信的時候基本就是瞎子摸象,直到1948年香農(nóng)在貝爾實驗室發(fā)表了那篇著名的文章,“通信的數(shù)學(xué)理論”。倚天劍一出,天下皆驚。香農(nóng)一針見血地指出,通信的問題可以分解成兩個的問題,即信原編碼和信道編碼。信原編碼的目的是盡可能高效的表示信息源,即數(shù)據(jù)壓縮;信道編碼的目的則是盡可能高效的讓數(shù)據(jù)可靠無誤地通過信道。在他1948年的文章里,香農(nóng)證明了信原編碼的極限是信源的熵,而信道編碼的極限則是個叫信道容量的東東,標(biāo)注著信道可以支持的最大通信速率。(信道容量的概念是在熵的基礎(chǔ)上的對信息論的進(jìn)一步發(fā)展,故事更長,更精彩,不過俺還是不講了吧。)香農(nóng)說,只有當(dāng)信源的熵低于信道的容量的時候,可靠的通信才可能實現(xiàn);而且只要在這個條件下,可靠的通信就一定可以實現(xiàn)!香農(nóng)的證明是存在性證明,就是說,他告訴俺們: 反正這事兒一定可以實現(xiàn),至于怎么實現(xiàn),你們自己想辦法吧。
信息編碼的問題很快被香農(nóng)的追隨者和逐步解決?;谒阈g(shù)編碼(arithmetic coding)和 LZ 編碼(Lampel-Ziv coding) 的信源編碼方法在上世紀(jì)七八十年代已經(jīng)日漸成熟,實現(xiàn)了香農(nóng)預(yù)測的壓縮極限并在實踐中被廣泛采納。而香農(nóng)預(yù)測的信道編碼的極限,信道容量,卻花費了人類半個世紀(jì)掙扎。業(yè)外人士未必了解,對信道編碼的研究結(jié)晶了人類最高的智慧和前赴后繼的努力。然而香農(nóng)預(yù)測的信道容量直到上世紀(jì)九十年代中葉才終于被實現(xiàn)。今天我們的手機(jī)里也終于承載了香農(nóng)在1948年的預(yù)言!
熵的提出是信息論起點,也是人類對信息認(rèn)知的開始,而香農(nóng)在他1948年文章里提出的數(shù)學(xué)工具正是信息論的骨架。在我們今天生活的信息時代,香農(nóng)和信息論存在于我們的手機(jī),我們的電腦,我們的電視,我們的藍(lán)光播放器,我們的internet,我們的facebook,我們的韓劇。
圣經(jīng)創(chuàng)世紀(jì)說,在世界還是一片混沌漆黑的時候,上帝說,要有光。于是世界就有了光。
大約七十年前,當(dāng)人們還在黑暗中摸索數(shù)字通信的時候,香農(nóng)說,要有熵。于是,就開啟了信息時代。
雷峰網(wǎng)特約稿件,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。