* 1 對卷積神經網絡的研究可追溯到1979和1980年日本學者福島邦彥發表的論文和“neocognition”神經網絡。
* 2 AlexNet使用卷積神經網絡解決圖像分類問題,在ILSVR2012中獲勝並大大提升了state-of-start的准確率(大概16%左右)。(在11年top5的錯誤率在25.8%左右)
分類的四個里程碑
1.AlexNet
8layer 2012年
- Paper: ImageNet Classification with Deep Convolutional Neural Networks(2012)
- Author: Alex KrizheVsky, llya Sutskever, Geoffrey E. Hinton
- Test:error rate on ImageNet, top1:37.5%, top5:17.0%
論文給出的網絡結構(用兩台GPU訓練的),輸入圖片為\(224*224*3\), 先用的\(11*11\),步長為4的卷積核進行卷積,得到48個\(55*55\)的feature_map,然后使用5*5的卷積核和Max pooling得到128個\(27*27\)個feature_map,
后面都是使用\(3*3\)的卷積核,最后得2048個特征向量,然后對1000類物體進行分類。
1.1 AlexNet取得成功的原因
這是陳老師給出的四點理由
1.Relu激活函數:訓練收斂比較快。
2.LRN局部歸一化:提升較大響應,抑制較小響應。(后面證明LRN可能沒啥作用)
這個想法來自對於每個層可能有多個feature map,不同特征圖的同一個位置上做局部響應的歸一化。舉個例子,比如在某一層有三個feature map,分別用於提對角線,三角形,正方形特征,在第一個fm中體現是否具有對角線特征,第二個體現是否具有
三角線特征,第三個體現是否具有正方形特征。然后對這三個結果進行局部響應歸一化。比如參與三角形比較強,其他比較弱,然后就強化三角形特征,弱化其他的特征。
缺點:可能有的地方就是參與到了多個特征的提取。
3.MaxPool: 避免特征被平均池化模糊,提升特征魯棒性。
4.Dropout:隨機舍棄部分隱層節點,避免過擬合。
- 隨機丟棄部分神經元。
- 在模型訓練過程中,以一定的概率舍棄某些隱層神經元。在反向傳播更新權重的時候,不更新與該神經元相關的權重.使用訓練的好的網絡是所有的神經元都要使用的。
- 被舍棄神經元相關的權重得保留下來(只是暫時不更新),另一批樣本輸入時繼續使用與該神經元相關的權重。
- 防止訓練數據中復雜的co-adaptation,抑制過擬合。
5.使用多個卷積層,有效提取圖片的特征。
2.VGG
比AlexNet更深的網絡。
2014年
- Paper: Very Deep Convolutional Networks for Large-Scale Image Recognition(2014)
- Author: K.Simonyan, A.Zisserman
- Test: error rate on ImageNet, top1:24.7%, top5:7.5%
VGG有很多版本,常見的有VGG16,VGG19。
VGG16
對於更深的網絡可能出現梯度爆炸和梯度消失的情況,對於離損失函數比較近的地方的層可能在反向傳播中可以得到很好的訓練,但是較遠的層可能只受到微小的影響(偏導比較小),很難訓練好。
所以VGG先訓練11層網絡。用收斂后的前四個卷積層和后3個全連接層的權重作為更深神經網絡的前四個卷積層和后3個全連接層的初始權重,其余層的權重隨機初始化。
比如上圖中先訓練A(11layer),選擇其中的conv3-64,conv3-128,conv3-256,conv3-256, FC-4096,FC-4096,FC-1000作為更深的網絡(16,19)的相應層的初始權重,中間加的層權重隨機權重,重新開始訓練。
11層的訓練比較快。
2.1 VGG實驗結果
結論
A(11)B(13) C D (16) E(19)
- 1 A/A-LRN: 加LRN准確率無明顯的提升。
- 2 A/B/D/E: 層數越多准確率越高;
- C/D: conv33 比conv11准確率更高。
- Multi-scale training可明顯提高准確率。
2.2 問題
為什么VGG沒有更深的層?
陳老師的觀點是,作者可能試過更深的網絡,但是采取這種訓練方式,19層可能已經是極限了,以VGG這種方式訓練再深的網路收益已經很低了,或者可能錯誤率還會上升。
2.3 VGG中規整的卷積-池化結構
- Conv
- 所有的卷積層filter = \(3*3\), stride = 1, pad = SAME
pad = SAME : pad至輸出的圖像大小等於輸入的圖像大小
pad = VALID : pad = 0
- Maxpool
- 所有的池化層filter大小/stride/pad相同
- filter = \(2*2\), stride = 2, pad = 0
卷積層: 負責數據體深度變換(控制特征圖數量)
池化層: 負責數據體長寬變換(控制特征圖的大小)
2.3 知識點
1.使用多層小卷積比單層大卷積效果好
實驗 使用兩層\(3*3\)conv代替\(5*5\) conv
原因:是一個\(5*5\)conv和兩個\(3*3\)conv的感受野大小相同;每個卷積層加入Relu,兩層\(3*3\)conv決策函數區分能力更強。
結果:\(5*5\)conv網絡比兩個\(3*3\)conv網絡在top1准確率低7%。
相同感受野,多層網絡權值更少
2.4 VGG成功的原因
- 更深的卷積神經網絡,更多的卷積層和非線性激活函數,提升分類准確率。
* 使用規則的多層小卷積替代大卷積,減少參數數量,提高訓練收斂速度。 - 部分網絡參數的預初始化,提高訓練收斂的速度。
2.5 問題
卷積核還能不能更小?網絡還能不能更深?
3 inception系列
- Inception-v1(GoogleNet):Szegedy C, Liu W, Jia Y, et al.Going deeper with convolutions, CVPR2015:1-9.
- BN-Inception: loffe S, Szegedy C, Batch normalization:accelearating deep network training by reducing internal covariate shift. ICML, 2015:448-456.
- inception-v2,Inception-v3: Szegedy C, Vanhoucke V, loffe S, et al.Rethinking the Inception Architecture for Computer Vision[C] //CVPR, 2016:2818-2826.
- Inception-v4:Szegedy C, loffe S, Vanhoucke V,et al. Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning AAAI`2017。
核心創新:更小的卷積以及BN(用於緩解梯度消失問題)
3.1 Inception V1
- Inception 模塊
- Naive version: 疊加多種尺寸的卷積層和池化層,獲取不同尺度的特征,提升網絡對不同尺寸特征的適應性。
- Dimension redutions : 使用1*1 的卷積層來縮減維度(減少channel),形成“瓶頸層”,減少參數。
(不同的特征的尺度是不一樣的)
1*1卷積的作用,調整channel的數量。
跨通道聚合,進一步起到降維(或者升維)的作用,減少參數。
相當於在輸入和輸出之間做一個特征上的全連接,提取非線性的特征。
同時當co < ci 時,維度降低,參數減少。
這里有9個Inception,后面接的是softmax
Softmax輔助分類網絡
上面的圖中有兩個Softmax輔助分類網絡
- 訓練時,讓中間某一層的輸出經過softmax得到分類結果,並按照較小的權重(大概是0.3)加到最終的分類結果中,相當於模型融合.
防止多層神經網絡訓練過程中梯度消失。 - 推理時,softmax輔助分類網絡會被去掉。
作用:可以用來比較深的網絡(可以理解為觀察中間結果怎么樣)。
BN-Incption
- 1 學習VGG使用兩個\(3*3\)的卷積代替\(5*5\)的卷積。
- 2 使用BatchNorm, 並在每個卷積層之后、激活函數之前插入BN層。
normalize
- 在一個batch類不同樣本之間,在激活層的輸入調整為標准正態分布(均值為0,方差為1).
- 激活層輸入分布在激活函數敏感部分,輸入有小的變化就能引起損失函數的較大的反應。避免梯度消失,加快訓練速度。
Scale and shift
這里的γ和β可以調節
- 標准化后的輸入使得網絡的表達能力下降。
- 為保持網絡的表達能力,增加兩個可訓練參數。
不僅僅再是層的調節,現在涉及到batch之間的調節。
####### BatchNorm效果
- BN可替代LRN/Dropout/L2 Normalization
- 可提高收斂速度,訓練速度。
- 可選擇更高的學習率,方便調參。
Inception-v3
- Factorization思想
- 將\(3*3\)的卷積拆分成\(1*3\)和\(3*1\)的卷積。
- 減少參數數量,同時通過非對稱的卷積結構拆分增加特征多樣性。
- 網絡結構
- 將前面三種Iception結構組合起來
- GoogleNet中\(7*7\)的卷積拆分\(3*3\)的卷積
- 卷積層和輔助分類器的全連接層做BN
4 ResNet
- Paper: Deep Residuak Learing for Image Recognition(2015)
- Auther: Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun
- Test: error rate on ImageNet, top5:3.57%(resnet152)
層數深度的革命
問題:卷積層的堆積就能提升圖像分類的准確率嗎?
實驗:分別用20層和56層卷積神經網絡在cifar10數據集上進行訓練和測試,發現更深的網絡的錯誤率更高,在ImageNet數據集上也同樣如此。
- 原因: 梯度消失? NO,使用BN可以有效的緩解梯度的消失;
過擬合? NO,更深的網絡在訓練集上的誤差同樣更高;
神經網絡退化:收斂到極值點而非最值,誤差大。
殘差網絡
算出輸入與輸出的差值,這個建立在BN之上。
殘差塊
- 殘差網絡在訓練時更容易收斂。
在H(x)對x求導時,至少有個1保底。
將殘差塊應用到普通的網絡。
1. 改造VGG得到plain-network。
- plain-network:無跳轉鏈接的普通網絡。
- 基本全部由卷積層構成:filter = \(3*3\), stride = 1, pad = SAME;
- 特征圖的尺寸的減小有stride = 2 的卷積層完成。
- 如果特征圖的尺寸不變,則特征的數量不變;如果特征圖的尺寸減半,則特征圖的數量翻倍。
2.增加跳轉連接得到Renet
- 實線: 特征尺寸和特征數量不變,直接相連。
- 虛線: 特征圖尺寸減半,特征圖數量翻倍。
- 特征圖數量翻倍的兩種方法:
a. 以stride = 2直接取值,不夠的特征補0(不引入額外的參數)
b.以stride = 2,特征數量翻倍的1*1卷積做映射,卷積的權重經過學習得到,會引入額外的參數。