卷積神經網絡(ConvolutionalNeural Networks,簡稱CNN)提出于20世紀60年代,由Hubel和Wiesel在研究貓腦皮層中用于局部敏感和方向選擇的神經元時發現。

如上圖所示,利用一個滑動視窗(卷積核)對原始圖像區域進行“篩選”,将對應像素相乘,再累加( I*K),就得到了一個像素的卷積結果。可以說卷積就像一個篩子,按照一定規則(借助卷積核“乘累加”)對原始圖像再加工(實際是一個積分),公式可以描述為:
來看一個典型的CNN執行個體,對于分辨率為28*28的圖檔處理過程:
其中Conv為卷積層(采用5*5的卷積核,Step為1),實作資料特征提取;Pool為池化層,也稱為降采樣(Sample),實作資料降維;FC為全連接配接層,通過一定規則的計算(也可能為卷積計算)得到結果。
我們把卷積層、池化層等中間層統一稱為隐層。接下來深入了解每個層的含義來加深對CNN的了解。
• 卷積層與權值共享
按照生物學神經中繼資料處理機制,每個神經元需要與前一層連接配接,用于特征提取,如下圖所示,假設神經元數量為100萬,那麼對于100萬像素的圖像将建立1012個連接配接,這裡面的權值的數量是非常大的。
那麼如何解決大量的權值計算(參數爆炸)問題呢?大開一下腦洞,我們做兩個假設:
1)減少每個神經元(對應隐層像素)的作用範圍,比如設為10*10,僅和局部的100個像素建立局部連接配接;
參數簡化: 100(連接配接權值)*1M(神經元個數)
2)所有神經元采用同一組權值進行計算,對應CNN就是用同一個卷積核去卷積圖像,這就是權值共享。
參數簡化: 100(權值)
沒錯,我們隻需要100個參數就建立了兩層之間的連接配接,這靠譜嗎?相信第一點很好了解,每個神經元是獨立工作的,問題在于第二點,權值共享 這個玩笑開的确實有點大。
事實上從生物學上解釋,神經元确實是分類的,有的對邊緣敏感,有的對亮度敏感,還有的感應顔色,每一類神經元的參數是近似一緻的。
想通了嗎?關鍵就在于“分類”,每一類神經元對應一組權值,怕種類不夠?
那就用100個卷積核來描述100種神經元。
對于上面的例子,不同的卷積核如右圖所示,我們得到最終的參數個數:
參數簡化: 100(權值)*100(卷積核)
我們用1萬個權值的卷積計算,近似模拟了神經元的處理過程,這個數量級的參數對于計算機來講并不算多,特别是對于卷積這種已經能夠做GPU并行計算的方法,這就是卷積的魅力。
• 池化
池化(降采樣)較為容易了解,擷取一個區域内的典型特征,比如n*n像素範圍的像素最大值或平均值,其意義在于能夠對輸入進行抽象描述,對特征進行降維。
一般來講,對于輸入的池化區域都是分塊處理的,與卷積的差別在于塊之間一般不重疊,這樣就保證了資訊能夠更快的抽象,抽象的價值在于提取裡面的“顯著特征”,而忽略“細節特征”。
常用的兩種池化方法:
1)最大值池化,應用最多,能夠有效減少卷積層帶來的均值偏差,對紋理特征的适應較好;
2)平均值池化,對卷積結果進一步平滑,紋理和邊緣特征容易丢失,但能有效避免噪聲。
• 激活層
神經網絡真正的代表作出場了,在第一節已做過專題講解,激活層 真正反映了神經元的工作機制,可以說是神經網絡的精髓。
在CNN中被廣泛采用的ReLU函數有效解決了梯度擴散問題,你可以不必太在意“稀疏”,你可以忘掉“逐層預訓練”,總結一句話那就是“激活函數的一小步,深度學習的一大步”。
激活層一般添加在卷積層或者池化層之後,沒有明确的位置定義,一般對于簡單的網絡來講,激活層通常可以不添加。
• Dropout層
這個問題的提出源于神經網絡的另一個大缺陷-“過拟合”,對應于前面導緻“梯度擴散”問題的欠拟合。
正常解決“過拟合”問題的方法是模型平均,通過訓練多個網絡進行權重組合來進行規避,這樣帶來的問題是更大的計算量。
Dropout方法最早由Hinton大神提出,針對一次訓練過程,網絡中的神經元節點按照一定的機率進行權值更新,也就是說,神經元有可能僅保留權值參數,下一個訓練過程再更新。
按照一定的随機政策,使每一次訓練的神經元并不相同,也就是說神經元節點輪流工作,這種随機過程又向人腦前進了一步。
每一次的Dropout相當于對網絡做了一次簡化(如上圖所示),僅簡化後的網絡節點參與權值更新,整個訓練過程中多次Dropout,每個節點都參與了訓練和學習,當然偶爾也“翹個班”,過程很簡單,為什麼能得到好的效果呢?我們來分析一下:
1)“天天大魚大肉,頓頓鮑魚龍蝦”,偶爾吃個友善面吧,想想都嘚瑟,這個小調劑的效果出奇的好;
2)班上一共20個學生,老師每次選擇回答問題的都是那幾個優秀的學生,Dropout避免了訓練結果對某些節點的強依賴(權重過大);
作者傾向于從遺傳學的角度來進行解釋,不同的基因組合方式能提高對于環境的适應能力,“優勝劣汰”的進化機率更高。
3)Dropout也可以了解為一種平均模型,差別在于,通過在多Step之間進行平均代替多個模型的組合。
不管從哪個角度進行了解,Dropout本身都是直覺有效的,這裡面雖然沒有嚴謹的數學公式推導,但源于生物學的直覺了解,以及大量的實驗足以證明。
就好像有人問我深度學習為什麼會有這麼好的效果,為什麼就能有效收斂?什麼理論避免陷入局部最大值?我們對于某些問題的認知僅僅在這個層面上而已,有時候不需要糾結,能解決問題就可以了,至于其背後隐晦的林林種種,So What?
• 全連接配接層
全連接配接層直覺了解為簡化的資料計算,其意義在于求解,對于網絡本身的貢獻值是比較低的,大多數情況下,全連接配接層放在網絡最後面,有時也會被省略,這裡不做過多解釋,大家看到的時候能知道幹什麼的就行了。
• 回歸層
回歸層理論上不屬于CNN的一部分,當然也有人将其合并到網絡,或者說也可以看作是全連接配接層的一部分,anyway,我們隻是在這裡将過程穿起來而已。
回歸是個比較熟悉的概念,前面講過的邏輯回歸、高斯回歸等都屬于回歸,說白了回歸就是對特征進行分類,可以分兩類,也可以分多類。
回歸的作用也隻是分類而已,你可以用最簡單的SVM分類器進行分類,也可以采用複雜的多類劃分,比如Softmax。Softmax是邏輯回歸模型在多分類問題上的推廣,本質上是将一個P維向量映射成另一個K維向量,其公式描述為:
得到對應的類别代表的機率,這個機率正是我們要的分類結果。
本文轉自大資料躺過的坑部落格園部落格,原文連結:http://www.cnblogs.com/zlslch/p/6972966.html,如需轉載請自行聯系原作者