1. 程式人生 > >稀疏表示(Sparse Representation)

稀疏表示(Sparse Representation)

稀疏表達是近年來SP, ML, PR, CV領域中的一大熱點,文章可謂是普天蓋地,令人目不暇給。老闆某門課程的課程需要大綱,我順道給擴充套件了下,就有了這個上中下三篇介紹性質的東西。遺憾的是,我在絕大多數情況下實在不算是一個勤快的人,這玩意可能充滿bug,更新也可能斷斷續續,盡請諸位看官見諒了。順道一提,ICCV09有一個相關的 tutorial 。

據傳博文裡公式數量和其人氣是成反比例關係的,一個公式可以驅散50%的讀者,我寫完這個(上)之後點了點公式數量,覺得大約是要無人問津了。所以,在介紹稀疏表達之前,讓我們先來展示下其在computer vision中的應用,吸引下眼球。

首先是影象恢復(以前有人貼過Obama還記得不),由左側影象恢復出右側結果

然後是類似的影象inpainting

然後是影象去模糊,左上為輸入模糊影象,右下為輸出清晰影象及估計的相機運動(其實是PSF),中間均為迭代過程:

再然後是物體檢測(自行車),左側輸入影象,中間為位置概率圖,右側為檢測結果

當然我個人還推薦Yi Ma的sparse face,這個在對抗噪聲的效果上很棒,比如下圖中左側的那張噪聲影象(你能辨認是哪位不?這方法可以!)

且說sparse representation這個概念,早在96-97年的時候就火了一把。最著名的大約要數Nature上的某篇文章,將稀疏性加入least square的regularization,然後得到了具有方向特性影象塊(basis)。這樣就很好的解釋了初級視皮層(V1)的工作機理,即對於線段的方向選擇特性。幾乎同一時期,著名的LASSO演算法也被髮表在 J. Royal. Statist. Soc B。Lasso比較好的解決了least square (l2 norm) error + l1 norm regularization的問題。然而,這個時候絕大多數人沒有意識到(或者沒法解決)這l1 norm和稀疏性之間的聯絡。其實早在這之前,Osher等人提出的Total Variation (TV)已經包含了l1 norm的概念了,只不過TV原本是連續域上的積分形式。(啥?你不知道Osher…想想Level Set吧)

在進入現代的壓縮感知、稀疏表示這一課題前,讓我們來首先回顧下這一系列問題的核心,即線性方程組Sparse <wbr>Representation,其中矩陣Sparse <wbr>Representation,通常而言是滿秩的。向量Sparse <wbr>Representation。現在已知,求解。學過線性代數的同學可能都會說:這個不難啊,因為Sparse <wbr>Representation,故而這個方程組是欠定的,所以有無窮多組解啊,咱還可以算算基礎解系啥的…

但是如果我們希望其解儘可能的稀疏:比如Sparse <wbr>Representation(即中非零元個數)儘可能的小。那麼問題就會變得比較微妙了,下圖給出了問題的形象示意。

換言之給定m維空間中一組過完備的基Sparse <wbr>Representation,如何選擇最少個數的基向量,重構給定向量Sparse <wbr>Representation,其嚴格定義可以寫成
Sparse <wbr>Representation

時光之輪播快到2003~2004年,Donoho & Elad做了一個很漂亮的證明,如果矩陣滿足某種條件,具體而言:

Sparse <wbr>Representation

那麼上文提及的0範數優化問題具有唯一的解。這裡的Sparse <wbr>Representation是個比較詭異(請允許我使用這詞)的定義:最小的線性相關的列向量集所含的向量個數,英文為spark(吐槽:明白了麼,我做TA的時候就被這個問題問倒了)。本來想在這個概念上嘮叨兩句,後來發現了Elad的一個talk,清晰明瞭。

即便是唯一性得到了證明,求解這個問題仍然是NP難的。科研的車輪滾滾向前,轉眼到了2006年,傳奇性的華裔數學家Terrence Tao登場了,Tao和Donoho的弟子Candes合作證明了在RIP條件下,0範數優化問題與以下1範數優化問題具有相同的解:
Sparse <wbr>Representation
其中RIP條件,即存在滿足某種條件的(與N相關)常數:Sparse <wbr>Representation

Sparse <wbr>Representation
RIP條件是對於矩陣列向量正交性的一種衡量(此處咱就不細說了)。其實早在1993年Mallat就提出過Mutual Coherence對於正交性進行度量,並提出了下文還要提及的matching pursuit方法。

實際上以上的1範數優化問題是一個凸優化,故而必然有唯一解,至此sparse representation的大坑初步成型。總結一下:
1. 如果矩陣滿足Sparse <wbr>Representation,則0範數優化問題有唯一解。
2. 進一步如果矩陣滿足RIP條件,則0範數優化問題和1範數優化問題的解一致。
3. 1範數優化問題是凸優化,故其唯一解即為0範數優化問題的唯一解。

進一步可以考慮含噪聲情況,即
Sparse <wbr>Representation
可以得到相似的結果,有興趣的同學可以查閱相關文獻。理論坑只有大牛能挖,但一般人也能挖挖這個優化演算法啊,於是SP、ML、CV鄰域裡都有做這個優化演算法的,這個出招可就真是五花八門了。據我所知,大致可兩大類:
第一類: 直接優化
Sparse <wbr>Representation
一般的方法是greedy algorithm,代表有Matching Pursuit, Orthogonal Matching Pursuit,這類方法循序的(sequentially)選擇字典的原子(atoms),這類方法的過程一般包括求訊號與字典中每一列(atom)的內積,還包括了一些最小二乘法的方法。
第二類,將0-norm替換為1-norm問題,使之變成一個凸優化問題,即優化
Sparse <wbr>Representation
如果已知拉格朗日乘子,優化無約束凸優化問題
Sparse <wbr>Representation
解這個的方法現在基本上soft thresholding的方法一統天下,常見的有coordinate descent, Bregman Iteration (又是Osher),BP等
4. 如果未知拉格朗日乘子,優化
Sparse <wbr>Representation
這類方法又叫Homotopy,可以認為是3的擴充套件。核心出發點是objective function是λ的分段線性函式。

除此之外,還有利用p範數逐次逼近0範數的方法等等,此處不再贅述。順道說一句,稀疏表示在不同的領域連名稱都不同,搞訊號的管這個叫basis pursuit,搞統計的叫L1 regularization….然後,讓我們把話題拉回到Nature的那篇文章:如果我們不知道矩陣,只知道一堆向量Sparse <wbr>Representation。我們應當如何構造,使得在這一字典(矩陣)下的Sparse <wbr>Representation表示最稀疏?類比以上過程,這個問題被稱為Dictionary Learning,可以寫成以下優化問題:
Sparse <wbr>Representation

這個東西可就相對麻煩了,最關鍵的是這個優化不是凸的(優化變數相乘)。所以一般的想法是block descent:首先固定Sparse <wbr>Representation,優化Sparse <wbr>Representation(相當於多個獨立的1範數優化問題);其次將計算出的Sparse <wbr>Representation固定,優化Sparse <wbr>Representation,這就是一個(可能帶約束)的least square問題。如此反覆,直到演算法收斂到某個(區域性)極小值。實際上解這個問題的方法目前有三種:efficient sparse coding algorithm NIPS 06; K-SVD tsp 06; Online dictionary learning for sparse coding, ICML 09 & JMLR 10。前兩種都是batch的方法,後一種是online的,據個人測試最後一種的方法比前兩者要快很多很多….下面這個是我利用ICML09的方法從1200張彩色影象中訓練出一組過完備基,具有比較好的方向特性。

最後,還記得本文開頭的那些demo麼?INRIA做了一個sparse representation的matlab工具包SPAMS,雖然不開源,但其效率(大部分時候)是現有公開工具包之冠(底層用了intel的MKL),利用這個工具包,幾行簡單的matlab程式碼就可以幾乎實現以上提及的所有demo了….大家有興趣的話,歡迎嘗試^_^