快速稀疏编码算法
【self-taught?learning】快速稀疏編碼算法
?
Self-taught?learning是Honglak?Lee等開(kāi)發(fā)的一個(gè)matlab框架,能夠?qū)崿F(xiàn)他們?cè)谡撐?/span>Self-taught?Learning?Transfer?Learningfrom?Unlabeled?Data和Efficient?sparse?coding?algorithms中提出的快速實(shí)現(xiàn)圖像稀疏編碼的算法。
?
先看第一篇論文《Self-taught?Learning:Transfer?Learning?from?Unlabeled?Data》
?
主要思想:
在監(jiān)督分類(lèi)算法的數(shù)據(jù)中,加入部分unlabel的數(shù)據(jù),未標(biāo)數(shù)據(jù)不一定和訓(xùn)練集數(shù)據(jù)從屬同一類(lèi)類(lèi)別,在建模過(guò)程中,首先根據(jù)未標(biāo)數(shù)據(jù)訓(xùn)練出一組基,然后對(duì)訓(xùn)練集的數(shù)據(jù)用該空間的基表示,最后使用SVM或其他分類(lèi)算法進(jìn)行分類(lèi)。
?
PS.
這種方法不同于semi-supervised?learning,后者需要加入的未標(biāo)數(shù)據(jù),必須跟訓(xùn)練集具有相同類(lèi)型的類(lèi)別,例如想要對(duì)大象和犀牛的圖像集分類(lèi),就必須加入大象和犀牛的未標(biāo)圖像,而self-taught?learning可以加入任意圖像比如自然景色等。
加入未標(biāo)數(shù)據(jù)是為了使圖像的特征變得稀疏,能夠加速訓(xùn)練的計(jì)算速度。
?
符號(hào)約定:
?
算法介紹
?
第一步:根據(jù)未標(biāo)數(shù)據(jù)學(xué)習(xí)一組表示圖像的基。
?
對(duì)于未標(biāo)數(shù)據(jù),提出如下的優(yōu)化公式:
?
優(yōu)化的目標(biāo)是基向量組b和稀疏系數(shù)a。k是輸入數(shù)據(jù)的個(gè)數(shù),s是新空間的維度,n是原始輸入空間的維度。所以,b是s*n的矩陣,a是k*s的矩陣。上面的公式有兩項(xiàng)需要優(yōu)化,左邊項(xiàng)的目的是用一組基來(lái)表示輸入數(shù)據(jù),并且使得誤差最小,右邊項(xiàng)引入了L1規(guī)則作為懲罰項(xiàng),使得學(xué)習(xí)出來(lái)的系數(shù)a大部分是零。
保持a不變求b,或者保持b不變求a,都是凸優(yōu)化問(wèn)題,可以用梯度下降等方法求得。
這里補(bǔ)充一下L1/L2規(guī)則化。(在第二篇論文里提到過(guò))
常用的規(guī)則化函數(shù)有下面三種:
?
第一種是L1規(guī)則化,即1范數(shù)。第二種是加上參數(shù)的L1規(guī)則化。第三種是log規(guī)則化。前兩種作為稀疏函數(shù)求解都是凸優(yōu)化的問(wèn)題,所以比較常用,而且L1規(guī)則化通常用于產(chǎn)生稀疏,對(duì)不相關(guān)特征也有很好的魯棒性。
?
第二步:根據(jù)上步的基,表示已標(biāo)數(shù)據(jù)。
?
對(duì)每個(gè)已標(biāo)數(shù)據(jù),根據(jù)第一步中得到的一組基,通過(guò)優(yōu)化下面的公式得到其稀疏系數(shù)a:
?
這就變成了L1規(guī)則化最小二乘問(wèn)題,可以?xún)?yōu)化出稀疏向量來(lái)表示輸入。
?
第三步:將得到的數(shù)據(jù)特征輸入分類(lèi)器進(jìn)行分類(lèi)。
?
將上步得到的訓(xùn)練數(shù)據(jù)的特征輸入分類(lèi)器(例如SVM)中進(jìn)行分類(lèi)。
?
完整算法偽代碼:
?
?
論文中還涉及到了與其他算法(PCA)的對(duì)比,以及實(shí)驗(yàn),這里略過(guò)不提。
?
?
再看第二篇論文《Efficient?sparse?coding?algorithms》
?
有了上面的基礎(chǔ),如何快速稀疏編碼就會(huì)更容易理解,大體思路是一樣的,不同之處在于優(yōu)化公式有所改變,如下:
?
生成模型的誤差服從(mean=0,?cov=σ2I)的高斯分布,上式用矩陣表示如下:
?
當(dāng)B固定求S,或者S固定求B的時(shí)候,都是凸優(yōu)化問(wèn)題。在這篇論文里,交替的求B和S(保持另一個(gè)固定)。當(dāng)學(xué)習(xí)B時(shí),問(wèn)題變成了最小二乘優(yōu)化問(wèn)題,解決方法有QCQP、梯度下降,問(wèn)題是QCQP求解速度慢,梯度下降收斂慢,論文提出使用“Lagrange?dual”求解。當(dāng)學(xué)習(xí)S時(shí),問(wèn)題變成了規(guī)則化最小二乘問(wèn)題,論文里使用“generic?QP”方法解決。
?
這篇論文我還沒(méi)有看完,現(xiàn)在存在這樣的問(wèn)題:
1、我還不太明白最小二乘、規(guī)則化最小二乘是啥意思。
2、Lagrange?dual方法還沒(méi)看具體是怎樣推導(dǎo)的。
3、generic?QP也沒(méi)看怎么推導(dǎo)的。
?
?
Matlab代碼的使用方法
作者提供了self-taught?learning框架的matlab代碼,下載。
?
使用方法:
?
1.?download?IMAGES.mat?from?http://redwood.berkeley.edu/bruno/sparsenet/
2.?copy?IMAGES.mat?to?./data?directory
3.?move?to?./code?
4.?run?matlab?and?execute:
????????"demo_fast_sc(1)":?epsilon-L1?sparsity?penalty
????????"demo_fast_sc(2)":?L1?sparsity?penalty
?
Note:?You?can?apply?sparse?coding?to?any?type?of?general?data.?See?sparse_coding.m?for?details.
總結(jié)
- 上一篇: 训练MNIST数据集模型
- 下一篇: 递归神经网络不可思议的有效性