1.什么是稀疏表示:
用較少的基本信號的線性組合來表達大部分或者全部的原始信號。
其中,這些基本信號被稱作原子,是從過完備字典中選出來的;而過完備字典則是由個數超過信號維數的原子聚集而來的。可見,任一信號在不同的原子組下有不同的稀疏表示。
假設我們用一個M*N的矩陣表示數據集X,每一行代表一個樣本,每一列代表樣本的一個屬性,一般而言,該矩陣是稠密的,即大多數元素不為0。 稀疏表示的含義是,尋找一個系數矩陣A(K*N)以及一個字典矩陣B(M*K),使得B*A盡可能的還原X,且A盡可能的稀疏。A便是X的稀疏表示。
南大周志華老師寫的《機器學習》這本書上原文:“為普通稠密表達的樣本找到合適的字典,將樣本轉化為合適的稀疏表達形式,從而使學習任務得以簡化,模型復雜度得以降低,通常稱為‘字典學習’(dictionary learning),亦稱‘稀疏編碼’(sparse coding)”塊內容。
表達為優化問題的話,字典學習的最簡單形式為:
其中xi為第i個樣本,B為字典矩陣,αi為xi的稀疏表示,λ為大於0參數。
•尋找少量重要的系數來表示原始信號的技術被稱作Sparse Coding(稀疏編碼或稀疏分解);
•從任意一個字典中為原始信號尋找最稀疏的表示常用的方法分類兩類:
①貪婪算法,比如匹配追蹤(MP)、正交匹配追蹤(OMP)、弱匹配追蹤(WMP)、閾值方法等;
②松弛算法,比如迭代加權最小二乘(Iterative-Reweighed-Least-Squares,IRLS)、基追蹤(BP)等。
其中,貪婪算法的特點是速度快,精度相對較低;松弛算法是精度高,但速度慢。
•窮舉法——NP難:
假設 的非零項數目為L(sparse level),先令L=1,字典里的每一個原子(列向量)嘗試一遍,看是否滿足終止條件,共有K種組合。如果沒有滿足,再令L=2,再次嘗試,共有K(K-1)/2種組合。還沒有滿足條件的,則令L=3……組合的數目呈指數增長,於是遇到了NP難問題。
•貪婪算法——Matching Pursuit
第一步,找到最接近X的原子,等效於 向量上僅取一個非零項,求出最接近的原子,保留下來;
第二步,計算誤差是否滿足要求,如果滿足,算法停止,否則,計算出殘差信號,和第一步類似,找到最接近殘差向量的原子,保留下來;
第三步,調整已選向量的系數,使得 最接近X,重復第二步。
•松弛算法——Basis Pursuit,將L0問題轉化為L1問題,解決的方法有很多,比如內點法、迭代收縮法等。事實上,它可以化成一個線性規划的問題,用MATLAB很容易解。
上式中第一個累加項說明了字典學習的第一個目標是字典矩陣與稀疏表示的線性組合盡可能的還原樣本;第二個累加項說明了αi應該盡可能的稀疏。之所以用L1范式是因為L1范式正則化更容易獲得稀疏解。具體原因參看該書11.4章或移步機器學習中的范數規則化之(一)L0、L1與L2范數。字典學習便是學習出滿足上述最優化問題的字典B以及樣本的稀疏表示A(A{α1,α2,…,αi})。L1正則化常用於稀疏,可以獲得稀疏解。如下圖表示,L1正則化交點在軸上,所得的解一般只是在某個軸上有實數,另外的軸為0,從而最終得到稀疏解。
2.字典學習:
尋找字典的過程稱為字典學習。字典學習的一個假設是字典對於指定信號具有稀疏表示。因此,選擇字典的原則就是能夠稀疏地表達信號。
兩種方法來設計字典:
•從已知的變換基中選取,比如 DCT 、小波基等,這種方法很通用,但是不能自適應於信號。
學習字典,即通過訓練和學習大量的與目標數據相似的數據來獲得。這里,我們介紹一種叫K-SVD的方法
字典學習算法理論包含兩個階段:字典構建階段(Dictionary Generate)和利用字典(稀疏的)表示樣本階段(Sparse coding with a precomputed dictionary)。這兩個階段(如下圖)的每個階段都有許多不同算法可供選擇,每種算法的誕生時間都不一樣,以至於稀疏字典學習的理論提出者已變得不可考。筆者嘗試找了Wikipedia和Google Scolar都無法找到這一系列理論的最早發起人。
出處:http://www.mamicode.com/info-detail-1568956.html
字典學習的第一個好處——它實質上是對於龐大數據集的一種降維表示。第二,正如同字是句子最質朴的特征一樣,字典學習總是嘗試學習蘊藏在樣本背后最質朴的特征(假如樣本最質朴的特征就是樣本最好的特征).稀疏表示的本質:用盡可能少的資源表示盡可能多的知識,這種表示還能帶來一個附加的好處,即計算速度快。我們希望字典里的字可以盡能的少,但是卻可以盡可能的表示最多的句子。這樣的字典最容易滿足稀疏條件。也就是說,這個“字典”是這個“稀疏”私人訂制的。
稀疏表達有兩點好處:
1) 省空間;
2) 奧卡姆剃刀說:如果兩個模型的解釋力相同,選擇較簡潔的那個。稀疏表達就符合這一點。
How to find the dictionary D?——K-SVD
假設現在有原始信號矩陣 , 該矩陣的每一行表示一個信號或者一張圖片, D 矩陣是字典矩陣,右下方是 稀疏解矩陣S,紅色的點表示非零項。
Step 1: Initialize. 在 矩陣中隨機挑選一些行向量(一些原圖),填滿矩陣 D,並歸一化每一列。
Step 2: Sparse Coding. 用松弛或者貪婪法進行稀疏編碼,使得
得到稀疏表示 構成稀疏矩陣S的第i行。
What are sparse representations/approximations good for?
•稀疏性是DFT、WT和SVD分解得以廣泛利用的原因之一,這些變換的目的都是為了反映信號的確定性結構,並用緊湊的或稀疏的表示來表征這些結構;
•稀疏表示的思想為模式分類方法建立了基礎,比如SVM和RVM,其中稀疏性直接與估計函數(estimator)的學習能力有關。
•稀疏表示解決的問題主要集中在:
•圖像去噪(Denoise),代表性paper:Image Denoise Via Sparse and Redundant Representations Over Learned Dictionaries(Elad M. and Aharon M. IEEE Trans. on Image Processing,Dec,2006);Image Sequence Denoising Via Sparse and Redundant Representations(Protter M. and Elad M.IEEE Trans. on Image Processing,Jan,2009);
•超分辨率重建(Super-Resolution OR Scale-Up),代表性paper:Image Super-Resolution via Sparse Representation(Jianchao Yang, John Wright, Thomas Huang, and Yi Ma,IEEE Transactions on Image Processing, Nov,2010),A Shrinkage Learning Approach for Single Image Super-Resolution with Overcomplete Representations( A. Adler, Y. Hel-Or, and M. Elad,ECCV,Sep,2010);
另外還有inpaintting,deblurring,compression等等..更多應用參考Elad M的書。