compressed sensing掃盲

這是數學家陶哲軒在他自己的blog上寫的一篇科普文章,討論的是近年來在應用數學領域裏最熱門的話題之一:壓縮感知(compressedsensing)。所謂壓縮感知,最核心的概念在於試圖從原理上降低對一個信號進行測量的成本。比如說,一個信號包含一千個數據,那麼按照傳統的信號處理理論,至少需要做一千次測量才能完整的復原這個信號。這就相當於是說,需要有一千個方程才能精確地解出一千個未知數來。但是壓縮感知的想法是假定信號具有某種特點(比如文中所描述得在小波域上係數稀疏的特點),那麼就可以只做三百次測量就完整地復原這個信號(這就相當於只通過三百個方程解出一千個未知數)。可想而知,這件事情包含了許多重要的數學理論和廣泛的應用前景,因此在最近三四年裏吸引了大量注意力,得到了非常蓬勃的發展。陶哲軒本身是這個領域的奠基人之一(可以參考《陶哲軒:長大的神童》一文),因此這篇文章的權威性毋庸諱言。另外,這也是比較少見的由一流數學家直接撰寫的關於自己前沿工作的普及性文章。需要說明的是,這篇文章是雖然是寫給非數學專業的讀者,但是也並不好懂,也許具有一些理工科背景會更容易理解一些。

【作者 Terence Tao;譯者 山寨盲流,他的更多譯作在;校對 木遙】

最近有不少人問我究竟”壓縮感知”是什麼意思(特別是隨着最近這個概念名聲大噪),所謂“單像素相機”又是怎樣工作的(又怎麼能在某些場合比傳統相機有優勢呢)。這個課題已經有了大量文獻,不過對於這麼一個相對比較新的領域,還沒有一篇優秀的非技術性介紹。所以筆者在此小做嘗試,希望能夠對非數學專業的讀者有所幫助。

具體而言我將主要討論攝像應用,儘管壓縮傳感作爲測量技術應用於比成像廣泛得多的領域(例如天文學,核磁共振,統計選取,等等),我將在帖子結尾簡單談談這些領域。

相機的用途,自然是記錄圖像。爲了簡化論述,我們把圖像假設成一個長方形陣列,比如說一個1024×2048像素的陣列(這樣就總共是二百萬像素)。爲了省略彩色的問題(這個比較次要),我們就假設只需要黑白圖像,那麼每個像素就可以用一個整型的灰度值來計量其亮度(例如用八位整型數表示0到255,16位表示0到65535)。

接下來,按照最最簡化的說法,傳統相機會測量每一個像素的亮度(在上述例子中就是二百萬個測量值),結果得到的圖片文件就比較大(用8位灰度值就是2MB,16位灰度就是4MB)。數學上就認爲這個文件是用超高維矢量值描繪的(在本例中就是約二百萬維)。

在我開始講“壓縮感知”這個新故事之前,必須先快速回顧一下“老式壓縮”的舊故事。(已經瞭解圖像壓縮算法的讀者可以跳過這幾段。)

上述的圖片會佔掉相機的很多存儲空間(上傳到計算機裏還佔磁盤空間),在各種介質之間傳輸的時候也要浪費時間。於是,相機帶有顯著壓縮圖像的功能就順理成章了(通常能從2MB那麼大壓縮到十分之一——200KB的一小坨)。關鍵是儘管“所有圖片”所構成的空間要佔用2MB的“自由度”或者說“熵”,由“有意義的圖片”所構成的空間其實要小得多,尤其是如果人們願意降低一點圖像質量的話。(實際上,如果一個人真的利用所有的自由度隨機生成一幅圖片,他不大可能得到什麼有意義的圖像,而是得到相當於電視熒屏上的靜電雪花那樣的隨機噪聲之類。)

怎麼樣壓縮圖像?方式多種多樣,其中有些非常先進,不過我來試試用一種不太高科技的(而且也不太精確的)說法來描述一下這些先進技術。圖像通常都含有大片無細節部分–比如在風景照裏面,將近一半的畫面都可能被單色的天空背景佔據。我們假設提取一個大方塊,比方說100×100像素,其中完全是同一顏色的——假設是全白的吧。無壓縮時,這個方塊要佔10000字節存儲空間(按照8位灰度算);但是我們可以只記錄這個方塊的維度和座標,還有填充整個方塊的單一顏色;這樣總共也只要記錄四五個字節,省下了可觀的空間。不過在現實中,壓縮效果沒有這麼好,因爲表面看來沒有細節的地方其實是有着細微的色差的。所以,給定一個無細節方塊,我們記錄其平均色值,就把圖片中這一塊區域抽象成了單色色塊,只留下微小的殘餘誤差。接下來就可以繼續選取更多色彩可見的方塊,抽象成單色色塊。最後剩下的是亮度(色彩強度)很小的,肉眼無法察覺的細節。於是就可以拋棄這些剩餘的細節,只需要記錄那些“可見”色塊的大小,位置和亮度。日後則可以反向操作,重建出比原始圖像質量稍低一些,佔空間卻小得多的複製圖片。

其實上述的算法並不適合處理顏色劇烈變動的情況,所以在實際應用中不很有效。事實上,更好的辦法不是用均勻色塊,而是用“不均勻”的色塊——比方說右半邊色彩強度平均值大於左半邊這樣的色塊。這種情況可以用(二維)Haar小波系統來描述。後來人們又發現一種”更平滑的”小波系統更能夠避免誤差,不過這都是技術細節,我們就不深入討論了。然而所有這些系統的原理都是相同的:把原始圖像表示爲不同“小波(類似於上文中的色塊)”的線性疊加,記錄顯著的(高強度的)小波的係數,放棄掉(或者用閾值排除掉)剩下的小波係數。這種“小波係數硬閾值”壓縮算法沒有實際應用的算法(比如JPEG2000標準中所定義的)那麼精細,不過多少也能描述壓縮的普遍原理。

總體來講(也是非常簡化的說法),原始的1024×2048圖像可能含有兩百萬自由度,想要用小波來表示這個圖像的人需要兩百萬個不同小波才能完美重建。但是典型的有意義的圖像,從小波理論的角度看來是非常稀疏的,也就是可壓縮的:可能只需要十萬個小波就已經足夠獲取圖像所有的可見細節了,其餘一百九十萬小波只貢獻很少量的,大多數觀測者基本看不見的“隨機噪聲”。(這也不是永遠適用:含有大量紋理的圖像–比如毛髮、毛皮的圖像——用小波算法特別難壓縮,也是圖像壓縮算法的一大挑戰。不過這是另一個故事了。)

接下來呢,如果我們(或者不如說是相機)事先知道兩百萬小波係數裏面哪十萬個是重要的,那就可以只計量這十萬個係數,別的就不管了。(在圖像上設置一種合適的“過濾器”或叫“濾鏡”,然後計量過濾出來的每個像素的色彩強度,是一種可行的係數計量方法。)但是,相機是不會知道哪個係數是重要的,所以它只好計量全部兩百萬個像素,把整個圖像轉換成基本小波,找出需要留下的那十萬個主導基本小波,再刪掉其餘的。(這當然只是真正的圖像壓縮算法的一個草圖,不過爲了便於討論我們還是就這麼用吧。)

那麼,如今的數碼相機當然已經很強大了,沒什麼問題幹嗎還要改進?事實上,上述的算法,需要收集大量數據,但是只需要存儲一部分,在消費攝影中是沒有問題的。尤其是隨着數據存儲變得很廉價,現在拍一大堆完全不壓縮的照片也無所謂。而且,儘管出了名地耗電,壓縮所需的運算過程仍然算得上輕鬆。但是,在非消費領域的某些應用中,這種數據收集方式並不可行,特別是在傳感器網絡中。如果打算用上千個傳感器來收集數據,而這些傳感器需要在固定地點呆上幾個月那麼長的時間,那麼就需要儘可能地便宜和節能的傳感器——這首先就排除了那些有強大運算能力的傳感器(然而——這也相當重要——我們在接收處理數據的接收端仍然需要現代科技提供的奢侈的運算能力)。在這類應用中,數據收集方式越“傻瓜”越好(而且這樣的系統也需要很強壯,比如說,能夠忍受10%的傳感器丟失或者各種噪聲和數據缺損)。

這就是壓縮傳感的用武之地了。其理論依據是:如果只需要10萬個分量就可以重建絕大部分的圖像,那何必還要做所有的200萬次測量,只做10萬次不就夠了嗎?(在實際應用中,我們會留一個安全餘量,比如說測量30萬像素,以應付可能遭遇的所有問題,從干擾到量化噪聲,以及恢復算法的故障。)這樣基本上能使節能上一個數量級,這對消費攝影沒什麼意義,對傳感器網絡而言卻有實實在在的好處。

不過,正像我前面說的,相機自己不會預先知道兩百萬小波係數中需要記錄哪十萬個。要是相機選取了另外10萬(或者30萬),反而把圖片中所有有用的信息都扔掉了怎麼辦?

解決的辦法簡單但是不太直觀。就是用非小波的算法來做30萬個測量——儘管我前面確實講過小波算法是觀察和壓縮圖像的最佳手段。實際上最好的測量其實應該是(僞)隨機測量——比如說隨機生成30萬個“濾鏡”圖像並測量真實圖像與每個濾鏡的相關程度。這樣,圖像與濾鏡之間的這些測量結果(也就是“相關性”)很有可能是非常小非常隨機的。但是——這是關鍵所在——構成圖像的2百萬種可能的小波函數會在這些隨機的濾鏡的測量下生成自己特有的“特徵”,它們每一個都會與某一些濾鏡成正相關,與另一些濾鏡成負相關,但是與更多的濾鏡不相關。可是(在極大的概率下)2百萬個特徵都各不相同;更有甚者,其中任意十萬個的線性組合仍然是各不相同的(以線性代數的觀點來看,這是因爲一個30萬維線性子空間中任意兩個10萬維的子空間極有可能互不相交)。因此,基本上是有可能從這30萬個隨機數據中恢復圖像的(至少是恢復圖像中的10萬個主要細節)。簡而言之,我們是在討論一個哈希函數的線性代數版本。

然而這種方式仍然存在兩個技術問題。首先是噪聲問題:10萬個小波係數的疊加並不能完全代表整幅圖像,另190萬個係數也有少許貢獻。這些小小貢獻有可能會干擾那10萬個小波的特徵,這就是所謂的“失真”問題。第二個問題是如何運用得到的30萬測量數據來重建圖像。

我們先來關注後一個問題。如果我們知道了2百萬小波中哪10萬個是有用的,那就可以使用標準的線性代數方法(高斯消除法,最小二乘法等等)來重建信號。(這正是線性編碼最大的優點之一——它們比非線性編碼更容易求逆。大多數哈希變換實際上是不可能求逆的——這在密碼學上是一大優勢,在信號恢復中卻不是。)可是,就像前面說的那樣,我們事前並不知道哪些小波是有用的。怎麼找出來呢?一個單純的最小二乘近似法會得出牽扯到全部2百萬係數的可怕結果,生成的圖像也含有大量顆粒噪點。要不然也可以代之以一種強力搜索,爲每一組可能的10萬關鍵係數都做一次線性代數處理,不過這樣做的耗時非常恐怖(總共要考慮大約10的17萬次方個組合!),而且這種強力搜索通常是NP完備的(其中有些特例是所謂的“子集合加總”問題)。不過還好,還是有兩種可行的手段來恢復數據:

•匹配追蹤:找到一個其標記看上去與收集到的數據相關的小波;在數據中去除這個標記的所有印跡;不斷重複直到我們能用小波標記“解釋”收集到的所有數據。

•基追蹤(又名L1模最小化):在所有與錄得數據匹配的小波組合中,找到一個“最稀疏的”,也就是其中所有係數的絕對值總和越小越好。(這種最小化的結果趨向於迫使絕大多數係數都消失了。)這種最小化算法可以利用單純形法之類的凸規劃算法,在合理的時間內計算出來。

需要注意到的是,這類圖像恢復算法還是需要相當的運算能力的(不過也還不是太變態),不過在傳感器網絡這樣的應用中這不成問題,因爲圖像恢復是在接收端(這端有辦法連接到強大的計算機)而不是傳感器端(這端就沒辦法了)進行的。

現在已經有嚴密的結果顯示,對原始圖像設定不同的壓縮率或稀疏性,這兩種算法完美或近似完美地重建圖像的成功率都很高。匹配追蹤法通常比較快,而基追蹤算法在考慮到噪聲時則顯得比較準確。這些算法確切的適用範圍問題在今天仍然是非常熱門的研究領域。(說來遺憾,目前還沒有出現對P不等於NP問題的應用;如果一個重建問題(在考慮到測量矩陣時)是NP完備的,那它剛好就不能用上述算法解決。)

由於壓縮傳感還是一個相當新的領域(尤其是嚴密的數學結果剛剛出現),現在就期望這個技術應用到實用的傳感器上還爲時尚早。不過已經有概念驗證模型出現了,其中最著名的是Rice大學研製的單像素相機。

最後必須提到的是,壓縮傳感技術是一種抽象的數學概念,而不是具體的操作方案,它可以應用到成像以外的許多領域。以下只是其中幾個例子:

•磁共振成像(MRI)。在醫學上,磁共振的工作原理是做許多次(但次數仍是有限的)測量(基本上就是對人體圖像進行離散拉東變換(也叫X光變換)),再對數據進行加工來生成圖像(在這裏就是人體內水的密度分佈圖像)。由於測量次數必須很多,整個過程對患者來說太過漫長。壓縮傳感技術可以顯著減少測量次數,加快成像(甚至有可能做到實時成像,也就是核磁共振的視頻而非靜態圖像)。此外我們還可以以測量次數換圖像質量,用與原來一樣的測量次數可以得到好得多的圖像分辨率。

•天文學。許多天文現象(如脈衝星)具有多種頻率震盪特性,使其在頻域上是高度稀疏也就是可壓縮的。壓縮傳感技術將使我們能夠在時域內測量這些現象(即記錄望遠鏡數據)並能夠精確重建原始信號,即使原始數據不完整或者干擾嚴重(原因可能是天氣不佳,上機時間不夠,或者就是因爲地球自傳使我們得不到全時序的數據)。

•線性編碼。壓縮傳感技術提供了一個簡單的方法,讓多個傳送者可以將其信號帶糾錯地合併傳送,這樣即使輸出信號的一大部分丟失或毀壞,仍然可以恢復出原始信號。例如,可以用任意一種線性編碼把1000比特信息編碼進一個3000比特的流;那麼,即使其中300位被(惡意)毀壞,原始信息也能完全無損失地完美重建。這是因爲壓縮傳感技術可以把破壞動作本身看作一個稀疏的信號(只集中在3000比特中的300位)。

許多這種應用都還只停留在理論階段,可是這種算法能夠影響測量和信號處理中如此之多的領域,其潛力實在是振奮人心。筆者自己最有成就感的就是能看到自己在純數學領域的工作(例如估算傅立葉子式的行列式或單數值)最終具備造福現實世界的前景。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章