Deep Learning(深度學習)學習筆記整理系列php
http://blog.csdn.net/zouxy09算法
做者:Zouxy網絡
version 1.0 2013-04-08dom
聲明:機器學習
1)該Deep Learning的學習系列是整理自網上很大牛和機器學習專家所無私奉獻的資料的。具體引用的資料請看參考文獻。具體的版本聲明也參考原文獻。函數
2)本文僅供學術交流,非商用。因此每一部分具體的參考資料並無詳細對應。若是某部分不當心侵犯了你們的利益,還望海涵,並聯系博主刪除。學習
3)本人才疏學淺,整理總結的時候不免出錯,還望各位前輩不吝指正,謝謝。優化
4)閱讀本文須要機器學習、計算機視覺、神經網絡等等基礎(若是沒有也不要緊了,沒有就看看,能不能看懂,呵呵)。編碼
5)此屬於初版本,如有錯誤,還需繼續修正與增刪。還望你們多多指點。你們都共享一點點,一塊兒爲祖國科研的推動添磚加瓦(呵呵,好高尚的目標啊)。請聯繫:zouxy09@qq.com
目錄:
6、淺層學習(Shallow Learning)和深度學習(Deep Learning)
7、Deep learning與Neural Network
9.三、Restricted Boltzmann Machine(RBM)限制波爾茲曼機
9.五、Convolutional Neural Networks卷積神經網絡
接上
9.二、Sparse Coding稀疏編碼
若是咱們把輸出必須和輸入相等的限制放鬆,同時利用線性代數中基的概念,即O = a1*Φ1 + a2*Φ2+….+ an*Φn, Φi是基,ai是係數,咱們能夠獲得這樣一個優化問題:
Min |I – O|,其中I表示輸入,O表示輸出。
經過求解這個最優化式子,咱們能夠求得係數ai和基Φi,這些係數和基就是輸入的另一種近似表達。
所以,它們能夠用來表達輸入I,這個過程也是自動學習獲得的。若是咱們在上述式子上加上L1的Regularity限制,獲得:
Min |I – O| + u*(|a1| + |a2| + … + |an |)
這種方法被稱爲Sparse Coding。通俗的說,就是將一個信號表示爲一組基的線性組合,並且要求只須要較少的幾個基就能夠將信號表示出來。「稀疏性」定義爲:只有不多的幾個非零元素或只有不多的幾個遠大於零的元素。要求係數 ai 是稀疏的意思就是說:對於一組輸入向量,咱們只想有儘量少的幾個係數遠大於零。選擇使用具備稀疏性的份量來表示咱們的輸入數據是有緣由的,由於絕大多數 的感官數據,好比天然圖像,能夠被表示成少許基本元素的疊加,在圖像中這些基本元素能夠是面或者線。同時,好比與初級視覺皮層的類比過程也所以獲得了提高 (人腦有大量的神經元,但對於某些圖像或者邊緣只有不多的神經元興奮,其餘都處於抑制狀態)。
稀疏編碼算法是一種無監督學習方法,它用來尋找一組「超完備」基向量來更高效地表示樣本數據。雖然形如主成分分析技術(PCA)能使咱們方便地找到一組 「完備」基向量,可是這裏咱們想要作的是找到一組「超完備」基向量來表示輸入向量(也就是說,基向量的個數比輸入向量的維數要大)。超完備基的好處是它們 能更有效地找出隱含在輸入數據內部的結構與模式。然而,對於超完備基來講,係數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組合的結 果,上上層又是上一層的組合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的一個稀疏表達了。
例如: