天天看點

《偉大的計算原理》一第3章 Great Principles of Computing 信  息

    本節書摘來自華章出版社《偉大的計算原理》一書中的第3章,第3.1節,作者[美]彼得 j. 丹甯(peter j. denning)克雷格 h. 馬特爾(craig h. martell),更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

<b>第3章</b>

<b>great principles</b>

of computing

<b>信  息</b>

通信的内容語義與通信工程無關。

——claude e. shannon

軟體并不隻是互動裝置,更生成了一個使用者生活空間。

——terry winograd

自從數學家、通信工程師克勞德·香農(claude e. shannon)在20世紀40年代發現資訊論以來,關于資訊的研究迅速發展。資訊論中的一個關鍵準則就是資訊和含義是有差別的,這就使得機器可以忽略含義而去處理資訊本身。然而,整個通信和計算的目的是傳達并産生有含義的結果,這又将如何實作呢?

軟體設計師、科學家和消費者都希望軟體能夠生成虛拟世界、社交網絡、音樂、新發現、财務預測、情書和令人激動的圖檔等,甚至更多。例如,一隻股票的報價表在财務外行看來可能是數字亂碼,而對于專業投資者來說卻有着極大的價值。當所研究的基本對象具有一定主觀性時,我們又該如何界定資訊科學呢?

這些問題看起來有些自相沖突,因為資訊論認為含義和計算機器無關——這似乎和人們使用計算系統的經驗是沖突的。此外,在很多人看來資訊的概念似乎又是模糊和抽象的,難以了解資訊系統實際是如何工作的。這一章的目的就是說明資訊是非常真實的,是以一種實體可見的模式存在的(見圖3.1)。我們調研了資訊論中必然會提到的有關表示和傳輸資訊的概念、資訊論如何與可計算性理論相結合、資訊論的局限又在何處。經典的資訊論無法解釋資訊的含義以及新資訊的産生,而這個調研則說明了其中的原因。我們通過描述一個含義保留變換的模型來解決這個明顯的悖論。

《偉大的計算原理》一第3章 Great Principles of Computing 信  息

資訊的表示

人類在通信時是非常靈活的。這裡有四個例子,其中前兩個例子闡明了什麼是顯式含義:

1)當我們指向某個物體并告訴朋友這個物體的含義時,這個物體就“攜帶”了資訊,因為從現在開始我們的朋友無論何時看到這個物體,這個含義都會在大腦中觸發。

2)當我們發現某些現象模式重複出現時,就會為這樣的重制模式命名。當我們再次看到這樣的模式出現時,便可以預測結果。是以,這個模式就攜帶了可預知結果的資訊。科學的目的就是發現自然界中重制的現象,而工程的目的就是将這些重複的模式轉變為可利用的技術。

接下來的兩個例子說明了什麼是隐式含義:

3)社會群體會定義一些重制方式來交流資訊。例如,很多司機将要進入高速公路時,會一邊緩慢地靠近高速通道一邊開啟方向燈,但并沒有成文的規定要求他們這樣做。

4)人們日常生活中的很多習慣和慣例是沒有命名但攜帶資訊的。例如,在大多數文化中,“過來”的手勢傳遞的就是讓别人靠近你的資訊。

科學家和工程師的工作就是建構技術來處理顯式的資訊,也就是建立資訊的實體表示與預期含義的關聯,如使用電磁信号對人的聲音進行編碼。這樣,我們通過聲明表示與含義之間關聯的方式來産生資訊,然後通過在存儲器中存儲這些表示方式并且用不同的變換規則來處理這些資訊。

千百年來,社會學家和哲學家努力探索隐式的資訊,通常很少有一緻的看法。而工程師對于顯式資訊的處理則要簡單許多。

人工智能試圖跨越顯式資訊和隐式資訊的邊界,工程師正在尋找既能識别隐式資訊又易于人類了解的資訊表示方式。

無論是顯式還是隐式的資訊,這些資訊的存在都建立于人類認知的一緻。我們了解某種表示的含義,因為要麼有人直接告訴我們如何解釋它,要麼我們間接通過經驗學習到。

計算機和通信工程師将資訊編碼成電磁信号進行傳輸。例如麥克風将人的聲音轉變為電信号,然後通過一個磁盤記錄這個信号的副本,最後擴音器将這個磁盤中的信号轉變為聲波。無線發射機将聲音信号疊加在射頻信号中,通過射頻的幅度來表達這個信号,而接收機隻要減去原本的射頻信号就可以提取出聲音信号。工程師對于如何編碼資訊表示方式及其含義必須準确一緻,否則這套實體系統就會出錯。

計算機和通信工程師使用比特(二進制數字)作為資訊的基本機關。香農在20世紀40年代中期引入了“比特”,那時是計算機時代的初期。盡管使用十進制來構造的硬體元件也可以使用,并且早期也有一些計算機使用這些硬體,然而采用二進制元件因更加可靠而逐漸變成行業标準。香農發現二進制計算電路的功能可以用邏輯公式來表示,該公式中隻包含“真”或“假”兩種變量。是以,比特模式可以表示計算機電路。電路處理的數字就是這些二進制數字,也就是電路表示的數字本身(見圖3.2)。自20世紀50年代以來,計算機完全變成了二進制,無論是邏輯電路還是其資料存儲。

《偉大的計算原理》一第3章 Great Principles of Computing 信  息

圖3.2 兒童使用卡片來快速學習二進制數字。上圖:每張卡片都比其右邊的卡片多一倍的點數。4個兒童列成一排,引導他們通過舉起卡片來表示不同的數字。下圖:當第一個和第四個兒童舉起卡片而第二、三個兒童藏起卡片時,數字9出現了。通過這種方式,兒童很容易掌握二進制。由于任何信号都可以數字化為二進制數字,任何文本檔案也可以被編碼成二進制數字,是以位成為了資訊表示和量化的通用方式(由tim bell和mike ellows提供,csunplugged.org/videos)

香農還證明了實際上大部分通信系統中的連續信号也可以數字化,而數字化引起的一些微不足道的誤差完全可以忽略,稍後将簡要說明。

所有的資料形式,包括數字、信号、邏輯公式、文本等,都可以表示成位模式,位成為衡量資訊量的标準機關。現代詞語中的“24位顔色”“100mb通信”“32位電腦”和“256位密鑰”等都包含位的概念。在20世紀60年代,計算機制造商開始使用“位元組”(即一組8位資訊)來表示ascii擴充碼中的單個字母、數字或标點符号。後來,計算機處理的資料呈指數增長,于是人們開始使用新的希臘文字首來命名這些資料(見表3.1)。其中每一個字首都表示前一項字首的1000倍(或1024倍,210)。在20世紀60年代,磁盤和記憶體容量通常用千位元組來衡量,到了80年代,便用千兆位元組來衡量,而那時的nasa(美國國家航空航天局)卻一直苦惱于如何存儲每日衛星接收到的1tb的資料量。到了2014年,“大資料”用于描述pb級位元組的資料量,同時每年網際網路的資料量都超過了1zb位元組。思科公司(2012)預測網絡規模和資料将持續以指數形式增長。

《偉大的計算原理》一第3章 Great Principles of Computing 信  息

通信系統

通信系統是最簡單的資訊系統,在1948年一篇名為《通信的數學理論》的文章中,香農提出了通信系統的第一個理論模型(shannon 1948)(見圖3.3)。其本質是如下過程:消息源發送一條消息,編碼器按照編碼本規定為這條資訊生成一個獨有的信号;信道作為中間媒介從源到端運載這個信号;接收端的解碼器使用同樣的編碼本将這個信号轉換成初始形式——消息就到達接收處了。香農的模型适用于任何使用編碼、解碼、傳輸、存儲或是查詢信号資料的系統,甚至可以作為科學發現的模型:将自然界看作現象(消息)的源頭,而傳輸媒介(即通道)就是探索的過程(dretske 1981)。

《偉大的計算原理》一第3章 Great Principles of Computing 信  息

圖3.3 克勞德·香農(1916—2001)描述了一個資訊系統模型,它是當今資訊論的基石。消息源代表所有可能要發送的消息的集合,信道是存儲和運載信号的媒介,編碼是将消息轉換為信号,解碼是将信号還原為消息,編碼本包含了消息與信号互相轉換的規則,噪聲是指任何改變信号的事物

噪聲是通信模型中的一個重要元素。任何在傳輸通道中改變信号,進而導緻解碼出錯誤消息的幹擾都是噪聲。通信技術中噪聲的例子比比皆是:霧氣和黑暗幹擾了船隻之間的信号通信;電報站之間過長的距離減弱了信号的強度;雷電幹擾了調頻廣播的傳輸;dvd上的劃痕會導緻讀取失敗;環境的聲音淹沒了演講的聲音。

值得注意的是,在通信系統中,編碼和加密是不一樣的。加密是一個額外的步驟,在消息到達編碼器之前将消息轉換成密文,這樣隻有擁有密鑰的接收器才能夠讀取消息。在這種情況下,通信系統的工作就是将密文準确地傳輸給接收方,如果接收方具有密鑰則可以進行解密。

正如前文所提到的,香農将他的數學模型在二進制位上進行标準化,他認為所有的信号都能夠用二進制位表示,這一過程在字面上被稱為數字化,即将模拟信号轉變為數字信号。數字化并不是生成資訊的一個完全拷貝,而是一種近似化過程,因為其常常會丢失一些資訊。顯而易見的例子有許多,如物體邊緣參差不齊的像素化照片,同時也有一些情形是非常微妙不那麼直覺的。實體現象中的定量分析,比如火星探測器的軌道位置,實際上不能通過計算機的有限運算進行精确表達。舍入誤差會随着計算步驟而逐漸累加,導緻整個計算的精确度出現問題,使火星着陸器面臨危險。更糟糕的是,一些計算步驟會放大錯誤。如兩個幾乎相等的數可以認為它們的差近似為零,在用這個近似的差除另一個數時會導緻嚴重錯誤。數學軟體的設計師設計了很多巧妙的技術,來防止這些數字化錯誤破壞計算結果。

harry nyquist可謂當代的香農,他指出了上述普遍規律中的一個重要例外:通信系統可以免受數字化錯誤的影響(nyquist

1928)。每一個連續、帶寬有限的信号都可以無損地數字化,隻要用至于兩倍于最高頻率的采樣率進行采樣。例如音頻CD光牒(cd),為了使得品質沒有明顯損失,要每秒記錄44?100(44.1千赫)個采樣點,因為幾乎沒人能聽到高于22?000赫茲的聲音。

香農認為,由于我們可以對任何信号進行數字采樣,同時也由于真實的通信系統具有有限的帶寬,那麼将通信模型限制為二進制序列,不會有任何損失。這不但簡化了數學運算,而且使得這一結論适用于所有實際信道。

作為一個執行個體,一段簡單的編碼就可以說明通信模型的各種特性。假設一個消息源隻傳輸消息的1/4,我們把完整的消息定為a、b、c、d,為這些字母配置設定2位的編碼:

a:11

b:10

c:01

d:00

隻能表示四種消息的編碼在自然界中并不少見,我們細胞中的dna序列就是一種隻使用四個字母的自然消息源——g、a、t和c,它們是dna中四種核苷酸的首字母。

如果消息源想傳輸序列“cab”,那麼就在信道中傳輸“011110”這個位序列,接收端會逆向這個過程,即在編碼本中查找每一對位碼然後輸出對應的字母。

在任何關于編碼的讨論中,我們都需要在編碼長度(碼字的位長)和信道抗擾能力間做出權衡。短的編碼更高效、傳輸更快并且占用較小的存儲空間,然而短編碼非常容易受到噪聲的幹擾,信道中僅僅一位的改變就會将碼字完全改變。例如,如果信道将a的第一個位編碼變為0,接收端就會收到01,然後解碼成c而不是a。其中一個解決方案就是使用奇偶校驗位來提示接收端是否收到錯誤資訊,當原編碼中有偶數個1時,奇偶校驗位為偶數,反之則為奇數。下述編碼就是在原始編碼中添加第3位為奇偶校驗:

a:110

b:101

c:011

d:000

現在信道噪聲将a的第一位編碼變成0後,接收端收到010時,會發現編碼錯誤,因為010這個編碼是無效編碼。概括來說,1位的錯誤會導緻1的數量變為奇數,進而辨別這是一個未編碼的模式。

然而,單一的奇偶校驗位并不能辨別出哪一位被改變了。上例中,接收端知道010是一個無效的編碼,但是并不知道這三個編碼(a、c或者d)中的哪一個被這個位錯誤改變了。通過添加備援的編碼,解碼器不僅可以檢測是否有錯誤編碼,還可以定位具體受影響的消息位。試想下面的例子,在原來編碼的基礎上添加了3個位:

a:11111

b:10010

c:01001

d:00100

這個編碼滿足如下準則:加上額外的編碼位,每一個碼字都與别的所有碼字至少有3位不同。若有1位發生錯誤,接收端收到編碼後會發現這個錯誤編碼與正确編碼隻有1位不同,但是與其他的字母編碼卻有2位甚至更多的不同。這樣解碼器就可以檢測并修正隻有1位發生錯誤的編碼情況。

通信工程師理查德·海明(richard hamming)在1950年首先提出碼字之間的距離計算方式。兩個碼字之間的距離就是不同位碼的個數,這就是後來有名的“海明距離”。海明指出,若要糾正k個字元,編碼就必須包含足夠的位使得碼字之間的最小距離至少為2k + 1。他也發明了一系列編碼,也就是現在的海明碼。海明碼在2k - 1位的碼字中嵌入k個校驗碼,然後使用一種簡單的方法來構造電路用以将受損的比特位轉換為原來的編碼值。最有名的一種海明編碼是(7,4)編碼,在4個資料位中嵌入3個校驗位,構成7位的編碼。在計算機處理器和存儲器之間傳輸資料時,海明碼被廣泛用于糾錯。

當噪聲在碼位上随機分布時,海明碼能夠正常工作。然而,在某些信号中噪聲可能會爆發性地出現,比如日暈會影響某些深空信号數秒,光碟上的劃痕會損壞一系列鄰近的凹點,這些噪聲被稱為突發錯誤。另一種類型的編碼——reed-solomon碼便是用于檢測和消除突發錯誤的。它的數學計算更加複雜,但是也和海明碼一樣很容易用高速數字電路實作。

不同于信号,位并沒有實際實體意義。1位可以表示可察的任何兩種屬性之一。比如,工程師可能讓“1”代表雷射束在dvd表面某點的反射,而“0”則代表沒有反射;或者“1”代表半導體的輸出是5v,而“0”則可能代表輸出是3v;或者“1”代表一特定頻率(比如400hz)出現在一段音樂錄音中,而“0”則代表不是該頻率。位是一種抽象表達,用來聲明我們想讓系統做什麼。工程師将這些實體的“東西”(材料)進行組裝,用以完成所定義的功能。

實體系統中的資訊總是要由實體狀态來表達,而讀寫和變換這些資訊也需要花費時間和精力,是以通信和計算從來都逃脫不了實體世界的限制。計算機晶片工程師知道蓄熱和尺寸大小(晶片上所有電路元件的平均尺寸)等是影響他們能把電路做成多小的實際限制所在。同時每一個操作的時間消耗量則限制了可用時間内可計算的指令數。盡管新的算法在正常難題優化上有極大的改善,但計算量極大的一些問題仍然非常棘手,因為其實體運算所需要的時間大大超出我們的可等待範圍。例如,在目前廣泛應用的rsa加密系統中,為了尋找構成600位密鑰的兩個因子,即使利用目前最快的計算機也需要幾百年的時間。

這些年,存儲和計算能力呈指數增長。在香農發表其文章的同一年,在同一個地方——貝爾實驗室,電子計算機就開始使用新發明的半導體來取代真空管。電路設計師能夠壓縮半導體的大小,每18~24個月的時間就能夠無額外費用地将接近兩倍的半導體放在同樣大小的實體空間。這種壓縮體積的過程已持續了50年,使得每10年就有了100倍計算能力的增加,這個趨勢就是廣為人知的摩爾定律。英特爾的創始人之一——戈登·摩爾(gordon moore)在他1965年的論文中首次描述了摩爾定律(moore

1965)。

摩爾定律帶給人們兩種效應和影響。一個是驚人的計算能力,這對于20世紀40年代的計算科學先驅們來說如魔法一般;另一個是正如james gleick(2011)所稱的如洪水般的資訊。第一種影響——每一個傳輸和存儲資訊的更小實體機制,都會導緻第二種影響——資訊的極大豐富。人們被巨量的資訊淹沒,無法消化資訊,變得不知所措。

龐大的計算能力導緻了一個流行的錯覺,那就是計算機所操作的是位而非原子,是以計算結構在尺寸和能量上沒有實體限制(negroponte 1996)。從實體的角度來看,這個概念是完全錯誤的。因為抽象的位必須依靠實體媒體來記錄,而且機器要通過媒體來擷取位資訊。這個記錄的過程将我們帶回了原子世界:沒有它們我們無法完成計算。我們可以在極小的實體元件上進行快速的計算、傳輸和存儲,但從來無法消除它們的時間和功耗。

資訊的測量

香農設計了一個用于測量資訊源中所含資訊的方法,因為他想知道資訊源中最短碼的長度。編碼的位數量并不能作為一個衡量标準,正如我們在上文中所看到的,單個資訊源可以用任意數量的不同編碼來表示。他的結論是一個好的衡量标準應該是消息集合中最短編碼的長度,若編碼再短一些則無法傳輸消息源的所有資訊。

他認為衡量資訊不應該依賴人類所觀察到的編碼的含義,而應該忽略資訊的上下文,尋求編碼、傳輸和解碼的固定工作機制。郵政服務遵循相似的準則:他們的分發和傳輸系統從不依賴于所運輸的信封中的内容。香農非凡的洞察力表現在“将資訊的接收等同于不确定性的減少”。他定義資訊為判斷資訊源正在傳送哪個消息所需要回答的是非(yes-no)問題的最小數量。我們越了解某個資訊源可能會發送什麼消息,那麼看到這條消息時所獲得的資訊量就越少。

假設你知道某人将會隻回答一個是非問題,但提前無法得知回答者的答案,那麼回答者通過回答解決了你的不确定性。香農認為回答者隻給了你一位的資訊(1或0),即從兩種可能答案中選擇其中一個。當答案有兩個以上時,需要更多的位來區分發送的消息。

假設我們想在電話簿中找到含有某個朋友名字的那一頁,那麼需要多少位來對頁數進行編碼呢?一個聰明的方法回答了這個問題:我們從中間打開電話簿,然後詢問哪一半含有朋友的名字(由于使用字母順序編寫電話簿,這個問題就很容易回答)。然後我們把含有名字的那一半電話簿再分割成兩半,詢問同樣的問題。重複這個步驟,直到隻剩一頁,這個朋友的名字就應該在那一頁上。這個重複的問題(“哪一半”或者說“是否在左邊一半”)讓我們快速定位。對于一本有512頁的電話簿,第一個問題留下了256頁來搜尋,第二個問題留下128頁,然後64,32,16,8,4,2,最後是1。需要9個“哪一半”問題來尋找包含名字的那一頁。是以,當找到包含朋友名字的那一頁時,我們擷取了9位的資訊量。

在建構編碼時,人們需要思考消息的發生機率。塞缪爾·莫斯(samuel morse)發明了莫斯密碼,并将之應用于19世紀30年代他參與發明的電報中。他配置設定最短的編碼(單個點)來表示字母e,因為e是在英文中使用最頻繁的字母(大約12%)。他将最長的編碼配置設定給字母j,因為j是最少使用的字母之一(約0.15%)。這樣的配置設定減少了傳輸的平均長度。圖3.4說明了用以識别一個消息的問題可以用來定義資訊編碼,以及關于消息發生機率的先驗知識會減少編碼量。

假設我們有一長度為li、機率為pi的碼字集合。那麼編碼的平均長度就是

《偉大的計算原理》一第3章 Great Principles of Computing 信  息

對于圖3.4中的編碼,公式計算出第一種編碼的平均長度是2位,而第二種編碼的平均長度是1.75位。

在最優編碼中,碼字的長度即最小的l是多少呢?香農在他1948年論文的附錄中回答了這個問題。他表示最優碼字的長度是以2為底的碼字出現機率的對數的相反數,即-log2pi。是以,最優編碼的平均長度是

這個公式和熱力學的熵公式具有同樣的形式,也有着相似的解釋。熵是衡量系統狀态的混亂程度或是不确定性的名額。一個系統的狀态越混亂,熵就越高。最大的混亂度發生在所有的狀态都有同等發生機率的情況下,最大的有序度則發生在某一種狀态非常确定而其他的狀态都絕不會發生的情況下。

香農認為熵是資訊源中固有資訊的衡量标準。一個資訊源由一組可能的消息和消息發生的機率構成。熵隻取決于消息的機率而不是它們的編碼,熵可以确定最短可能編碼的平均長度。任何更短的編碼都将導緻混淆進而無法得到唯一的解碼結果。如下面的例子:

a:1

b:0

d:10

圖3.4 香農将一個消息中的資訊量定義為将該消息從消息源中篩選出來需要回答的是非問題數,這些問題是用來減少“哪個是被發送消息”的不确定性的。試想,如果我們要從四個人中發現被某任務選中的人,則可以使用一個簡單的決策樹(上圖),我們問:“是alice或者bob嗎?”如果答案為是,則決策選擇左邊的子樹。再問一個問題“是alice嗎?”,答案就揭曉了。每個個體的編碼就是指向他/她的是非問題答案的路徑。如果知道某個個體被選中的機率(下圖括号裡的數字),那麼我們可以構造一個等級決策樹,進而使得編碼長度不等。例如,如果alice是最有可能被選中的,我們就把編碼1配置設定給他。bob是下一個最有可能的,則配置設定編碼為01,然後是charlie和diana,他們有相同的選中機率,則都被編碼為3位

如果以上這些消息出現的機率分别是0.5、0.25、0.125和0.125,平均編碼長度就是1.25位。然而,接收方對于1001代表abba,abc,dba還是dc卻無法分辨。這條消息的熵(根據上面的公式計算得出)是h = 1.75,界定了編碼是否能夠解析的門檻值。這條編碼的平均長度是1.25位,低于此門檻值,是以編碼無法解析。

哈夫曼(huffman)編碼是一種快速在熵門檻值内進行位編碼的方法(圖3.5)。

《偉大的計算原理》一第3章 Great Principles of Computing 信  息

圖3.5 1951年麻省理工學院的大衛·哈夫曼(david huffman)設計了一套編碼算法,在已知消息機率的情況下,此編碼算法能夠使得平均編碼長度最小。該算法首先将每個消息都視為一棵單獨的樹。然後不斷地将兩棵具有最小機率的樹進行合并,合并後樹的機率為兩棵子樹的機率和。對于一個具有n條消息的編碼,需要n次合并,形成最後的樹。在本例中,charlie和diana首先合并,然後他們合并後的樹和bob合并,最後和alice合并。樹中的每條路徑定義了每一條消息的二進制位編碼。哈夫曼的方法所生成的編碼能夠将平均編碼長度控制在熵門檻值範圍内。若所有的消息具有相等的機率,則生成圖3.3前面所示的編碼,若機率不相等,則生成後面這種編碼

從另外一個角度來看,熵的門檻值定義了信道是否可信。如果消息源每隔t秒傳送一則新消息,最短編碼的平均長度是h,那麼這個消息源就産生了每秒傳送h

/ t位的需求。如果信道的帶寬是h / t位每秒或者更高,那麼發送方所傳送的所有位都能夠到達接收端。若信道的帶寬小于h /t位每秒,某些位就可能丢失,接收端就無法恢複原始消息。

檔案壓縮是資訊論的一個重要應用,因為其可以減少存儲空間和縮短傳輸時間。在大部分計算機程式中都使用标準碼來表示文本,包括傳統的固定長度編碼ascii和現代的變長編碼unicode。這兩種情況下每個字母都使用了相同長度的編碼,因而,通過尋找重複模式并基于檔案上下文用更短的編碼代替這些模式,文本檔案可被大幅壓縮。例如,一個包含很多字母“e”的檔案,可以用新的更短小的編碼替換它的編碼來壓縮檔案。新的編碼取決于“e”在檔案中的出現頻率——在“e”頻繁出現的檔案中,這個編碼可能是3位,而在“e”不那麼頻繁出現的檔案中,這個編碼可能是5位。檔案壓縮算法會生成一個新編碼到原始編碼的轉換表。“.zip”和“.rar”格式就采用了這種政策。這種壓縮政策的設計也不會将資訊“壓縮”至低于熵的門檻值。因為若是低于門檻值,則無法保證完全恢複原始資訊,這種政策被稱為無損壓縮。

另一種政策是有損壓縮。有損壓縮方法具有更大的壓縮率,但無法完全恢複原始檔案。例如,mp3音頻壓縮通過丢棄絕大部分人聽不到的頻率來壓縮音頻,其壓縮率大約為10,但是沒法恢複丢棄的頻率。jpeg圖像壓縮舍棄了部分人眼基本會忽略的顔色資訊位,當然也沒法恢複這些原始的圖像位。這些壓縮方案使得dvd、線上電影和唱片等能夠以更低廉的價格賣給消費者。這些方法在感覺品質上的小小損失,對于減少檔案大小而言通常被認為是一種很好的折中。

資訊的轉換

一個單純的通信系統隻是簡單地将資訊從一處傳輸到另一處,但是計算機會做更多的工作,即轉換資訊。轉換就帶來了更多可能,其中最顯著的産品就是新資訊的出現。簡單的轉換包括将一個數平方、計算π至指定小數位數、對一列數字按照升序排列,每一次轉換都是将一種資訊模式作為輸入,并建立一種資訊模式作為輸出。

因為二進制模式可以被解析為數,是以一次轉換在數學上看來就像是一個輸入數到輸出數的映射函數。能夠被機器計算的函數被稱為可計算函數。圖靈和他同時代的人們用這個概念來定義計算。圖靈表示一個簡單的抽象計算機——圖靈機,足以實作任何可計算的函數(turing 1937)。圖靈機遵循一個非常簡單的指令程式來實作這些轉換。因為每一條指令顯然可以被機器實作,那麼計算機轉換二進制的時候并不考慮它們的含義。這類似于香農所強調的,信道可以被設計得完全可靠并且不考慮傳輸資訊的含義。

當我們稍微深入了解機器如何轉換輸入時,就會發現程式設計的一個重要方面,稱之為含義保留(meaning-preserving)。設想兩個數a和b相加,兩個數相加意味着什麼呢?這意味着我們要遵循一系列加法算法的步驟。這個步驟包括連續對a和b的兩個對應的數字位相加,然後将其進位結果傳遞到更高位。我們對于屬于{0,1,2,…,9}中的數字對有明确的加法規則,并且會産生進位0或者1。當為這個算法設計程式時,我們需要注意讓每條指令都能夠産生正确的加法結果。如果成功了,我們可以相信機器能夠正确做出兩個數的加法。若失敗了,我們會說機器壞了。

換句話說,設計過程本身就是将我們腦中的加法過程轉換為機器執行加法的指令模式,加法的含義就存在于機器和其算法的設計之中。

這對于任何其他的可計算函數也是适用的。我們把大腦中想法的具體含義轉換成可計算的函數,将它輸出到程式中,進而控制機器實作這個想法。這個過程也就是将具有我們想法含義的函數轉變為對機器的設計。

從這個角度看,機器和通信系統不考慮二進制資料含義進行資訊處理的概念有些站不住腳。算法和機器被工程師和程式員植入了含義,我們設計機器進而使得每個計算步驟和輸出都是我們想要的含義,假設輸入也具有我們想要的含義。仔細精确的設計就是為了不用擔心機器曲解我們想要表達的含義。

計算機将計算函數和信道結合,一個信道将輸入送到執行計算函數的機器,另一個信道将輸出送到目的地。這種情況下信道和計算機似乎隻完成了運輸和操作資訊位的工作。然而從人類的角度來看,計算帶來了新的資訊,無論計算機輸出比輸入更多還是更少的資訊。例如,前文提到的一個計算π的函數,在輸入一個三位數“900”時能生成900位的π的值,輸出擴充了300倍的資訊量。一個排序函數的輸出和輸入具有同樣的位數,但是具有不同的順序。一個平均函數能夠計算出少量的數字來代表大量資料的平均值。

數字表示和機器操作都依賴于實體過程,每個機器操作都需要花費少量的時間和功耗。有些我們希望計算的函數需要花費太多的步驟以至于在有生之年無法等到機器傳回結果。計算所需的實體處理嚴重限制了我們能夠計算的内容。

計算的邏輯也會帶來限制,其中最有名的就是我們想計算但無法計算的函數。圖靈在1936年提到了停機問題——不存在一個程式,可以檢查任何程式并且判斷其在給定輸入上是否包含無限循環。一個現在的執行個體是惡意軟體檢測,即不存在一個程式能夠檢測任意給定程式是否嵌入了惡意軟體檢測程式。我們在第6章檢驗計算的實體和邏輯局限性的時候,還會再回到這個話題。

即使當我們将注意力限制在可以計算并且很快傳回有用結果的函數,也可以發現一些有趣的問題。當一個函數在計算我們沒有見過的資料位時,這些資料位是新的資訊嗎(見圖3.6)?或者它們隻是現有資訊的結果?dna包含資訊嗎?很多生物學家認為包含。若dna是一種資訊,那它的資訊源和接收端又是什麼呢?如果對dna解碼,我們能得到什麼資訊呢?解碼的dna可以用來尋找治愈遺傳疾病的治療方案,也可以識别犯罪現場的行為人。将dna與資料庫比對僅僅揭示了現有的資訊還是生成了新的資訊呢?經典的資訊論無法回答這樣的問題。

《偉大的計算原理》一第3章 Great Principles of Computing 信  息

圖3.6 哈勃太空望遠鏡的集光傳感器陣列編碼tb級資料并傳輸到地球,這些資料再被處理成為圖像。計算理論将這個圖像處理過程描述為方程y = f(x),其中輸入資料x在函數計算後産生輸出圖像y。這個機器實作的功能(将信号發給它,它又生成信号)不依賴于望遠鏡傳輸的資訊的含義,然而人類看到y輸出的是一張美麗的圖檔——船底座星雲的實際展示(圖檔來源:nasa)

互動系統

許多計算機程式是互動系統:接收新的輸入,在很多點上生成新的輸出,除非被幹預或者程式崩潰,它們可能會無休止地做這些工作。互動系統無處不在,每一個作業系統都是一個互動系統,比如一輛汽車的gps系統、facebook、一個線上商家的伺服器,或者網際網路的域名解析系統。網際網路本身也是一個全球的資料交換和協調行動的互動系統。互動系統的一個顯著特征就是持續不斷地運作,同時沒有程式結束。相反,函數系統在計算出答案後,程式結束運作。

多年來,計算機科學家們激烈地争論互動計算是否比函數計算更強大(goldin et al. 2010)。近年來專家們一緻同意互動式計算更加強大。作為當代的難題,如何有語義地為數字圖像打标簽解釋了這個原因,因為這個問題的解決方法依賴于互動:遊戲構造了人機互動來實作人和機器都無法單獨完成的功能(見圖3.7)。互動系統所生成的輸出是已知機器無法做到的。

《偉大的計算原理》一第3章 Great Principles of Computing 信  息

圖3.7 在2004年卡耐基梅隆大學(cmu)的luis von ahn 和 laura dabbish發表的一篇論文中,描述了一個新穎的電腦遊戲esp。在遊戲中,玩家被兩兩分組,給予同一張圖檔并要求用單詞來描述這張圖檔的内容,遊戲的目标是找到同伴(不知道也看不到)也使用過的相同單詞。公共的單詞就成為這張圖檔被搜尋時的新标簽。遊戲将人和電腦組隊去計算一個圖檔識别函數,沒有人知道如何單獨使用計算機進行計算。像其他函數一樣,這個函數也轉換資訊,不過這個含義現在是由玩家來互動地完成

解決悖論

在上面的讨論中,我們注意到一些關于資訊的看似沖突的結論:

1)工程師設計的通信系統能夠在不了解資訊含義的情況下運作,那麼人類資訊接收者如何收到含義呢?

2)工程師所設計的計算機系統能夠在不了解程式與二進制模式資料含義的情況下轉換資訊,那麼這些系統如何生成新的資訊呢?

3)程式員設計的程式能夠在對其資料無知的情況下運作,那麼人類使用者是基于什麼有意義地解釋程式的輸出呢?

4)建立連接配接(如放置一個網頁連結[berners-lee 2000])會産生新的資訊嗎?

5)如果設計一個計算機程式來生成欺騙性資訊,那它的輸出還算是資訊嗎?

6)加密消息中的資訊又在哪裡?

7)如果一個計算機程式完成了新的科學發現,那麼它是創造了新的資訊還是僅僅傳遞了人類不了解的已知資訊呢?

資訊學常見的理論和觀點都不能回答這些問題。比如,我們說符号“攜帶”資訊,這隻會引出新的問題,攜帶的資訊在哪裡?如何嵌入和提取資訊?另一個例子是嵌入在社會傳統中的含義通過機器的輸出所觸發,這種含義隻會有助于引發第三個問題。還有另一個例子是“标記對象”模型(rocchi 2012),該模型将标記和含義将結合,但僅對顯式資訊有效。

含義保留的變換解決了所有的悖論。人們有意設計出軟體程式來支援實踐、建立連接配接、隐藏資訊或者尋找新的資訊,這些含義是設計師設計機器回報的所有結果,是以人類使用者會認為這是預期的反應。當某個機器沒有給出預期的行為時,設計師和使用者都會認為它損壞了。

這些悖論總會在初期顯現,因為計算機科學家總希望機器拟人化,比如,我們說一個機器能夠了解它的輸入,或者機器對于輸出很有創造性。而當别人深入了解我們的程式和機器時,他們隻能看到機械步驟。這些步驟中他們看不到“了解”甚至“創造性”。了解和含義來源于設計者,是他們設計了機器的模式并在使用時産生預期的含義。

資訊和發現

當我們說計算機發現了新的模式時我們想說明什麼呢?設想一個程式能夠發現資料的趨勢,首先提供一組在以往性能實驗中觀察到的輸入輸出對(x,y)給程式,然後利用統計回歸,程式找到了最好的參數a和b表示一條直線來拟合這個資料:y = ax + b,程式的輸出是直線的正常表達。這個輸出對于了解如何利用直線進行預測的使用者是有意義的。很容易設計另一個程式來使用具有參數a和b的直線來預測y,而y是由新的輸入x生成的。

這就是一個設計師使用數學知識從一系列資料中計算最佳拟合參數的過程,計算中的步驟是機械的,輸出對于那些了解資料中直線趨勢模型的人們是有意義的。這些意義來源于設計師,而不是資料的處理。

對于不了解資料中直線模型趨勢的人,也就不知道輸出的含義。但是這并不意味着輸出的含義是主觀的,隻意味着設計師沒有打算讓程式對這些使用者産生任何意義。

在20世紀80年代,研究者開始使用強大的計算機篩選大資料集來試圖發現一些模式。他們使用貝葉斯(bayesian)推理(這是一個複雜的資料分析方法)來推算最有可能産生資料的一系列條件。貝葉斯推理基于貝葉斯條件機率統計公式:

它說明的是給定證據e,假設h的機率就是:給定假設h後該證據e的機率,乘以假設h的機率,再除以證據e的機率。圖3.8給出了一個簡單的示例,醫生已知病人頭疼,試圖診斷他是否患有流感。

這種情況下的發現是一個新的假設。程式能夠生成一系列假設,然後根據手中已知的情況,按照貝葉斯定律計算每一個假設的機率,把其中最有可能的假設作為這個“發現”。

在這種情況下,設計者結合貝葉斯定律和搜尋方法,在給定資料下找到最大可能的假設。這個程式的輸出就是那些明白假設和資料“含義”的使用者所預期的,使用者将決定是否将這些假設視作一個發現。

《偉大的計算原理》一第3章 Great Principles of Computing 信  息

圖3.8 韋恩圖示範了如何利用貝葉斯定律評估一個很難判斷的假設。在所有人口的集合k中包含一個子集f,代表患有流感的人,還有一個子集h,代表患有頭疼的人。醫生看到一個病人抱怨頭疼,擔心自己患上流感。根據貝葉斯定律p(f|h) = p(h|f)·p(f) / p(h)。醫學資料告訴醫生,患有頭疼的機率p(h) = 0.4,患有流感的機率p(f) = 0.2,在患有流感的人中患有頭疼的機率是p(h|f) = 2 / 3,是以p(f|h) = (2 / 3)·0.2 / 0.4 = 1 / 3,即三分之一。在沒有任何資訊的時候,患有流感的機率是0.2,但若已知患頭疼,患有流感的機率則上升到0.33

在經典的資訊論中,我們說貝葉斯推理發揮作用,是通過已知消息源的資料來決定消息源的内容。在消息通信中,香農合理假設消息源的内容為先驗資訊。在科學發現中,消息源中包含的一系列機率最初是未知的,推理過程使得消息和它們的機率可知。貝葉斯推理是一個自動将消息源中的觀察資料轉換為消息源内容的方法。

總結

自古以來,人類就開始編碼信号,使其可以在不同的媒介中進行傳輸。在20世紀40年代,香農的資訊論提出了四大準則:

每一個通信系統都可以被模組化成一個噪聲通道,其攜帶着被編碼的信号,該信号表達着消息源中的消息。

消息源的熵決定了消息源最短的可解析編碼的長度,哈夫曼編碼是和熵一緻的一種編碼(資訊熵小于一個比特)。

充分備援的比特位能夠添加到任意編碼中,以此來克服信道中的噪聲,并且能同時保證百分之百準确的接收。

利用更短的編碼替換模式,檔案能夠被壓縮到更小的尺寸。

這些原則使得通信和計算機工程師能夠設計數字系統,這些系統在傳輸過程中不會丢失資訊,并且噪聲引入的錯誤也可以被消除。

一些不了解香農理論的企業家認為“比特而非原子”的理論能夠預示一個激增的新興經濟體,但他們的夢想是不會實作的,因為真正的通信和計算系統的基礎來源于将資料記錄表示成實體信号和狀态,而計算和傳輸需要消耗時間和能量。我們在計算上花費了很多能量:網際網路的連接配接點和資料中心消耗了世界近6%的電力。我們不能寄希望于假定能通過比特而不是原子來解決棘手問題就忽略了這個問題:比特背後的原子也是很重要的。

正如摩爾定律所預示,我們存儲資訊的能力成指數增加,我們闡明資訊含義的壓力也在不斷地增加,而香農資訊論的定義無法解決這個問題。這看似是個悖論:系統如何在不考慮資訊含義的情況下處理資訊,同時還能在使用者的體驗中産生含義。

含義保留的變換融合了機器的無意義機制和能讓機器産生含義的人類經驗。程式設計師編制指令,進而能在使用者群體産生預期含義的輸出;每一條指令的執行,逐漸将部分計算結果接近預期的輸出。讓我們為程式設計師這個角色鼓掌,是他們給了我們有意義的軟體和硬體。

緻謝

這一章改編自peter denning和tim bell的“資訊悖論”(2012),其發表于《美國科學家》。

繼續閱讀