資料壓縮技術簡史
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
資料壓縮技術簡史
電腦裡的資料壓縮其實類似於美眉們的瘦身運動,不外有兩大功用。第一,可以節省空間。拿瘦身美眉來說,要是八個美眉可以擠進一輛計程車裡,那該有多省錢啊!第二,可以減少對頻寬的佔用。例如,我們都想在不到 100Kbps 的 GPRS 網上觀看 DVD 大片,這就好比瘦身美眉們總希望用一尺布裁出七件吊帶衫,前者有待於資料壓縮技術的突破性進展,後者則取決於美眉們的恆心和毅力。
簡單地說,如果沒有資料壓縮技術,我們就沒法用 WinRAR 為 Email 中的附件瘦身;如果沒有資料壓縮技術,市場上的數碼錄音筆就只能記錄不到 20 分鐘的語音;如果沒有資料壓縮技術,從 Internet 上下載一部電影也許要花半年的時間……可是這一切究竟是如何實現的呢?資料壓縮技術又是怎樣從無到有發展起來的呢?
概率奇緣
一千多年前的中國學者就知道用“班馬”這樣的縮略語來指代班固和司馬遷,這種崇尚簡約的風俗一直延續到了今天的 Internet 時代:當我們在 BBS 上用“ 7456 ”代表“氣死我了”,或是用“ B4 ”代表“ Before ”的時候,我們至少應該知道,這其實就是一種最簡單的資料壓縮呀。
嚴格意義上的資料壓縮起源於人們對概率的認識。當我們對文字資訊進行編碼時,如果為出現概率較高的字母賦予較短的編碼,為出現概率較低的字母賦予較長的編碼,總的編碼長度就能縮短不少。遠在計算機出現之前,著名的 Morse 電碼就已經成功地實踐了這一準則。在 Morse 碼錶中,每個字母都對應於一個唯一的點劃組合,出現概率最高的字母 e 被編碼為一個點“ . ”,而出現概率較低的字母 z 則被編碼為“ --.. ”。顯然,這可以有效縮短最終的電碼長度。
資訊理論之父 C. E. Shannon 第一次用數學語言闡明瞭概率與資訊冗餘度的關係。在 1948 年發表的論文“通訊的數學理論( A Mathematical Theory of Communication )”中, Shannon 指出,任何資訊都存在冗餘,冗餘大小與資訊中每個符號(數字、字母或單詞)的出現概率或者說不確定性有關。 Shannon 借鑑了熱力學的概念,把資訊中排除了冗餘後的平均資訊量稱為“資訊熵”,並給出了計算資訊熵的數學表示式。這篇偉大的論文後來被譽為資訊理論的開山之作,資訊熵也奠定了所有資料壓縮演算法的理論基礎。從本質上講,資料壓縮的目的就是要消除資訊中的冗餘,而資訊熵及相關的定理恰恰用數學手段精確地描述了資訊冗餘的程度。利用資訊熵公式,人們可以計算出資訊編碼的極限,即在一定的概率模型下,無失真壓縮的編碼長度不可能小於資訊熵公式給出的結果。
有了完備的理論,接下來的事就是要想辦法實現具體的演算法,並儘量使演算法的輸出接近資訊熵的極限了。當然,大多數工程技術人員都知道,要將一種理論從數學公式發展成實用技術,就像僅憑一個 E=mc 2 的公式就要去製造核武器一樣,並不是一件很容易的事。
數學遊戲
設計具體的壓縮演算法的過程通常更像是一場數學遊戲。開發者首先要尋找一種能儘量精確地統計或估計資訊中符號出現概率的方法,然後還要設計一套用最短的程式碼描述每個符號的編碼規則。統計學知識對於前一項工作相當有效,迄今為止,人們已經陸續實現了靜態模型、半靜態模型、自適應模型、 Markov 模型、部分匹配預測模型等概率統計模型。相對而言,編碼方法的發展歷程更為曲折一些。
1948 年, Shannon 在提出資訊熵理論的同時,也給出了一種簡單的編碼方法—— Shannon 編碼。 1952 年, R. M. Fano 又進一步提出了 Fano 編碼。這些早期的編碼方法揭示了變長編碼的基本規律,也確實可以取得一定的壓縮效果,但離真正實用的壓縮演算法還相去甚遠。
第一個實用的編碼方法是由 D. A. Huffman 在 1952 年的論文“最小冗餘度程式碼的構造方法( A Method for the Construction of Minimum Redundancy Codes )”中提出的。直到今天,許多《資料結構》教材在討論二叉樹時仍要提及這種被後人稱為 Huffman 編碼的方法。 Huffman 編碼在計算機界是如此著名,以至於連編碼的發明過程本身也成了人們津津樂道的話題。據說, 1952 年時,年輕的 Huffman 還是麻省理工學院的一名學生,他為了向老師證明自己可以不參加某門功課的期末考試,才設計了這個看似簡單,但卻影響深遠的編碼方法。
Huffman 編碼效率高,運算速度快,實現方式靈活,從 20 世紀 60 年代至今,在資料壓縮領域得到了廣泛的應用。例如,早期 UNIX 系統上一個不太為現代人熟知的壓縮程式 COMPACT 實際就是 Huffman 0 階自適應編碼的具體實現。 20 世紀 80 年代初, Huffman 編碼又出現在 CP/M 和 DOS 系統中,其代表程式叫 SQ 。今天,在許多知名的壓縮工具和壓縮演算法(如 WinRAR 、 gzip 和 JPEG )裡,都有 Huffman 編碼的身影。不過, Huffman 編碼所得的編碼長度只是對資訊熵計算結果的一種近似,還無法真正逼近資訊熵的極限。正因為如此,現代壓縮技術通常只將 Huffman 視作最終的編碼手段,而非資料壓縮演算法的全部。
科學家們一直沒有放棄向資訊熵極限挑戰的理想。 1968 年前後, P. Elias 發展了 Shannon 和 Fano 的編碼方法,構造出從數學角度看來更為完美的 Shannon-Fano-Elias 編碼。沿著這一編碼方法的思路, 1976 年, J. Rissanen 提出了一種可以成功地逼近資訊熵極限的編碼方法——算術編碼。 1982 年, Rissanen 和 G. G. Langdon 一起改進了算術編碼。之後,人們又將算術編碼與 J. G. Cleary 和 I. H. Witten 於 1984 年提出的部分匹配預測模型( PPM )相結合,開發出了壓縮效果近乎完美的演算法。今天,那些名為 PPMC 、 PPMD 或 PPMZ 並號稱壓縮效果天下第一的通用壓縮演算法,實際上全都是這一思路的具體實現。
對於無失真壓縮而言, PPM 模型與算術編碼相結合,已經可以最大程度地逼近資訊熵的極限。看起來,壓縮技術的發展可以到此為止了。不幸的是,事情往往不像想象中的那樣簡單:算術編碼雖然可以獲得最短的編碼長度,但其本身的複雜性也使得算術編碼的任何具體實現在執行時都慢如蝸牛。即使在摩爾定律大行其道, CPU 速度日新月異的今天,算術編碼程式的執行速度也很難滿足日常應用的需求。沒辦法,如果不是後文將要提到的那兩個猶太人,我們還不知要到什麼時候才能用上 WinZIP 這樣方便實用的壓縮工具呢。
異族傳說
逆向思維永遠是科學和技術領域裡出奇制勝的法寶。就在大多數人絞盡腦汁想改進 Huffman 或算術編碼,以獲得一種兼顧了執行速度和壓縮效果的“完美”編碼的時候,兩個聰明的猶太人 J. Ziv 和 A. Lempel 獨闢蹊徑,完全脫離 Huffman 及算術編碼的設計思路,創造出了一系列比 Huffman 編碼更有效,比算術編碼更快捷的壓縮演算法。我們通常用這兩個猶太人姓氏的縮寫,將這些演算法統稱為 LZ 系列演算法。
按照時間順序, LZ 系列演算法的發展歷程大致是: Ziv 和 Lempel 於 1977 年發表題為“順序資料壓縮的一個通用演算法( A Universal Algorithm for Sequential Data Compression )”的論文,論文中描述的演算法被後人稱為 LZ77 演算法。 1978 年,二人又發表了該論文的續篇“通過可變比率編碼的獨立序列的壓縮( Compression of Individual Sequences via Variable Rate Coding )”,描述了後來被命名為 LZ78 的壓縮演算法。 1984 年, T. A. Welch 發表了名為“高效能資料壓縮技術( A Technique for High Performance Data Compression )”的論文,描述了他在 Sperry 研究中心(該研究中心後來併入了 Unisys 公司)的研究成果,這是 LZ78 演算法的一個變種,也就是後來非常有名的 LZW 演算法。 1990 年後, T. C. Bell 等人又陸續提出了許多 LZ 系列演算法的變體或改進版本。
說實話, LZ 系列演算法的思路並不新鮮,其中既沒有高深的理論背景,也沒有複雜的數學公式,它們只是簡單地延續了千百年來人們對字典的追崇和喜好,並用一種極為巧妙的方式將字典技術應用於通用資料壓縮領域。通俗地說,當你用字典中的頁碼和行號代替文章中每個單詞的時候,你實際上已經掌握了 LZ 系列演算法的真諦。這種基於字典模型的思路在表面上雖然和 Shannon 、 Huffman 等人開創的統計學方法大相徑庭,但在效果上一樣可以逼近資訊熵的極限。而且,可以從理論上證明, LZ 系列演算法在本質上仍然符合資訊熵的基本規律。
LZ 系列演算法的優越性很快就在資料壓縮領域裡體現 了 出來,使用 LZ 系列演算法的工具軟體數量呈爆炸式增長。 UNIX 系統上最先出現了使用 LZW 演算法的 compress 程式,該程式很快成為了 UNIX 世界的壓縮標準。緊隨其後的是 MS-DOS 環境下的 ARC 程式,以及 PKWare 、 PKARC 等仿製品。 20 世紀 80 年代,著名的壓縮工具 LHarc 和 ARJ 則是 LZ77 演算法的傑出代表。
今天, LZ77 、 LZ78 、 LZW 演算法以及它們的各種變體幾乎壟斷了整個通用資料壓縮領域,我們熟悉的 PKZIP 、 WinZIP 、 WinRAR 、 gzip 等壓縮工具以及 ZIP 、 GIF 、 PNG 等檔案格式都是 LZ 系列演算法的受益者,甚至連 PGP 這樣的加密檔案格式也選擇了 LZ 系列演算法作為其資料壓縮的標準。
沒有誰能否認兩位猶太人對資料壓縮技術的貢獻。我想強調的只是,在工程技術領域,片面追求理論上的完美往往只會事倍功半,如果大家能像 Ziv 和 Lempel 那樣,經常換個角度來思考問題,沒準兒你我就能發明一種新的演算法,就能在技術方展史上揚名立萬呢。
音畫時尚
LZ 系列演算法基本解決了通用資料壓縮中兼顧速度與壓縮效果的難題。但是,資料壓縮領域裡還有另一片更為廣闊的天地等待著我們去探索。 Shannon 的資訊理論告訴我們,對資訊的先驗知識越多,我們就可以把資訊壓縮得越小。換句話說,如果壓縮演算法的設計目標不是任意的資料來源,而是基本屬性已知的特種資料,壓縮的效果就會進一步提高。這提醒我們,在發展通用壓縮演算法之餘,還必須認真研究針對各種特殊資料的專用壓縮演算法。比方說,在今天的數碼生活中,遍佈於數碼相機、數碼錄音筆、數碼隨身聽、數碼攝像機等各種數字裝置中的影象、音訊、視訊資訊,就必須經過有效的壓縮才能在硬碟上儲存或是通過 USB 電纜傳輸。實際上,多媒體資訊的壓縮一直是資料壓縮領域裡的重要課題,其中的每一個分支都有可能主導未來的某個技術潮流,併為數碼產品、通訊裝置和應用軟體開發商帶來無限的商機。
讓我們先從影象資料的壓縮講起。通常所說的影象可以被分為二值影象、灰度影象、彩色影象等不同的型別。每一類影象的壓縮方法也不盡相同。
傳真技術的發明和廣泛使用促進了二值影象壓縮演算法的飛速發展。 CCITT (國際電報電話諮詢委員會,是國際電信聯盟 ITU 下屬的一個機構)針對傳真類應用建立了一系列影象壓縮標準,專用於壓縮和傳遞二值影象。這些標準大致包括 20 世紀 70 年代後期的 CCITT Group 1 和 Group 2 , 1980 年的 CCITT Group 3 ,以及 1984 年的 CCITT Group 4 。為了適應不同型別的傳真影象,這些標準所用的編碼方法包括了一維的 MH 編碼和二維的 MR 編碼,其中使用了行程編碼( RLE )和 Huffman 編碼等技術。今天,我們在辦公室或家裡收發傳真時,使用的大多是 CCITT Group 3 壓縮標準,一些基於數字網路的傳真裝置和存放二值影象的 TIFF 檔案則使用了 CCITT Group 4 壓縮標準。 1993 年, CCITT 和 ISO (國際標準化組織)共同成立的二值影象聯合專家組( Joint Bi-level Image Experts Group , JBIG )又將二值影象的壓縮排一步發展為更加通用的 JBIG 標準。
實際上,對於二值影象和非連續的灰度、彩色影象而言,包括 LZ 系列演算法在內的許多通用壓縮演算法都能獲得很好的壓縮效果。例如,誕生於 1987 年的 GIF 影象檔案格式使用的是 LZW 壓縮演算法, 1995 年出現的 PNG 格式比 GIF 格式更加完善,它選擇了 LZ77 演算法的變體 zlib 來壓縮影象資料。此外,利用前面提到過的 Huffman 編碼、算術編碼以及 PPM 模型,人們事實上已經構造出了許多行之有效的影象壓縮演算法。
但是,對於生活中更加常見的,畫素值在空間上連續變化的灰度或彩色影象(比如數碼照片),通用壓縮演算法的優勢就不那麼明顯了。幸運的是,科學家們發現,如果在壓縮這一類影象資料時允許改變一些不太重要的畫素值,或者說允許損失一些精度(在壓縮通用資料時,我們絕不會容忍任何精度上的損失,但在壓縮和顯示一幅數碼照片時,如果一片樹林裡某些樹葉的顏色稍微變深了一些,看照片的人通常是察覺不到的),我們就有可能在壓縮效果上獲得突破性的進展。這一思想在資料壓縮領域具有革命性的地位:通過在使用者的忍耐範圍內損失一些精度,我們可以把影象(也包括音訊和視訊)壓縮到原大小的十分之一、百分之一甚至千分之一,這遠遠超出了通用壓縮演算法的能力極限。也許,這和生活中常說的“退一步海闊天空”的道理有異曲同工之妙吧。
這種允許精度損失的壓縮也被稱為有失真壓縮。在影象壓縮領域,著名的 JPEG 標準是有失真壓縮演算法中的經典。 JPEG 標準由靜態影象聯合專家組( Joint Photographic Experts Group , JPEG )於 1986 年開始制定, 1994 年後成為國際標準。 JPEG 以離散餘弦變換( DCT )為核心演算法,通過調整質量係數控制影象的精度和大小。對於照片等連續變化的灰度或彩色影象, JPEG 在保證影象質量的前提下,一般可以將影象壓縮到原大小的十分之一到二十分之一。如果不考慮影象質量, JPEG 甚至可以將影象壓縮到“無限小”。
JPEG 標準的最新進展是 1996 年開始制定, 2001 年正式成為國際標準的 JPEG 2000 。與 JPEG 相比, JPEG 2000 作了大幅改進,其中最重要的是用離散小波變換( DWT )替代了 JPEG 標準中的離散餘弦變換。在檔案大小相同的情況下, JPEG 2000 壓縮的影象比 JPEG 質量更高,精度損失更小。作為一個新標準, JPEG 2000 暫時還沒有得到廣泛的應用,不過包括數碼相機制造商在內的許多企業都對其應用前景表示樂觀, JPEG 2000 在影象壓縮領域裡大顯身手的那一天應該不會特別遙遠。
JPEG 標準中通過損失精度來換取壓縮效果的設計思想直接影響了視訊資料的壓縮技術。 CCITT 於 1988 年制定了電視電話和會議電視的 H.261 建議草案。 H.261 的基本思路是使用類似 JPEG 標準的演算法壓縮視訊流中的每一幀影象,同時採用運動補償的幀間預測來消除視訊流在時間維度上的冗餘資訊。在此基礎上, 1993 年, ISO 通過了動態影象專家組( Moving Picture Experts Group , MPEG )提出的 MPEG-1 標準。 MPEG-1 可以對普通質量的視訊資料進行有效編碼。我們現在看到的大多數 VCD 影碟,就是使用 MPEG-1 標準來壓縮視訊資料的。
為了支援更清晰的視訊影象,特別是支援數字電視等高階應用, ISO 於 1994 年提出了新的 MPEG-2 標準(相當於 CCITT 的 H.262 標準)。 MPEG-2 對影象質量作了分級處理,可以適應普通電視節目、會議電視、高清晰數字電視等不同質量的視訊應用。在我們的生活中,可以提供高清晰畫面的 DVD 影碟所採用的正是 MPEG-2 標準。
Internet 的發展對視訊壓縮提出了更高的要求。在內容互動、物件編輯、隨機存取等新需求的刺激下, ISO 於 1999 年通過了 MPEG-4 標準(相當於 CCITT 的 H.263 和 H.263+ 標準)。 MPEG-4 標準擁有更高的壓縮比率,支援併發資料流的編碼、基於內容的互動操作、增強的時間域隨機存取、容錯、基於內容的尺度可變性等先進特性。 Internet 上新興的 DivX 和 XviD 檔案格式就是採用 MPEG-4 標準來壓縮視訊資料的,它們可以用更小的儲存空間或通訊頻寬提供與 DVD 不相上下的高清晰視訊,這使我們在 Internet 上釋出或下載數字電影的夢想成為了現實。
就像視訊壓縮和電視產業的發展密不可分一樣,音訊資料的壓縮技術最早也是由無線電廣播、語音通訊等領域裡的技術人員發展起來的。這其中又以語音編碼和壓縮技術的研究最為活躍。自從 1939 年 H. Dudley 發明聲碼器以來,人們陸續發明了脈衝編碼調製( PCM )、線性預測( LPC )、向量量化( VQ )、自適應變換編碼( ATC )、子帶編碼( SBC )等語音分析與處理技術。這些語音技術在採集語音特徵,獲取數字訊號的同時,通常也可以起到降低資訊冗餘度的作用。像影象壓縮領域裡的 JPEG 一樣,為獲得更高的編碼效率,大多數語音編碼技術都允許一定程度的精度損失。而且,為了更好地用二進位制資料儲存或傳送語音訊號,這些語音編碼技術在將語音訊號轉換為數字資訊之後又總會用 Huffman 編碼、算術編碼等通用壓縮演算法進一步減少資料流中的冗餘資訊。
對於電腦和數字電器(如數碼錄音筆、數碼隨身聽)中儲存的普通音訊資訊,我們最常使用的壓縮方法主要是 MPEG 系列中的音訊壓縮標準。例如, MPEG-1 標準提供了 Layer I 、 Layer II 和 Layer III 共三種可選的音訊壓縮標準, MPEG-2 又進一步引入了 AAC ( Advanced Audio Coding )音訊壓縮標準, MPEG-4 標準中的音訊部分則同時支援合成聲音編碼和自然聲音編碼等不同型別的應用。在這許多音訊壓縮標準中,聲名最為顯赫的恐怕要數 MPEG-1 Layer III ,也就是我們常說的 MP3 音訊壓縮標準了。從 MP3 播放器到 MP3 手機,從硬碟上堆積如山的 MP3 檔案到 Internet 上版權糾紛不斷的 MP3 下載, MP3 早已超出了資料壓縮技術的範疇,而成了一種時尚文化的象徵了。
很顯然,在多媒體資訊日益成為主流資訊形態的數字化時代裡,資料壓縮技術特別是專用於影象、音訊、視訊的資料壓縮技術還有相當大的發展空間——畢竟,人們對資訊數量和資訊質量的追求是永無止境的。
回到未來
從資訊熵到算術編碼,從猶太人到 WinRAR ,從 JPEG 到 MP3 ,資料壓縮技術的發展史就像是一個寫滿了“創新”、“挑戰”、“突破”和“變革”的羊皮卷軸。也許,我們在這裡不厭其煩地羅列年代、人物、標準和文獻,其目的只是要告訴大家,前人的成果只不過是後人有望超越的目標而已,誰知道在未來的幾年裡,還會出現幾個 Shannon ,幾個 Huffman 呢?
談到未來,我們還可以補充一些與資料壓縮技術的發展趨勢有關的話題。
1994年, M. Burrows 和 D. J. Wheeler 共同提出了一種全新的通用資料壓縮演算法。這種演算法的核心思想是對字串輪轉後得到的字元矩陣進行排序和變換,類似的變換演算法被稱為 Burrows-Wheeler 變換,簡稱 BWT 。與 Ziv 和 Lempel 另闢蹊徑的做法如出一轍, Burrows 和 Wheeler 設計的 BWT 演算法與以往所有通用壓縮演算法的設計思路都迥然不同。如今, BWT 演算法在開放原始碼的壓縮工具 bzip 中獲得了巨大的成功, bzip 對於文字檔案的壓縮效果要遠好於使用 LZ 系列演算法的工具軟體。這至少可以表明,即便在日趨成熟的通用資料壓縮領域,只要能在思路和技術上不斷創新,我們仍然可以找到新的突破口。
分形壓縮技術是影象壓縮領域近幾年來的一個熱點。這一技術起源於 B. Mandelbrot 於 1977 年建立的分形幾何學。 M. Barnsley 在 20 世紀 80 年代後期為分形壓縮奠定了理論基礎。從 20 世紀 90 年代開始, A. Jacquin 等人陸續提出了許多實驗性的分形壓縮演算法。今天,很多人相信,分形壓縮是影象壓縮領域裡最有潛力的一種技術體系,但也有很多人對此不屑一顧。無論其前景如何,分形壓縮技術的研究與發展都提示我們,在經過了幾十年的高速發展之後,也許,我們需要一種新的理論,或是幾種更有效的數學模型,以支撐和推動資料壓縮技術繼續向前躍進。
人工智慧是另一個可能對資料壓縮的未來產生重大影響的關鍵詞。既然 Shannon 認為,資訊能否被壓縮以及能在多大程度上被壓縮與資訊的不確定性有直接關係,假設人工智慧技術在某一天成熟起來,假設計算機可以像人一樣根據已知的少量上下文猜測後續的資訊,那麼,將資訊壓縮到原大小的萬分之一乃至十萬分之一,恐怕就不再是天方夜譚了。
回顧歷史之後,人們總喜歡暢想一下未來。但未來終究是未來,如果僅憑你我幾句話就可以理清未來的技術發展趨勢,那技術創新的工作豈不就索然無味了嗎?依我說,未來並不重要,重要的是,趕快到 Internet 上下載幾部大片,然後躺在沙發裡,好好享受一下資料壓縮為我們帶來的無限快樂吧。