deep learning(深度學習)學習筆記整理系列
version 1.0 2013-04-08
宣告:
1)該deep learning的學習系列是整理自網上很大牛和機器學習專家所無私奉獻的資料的。具體引用的資料請看參考文獻。具體的版本宣告也參考原文獻。
3)本人才疏學淺,整理總結的時候難免出錯,還望各位前輩不吝指正,謝謝。
4)閱讀本文需要機器學習、計算機視覺、神經網路等等基礎(如果沒有也沒關係了,沒有就看看,能不能看懂,呵呵)。
目錄:
一、概述
二、背景
三、人腦視覺機理
四、關於特徵
4.1、特徵表示的粒度
4.2、初級(淺層)特徵表示
4.3、結構性特徵表示
4.4、需要有多少個特徵?
五、deep learning的基本思想
六、淺層學習(shallow learning)和深度學習(deep learning)
七、deep learning與neural network
八、deep learning訓練過程
8.1、傳統神經網路的訓練方法
8.2、deep learning訓練過程
九、deep learning的常用模型或者方法
9.1、autoencoder自動編碼器
9.2、sparse coding稀疏編碼
9.3、restricted boltzmann machine(rbm)限制波爾茲曼機
9.4、deep beliefnetworks深信度網路
9.5、convolutional neural networks卷積神經網路
十、總結與展望
十一、參考文獻和deep learning學習資源
接上
9.2、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的乙個稀疏表達了。
例如:
下續
深度學習之五 稀疏編碼
9.2 sparse coding稀疏編碼 如果我們把輸出必須和輸入相等的限制放鬆,同時利用線性代數中基的概念,即o a1 1 a2 2 an n,i是基,ai是係數,我們可以得到這樣乙個優化問題 min i o 其中i表示輸入,o表示輸出。通過求解這個最優化式子,我們可以求得係數ai和基 i,這些...
深度學習之四 常用模型和方法
九 deep learning的常用模型或者方法 9.1 autoencoder自動編碼器 deep learning最簡單的一種方法是利用人工神經網路的特點,人工神經網路 ann 本身就是具有層次結構的系統,如果給定乙個神經網路,我們假設其輸出與輸入是相同的,然後訓練調整其引數,得到每一層中的權重...
深度學習baseline模型 深度學習模型訓練流程
工作中訓練了很多的深度學習模型,目前到了上公升到方 的角度來看了。日常工作中有的人可能已經在遵循方 做事,可能自己沒有注意,有的人可能沒有遵循方 在做事,雖然可能最後的結果差不多,但花費的時間和精力應該會差別很大,當然這是我自己的感受。我們不必完全按照方 來做,但基本流程跟方 應該一致。下面的具體步...