2017CS231n筆記_S5卷積神經網絡

目錄

S5.1歷史

S5.2卷積和池化


S5.1歷史

神經網絡歷史

  • 1957年,Frank RosenBlatt發明了第一代感知機器,首次實現了感知器算法。
  • 1960年,Windrow和Hoff發明了Adaline/Madaline,首次將線性層疊加,整合爲多層感知器網絡。
  • 1986年,Rumelhart首次提出反向傳播算法。接着鏈式法則,更新算法才慢慢出現。
  • 2006年,Hinton和Salakhutdinov合寫了一篇論文《Reinvigorated research in Deep Learning》,論文中表明深度神經網絡可以高效地訓練。
  • 2012年,Geoff. Hinton組利用深度神經網絡進行聲學建模和語音識別。Alex Krizhevsky提出卷積神經網絡AlexNet。該網絡在ImageNet分類大賽中取得了驚人的成績。在此之後,卷積網絡(ConvNets)逐漸得到了廣泛應用。 

卷積神經網絡歷史

  • 1950s,Hubel和Wiesel在貓上做了實驗,試圖弄清楚神經元在視覺皮層的工作原理。
  • 1980年,神經認知機(一種網絡框架模型)被提出,該架構首次把Hubel和Wiesel發現的簡單和複雜細胞概念形成實例。
  • 1998年,LeCun等人首次應用反向傳播和基於梯度的學習方法來訓練卷積神經網絡。相關論文《Gradient-based learning applied to document recognition》。
  •  Alex Krizhevsky提出了一種現代化的卷積神經網絡AlexNet。相關論文《ImageNet Classification with Deep Convolutional Neural Networks》。

卷積神經網絡結構

CNN(Convolutional Neural Networks)能夠保留輸入的空間結構。下圖是典型的CNN結構。

卷積神經網絡應用

卷積網絡(ConvNets)被廣泛應用。例如圖像檢索,圖像分類,目標檢測;圖像分割;自動駕駛汽車領域;人臉識別;視頻分類;姿勢識別;遊戲領域;強化學習;醫學圖像的解釋和診斷;星系分類;路標識別;圖像描述;DeepDream等等。


S5.2卷積和池化

卷積

卷積輸入:1.圖像x,其形狀爲(H,W,D)。其中W,H爲x的長寬,D爲x的深度。2.卷積核filter,其形狀爲(Hf,Wf,D)。其中Hf,Wf爲filter的大小,filter的深度需要與x的深度相等,都爲D。filter對應Hf*Wf的感受野(receptive field)。感受野就是輸入區域。

卷積操作:將filter在x上進行滑動,計算出每一個空間定位時的點積結果。也就是將filter的每個位置元素和與之對應圖像區域region的像素值相乘,即w^{T}x+b,b爲偏置。在進行卷積操作時,還需要設置步長stride,選擇是否選擇填充,使用哪種填充方式,填充值的個數npad等等。

卷積輸出:假設W和H相等,即x的形狀爲(H,H,D)。假設Hf和Wf相等,即filter的形狀爲(Hf,Hf,D)。則卷積輸出y如下圖所示。

是否填充 輸出y的shape
不進行填充 (\frac{(H-Hf)}{stride}+1,\frac{(H-Hf)}{stride}+1,1)
進行填充 (H,H,1)/(\frac{(H+npad*2-Hf)}{stride}+1,\frac{(H+npad*2-Hf)}{stride}+1,1)

填充:一般情況下,爲了使得輸出和輸入的大小相同,在進行卷積操作時會對圖像做填充。如果不進行填充,卷積網絡中輸入圖像的尺寸會迅速縮小(例如在後面的圖中,尺寸從32變爲28,再降低到24)。這種情況是不好的,因爲會損失一些信息。而且,每次圖像變小,其邊角的信息會丟的更多。在進行填充時,可以使用0填充,也可以使用邊緣的像素進行填充。當stride等於1,Hf和Wf相等(卷積網絡中這兩個值通常都相等)時,爲了保證輸入和輸出大小相同,填充值的個數npad應該設置爲(Hf-1)/2,具體的數據對應如下所示:

卷積核Hf*Wf 填充值的個數npad
3*3 1
5*5 2
7*7 3

卷積操作的例子:當輸入數據x(32,32,3),filter(5,5,3),無填充,stride爲1時,輸出y的shape爲(28,28,1),如下圖所示。

卷積層

該層不關注所輸入圖片的全部,而是關注圖像空間的一個局部區域,能夠保存輸入數據的空間結構。

該層的輸入:圖像數據集X(N,H,W,D)。N爲樣本的個數,N和W是圖像的大小,D是圖像的深度。

該層的權重W:一組卷積核filters,其形狀爲(Hf,Wf,D,Num)。Hf和Wf是卷積核的長寬大小。D是卷積核的深度,與輸入數據的深度相等。Num爲卷積核的個數。

該層的操作:卷積層使用多個卷積核,因爲每個卷積核filter(Hf,Wf,D)都可以從輸入數據上得到一種特殊的模式或概念,因此會有一組卷積核。具體操作是,每個卷積核在輸入數據上進行卷積操作,形成一張激活映射圖。Num個卷積核會形成Num張激活映射圖。在進行卷積時,需設置步長stride,選擇是否填充,使用哪種填充方式。

該層的輸出:假設W和H相等,即X的形狀爲(N,H,H,D)。假設Hf和Wf相等,即filters的形狀爲(N,Hf,Hf,D)。則卷積輸出Y如下圖所示。

是否填充 輸出Y的shape
不進行填充 (N,\frac{(H-Hf)}{stride}+1,\frac{(H-Hf)}{stride}+1,Num)
進行填充 (N,H,H,Num)
(N,\frac{(H+npad*2-Hf)}{stride}+1,\frac{(H+npad*2-Hf)}{stride}+1,Num)

該層的可訓練參數個數:每個卷積核有(Hf*Wf*D+1)個參數,其中1爲偏置。有Num個卷積核,因此該層有(Hf*Wf*D+1)*Num個參數。

單個卷積層的例子:其中輸入數據X爲(1,32,32,3),W爲(5,5,3,6)的卷積核。步長爲1,不填充,則該層輸出爲(1,28,28,6)。如下圖所示。

多個卷積層的例子:在卷積網絡中,多個卷積網絡會進行堆疊,在每層卷積之後,會有Relu激活層對其輸出進行處理,如下圖所示。其中輸入數據X爲(1,32,32,3)。

池化

池化是指先對輸入數據進行分區,然後在各個區域中進行某些操作得到一個值,使用這個值來代替該區域。操作有求區域最大值或者求區域平均值等。因此池化有最大池化,平均池化等。二維圖片上的最大池化操作如下圖所示。池化操作需要設置過濾器size和步長stride。常見的參數設置有size爲2*2,stride爲2;或者size爲3*3,stride爲3。在進行池化時,需要設置strde。大部分情況下,不同區域之間不會互相重疊。該層的

池化層

卷積神經網絡中常使用池化層。池化層是指在該層中對數據進行池化操作。使用池化層的原因有二。第一是對數據進行池化能夠降低激活映射的維度,使得更容易操作,因此池化層也可以看作對輸入數據的降採樣操作;第二是池化能夠獨立地操作每個激活映射一般在進行池化時不進行填充操作。需要注意的是,池化只在X的長寬平面進行,不在X的深度上進行,也就是說,在進行池化操作時X的深度不變。常見的池化層有Max Pooling層和Average Pooling層。Max Pooling對輸入數據X進行最大池化操作。Average Pooling對輸入數據X進行最大池化操作。

該層的輸入:X,其形狀爲(N,H,W,D)。其中N爲樣本的個數,N和W是圖像的大小,D是圖像的深度。

該層需要設置的超參數:大小size和步長stride。同樣地,常見的參數設置有size爲2*2,stride爲2;或者size爲3*3,stride爲3。在進行池化時,需要設置strde,使得不同區域之間不會互相重疊。

該層的輸出:Y,其形狀爲(N,\frac{(H-s)}{stride}+1, \frac{(W-s)}{stride}+1,D)。假設size爲2*2,則公式中的s爲2;假設size爲3*3,則公式中的s爲3。

該層的可訓練參數個數:0。

該層的例子:下圖是一個池化層的簡單例子,其中N=1,H和W=224,D=64。

全連接層

該層的輸入:X,其形狀爲(N,L)。N爲輸入樣本的個數,L爲樣本的維數。

該層的權重:設分類任務的類別個數爲C,則該層權重W的形狀爲(C,L)。

該層的操作:在該層使用f=Wx函數,則該層的輸出/激活值爲一個(N,C)的張量。

該層的輸出:Y,其形狀爲(N,C)。

全連接層的例子:如下圖所示。其中N爲1,L爲3072,C爲10。

典型的卷積網絡

卷積網絡(ConvNets)通常由卷積層,池化層和全連接層堆疊而成的,如下圖所示。需要注意的是,在卷積層之後常使用激活函數(例如Relu)對其輸出進行處理。可以看到下圖中每個卷積層之後都使用了Relu激活層。

當ConvNets完成對網絡中所有卷積核的學習後,前幾層的卷積核一般代表了輸入數據的low-level features,比如說一些邊緣特徵。而對於中間的卷積核,它們得到了Mid-level features,例如角點和斑點等。最後的一些卷積核能夠學到了High-level features。這裏給出某個ConvNets經過訓練後,由每個卷積核生成的一些激活映射圖的例子。

ConvNets有兩個趨勢,第一個趨勢是朝更小尺寸卷積核和更深的結構發展;第二個趨勢是完全棄用池化層和全連接層,僅保留卷積層。訓練卷積網絡的演示程序:https://cs.stanford.edu/people/karpathy/convnetjs/demo/cifar10.html。該程序可視化了卷積核和激活映射。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章