深度學習五

轉載:http://blog.csdn.net/zouxy09/article/details/8777094php

接上web

 

9.二、Sparse Coding稀疏編碼算法

       若是咱們把輸出必須和輸入相等的限制放鬆,同時利用線性代數中基的概念,即O = a11 + a22+….+ ann, Φi是基,ai是係數,咱們能夠獲得這樣一個優化問題:dom

Min |I – O|,其中I表示輸入,O表示輸出。函數

       經過求解這個最優化式子,咱們能夠求得係數ai和基Φi,這些係數和基就是輸入的另一種近似表達。學習

       所以,它們能夠用來表達輸入I,這個過程也是自動學習獲得的。若是咱們在上述式子上加上L1的Regularity限制,獲得:優化

Min |I – O| + u*(|a1| + |a2| + … + |an |)編碼

        這種方法被稱爲Sparse Coding。通俗的說,就是將一個信號表示爲一組基的線性組合,並且要求只須要較少的幾個基就能夠將信號表示出來。「稀疏性」定義爲:只有不多的幾個非零元素或只有不多的幾個遠大於零的元素。要求係數 ai 是稀疏的意思就是說:對於一組輸入向量,咱們只想有儘量少的幾個係數遠大於零。選擇使用具備稀疏性的份量來表示咱們的輸入數據是有緣由的,由於絕大多數的感官數據,好比天然圖像,能夠被表示成少許基本元素的疊加,在圖像中這些基本元素能夠是面或者線。同時,好比與初級視覺皮層的類比過程也所以獲得了提高(人腦有大量的神經元,但對於某些圖像或者邊緣只有不多的神經元興奮,其餘都處於抑制狀態)。spa

         稀疏編碼算法是一種無監督學習方法,它用來尋找一組「超完備」基向量來更高效地表示樣本數據。雖然形如主成分分析技術(PCA)能使咱們方便地找到一組「完備」基向量,可是這裏咱們想要作的是找到一組「超完備」基向量來表示輸入向量(也就是說,基向量的個數比輸入向量的維數要大)。超完備基的好處是它們能更有效地找出隱含在輸入數據內部的結構與模式。然而,對於超完備基來講,係數ai再也不由輸入向量惟一肯定。所以,在稀疏編碼算法中,咱們另加了一個評判標準「稀疏性」來解決因超完備而致使的退化(degeneracy)問題。(詳細過程請參考:UFLDL Tutorial稀疏編碼.net

       好比在圖像的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組合的結果,上上層又是上一層的組合basis……(就是上面第四部分的時候我們說的那樣)

       Sparse coding分爲兩個部分:

1)Training階段:給定一系列的樣本圖片[x1, x 2, …],咱們須要學習獲得一組基[Φ1, Φ2, …],也就是字典。

       稀疏編碼是k-means算法的變體,其訓練過程也差很少(EM算法的思想:若是要優化的目標函數包含兩個變量,如L(W, B),那麼咱們能夠先固定W,調整B使得L最小,而後再固定B,調整W使L最小,這樣迭代交替,不斷將L推向最小值。EM算法能夠見個人博客:「從最大似然到EM算法淺解」)。

       訓練過程就是一個重複迭代的過程,按上面所說,咱們交替的更改a和Φ使得下面這個目標函數最小。

      每次迭代分兩步:

a)固定字典Φ[k],而後調整a[k],使得上式,即目標函數最小(即解LASSO問題)。

b)而後固定住a [k],調整Φ [k],使得上式,即目標函數最小(即解凸QP問題)。

      不斷迭代,直至收斂。這樣就能夠獲得一組能夠良好表示這一系列x的基,也就是字典。

2)Coding階段:給定一個新的圖片x,由上面獲得的字典,經過解一個LASSO問題獲得稀疏向量a。這個稀疏向量就是這個輸入向量x的一個稀疏表達了。

例如:

 

下續

相關文章
相關標籤/搜索