首先看卷積公式html
它是經過兩個函數 f(t) 和 g(t) 來生成第三個函數的一種數學算子。從負無窮到正無窮遍歷所有 u 值,把 g(t-u) 的值乘以 f(u) 的值以後再進行累加,獲得關於該累加操做的關於 t 的函數。從另外一個角度看,卷積就是一種加權求和。網絡
用離散信號方便理解卷積的操做。有兩個函數f(n)和g(n),分別以下:函數
則卷積運算f(n)*g(n)過程爲,.net
首先,f(n)乘以g(0),g(0)爲1,則設計
其次,f(n)乘以g(1)並整個右移一個單位,g(1)爲2,則3d
接着,f(n)乘以g(2)並整個右移一個單位,g(2)爲2,則cdn
一樣,f(n)乘以g(3)並整個右移一個單位,g(3)爲3,則htm
最後,將4個圖疊加即完成卷積運算。blog
因此卷積就是一個函數在另外一個函數的加權疊加。它是一種加權求和。圖片
對於二維卷積,對應的公式爲:
離散公式爲:
二維卷積的運算過程當中涉及到 f(t,u) 函數矩陣的180度翻轉,而卷積神經網絡的卷積運算則稍微有點不一樣,運算過程不進行180度翻轉,且g在前f在後。
從卷積神經網絡來看,f(x,y) 可當作是2*2 或 3*3的網格,即卷積核,而 g(x,y) 則對應圖像的像素,好比28*28,則卷積操做其實就是卷積核 f 在圖像 g 上一格格移動而作的乘積並累加和。詳細的操做後面會有形象說明。
瞭解卷積神經網絡以前需先了解最基礎的BP神經網絡,BP神經網絡通常以下圖所示,有多個層,好比左邊的包含輸入層、隱層和輸出層,而右邊的則包含了兩個隱層。每層的神經元與下一神經元全互連,同層之間的神經元不會相連,輸入層用於接收輸入,通過隱層加工後再到輸出層加工並輸出。
BP神經網絡好的地方就是咱們徹底沒必要事先考慮怎麼用數學方程來描述輸入和輸出之間的關係,轉而考慮的是設計一個N層神經網絡,而要多少層、每層要多少個節點就能夠咱們根據經驗來設計,可經過不一樣的網絡模型來看哪一個模型能更好地擬合。
BP神經網絡其實很直觀很好理解,整個過程以下。
下面是一個三層(不算輸入層)神經網絡,兩個輸入通過幾層網絡後獲得一個輸出。
能夠看到上面的BP神經網絡層與層之間都是全鏈接的,對於圖像處理領域,當神經網絡處理大圖像時,全鏈接會致使待訓練的參數很是龐大,好比100萬個像素的圖像,對於100個節點的隱層,則會產生億級別的參數,若是更多層及更多個節點那參數數量將會無比龐大。BP神經網絡沒有假設相鄰圖像之間存在緊密聯繫。綜上所述,BP神經網絡不適合作圖像處理。
爲減小參數數量,首先想到能夠構建部分鏈接的神經網絡,每一個神經元再也不與上層全部神經元相連,而是鏈接某部分。另外還能經過權值共享來減小參數數量,一組鏈接共享權重而沒必要每一個鏈接權重都不一樣。除此以外,還能經過池化來減小每層的樣本數,從而減小參數數量。結合以上特色,卷積神經網絡就是這樣的一種網絡。
看一個卷積神經網絡示意圖,它包含了若干卷積層、池化層和全鏈接層。圖像輸入通過第一層卷積層處理後,獲得4層feature,爲何能夠是4層呢?其實就是能夠自定義4個不一樣的filter對輸入分別運算,就獲得4層feature。而後池化層對卷積後的feature進行池化處理,獲得更小的feature,這裏運算後一樣是4層feature。接着繼續根據filter作卷積和池化處理,最後經過兩個全鏈接層完成輸出。
前面說到卷積操做其實就是卷積核 f 在圖像 g 上一格格移動而作的乘積並累加和,具體的操做以下兩個圖,g(x,y) 是一個5*5的圖像,卷積核 f(x,y) 是3*3的網格。卷積核在圖像上逐步移動計算乘積並累加,最後獲得一個3*3的特徵映射。
移動的步伐爲1個單位,固然也能夠2個單位地移動。而前面說到的卷積操做能夠由多個filter進行運算,這時卷積運算是怎樣進行的呢?下圖形象地展現了整個過程,其中輸入有3層的數據,再定義兩個3*3*3的filter,分別爲Filter W0 和Filter W1 ,Filter W0以2個單位移動,3個維度分別對應輸入層作乘積累加運算獲得3個結果,再將這3個結果加起來並加上偏移量b0獲得最終結果。Filter W0遍歷輸入獲得一個3*3的輸出,一樣地,Filter W1也是進行一樣地操做獲得另一個3*3輸出。最終的輸出就是一個3*3*2的網絡。
另外能夠看到最外一圈都爲0,這是一種處理邊界的方式,叫zero padding,經過它不會讓邊緣的特性丟失。
常見的池化有兩種,最大值池化和平均值池化。最大值池化即在區域中選擇最大值做爲池化後的值,而平均值池化則是區域中全部值的平均值做爲池化後的值。
它的思想能夠看下圖,卷積處理後特徵仍是具備較多神經元,經過池化抽樣處理後減小了神經元。
池化處理的好處就是能顯著減小參數的數量,而且池化單元具備平移不變性。
特徵都提取好後將進入到一個全鏈接層,全鏈接層其實就像前面的經典的BP神經網絡,通過多層卷積和池化層處理後參數已經大大減小,通常最後再經過添加 softmax 分類器實現最終的識別。
卷積神經網絡的訓練比全鏈接神經網絡的訓練複雜不少,由於全鏈接神經網絡相鄰兩層的全部神經元都相連,而卷積神經網絡則要知道哪些神經元之間相連,並且還引入了池化層,都致使了訓練更加複雜。但本質思想上二者是一致的,都是偏差逆傳播。
通常卷積神經網絡的結構爲輸入層->卷積層->採樣層->卷積層->採樣層->...->卷積層->採樣層->輸出層。好比以下圖:
首先定義n個樣本的代價函數
則某個樣本的偏差爲
輸出層的激活函數能夠有不少種,這裏用s函數,它的輸出範圍是0到1,經過訓練讓偏差趨於0。因此更新公式爲
若是使用了均值池化則是將偏差平均分配到上一層卷積層對應的神經元上。
如今只看步長爲一、深度爲1且filter爲1的狀況,左邊綠色表示l-1層的輸入,中間黃色是filter,右邊紅色是l層的偏差項。
========廣告時間========
鄙人的新書《Tomcat內核設計剖析》已經在京東銷售了,有須要的朋友能夠到 item.jd.com/12185360.ht… 進行預約。感謝各位朋友。
=========================
歡迎關注: