稀疏 字典學習

2021-07-10 08:40:53 字數 3905 閱讀 4798

pre:

面試發現自己老講不條理自己的研究工作,還是要先梳理下。鑑於motivation,本文是側重結構化的15分鐘talk draft,而非務求詳盡。有興趣的歡迎私下討論。

abstract:

1.sparse background

2.dl(dictionary learning)是什麼,用途,為什麼好

3.我的dc(customization)工作

i.稀疏模型

稀疏模型是最近幾年比較hot的技術,在訊號處理(壓縮感知)、計算機視覺(比如jpeg壓縮)領域影響比較大,在機器學習框架則可以看做是一種特徵處理相關的模型。

具體的,稀疏表示是指在超完備字典

d d

(超完備是說字典行數小於列數)中用盡可能少的原子來表示訊號

x x

,即:

minα∥

α∥0,

s.t.

x=dα

. minα∥α∥0,s.t.x=dα.

考慮雜訊就是

minα∥x

−dα∥

22+λ

∥α∥0

, minα∥x−dα∥22+λ∥α∥0,

α α

的size比

x x

大很多,但是非零元素比

x x

的size小很多很多。

稀疏的優點主要在於它是非線性模型,所以表達能力更強。具體來說,每個訊號稀疏係數的非零元素位置不同(所謂的support),所以每個訊號可以看做被投影到了不同的線性子空間,這是和正交字典-pca之類的最大區別。而為什麼在視覺影象裡應用尤其多,也正是因為每張影象(如人臉)可以看做處於高維空間的乙個低維子空間上(其實還有些研究用流形做子空間建模的)。

稀疏模型研究方向主要包括係數求解(即上面那個問題,經典演算法有omp貪心、lasso凸鬆弛和l1

/2l1/2

非凸鬆弛),字典學習(獲得更好的

d d

,經典演算法有mod和k-svd交替迭代)和模型應用。

ii.字典學習

顯然稀疏表達的效果好壞和我們用的字典有著密切的關係。字典分兩類,一種是預先給定的分析字典,比如小波基、dct等,另一種則是針對特定資料集學習出特定的字典。這種學出來的字典能大大提公升在特定資料集的效果。

給定訓練樣本x=

ni=1

w=i=1n

,所以優化目標是

mind,w

∥x−d

w∥2f

,s.t

.∥wi

∥0≤s

. mind,w∥x−dw∥f2,s.t.∥wi∥0≤s.

這個目標函式非凸,一般用交替迭代思想來解,即分別固定d和w,更新另乙個,很多變種演算法。目標函式分析起來比較難,所以這方面理論還比較弱,agarwal,gribonval等一幫人在搞。

應用方面往往稀疏表達和字典學習是混雜的,這裡主要介紹下影象去噪、超解析度和人臉識別,這三個例子效果都很好,貌似已經拿到工業界用了。

1.影象去噪(elad)

對乙個noisy image,把乙個patch看做乙個sample或signal,比如可以是乙個8乘8的patch,拉成一列64維的向量,乙個image可以從左上角到右下角視窗1滑動取樣得到很多這樣的patch。

(1)拿這些patches作為訓練樣本,用如k-svd之類的演算法可以學得字典d。(也可以用dct等做字典)

(2)用d對patch進行稀疏表達,拿稀疏係數再根據字典d重建patch,丟失掉的那部分資訊主要就是雜訊資訊,這樣就起到了去噪的作用(這是利用雜訊的性質,去噪後整個會變得光滑)。

2.超解析度(mayi)

(1)最主要的假設是高解析度影象的patches xh

xh和對應的低解析度影象的patches xl

xl,在相應的字典dh

dh和d

l dl

上有相同的係數。這樣的話,就可以把低解析度影象先根據dl

dl得到稀疏係數,再根據dh

dh重建patches。

(2)剩下的問題是怎樣學習得到dl

dl和d

h dh

,即對於大量訓練樣本 patch-pairs  (x

l,xh

) (xl,xh)

, 優化目標函式:

mindh,

dl,w

∥xh−

dhw∥

2f+∥

xl−d

lw∥2

f,s.

t.∥w

i∥0≤

s.mindh,dl,w∥xh−dhw∥f2+∥xl−dlw∥f2,s.t.∥wi∥0≤s.

(3)tricks: 對於xl

xl,特徵用bicubic和高通濾波做了拓展。

(4)elad學字典換了種方法,先k-svd學dl

dl,而d

h dh

通過下式得到

dh=xhw

t(ww

t)−1

. dh=xhwt(wwt)−1.

3.人臉識別(jiang)

上面兩個應用都是把單個patch作為sample,在做分類是則通常把一張image作為乙個sample。因為一張拉成一列向量太大,首先會把投影到m維特徵向量

y y

這裡介紹jiang zuolin的工作,他把字典

d d

和線性分類器

w w

一同學習得到,具體損失函式是

mind,w

,a,x

∥y−d

x∥2f

+α∥q

−ax∥

2f+β

∥h−w

x∥2f

,s.t

.∀i,

∥xi∥

0≤t mind,w,a,x∥y−dx∥f2+α∥q−ax∥f2+β∥h−wx∥f2, s.t.∀i,∥xi∥0≤t

這裡(y,h)

(y,h)

是訓練樣本(feature,label),q那一項是乙個label consistent項,用來加大字典原子的類別區分度的,構建方法不贅述了。

這個問題可以化為乙個標準的字典學習問題,然後用一般字典學習方法求解。  

mind,w

,a,x

∥⎛⎝⎜

yα√q

β√h⎞

⎠⎟−⎛

⎝⎜dα

√aβ√

w⎞⎠⎟

x∥2f

s.t.

∀i,∥

xi∥0

≤tmind,w,a,x  ∥(  y  αq  βh  )  −  (  d  αa  βw  )  x∥f2  s.t.∀i,∥xi∥0≤t

這樣的話,每新來乙個樣本,就先隨機投影得到特徵向量,然後用

d d

得到稀疏係數,再用w對稀疏**得出label。

此外,還有種方法是每個人對應乙個字典,新來一張圖,算和哪個字典構建誤差最小來**。

順便比較下和deep learning,第一,潛力不如deep learning(吐槽下大量搞稀疏的人跑去搞deep learning了),第二,某種程度,deep learning也是稀疏思想,第三,dictionary learning相比優點就是沒有那麼多蛋疼的調參和tricks,簡單有效代價低。

iii.我的字典個性化工作

首先來說字典學習的思想,本質上,字典學習是學得乙個更specialized的字典,這樣的話對於特定的資料集就更加有效了。但是還是有幾個問題,第一,學習的效果需要充足的樣本來guarantee,第二,學習的代價是時間和計算,這就導致了很多時候不夠specialized。比如往往只是specialize到了人類,而沒有specialize到某個人。

所以我做的工作主要是得到更specialized的字典,也即字典個性化。鑑於還在審稿,具體方法不描述了。

稀疏表示 字典學習

online learning toolbox francesco orabona machine perception toolbox mpt 偶然的機會發現了這個工具箱,雖說05年都沒有再更新了,但是很多東西還是可以借鑑的。很好的乙個工具箱,功能包含face detection,eye dete...

字典學習與稀疏表示

假設我們用乙個m n的矩陣表示資料集x,每一行代表乙個樣本,每一列代表樣本的乙個屬性,一般而言,該矩陣是稠密的,即大多數元素不為0。稀疏表示的含義是,尋找乙個係數矩陣a k n 以及乙個字典矩陣b m k 使得b a盡可能的還原x,且a盡可能的稀疏。a便是x的稀疏表示。x是y的稀疏表示 sparse...

稀疏編碼和字典學習

這個問題一直想解決,看了很久都沒有想通,deep learning 深度學習 學習筆記整理系列之 五 寫的通俗易懂,作為csdn的部落格專家,以後經常拜讀他的文章。sparse coding稀疏編碼 如果我們把輸出必須和輸入相等的限制放鬆,同時利用線性代數中基的概念,即o a1 1 a2 2 an ...