1. 程式人生 > >CNN Model小記錄

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

殘差網路就是在網路結構中加入殘差塊。