CNN总结
-
-
- 一、 CNN結構演化歷史的圖
- 二、 AlexNet網絡
-
- 2.1 ReLU 非線性激活函數
- 多GPU訓練(Training on Multiple GPUs)
- 局部響應歸一化(Local Response Normalization)
- 重疊池化(Overlapping Pooling)
- 2.2 降低過擬合( Reducing Overfitting)
- 數據增強(Data Augmentation)
- Dropout
- 2.1 ReLU 非線性激活函數
-
- 三、VGG網絡
-
- VGG 網絡 卷積層組合 詳解
-
- 四、GoogleLeNet網絡
-
- Inception V1網絡(NIN結構)
- Inception V2、V3、V4
-
- 五、ResNet 網絡
-
?
原文地址:https://blog.csdn.net/wsp_1138886114/article/details/81386422#%E4%B8%89vgg%E7%BD%91%E7%BB%9C
一、 CNN結構演化歷史的圖
二、 AlexNet網絡
Deep Learning模型大名鼎鼎的AlexNet模型
使用梯度下降法的多層網絡可以從大量的數據中學習復雜的,高緯,非線性的映射,這使得他們成為圖像識別任務的首選。 全連接的多層網絡可以作為分類器。
首先,圖像是非常大的,由很多像素組成。具有100個隱藏單元的全連接網絡包含成千上萬的權重。為了解決系統的消耗和內存占用問題,在下面描述的卷積神經網絡中,位移不變性(shift invariance)可以通過權值共享實現。
全連接的網絡的另一個缺點就是完全忽略了輸入的拓撲結構。在不影響訓練的結果的情況下,輸入圖像可以是任意的順序。CNN通過將隱藏結點的感受野限制在局部來提取特征。
CNN通過局部感受野(local receptive fields),權值共享(shared weights),下采樣(sub-sampling)實現位移,縮放,和形變的不變性(shift,scale,distortion invariance)。
卷積層的核就是特征圖中所有單元使用的一組連接權重。卷積層的一個重要特性是如果輸入圖像發生了位移,特征圖會發生相應的位移,否則特征圖保持不變。這個特性是CNN對位移和形變保持魯棒的基礎。?
一旦計算出feature map,那么精確的位置就變得不重要了,相對于其他特征的大概位置是才是相關的。
在特征圖中降低特征位置的精度的方式是降低特征圖的空間分辨率,這個可以通過下采樣層達到,下采樣層通過求局部平均降低特征圖的分辨率,并且降低了輸出對平移和形變的敏感度。
2.1 ReLU 非線性激活函數
通常這種標準函數是?。在梯度下降訓練時間上,這些飽和的非線性函數比不飽和非線性函數f(x)=max(0,x)更慢。下圖這種非線性特征的神經元稱為修正線性單元(ReLUs: Rectified Linear Units)。使用ReLUs的深度卷積神經網絡訓練速度比同樣情況下使用tanh單元的速度快好幾倍。?
ReLUs主要是對訓練集的擬合進行加速。快速學習對由大規模數據集上訓練出大模型的性能有相當大的影響。
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
多GPU訓練(Training on Multiple GPUs)
- 本文中的網絡使用兩個GPU。當前的GPU都能很方便地進行交叉GPU并行,因為它們可以直接相互讀寫內存,而不用經過主機內存。
- 技巧:設定只有某些層才能進行GPU之間的通信。這就意味著,例如第三層的輸入為第二層的所有特征圖。但是,第四層的輸入僅僅是第三層在同一GPU上的特征圖。在交叉驗證時,連接模式的選擇是一個問題,而這個也恰好允許我們精確地調整通信的數量,直到他占計算數量的一個合理比例。
局部響應歸一化(Local Response Normalization)
- ReLUs具有符合本文要求的一個性質:它不需要對輸入進行歸一化來防止飽和。?
只要一些訓練樣本產生一個正輸入給一個ReLU,那么在那個神經元中學習就會開始。?
但是,我們還是發現如下的局部標準化方案有助于增加泛化性能。
重疊池化(Overlapping Pooling)
- CNNs中的池化層歸納了同一個核特征圖中的相鄰神經元組的輸出。通常,由鄰接池化單元歸納的鄰域并不重疊。更確切地說,一個池化層可以被看作是包含了每間隔S個像素的池化單元的柵格組成,每一個都歸納了以池化單元為中心大小為Z x Z的鄰域。
- 如果令S=Z,將會得到CNNs通常采用的局部池化。若令S<Z,則得到重疊池。
第一層卷積層使用96個大小為11x11x3的卷積核對224x224x3的輸入圖像以4個像素為步長(這是核特征圖中相鄰神經元感受域中心之間的距離)進行濾波。?
第二層卷積層將第一層卷積層的輸出(經過響應歸一化和池化)作為輸入,并使用256個大小為5x5x48的核對它進行濾波。?
第三層、第四層和第五層的卷積層在沒有任何池化或者歸一化層介于其中的情況下相互連接。?
第三層卷積層有384個大小為3x3x256的核與第二層卷積層的輸出(已歸一化和池化)相連。?
第四層卷積層有384個大小為3x3x192的核,第五層卷積層有256個大小為 的核。每個全連接層有4096個神經元。?
?
圖2 本文CNN的結構圖示,明確地描述了兩個GPU之間的職責。一個GPU運行圖上方的層,另一個運行圖下方的層。兩個GPU只在特定的層通信。網絡的輸入是150,528維的,網絡剩余層中的神經元數目分別是253440,186624,64896,64896,43264,4096,4096,1000
2.2 降低過擬合( Reducing Overfitting)
數據增強(Data Augmentation)
-
方法1:生成平移圖像和水平翻轉圖像。做法就是從256x256的圖像中提取隨機的224x224大小的塊(以及它們的水平翻轉),然后基于這些提取的塊訓練網絡。softmax層對這十個塊做出的預測取均值。
-
方法2:改變訓練圖像的RGB通道的強度。特別的,本文對整個ImageNet訓練集的RGB像素值進行了PCA。對每一幅訓練圖像,本文加上多倍的主成分,倍數的值為相應的特征值乘以一個均值為0標準差為0.1的高斯函數產生的隨機變量。
Dropout
- 它將每一個隱藏神經元的輸出以50%的概率設為0。這些以這種方式被“踢出”的神經元不會參加前向傳遞,也不會加入反向傳播。因此每次有輸入時,神經網絡采樣一個不同的結構,但是所有這些結構都共享權值。這個技術降低了神經元之間復雜的聯合適應性。 Dropout方法和數據增強一樣,都是防止過擬合的。Dropout應該算是AlexNet中一個很大的創新
三、VGG網絡
VGG 網絡是由conv、pool、fc、softmax層組成。VGG網絡的卷積層,沒有縮小圖片,每層pad都是有值的,圖片縮小都是由pool來實現的。
其中絕大多數的參數都是來自于第一個全連接層。?
VGG 網絡 卷積層組合 詳解
- 首先,多個卷積層與非線性的激活層交替的結構,比單一卷積層的結構更能提取出深層的更好的特征。
- 其次,假設所有的數據有C個通道,那么單獨的7x7卷積層將會包含7*7*C=49C2個參數; 而3個3x3的卷積層的組合僅有個3*(3*3*C)=27C2個參數。?
小濾波器的卷積層組合,可以表達出輸入數據中更多個強力特征,使用的參數也更少?。 - 唯一的不足是,在進行反向傳播時,中間的卷積層可能會導致占用更多的內存。
四、GoogleLeNet網絡
1 . GoogLeNet采用了模塊化的結構,方便增添和修改; 2 . 網絡最后采用了average pooling來代替全連接層,想法來自NIN,事實證明可以將TOP1 accuracy提高0.6%。 3 . 雖然移除了全連接,但是網絡中依然使用了Dropout ; 4 . 為了避免梯度消失,網絡額外增加了2個輔助的softmax用于向前傳導梯度。 文章中說這兩個輔助的分類器的loss應該加一個衰減系數,但看caffe中的model也沒有加任何衰減。 此外,實際測試的時候,這兩個額外的softmax會被去掉。- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
Inception V1網絡(NIN結構)
核心組件是Inception Architecture(稀疏連接結構)
Split-Merge —> 有1X1卷積,3x3卷積,5X5卷積和3X3池化。?
增加網絡對多尺度的適應性:輸出通道多尺寸(感受野)化。增加網絡寬度。?
Bottleneck Layer 使用NIN的1X1卷積進行特征降維,大幅降低參數量和計算量。?
減少近10倍的計算量(NiN理念),進而保證網絡能夠更深
取消了全連接:
本質上是一個全尺寸的卷積層?
全連接層參數量大,為了減負取消,全連接主要用于推斷用?
由全局平均池化替換(Global average pooling)?
從V1開始之后都取消了全連接層?
輔助分類器:解決前幾層的梯度消失問題?
最后一層為全尺寸的卷積層?
4種操作并行進行,各自提取對應特征
Inception V2、V3、V4
inception V2
其實在網絡上沒有什么改動,只是在輸入的時候增加了batch_normal,訓練起來收斂更快,學習起來自然更高效,可以減少dropout的使用。?
進行了歸一化:保證出現過的最大值為1,最小值為0,所有輸出保證在0~1之間。
inception V3
把googlenet里一些7*7的卷積變成了1*7和7*1的兩層串聯,3*3的也一樣,變成了1*3和3*1,這樣加速了計算,還增加了網絡的非線性,減小過擬合的概率。另外,網絡的輸入從224改成了299.
inception v4
實際上是把原來的inception加上了resnet的方法,從一個節點能夠跳過一些節點直接連入之后的一些節點,并且殘差也跟著過去一個。用來提高速度的。?
另外就是V4把一個先1*1再3*3那步換成了先3*3再1*1.
五、ResNet 網絡
借鑒了Highway Network思想的網絡 (殘差網絡) 在2015名聲大噪,而且影響了2016年DL在學術界和工業界的發展方向。?
該相當于旁邊專門開個通道使得輸入可以直達輸出,而優化的目標由原來的擬合輸出H(x)變成輸出和輸入的差H(x)-x,其中H(X)是某一層原始的的期望映射輸出,x是輸入。?
?
它對每層的輸入做一個reference, 學習形成殘差函數, 而不是學習一些沒有reference的函數。這種殘差函數更容易優化,能使網絡層數大大加深。
ResNet學習的是殘差函數F(x) = H(x) - x, 這里如果F(x) = 0, 那么就是上面提到的恒等映射。?
事實上,resnet是“shortcut connections”的在connections是在恒等映射下的特殊情況,它沒有引入額外的參數和計算復雜度。?
假如優化目標函數是逼近一個恒等映射, 而不是0映射, 那么學習找到對恒等映射的擾動會比重新學習一個映射函數要容易。?
從圖可以看出,殘差函數一般會有較小的響應波動,表明恒等映射是一個合理的預處理。?
實驗證明,這個殘差塊往往需要兩層以上,單單一層的殘差塊(y=W1x+x)并不能起到提升作用。?
考慮計算的成本,對殘差塊做了計算優化,即將兩個3x3的卷積層替換為1x1 + 3x3 + 1x1, 如下圖。?
新結構中的中間3x3的卷積層首先在一個降維1x1卷積層下減少了計算,然后在另一個1x1的卷積層下做了還原,既保持了精度又減少了計算量。?
| 初入江湖 | 2012 | 2014 | 2014 | 2015 |
| 層數 | 8 | 19 | 22 | 152 |
| Top-5錯誤 | 16.4% | 7.3% | 6.7% | 3.57% |
| Data Augmentation | + | + | + | + |
| Inception(NIN) | – | – | + | – |
| 卷積層數 | 5 | 16 | 21 | 151 |
| 卷積核大小 | 11,5,3 | 3 | 7,1,3,5 | 7,1,3,5 |
| 全連接層數 | 3 | 3 | 1 | 1 |
| 全連接層大小 | 4096,4096,1000 | 4096,4096,1000 | 1000 | 1000 |
| Dropout | + | + | + | + |
| Local Response Normalization | + | – | + | – |
| Batch Normalization | – | – | – | + |
?
https://blog.csdn.net/mao_feng/article/details/52734438?
https://www.cnblogs.com/52machinelearning/p/5821591.html?
文獻:?
Gradient-Based Learning Applied to Document?
Recognition?
ImageNet Classification with Deep Convolutional?
Neural Networks
總結
- 上一篇: 【原】[webkit移动开发笔记]之如何
- 下一篇: Linux 搭建Sphinx 全文检索引