1. 程式人生 > >IEEE Trans 2006 使用K-SVD構造超完備字典以進行稀疏表示(稀疏分解)

IEEE Trans 2006 使用K-SVD構造超完備字典以進行稀疏表示(稀疏分解)

收縮 ons net 求逆 最大似然法 隨機 出了 約束 如同

K-SVD可以看做K-means的一種泛化形式,K-means算法總每個信號量只能用一個原子來近似表示,而K-SVD中每個信號是用多個原子的線性組合來表示的。 K-SVD算法總體來說可以分成兩步,首先給定一個初始字典,對信號進行稀疏表示,得到系數矩陣。第二步根據得到的系數矩陣和觀測向量來不斷更新字典。 設D∈R n×K,包含了K個信號原子列向量的原型{dj}j=1K,y∈R n的信號可以表示成為這些原子的稀疏線性結合。也就是說y=Dx,其中x∈RK表示信號y的稀疏系數。論文中采用的是2範數來計算誤差。當n<K時,即行數小於烈數的時候,字典D是一個滿秩矩陣,此時y=Dx是一個欠定方程,具有無窮多解,也就是稀疏表示的分解可能有無窮多種。所以必須加以約束,擁有最少的非零元素的解是最佳解,也就是要滿足下述方程:
技術分享圖片 其中(P0)指的是零範數,也就是非零元素的個數。 如上所述,首先要進行稀疏表示,也就是論文中第‖部分所說的準備工作——稀疏編碼。根據給定的信號y和初始字典D來求解稀疏表示系數。該問題可通過求解公式(1)或(2),通過追蹤算法來找到最接近的解。L0範數問題是一個NP難的問題,文章大概介紹了集中方法進行求解,例如以MP和OMP為代表的貪婪算法,以BP為代表的凸優化方法等等,這裏就不再詳細介紹。 第Ⅲ部分講解的是初始字典的選擇。給定集合 技術分享圖片存在字典D,對於每一個yk,通過求解公式(1)中的問題,我們能得到它的稀疏表示xk A K-means泛化 稀疏表示和聚類(向量量化)有相似之處。在聚類方法中,我們要找到一組描述性向量技術分享圖片
,每一個樣本能被唯一一個描述性向量表示。(和該樣本距離最近的原子,距離的計算通常是歐式距離)。K-means的流程大致可分為兩步:i)給定技術分享圖片,找到與訓練信號距離最近的原子,將信號分成該原子所在的聚類;ii)根據i中的結果,更新dk以更好的近似訓練信號。我們可以把這種情況認為是在稀疏表示只能用一個原子來近似原信號的特殊情況,在這種情況下,對應的近似原子的稀疏系數也只有一個。而在稀疏表示中,每個信號是用dk中的某幾個原子的線性組合來表示的,所以我們可以認為稀疏表示問題是聚類算法K-means的一種廣義泛化。
根據K-means的步驟,我們可以近似寫出稀疏表示的步驟:首先是稀疏編碼,也就是根據給定的初始字典得到信號的稀疏系數,接著根據得到的稀疏系數矩陣去更新字典。
B 最大似然法 最大似然法應用概率推理來構造字典矩陣D。模型如公式(3)所示: 技術分享圖片 其中x為信號的稀疏表示,v為方差為σ2的殘差向量。給定信號技術分享圖片,考慮似然函數P(Y|D),找到合適的使得似然函數最大的字典矩陣D。首先我們假設yi之間是互相獨立的,則我們可將似然函數寫成: 技術分享圖片 第二個假設針對隱藏變量x,我們通過公式(5)來計算信號中的某一元素的似然函數: 技術分享圖片 結合公式(3)我們有: 技術分享圖片 假定表示向量X的元素是零均值的獨立同分布,通常是柯西或者拉普拉斯分布。在論文中我們假定是拉普拉斯分布,則有: 技術分享圖片 x上的積分難以計算,所以我們用P(yi,x|D)處的極值來進行代換,則問題變成: 技術分享圖片 公式(8)中,字典D無懲罰項,而x i前乘上了一個懲罰因子,所以求解過程為了使稀疏系數的均值趨向於0,需要增加字典的元素個數,即字典矩陣的列數。我們可以通過約束信號中的每一個元素的二範數來解決上述問題。基於此,輸出的稀疏的方差能保持在一個合適的穩定水平。 對於公式(8)的求解可采用一種叠代的方法,主要包含了兩大步驟: 技術分享圖片 C MOD(method of optimal directions)方法 該方法和K-means的方法非常相似,首先使用OMP或者FOCUSS方法來進行稀疏編碼,接著進行字典更新。MOD的最大優點是它更新字典的速度快,方法簡便。假定每個信號的稀疏系數是已知的,定義誤差ei=yi-Dxi,則均方誤差表示為: 技術分享圖片 Y和X表示矩陣,它們的列分別用yi和xi來表示。‖A‖F表示Frobenius範數,技術分享圖片 假定X是已知的,也就是我們已經求出了稀疏系數,接著對字典矩陣進行更新,當誤差達到最小時,字典達到最優。對公式(10)中的D進行求導,得到(Y-DX)XT=0,進而我們有公式(11): 技術分享圖片 Y和X表在更新字典的時候,公式(11)在已知X稀疏的情況下能達到最好的效果,但是計算時間長。如果用最陡下降法來代替OMP和FOCUSS來估計Xi,會達到更好的效果。例如在公式(9)中我們用二階(牛頓)來替換一階,可將公式(9)重寫為: 技術分享圖片 經過多次叠代,令系數技術分享圖片足夠小,則我們能得到公式(11)中所更新的矩陣一樣的結果。但是該方法在叠代過程中的結果只是當前最佳解的近似解,而MOD方法在每次叠代中都能達到最優的結果。上述兩種方法都需要字典矩陣的列進行標準化。 D 最大後驗概率方法 類似於最大似然函數方法,我們將似然函數用後驗概率P(D|Y)取代。根據貝葉斯法則有技術分享圖片,則我們可以繼續使用似然函數的形式,並將先驗概率作為一個新的項加入到式子中。 在已有的研究工作中考慮了多種先驗概率P(D)的情況並且提出了相應的求解公式。這些方法用叠代梯度下降法來取代直接對n*n矩陣的求逆運算。先驗概率P(D)具有單位Frobenius範數,更新公式如下所示: 技術分享圖片 公式(13)中的前兩項與公式(9)中的相同。最後一項對約束的偏差進行補償。D中的不同列允許有不同的範數值。在補償項的作用下,範數值很小的列將會被舍棄,因為它們所需的系數要相當大,系數越大懲罰因子也越大。 據此,我們限制D中的列必須滿足單位L2範數。則重寫更新公式如下: 技術分享圖片 E 聯合正交基 將字典表示成正交基的集合形式:D=[D1,D2,...DL],其中Dj∈IR n×n,j=1,2,...L是正交矩陣。這種矩陣的結構要求十分嚴格,但更新速度更快。 稀疏表示X矩陣可以分成L片,每一個都指向不同的正交基,則X=[X1,X2,...XL]T。其中Xi是包含了正交矩陣Di系數的矩陣。 聯合正交基能簡化稀疏編碼階段的追蹤算法。這種方式將(P 1,ε)的求解簡化為序列收縮,在計算某個Xi的時候X的其他系數是固定的。假設稀疏已知,則該算法將循序更新D的每一項Dj。第一個D j通過計算殘差矩陣來獲得: 技術分享圖片 接著通過計算矩陣技術分享圖片的奇異值分解,設已知系數為Xj,誤差為Ej,計算最小二乘約束技術分享圖片得到第j個正交基為Dj=UVT。Dj必須為正交的,用更新的基來重新表示數據矩陣Y,帶入殘差矩陣中,使得誤差較少,通過這種方式分別獨立更新D的每一項。 和之前的算法比較,此算法具有兩個不同的地方,第一是字典矩陣的形式是確定的,第二是更新字典矩陣中的每項的次序。但是由於矩陣中的每一項和它們所對應系數的耦合問題,仿真結果比之前的算法差。 F 總結 總結字典訓練算法所需要的性質 靈活性:算法可以靈活的和追蹤算法共同合作。則根據得到的字典,可以選擇在時間或是用途上合適的算法。MOD和MAP方法能夠勝任這種情況,因為它們的稀疏編碼和字典更新是分階段進行的。 簡單:算法不僅要足夠簡便,即它們與K-means方法的相似程度。算法應像K-means方法一樣易於理解和可實現性高。例如MOD方法,但是MOD方法仍具有很大的提升空間。 高效:算法應具有較低的復雜度和較快的收斂速度。上述算法的運行時間都比較長,MOD方法的二階更新適合字典矩陣大的情況下,因為它包含了矩陣求逆的工作。字典的更新先於系數的重新計算,這種順序對於訓練速度來說有很大的局限。 目標明確:好的算法應該具有明確的目標函數來評估解決方案的質量。如果忽略了這一事實,即使算法能夠達到比較小的均方誤差和稀疏性,但是可能會導致在全局中振蕩的出現。 Ⅳ K-SVD算法 K-SVD算法是K-means的一種推廣,具有靈活性可以聯合不同的追蹤算法。當一個信號用一個原子來表示時,使用gain-shape VD(矢量量化)來進行字典訓練,當原子的系數要求為標準形式時,此時的K-SVD相當於K-means。由於稀疏編碼的高效性以及Gauss-Seidel-like加速了字典的更新,K-SVD算法效率高。該算法的步驟之間是相關的。 A K-means泛化 包含K個代碼字(特征)的代碼本通過最近鄰域分配可以用來表示多個向量(信號)技術分享圖片(N≥K)。根據信號周圍最近的代碼字的選擇,我們可以輕松的將Rn中的信號進行壓縮或者描述為多個聚類。基於預期的最大化進程,K-means方法可以將協方差矩陣模糊分配給每個聚類,則信號可以抽象為混合高斯模型。 我們將代碼本矩陣表示為C=[C1,C2,...CK],每列代表一個代碼字。當C給定時,通過計算歐式距離,每個信號都將劃分為離它最近的代碼字所在的類。將yi記為yi=Cxi。其中xi=ei,選擇第j個索引時,只有第j項非零,其他項都為0,第j個索引的選擇表示如下: 技術分享圖片 是在極端情況下的選擇表示,即yi僅有一個原子表示,並且原子所對應的系數為1。yi的均方誤差定義為技術分享圖片,則總的MSE為: 技術分享圖片 VQ訓練所要解決的問題是找到一個使得誤差E最小的代碼本,並且該問題受限於X的結構,即X的列是從一些很小的基中選擇的,據此我們將問題表示為如下: 技術分享圖片 K-means方法是設計VQ的最佳的代碼本。在每次叠代中包含了兩個步驟,第一是對X的稀疏表示,第二是對代碼本的更新,具體步驟如下圖所示: 技術分享圖片 在稀疏編碼階段,我們假定代碼本C(J-1)已知,令X可變,使得公式(16)最小。在字典更新階段,我們令第一階段中使(16)最小的X固定,更新C使式(16)最小。據此,在每次叠代中,MSE要麽減少要麽不變。算法保證了MSE單調遞減,最終收斂到局部最小。註意我們在這裏並沒有討論叠代的終止條件,這是因為叠代條件可根據需求進行選擇,並且易於實現和操作。 B K-SVD 稀疏表示可以認為是式(16)中向量量化目標函數的泛化形式,每個信號不再只由一個原子進行表示,在稀疏表示中我們允許每個輸入信號能表示成為幾個代碼字的線性組合。在稀疏表示中我們將代碼字成為字典元素。對應的,系數向量也不止一個,並且不要求一定為1,可以有不同的值。對應式(16),稀疏表示的目標函數是找到最佳的字典矩陣以稀疏表示信號Y,目標函數如式(17)中所示: 技術分享圖片 或者可以寫成式(18) 技術分享圖片 其中T0是稀疏表示的稀疏中非零元素的數量的上限值,也就是系數向量中的最大差異度。 式(17)(18)是類似的,本文主要討論第一種情況。 在本文算法中,通過叠代的方式使得式(17)最小。首先固定字典矩陣D,找到最佳的系數矩陣X,也就是使得(17)最小的X。但是找到最佳的X幾乎是不可能的,所以我們采用近似追蹤方法來尋找最接近的X。只要能夠根據固定和預先定義的非零項To進行求解的算法即可采納。 當第一階段稀疏表示完成後,第二階段即要完成字典矩陣的更新。在字典的更新中,每次叠代過程中只更新矩陣的一列。基本思想是固定其他所有列的值不變,除了當前要更新的列dk,找到一個新列dk~使得它的系數式MSE最小。第三部分中所描述的方法保持X不變以此來更新D。而本文的方法不同,依序按列來更新矩陣,並且相關系數是可變的。從某種意義上來說,這種方法獨立更新每一列,如同K-means方法每次更新一個信號,是K-means的直接泛化。在K-means方法中,在ck的更新過程中X的非零項是固定的,因為K-means方法(gain-shape VQ)列更新是相互獨立的。 D的列更新可以用奇異值分解方法。此外,由於後續的列更新基於更多的相關稀疏,SVD允許在字典更新時更改系數的值來加快收斂速度。該算法的整體效果與Gauss-Seidel的梯度下降非常近似。 有些算法嘗試略過稀疏編碼的階段,直接更新字典D的列,系數是固定的,采用循環的方式來不斷對字典進行更新。但是這種算法的效果並不好,因為稀疏表示的支撐集是不變的,並且該算法容易陷入局部最小。 C K-SVD 細節描述 這一節將詳細描述K-SVD算法。目標函數為: 技術分享圖片 先討論稀疏編碼階段,在這一階段中,我們假定D是固定的,考慮式(19)的優化問題是找到尋找矩陣X中的系數所構成的系數表示的最優搜索。懲罰項可以重寫為 技術分享圖片 則式(19)中的問題可以分解成N個不同的問題: 技術分享圖片 該問題可以采用追蹤算法輕松求解。當T0足夠小,求出的解將非常接近理想值,但卻很難計算。 接著討論第二個階段,根據第一階段求出的非零系數來更新字典。假定X和D都是固定的,當前只對一列進行更新,設為dk,相應的系數為XTK技術分享圖片(即為矩陣X的第k行,不同於X的第k列xk),則我們將式(19)中的懲罰項重寫為 技術分享圖片 將DX的乘積表示成為K個秩為1的矩陣的總和。其中K-1個項是固定的,只有當前待更新的項k是可變的,Ek表示除去第k個信號之外,其他所有信號的殘差。 SVD的任務即為找到dk和XTK,SVD在Frobenius範數下找到與Ek最接近的秩1矩陣。該矩陣能有效的減少式(21)中的誤差。但是,這一步很有可能會出錯,因為在更新dk的時候,我們沒有對稀疏進行約束,則我們得到的XT 會是滿向量,即大多素元素都為非零的向量。因此我們定義技術分享圖片為使用dk的信號元素{yi}的索引,也就是技術分享圖片非零項所在的位置。 技術分享圖片 技術分享圖片 技術分享圖片除了(ωk(i),i)th 的項其他都是0。則技術分享圖片去除了零元素,是對行向量XTK的收縮後的結果。行向量XRK的長度為ωk。同理技術分享圖片為n×ωk的矩陣,包含了使用了dk原子的信號的集合。同樣我們有技術分享圖片為除去沒有用到dk原子的信號,並且不包含dk原子的誤差。 現在我們返回到式(21),我們的目標是找到dk技術分享圖片使得式(21)中的目標函數最小,我們令技術分享圖片與原信號技術分享圖片有同樣的支撐集,則最小化可以等價為 技術分享圖片 式(23)可以直接使用SVD方法進行求解,SVD方法將矩陣技術分享圖片分解為技術分享圖片,我們定義技術分享圖片為矩陣U的第一列,技術分享圖片為矩陣V的第一列乘上Δ(1,1)。註意式(23)的求解需要:i)D中的列標準化;ii)得到的稀疏表示要麽保持不變要麽值減少。 類似於K-means的形式,我們將該算法稱為K-SVD,算法流程如下圖所示。 技術分享圖片 考慮K-SVD算法是否收斂。首先討論稀疏編碼階段:找到最佳描述信號yi的不超過T0個的幾個原子的線性組合。在這一階段,假定字典矩陣是固定的,每一個編碼步驟都會使式(19)中的誤差‖Y-DX‖F2減少。另外,在更新階段中,對於dk的更新,我們能保證MSE要麽不變要麽減少,這一更新並不違反稀疏約束。上述步驟保證了MSE的單調遞減,因此算法能夠收斂。但是這些都基於式(20)中追蹤算法求出了魯棒的結果而言,所以收斂性並不一定每次都能保證。當T0足夠小,OMP、BP和FOCUSS算法都能得到比較好的結果,此時收斂是保證的。如果需要,可以進行人為的保證收斂,找到一個已有的保證收斂的追蹤算法,在此基礎上選擇效果優於該算法的進行求解,這樣我們可以提高算法的性能並且保證收斂性,事實上,從仿真結果來看,我們的算法都保證了收斂性,因此不需要人為的外部幹預。 技術分享圖片 D 從K-SVD回到K-means 當T0=1時,回到了gain-shape VQ的情況,K-SVD變成了代碼本訓練的問題。當T0=1時,矩陣X每列只有一個非零項,則式(23)中技術分享圖片的計算變為: 技術分享圖片 這是因為Ωk只用了Ek中用到dk的那些列,也就是說,沒有用到別的原子,也就是對所有j來說,技術分享圖片則SVD是直接對ωk中的信號進行操作的,D中的K列的更新之間也是相互獨立的,類似於一個順序更新過程或者說是平行過程,如同K-means更新聚類的中心一樣。除了限制T0=1,我們還可以進一步限制X的非零項為1,此時問題完全變成了之前所說的經典的聚類問題。在這種情況下,技術分享圖片都是1,也就是技術分享圖片=1T。K-SVD方法需要用秩為1的矩陣dk·1T來近似誤差矩陣技術分享圖片。求出的結果是技術分享圖片的平均值。如同K-means方法所做的那樣。K-SVD算法容易陷入局部最小解,本文實驗證明在下述變量滿足的情況下,可避免此種情況的發生。 當系數的數量是固定的時候,我們發現FOCUSS能在每次叠代過程中提供最好的近似結果,但是從運行時間來看,OMP的運行時間最短。 當字典元素沒有被充分利用的時候(與字典元素和信號的個數有關),可以使用最少原子表示的信號元素正規化後來代替(即當稀疏表示沒有用到字典中的元素的時候將會被代替)。因為信號元素的數量遠遠超過字典元素的數量,而且我們使用的模型假設字典中的原則都是等概率被利用的,所以這樣的代替方式能夠有效的避免結果成為局部最小解並且防止過度擬合。 類似於移除字典中沒有被利用的原子的司令,我們發現除去字典中過於接近的原子也能起到效果。如果找到這樣的一對原子(當它們的內積的絕對值超過某個門限值的時候)其中一個元素將會被由最少的原子線性組合形成的信號所代替。 Ⅴ 仿真 A 數據生成 隨機矩陣D(或者說是生成字典)大小為20*50,每一列互相獨立,都為均勻分布,並且都滿足標準的單位2範數。則產生維度為20的1500個信號技術分享圖片,每一個都有字典中的三個不同的原子組成,互相獨立,滿足均勻分布。系數隨機並且處在獨立的位置,不同SNR的白高斯噪聲將疊加在結果數據信號中。 B 應用SVD 字典根據數據信號進行初始化,系數采用OMP方法進行求解,叠代的最大次數設置為80 C 比較 使用MOD方法和OMP方法進行比較,MOD執行80次叠代,FOCUSS方法作為分解方法。 D 結果 訓練字典和已知的字典進行比較。找到訓練字典中與生成字典中最接近某列的那一項,計算距離 技術分享圖片 當式(25)的值小於0.01時即為成功,其中di為我們預先生成的字典中的第i列,而di~為訓練字典中最接近該列的列。實驗重復50次,計算每次實驗中的成功概率。圖3中顯示了噪聲水平為10,20,30dB的情況下的訓練情況。 技術分享圖片 對於大小不同的字典來說(例如20*30),叠代次數越多,MAP方法的效率越接近K-SVD。 參考文獻:M. Aharon, M. Elad, A.M. Bruckstein.K-SVD: An Algorithm for Designing Overcomplete Dictionaries for Sparse Representation[J].IEEE Transactions on,2006,54(11):4311-4322 另可參考博客: http://blog.csdn.net/wwf_lightning/article/details/72994303 http://blog.csdn.net/cc198877/article/details/9167989 技術分享圖片

IEEE Trans 2006 使用K-SVD構造超完備字典以進行稀疏表示(稀疏分解)