深度学习笔记9 Sparse coding
轉(zhuǎn)載:http://blog.csdn.net/zouxy09/article/details/8777094/
如果我們把輸出必須和輸入相等的限制放松,同時利用線性代數(shù)中基的概念,即O = a1*Φ1 + a2*Φ2+….+ an*Φn, Φi是基,ai是系數(shù),我們可以得到這樣一個優(yōu)化問題:
Min |I – O|,其中I表示輸入,O表示輸出。
通過求解這個最優(yōu)化式子,我們可以求得系數(shù)ai和基Φi,這些系數(shù)和基就是輸入的另外一種近似表達。
因此,它們可以用來表達輸入I,這個過程也是自動學習得到的。如果我們在上述式子上加上L1的Regularity限制,得到:
Min |I – O| + u*(|a1| + |a2| + … + |an |)
這種方法被稱為Sparse Coding。通俗的說,就是將一個信號表示為一組基的線性組合,而且要求只需要較少的幾個基就可以將信號表示出來?!跋∈栊浴倍x為:只有很少的幾個非零元素或只有很少的幾個遠大于零的元素。要求系數(shù) ai 是稀疏的意思就是說:對于一組輸入向量,我們只想有盡可能少的幾個系數(shù)遠大于零。選擇使用具有稀疏性的分量來表示我們的輸入數(shù)據(jù)是有原因的,因為絕大多數(shù)的感官數(shù)據(jù),比如自然圖像,可以被表示成少量基本元素的疊加,在圖像中這些基本元素可以是面或者線。同時,比如與初級視覺皮層的類比過程也因此得到了提升(人腦有大量的神經(jīng)元,但對于某些圖像或者邊緣只有很少的神經(jīng)元興奮,其他都處于抑制狀態(tài))。
稀疏編碼算法是一種無監(jiān)督學習方法,它用來尋找一組“超完備”基向量來更高效地表示樣本數(shù)據(jù)。雖然形如主成分分析技術(shù)(PCA)能使我們方便地找到一組“完備”基向量,但是這里我們想要做的是找到一組“超完備”基向量來表示輸入向量(也就是說,基向量的個數(shù)比輸入向量的維數(shù)要大)。超完備基的好處是它們能更有效地找出隱含在輸入數(shù)據(jù)內(nèi)部的結(jié)構(gòu)與模式。然而,對于超完備基來說,系數(shù)ai不再由輸入向量唯一確定。因此,在稀疏編碼算法中,我們另加了一個評判標準“稀疏性”來解決因超完備而導致的退化(degeneracy)問題。(詳細過程請參考:UFLDL Tutorial稀疏編碼)
比如在圖像的Feature Extraction的最底層要做Edge Detector的生成,那么這里的工作就是從Natural Images中randomly選取一些小patch,通過這些patch生成能夠描述他們的“基”,也就是右邊的8*8=64個basis組成的basis,然后給定一個test patch, 我們可以按照上面的式子通過basis的線性組合得到,而sparse matrix就是a,下圖中的a中有64個維度,其中非零項只有3個,故稱“sparse”。
這里可能大家會有疑問,為什么把底層作為Edge Detector呢?上層又是什么呢?這里做個簡單解釋大家就會明白,之所以是Edge Detector是因為不同方向的Edge就能夠描述出整幅圖像,所以不同方向的Edge自然就是圖像的basis了……而上一層的basis組合的結(jié)果,上上層又是上一層的組合basis……(就是上面第四部分的時候咱們說的那樣)
Sparse coding分為兩個部分:
1)Training階段:給定一系列的樣本圖片[x1, x 2, …],我們需要學習得到一組基[Φ1, Φ2, …],也就是字典。
稀疏編碼是k-means算法的變體,其訓練過程也差不多(EM算法的思想:如果要優(yōu)化的目標函數(shù)包含兩個變量,如L(W, B),那么我們可以先固定W,調(diào)整B使得L最小,然后再固定B,調(diào)整W使L最小,這樣迭代交替,不斷將L推向最小值。EM算法可以見我的博客:“從最大似然到EM算法淺解”)。
訓練過程就是一個重復迭代的過程,按上面所說,我們交替的更改a和Φ使得下面這個目標函數(shù)最小。
每次迭代分兩步:
a)固定字典Φ[k],然后調(diào)整a[k],使得上式,即目標函數(shù)最小(即解LASSO問題)。
b)然后固定住a [k],調(diào)整Φ [k],使得上式,即目標函數(shù)最小(即解凸QP問題)。
不斷迭代,直至收斂。這樣就可以得到一組可以良好表示這一系列x的基,也就是字典。
2)Coding階段:給定一個新的圖片x,由上面得到的字典,通過解一個LASSO問題得到稀疏向量a。這個稀疏向量就是這個輸入向量x的一個稀疏表達了。
例如
總結(jié)
以上是生活随笔為你收集整理的深度学习笔记9 Sparse coding的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习笔记8 数据预处理
- 下一篇: 【教程】利用libsvm-mat建立分类