Pre:
面試發現自己老講不條理自己的研究工作,還是要先梳理下。鑒於motivation,本文是側重結構化的15分鍾talk draft,而非務求詳盡。有興趣的歡迎私下討論。
Abstract:
本文主要介紹稀疏模型相關,側重於字典學習和具體應用。
1.sparse background
2.DL(DIctionary Learning)是什么,用途,為什么好
3.我的DC(Customization)工作
I.稀疏模型
稀疏模型是最近幾年比較hot的技術,在信號處理(壓縮感知)、計算機視覺(比如JPEG壓縮)領域影響比較大,在機器學習框架則可以看做是一種特征處理相關的模型。
具體的,稀疏表示是指在超完備字典$D$(超完備是說字典行數小於列數)中用盡可能少的原子來表示信號$x$,即:
\[ \min_{\alpha} \|\alpha\|_0, \quad \quad \quad s.t. \quad x=D\alpha. \]
考慮噪聲就是
\[ \min_{\alpha} \|x-D\alpha\|_2^2+\lambda\|\alpha\|_0, \]
$\alpha$的size比$x$大很多,但是非零元素比$x$的size小很多很多。
稀疏的優點主要在於它是非線性模型,所以表達能力更強。具體來說,每個信號稀疏系數的非零元素位置不同(所謂的support),所以每個信號可以看做被投影到了不同的線性子空間,這是和正交字典-PCA之類的最大區別。而為什么在視覺圖像里應用尤其多,也正是因為每張圖像(如人臉)可以看做處於高維空間的一個低維子空間上(其實還有些研究用流形做子空間建模的)。
稀疏模型研究方向主要包括系數求解(即上面那個問題,經典算法有OMP貪心、lasso凸松弛和$l_{1/2}$非凸松弛),字典學習(獲得更好的$D$,經典算法有MOD和K-SVD交替迭代)和模型應用。
II.字典學習
顯然稀疏表達的效果好壞和我們用的字典有着密切的關系。字典分兩類,一種是預先給定的分析字典,比如小波基、DCT等,另一種則是針對特定數據集學習出特定的字典。這種學出來的字典能大大提升在特定數據集的效果。
給定訓練樣本$X=\{x_i\|_{i=1}^n$,我們要所有樣本在字典$D$上有稀疏表達$W=\{w_i\}_{i=1}^n$,所以優化目標是
\[\min_{D,W}\|X-DW\|_F^2, \quad\quad\quad s.t.\quad \|w_i\|_0\leq 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 $x_h$和對應的低分辨率圖像的patches $x_l$,在相應的字典$D_h$和$D_l$上有相同的系數。這樣的話,就可以把低分辨率圖像先根據$D_l$得到稀疏系數,再根據$D_h$重建patches。
(2)剩下的問題是怎樣學習得到$D_l$和$D_h$,即對於大量訓練樣本 patch-pairs $(X_l,X_h)$, 優化目標函數:
\[ \min_{D_h,D_l,W} \|X_h-D_hW\|_F^2+\|X_l-D_lW\|_F^2, \quad\quad\quad s.t. \quad \|w_i\|_0\leq s. \]
(3)Tricks: 對於$X_l$,特征用Bicubic和高通濾波做了拓展。
(4)Elad學字典換了種方法,先K-SVD學$D_l$,而$D_h$通過下式得到
\[ D_h=X_h W^T (W W^T)^{-1}.\]
3.人臉識別(Jiang)
上面兩個應用都是把單個patch作為sample,在做分類是則通常把一張image作為一個sample。因為一張圖片拉成一列向量太大,首先會把圖片投影到m維特征向量$y$,投影方法一般是用一個隨機產生的mean為0的高斯分布(參考隨機投影保距降維相關資料)。
這里介紹Jiang Zuolin的工作,他把字典$D$和線性分類器$W$一同學習得到,具體損失函數是
\[ \min_{D,W,A,X} \|Y-DX\|_F^2+\alpha\|Q-AX\|_F^2+\beta\|H-WX\|_F^2,\quad\quad\quad s.t.\quad \forall i,\|x_i\|_0\leq T \]
這里$(Y,H)$是訓練樣本(feature,label),Q那一項是一個label consistent項,用來加大字典原子的類別區分度的,構建方法不贅述了。
這個問題可以化為一個標准的字典學習問題,然后用一般字典學習方法求解。
\[ \min_{D,W,A,X} \| \begin{pmatrix} Y \\ \sqrt{\alpha}Q \\ \sqrt{\beta} H \end{pmatrix} - \begin{pmatrix} D \\ \sqrt{\alpha}A \\ \sqrt{\beta} W \end{pmatrix} X\|_F^2 \quad\quad\quad s.t.\quad \forall i,\|x_i\|_0\leq T \]
這樣的話,每新來一個樣本,就先隨機投影得到特征向量,然后用$D$得到稀疏系數,再用W對稀疏預測得出label。
此外,還有種方法是每個人對應一個字典,新來一張圖,算和哪個字典構建誤差最小來預測。
順便比較下和deep learning,第一,潛力不如deep learning(吐槽下大量搞稀疏的人跑去搞deep learning了),第二,某種程度,deep learning也是稀疏思想,第三,dictionary learning相比優點就是沒有那么多蛋疼的調參和tricks,簡單有效代價低。
III.我的字典個性化工作
首先來說字典學習的思想,本質上,字典學習是學得一個更specialized的字典,這樣的話對於特定的數據集就更加有效了。但是還是有幾個問題,第一,學習的效果需要充足的樣本來guarantee,第二,學習的代價是時間和計算,這就導致了很多時候不夠specialized。比如往往只是specialize到了人類,而沒有specialize到某個人。
所以我做的工作主要是得到更specialized的字典,也即字典個性化。鑒於還在審稿,具體方法不描述了。