卷積神經網絡(CNN)

最近可能會用到CNN,今天回顧一下,並找到了一些大神的精華帖,順便作個總結。算法

CNN是時下很是火的一種深度學習算法,它是一種前饋神經網絡,即神經元只與先後層有聯繫,在同一層的神經元無聯繫。筆者用下面這張圖用來講明卷積神經網絡的工做原理網絡

這是一個識別字母的CNN結構圖,最左邊是32*32像素的輸入,而後通過了6個隱含層,最終獲得輸出,輸出有10個類別,分別是要識別的10個字母的標記。假設咱們已經訓練好CNN,那麼從輸入到C1層有6個特徵映射,也就是分別用6個訓練好的卷積核分別對32*32的輸入作了4個特徵抽取(或者稱爲4次掃描),掃描的過程是這樣的:將卷積核左上角與輸入圖片左上角重疊,而後向右或向下依次移動striding個單位(這裏以strding=1爲例來講明),這樣能夠獲得28*28的輸出,下面這張圖表示了卷積計算的過程:函數

卷積核與輸入像素對應位置的值相乘,而後求和就獲得了一次卷積計算的輸出。實際獲得的特徵輸出還須要在此基礎上加一個偏置(bias),而後以此做爲sigmoid函數的參數,計算獲得的sigmoid函數的輸出纔是對應特徵輸出的結果,這樣作目測是爲了方便後續的訓練,由於訓練過程須要各類求導。。學習

咱們作卷積運算也只是對輸入圖片作了一次模糊處理(能夠叫特徵抽象),這一步操做能夠取到一些邊緣特徵。這樣作在獲得6組28*28的特徵輸出以後,還須要對卷積計算後的28*28的特徵作一次池化(pooling),獲得了S2層,這樣作的目的是能夠保證旋轉不變形,(好比克服貓耳朵旋轉或者由於拍攝角度不一樣而形成的影響)。池化有不少種方法,好比能夠選擇Max-Pooling(範圍內最大值)或者L2-Pooling(範圍內每一個值的平方和的平方根),這裏獲得S2層選擇的是一個2*2的鄰域作池化。3d

第一次池化完成後能夠跟着連續n個卷積-池化的操做,從最後的隱含層到輸出層的時候是一個相似於BP神經網絡的全鏈接(每一個隱含層的神經元與輸出神經元的全鏈接)。blog

在卷積-池化的過程當中,能夠想象某一次的卷積操做徹底覆蓋了字母A的特徵,那麼下一步的池化能夠保證字母A一動一下位置也能識別,這樣保證了平移不變性(我的理解)>圖片

CNN的訓練和BP神經網絡同樣也是反向傳播,關於反向傳播,能夠參考上一篇BP神經網絡,這裏再也不贅述。深度學習

總之,CNN的過程特徵抽象與特徵泛化的交替進行,有了池化,纔不至於過擬合!基礎

相關文章
相關標籤/搜索