深度神經網路已經在語音識別、影象識別等領域取得前所未有的成功。這一篇,講一講經典的卷積神經網路。我不打算詳細描述卷積神經網路的生物**行機理,因為網路上有太多的教程可以參考。這裡,主要描述其數學上的計算過程,也就是如何自己程式設計去實現的問題。
一、概述
回想一下bp神經網路。bp網路每一層節點是乙個線性的一維排列狀態,層與層的網路節點之間是全連線的。這樣設想一下,如果bp網路中層與層之間的節點連線不再是全連線的,而是區域性連線的。這樣,就是一種最簡單的一維卷積網路。如果我們把上述這個思想擴充套件到二維,這就是我們在大多數參考資料上看到的卷積神經網路。具體參看下圖:
上圖左:全連線網路。如果我們有1000*1000畫素的影象,有1百萬個隱層神經元,每個隱層神經元都連線影象的每乙個畫素點,就有1000*1000*1000000=10^12個連線,也就是10^12個權值引數。
上圖右:區域性連線網路。每乙個節點與上層節點同位置附近10*10的視窗相連線,則1百萬個隱層神經元就只有100w乘以100,即10^8個引數。其權值連線個數比原來減少了四個數量級。
根據bp網路訊號前向傳遞過程,我們可以很容易計算網路節點的輸出。例如,對於上圖中被標註為紅色節點的淨輸入,就等於所有與紅線相連線的上一層神經元節點值與紅色線表示的權值之積的累加。這樣的的計算過程,很多書上稱其為卷積。
事實上,對於數字濾波而言,其濾波器的係數通常是對稱的。否則,卷積的計算需要先反向對折,然後進行乘累加的計算。上述神經網路權值滿足對稱碼?我想答案是否定的。所以上述稱其為卷積運算,顯然是有失偏頗的。但這並不重要,僅僅是乙個名詞稱謂而已。只是,搞訊號處理的人,在初次接觸卷積神經網路的時候,帶來了一些理解上的誤區。
卷積神經網路另外乙個特性是權值共享。例如,就上面右邊那幅圖來說,權值共享,不是說,所有的紅色線標註的連線權值相同。這一點初學者容易產生誤解。
上面描述的只是單層網路結構,前a&t shannon lab的yann lecun等人據此提出了基於卷積神經網路的乙個文字識別系統lenet-5。該系統90年代就被用於銀行手寫數字的識別。
二、文字識別系統lenet-5
在經典的模式識別中,一般是事先提取特徵。提取諸多特徵後,要對這些特徵進行相關性分析,找到最能代表字元的特徵,去掉對分類無關和自相關的特徵。然而,這些特徵的提取太過於依賴人的經驗和主觀意識,提取到的特徵的不同對分類效能影響很大,甚至提取的特徵的順序也會影響最後的分類效能。同時,影象預處理的好壞也會影響到提取的特徵。那麼,如何把特徵提取這一過程作為乙個自適應、自學習的過程,通過機器學習找到分類效能最優的特徵呢?
卷積神經元每乙個隱層的單元提取影象區域性特徵,將其對映為乙個平面,特徵對映函式採用sigmoid函式作為卷積網路的啟用函式,使得特徵對映具有位移不變性。每個神經元與前一層的區域性感受野相連。注意前面我們說了,不是區域性連線的神經元權值相同,而是同一平面層的神經元權值相同,有相同程度的位移、旋轉不變性。每個特徵提取後都緊跟著乙個用來求區域性平均與二次提取的亞取樣層。這種特有的兩次特徵提取結構使得網路對輸入樣本有較高的畸變容忍能力。也就是說,卷積神經網路通過區域性感受野、共享權值和亞取樣來保證影象對位移、縮放、扭曲的魯棒性。
下面,有必要來解釋下上面這個用於文字識別的lenet-5深層卷積網路。
輸入影象是32*32的大小,區域性滑動窗的大小是5*5的,由於不考慮對影象的邊界進行拓展,則滑動視窗將有28*28個不同的位置,也就是c1層的大小是28*28。這裡設定有6個不同的c1層,每乙個c1層內的權值是相同的。
s2層是乙個下取樣層。簡單地說,由4個點下取樣為1個點,也就是4個數的加權平均。但在lenet-5系統,下取樣層比較複雜,因為這4個加權係數也需要學習得到,這顯然增加了模型的複雜度。在斯坦福關於深度學習的教程中,這個過程叫做pool。
根據對前面c1層同樣的理解,我們很容易得到c3層的大小為10*10。只不過c3層變成了16個10*10的網路。試想一下,如果s2層只有1個平面,那麼由s2層得到c3層就和由輸入層得到c1層是完全一樣的。但是,s2層有多層,那麼,我們只需按照一定的順序組合這些層就可以了。具體的組合規則,在lenet-5系統中給出了下面的**,簡單來說,例如對於c3層第0張特徵圖,其每乙個節點與s2層的第0張特徵圖、第1張特徵圖、第2張特徵圖,總共3個5*5個節點相連線。後面依此類推,c3層每一張特徵對映圖的權值是相同的:
s4層是在c3層基礎上下取樣,前面已述。在後面的層由於每一層節點個數比較少,都是全連線層,這個比較簡單,不再贅述。
三、簡化的lenet-5系統
簡化的lenet-5系統把下取樣層和卷積層結合起來,避免了下取樣層過多的引數學習過程,同樣保留了對影象位移、扭曲的魯棒性。其網路結構圖如下所示:
簡化的lenet-5系統包括輸入層的話,只有5層結構,而原始lenet-5結構不包含輸入層就已經是7層網路結構了。它實現下取樣非常簡單,直接取其第乙個位置節點上的值就可以了。
輸入層。mnist手寫數字影象的大小是28*28的,這裡通過補零擴充套件為29*29的大小。這樣輸入層神經節點個數為29*29等於841個。
第一層。由6張不同的特徵對映圖組成。每一張特徵圖的大小是13*13。注意,由於卷積窗大小為5*5,加上下取樣過程,易得其大小為13*13。所以,第二層共有6*13*13等於1014個神經元節點。每一張特徵圖加上偏置共有5*5+1等於26個權值需要訓練,總共有6*26等於156個不同的權值。即總共有1014*156等於26346條連線線。
第二層。由50張不同的特徵對映圖組成。每一張特徵圖的大小是5*5。注意,由於卷積窗大小為5*5,加上下取樣過程,易得其大小為5*5。由於上一層是由多個特徵對映圖組成,那麼,如何組合這些特徵形成下一層特徵對映圖的節點呢?簡化的lenet-5系統採用全部所有上層特徵圖的組合。也就是原始lenet-5特徵對映組合圖的最後一列的組合方式。因此,總共有5*5*50等於1250個神經元節點,有(5*5+1)*6*50等於7800個權值,總共有1250*26等於32500條連線線。
第三層。這一層是乙個一維線性排布的網路節點,與前一層是全連線的網路,其節點個數設為100,故而總共有100*(1250+1)等於125100個不同的權值,同時,也有相同數目的連線數。
第四層。這一層是網路的輸出層。如果要識別0~9數字的話,就是10個節點。該層與前一層是全連線的,故而,總共有10*(100+1)等於1010個權值,有相同數目的連線線。
四、卷積神經網路的實現問題
由於卷積神經網路採用bp網路相同的演算法。所以,採用現有bp網路就可以實現。開源的神經網路**faan可以利用。這個開源的實現採用了一些**優化技術,有雙精度,單精度,定點運算三個不同的版本。
由於經典的bp網路是乙個一維節點分布排列,而卷積神經網路是二維網路結構。所以,要把卷積神經網路的每一層,按照一定的順序和規則對映為一維節點分布,然後,按照這個分布建立乙個多層反向傳播演算法的網路結構,就可以按照一般的bp訓練演算法去學習網路引數。對於實際環境中新樣本的**,也採用bp演算法中相同訊號前向傳遞演算法進行。具體細節也可以參考網上的乙個開源**,鏈結如下:
注:這個**在建立cnn的時候有個明顯的bug,如果你看明白了我上面對簡化的lenet-5的結構描述,一眼就會找出問題所在。
神經網路 卷積神經網路
這篇卷積神經網路是前面介紹的多層神經網路的進一步深入,它將深度學習的思想引入到了神經網路當中,通過卷積運算來由淺入深的提取影象的不同層次的特徵,而利用神經網路的訓練過程讓整個網路自動調節卷積核的引數,從而無監督的產生了最適合的分類特徵。這個概括可能有點抽象,我盡量在下面描述細緻一些,但如果要更深入了...
神經網路 卷積神經網路
1.卷積神經網路概覽 來自吳恩達課上一張,通過對應位置相乘求和,我們從左邊矩陣得到了右邊矩陣,邊緣是白色寬條,當畫素大一些時候,邊緣就會變細。觀察卷積核,左邊一列權重高,右邊一列權重低。輸入,左邊的部分明亮,右邊的部分灰暗。這個學到的邊緣是權重大的寬條 都是30 表示是由亮向暗過渡,下面這個圖左邊暗...
卷積神經網路 有趣的卷積神經網路
一 前言 最近一直在研究深度學習,聯想起之前所學,感嘆數學是一門樸素而神奇的科學。f g m1 m2 r 萬有引力描述了宇宙星河運轉的規律,e mc 描述了恆星發光的奧秘,v h d哈勃定律描述了宇宙膨脹的奧秘,自然界的大部分現象和規律都可以用數學函式來描述,也就是可以求得乙個函式。神經網路 簡單又...