CNN Model小記錄
參考連結:深度學習常用的Data Set資料集和CNN Model總結
一.LeNet-5
時間:1986年,引數大約6萬
網路結構圖:
LeNet-5網路模型(數字識別,2個卷積層,2個池化層,2個全連線層)
其中:C表示卷積層,S表示池化層,F表示全連線層,下標意為影象大小
卷積層:卷積核大小為5*5,步長stride=1
池化層:max pooling,取樣2*2,步長stride=2
第一個卷積層6個filter,第二個卷積層16個filter
第一個全連線FC中有120個神經節點,每個結點有400個輸入特徵,即W=(120,400),b=(120,1),所以最後得到(120,1)。Z=WX+b,X=(400,1)
二.AlexNet
時間:2012年,大約6000萬引數
網路結構圖:
引入GPU,增加特殊層(LRN層,全稱:Local Response Normalization,區域性響應歸一化層),比LeNet-5更深,用多層小卷積層疊加替換單大卷積層,使用Relu啟用函式。
三.ZF
時間:2013年
網路結構圖:
四.GoogleNet
時間:2014年,22層
用更多的卷積,更深的層次可以得到更好的結構
一般的卷積層只是一味增加捲積層的深度,但是在單層上卷積核卻只有一種,比如對於VGG,單層卷積核只有3x3大小的,這樣特徵提取的功能可能就比較弱。GoogLenet想的就是能不能增加單層卷積層的寬度,即在單層卷積層上使用不同尺度的卷積核,這樣尺寸不同的卷積核就可以提取不同尺寸的特徵,單層的特徵提取能力增強了
網路結構圖:
關聯知識:
inception v1
在昂貴的3×3和5×5卷積之前,1×1卷積用來計算降維。除了用來降維之外,它們也包括使用線性修正單元使其兩用。
使用1×1卷積降低計算成本,而輸入輸出不變
eg:
對於原本輸入(28,28,192),經過32個(5,5)filter,進行same卷積,得到(28,28,32)
根據卷積計算過程,最終的結果(28,28,32)中每一個數都需要由一個(5,5,192)fileter與對應的輸入中數字相乘,則需要28×28×32*5×5×192≈1.2億次乘法。
而當在中間加一步,變為:
輸入(28,28,192),經過16個(1,1)filter,得(28,28,16)。再由32個(5,5)filter,進行same卷積,最終結果還為(28,28,32)。此時需要的乘法次數為:
28×28×16*1×1×192≈240萬
28×28×32*5×5×16≈1000萬,合計約1240萬。
該思路主要通過1×1卷積來降低瓶頸層(bottleneck layer),可大大降低計算成本。
inception v2:
Inception v2的網路在v1的基礎上,進行了改進,一方面了加入了BN層,減少了Internal Covariate Shift(內部neuron的資料分佈發生變化),使每一層的輸出都規範化到一個N(0, 1)的高斯,另外一方面學習VGG用2個3x3的conv替代inception模組中的5x5,既降低了引數數量,也加速計算;
inception v3:
使用3×3的已經很小了,那麼更小的2×2呢?2×2雖然能使得引數進一步降低,但是不如另一種方式更加有效,那就是Asymmetric(不對稱)方式,即使用1×3和3×1兩種來代替3×3的卷積核。這種結構在前幾層效果不太好,但對特徵圖大小為12~20的中間層效果明顯。
v3一個最重要的改進是分解(Factorization),將7x7分解成兩個一維的卷積(1x7,7x1),3x3也是一樣(1x3,3x1),這樣的好處,既可以加速計算(多餘的計算能力可以用來加深網路),又可以將1個conv拆成2個conv,使得網路深度進一步增加,增加了網路的非線性,還有值得注意的地方是網路輸入從224x224變為了299x299,更加精細設計了35x35/17x17/8x8的模組。
inception v4:
v4研究了Inception模組結合Residual Connection能不能有改進?發現ResNet的結構可以極大地加速訓練,同時效能也有提升,得到一個Inception-ResNet v2網路,同時還設計了一個更深更優化的Inception v4模型,能達到與Inception-ResNet v2相媲美的效能。
即結合殘差網路ResNet思想。
五.VGG
時間:2014年,版本多,連續conv層多,計算量巨大,VGG-16大約1.38億引數
VGG-16網路結構圖:
六.Deep Residual Learning(Residual Networks,ResNets)
時間:2015年
隨著網路結構的加深,帶來了兩個問題:
一是vanishing/exploding gradient,導致了訓練十分難收斂,這類問題能夠通過normalized initialization 和intermediate normalization layers解決;
另一個是被稱為degradation的退化現象。對合適的深度模型繼續增加層數,模型準確率會下滑(不是overfit造成),training error和test error都會很高。
殘差塊(Residual block)結構圖:
也就是從某一層中獲取啟用,然後迅速反饋給另外一層,甚至是網路的更深層。該過程稱為:shotcut或者skip connection
殘差網路就是在網路結構中加入殘差塊。