① 深度學習之卷積神經網路經典模型
LeNet-5模型 在CNN的應用中,文字識別系統所用的LeNet-5模型是非常經典的模型。LeNet-5模型是1998年,Yann LeCun教授提出的,它是第一個成功大規模應用在手寫數字識別問題的卷積神經網路,在MNIST數據集中的正確率可以高達99.2%。
下面詳細介紹一下LeNet-5模型工作的原理。
LeNet-5模型一共有7層,每層包含眾多參數,也就是卷積神經網路中的參數。雖然層數只有7層,這在如今龐大的神經網路中可是說是非常少的了,但是包含了卷積層,池化層,全連接層,可謂麻雀雖小五臟俱全了。為了方便,我們把卷積層稱為C層,下采樣層叫做下采樣層。
首先,輸入層輸入原始圖像,原始圖像被處理成32×32個像素點的值。然後,後面的隱層計在卷積和子抽樣之間交替進行。C1層是卷積層,包含了六個特徵圖。每個映射也就是28x28個神經元。卷積核可以是5x5的十字形,這28×28個神經元共享卷積核權值參數,通過卷積運算,原始信號特徵增強,同時也降低了雜訊,當卷積核不同時,提取到圖像中的特徵不同;C2層是一個池化層,池化層的功能在上文已經介紹過了,它將局部像素值平均化來實現子抽樣。
池化層包含了六個特徵映射,每個映射的像素值為14x14,這樣的池化層非常重要,可以在一定程度上保證網路的特徵被提取,同時運算量也大大降低,減少了網路結構過擬合的風險。因為卷積層與池化層是交替出現的,所以隱藏層的第三層又是一個卷積層,第二個卷積層由16個特徵映射構成,每個特徵映射用於加權和計算的卷積核為10x10的。第四個隱藏層,也就是第二個池化層同樣包含16個特徵映射,每個特徵映射中所用的卷積核是5x5的。第五個隱藏層是用5x5的卷積核進行運算,包含了120個神經元,也是這個網路中卷積運算的最後一層。
之後的第六層便是全連接層,包含了84個特徵圖。全連接層中對輸入進行點積之後加入偏置,然後經過一個激活函數傳輸給輸出層的神經元。最後一層,也就是第七層,為了得到輸出向量,設置了十個神經元來進行分類,相當於輸出一個包含十個元素的一維數組,向量中的十個元素即0到9。
AlexNet模型
AlexNet簡介
2012年Imagenet圖像識別大賽中,Alext提出的alexnet網路模型一鳴驚人,引爆了神經網路的應用熱潮,並且贏得了2012屆圖像識別大賽的冠軍,這也使得卷積神經網路真正意義上成為圖像處理上的核心演算法。上文介紹的LeNet-5出現在上個世紀,雖然是經典,但是迫於種種復雜的現實場景限制,只能在一些領域應用。不過,隨著SVM等手工設計的特徵的飛速發展,LeNet-5並沒有形成很大的應用狀況。隨著ReLU與dropout的提出,以及GPU帶來算力突破和互聯網時代大數據的爆發,卷積神經網路帶來歷史的突破,AlexNet的提出讓深度學習走上人工智慧的最前端。
圖像預處理
AlexNet的訓練數據採用ImageNet的子集中的ILSVRC2010數據集,包含了1000類,共1.2百萬的訓練圖像,50000張驗證集,150000張測試集。在進行網路訓練之前我們要對數據集圖片進行預處理。首先我們要將不同解析度的圖片全部變成256x256規格的圖像,變換方法是將圖片的短邊縮放到 256像素值,然後截取長邊的中間位置的256個像素值,得到256x256大小的圖像。除了對圖片大小進行預處理,還需要對圖片減均值,一般圖像均是由RGB三原色構成,均值按RGB三分量分別求得,由此可以更加突出圖片的特徵,更方便後面的計算。
此外,對了保證訓練的效果,我們仍需對訓練數據進行更為嚴苛的處理。在256x256大小的圖像中,截取227x227大小的圖像,在此之後對圖片取鏡像,這樣就使得原始數據增加了(256-224)x(256-224)x2= 2048倍。最後對RGB空間做PCA,然後對主成分做(0,0.1)的高斯擾動,結果使錯誤率下降1%。對測試數據而言,抽取以圖像4個角落的大小為224224的圖像,中心的224224大小的圖像以及它們的鏡像翻轉圖像,這樣便可以獲得10張圖像,我們便可以利用softmax進行預測,對所有預測取平均作為最終的分類結果。
ReLU激活函數
之前我們提到常用的非線性的激活函數是sigmoid,它能夠把輸入的連續實值全部確定在0和1之間。但是這帶來一個問題,當一個負數的絕對值很大時,那麼輸出就是0;如果是絕對值非常大的正數,輸出就是1。這就會出現飽和的現象,飽和現象中神經元的梯度會變得特別小,這樣必然會使得網路的學習更加困難。此外,sigmoid的output的值並不是0為均值,因為這會導致上一層輸出的非0均值信號會直接輸入到後一層的神經元上。所以AlexNet模型提出了ReLU函數,公式:f(x)=max(0,x)f(x)=max(0,x)。
用ReLU代替了Sigmoid,發現使用 ReLU 得到的SGD的收斂速度會比 sigmoid快很多,這成了AlexNet模型的優勢之一。
Dropout
AlexNet模型提出了一個有效的模型組合方式,相比於單模型,只需要多花費一倍的時間,這種方式就做Dropout。在整個神經網路中,隨機選取一半的神經元將它們的輸出變成0。這種方式使得網路關閉了部分神經元,減少了過擬合現象。同時訓練的迭代次數也得以增加。當時一個GTX580 GPU只有3GB內存,這使得大規模的運算成為不可能。但是,隨著硬體水平的發展,當時的GPU已經可以實現並行計算了,並行計算之後兩塊GPU可以互相通信傳輸數據,這樣的方式充分利用了GPU資源,所以模型設計利用兩個GPU並行運算,大大提高了運算效率。
模型分析
AlexNet模型共有8層結構,其中前5層為卷積層,其中前兩個卷積層和第五個卷積層有池化層,其他卷積層沒有。後面3層為全連接層,神經元約有六十五萬個,所需要訓練的參數約六千萬個。
圖片預處理過後,進過第一個卷積層C1之後,原始的圖像也就變成了55x55的像素大小,此時一共有96個通道。模型分為上下兩塊是為了方便GPU運算,48作為通道數目更加適合GPU的並行運算。上圖的模型里把48層直接變成了一個面,這使得模型看上去更像一個立方體,大小為55x55x48。在後面的第二個卷積層C2中,卷積核的尺寸為5x5x48,由此再次進行卷積運算。在C1,C2卷積層的卷積運算之後,都會有一個池化層,使得提取特徵之後的特徵圖像素值大大減小,方便了運算,也使得特徵更加明顯。而第三層的卷積層C3又是更加特殊了。第三層卷積層做了通道的合並,將之前兩個通道的數據再次合並起來,這是一種串接操作。第三層後,由於串接,通道數變成256。全卷積的卷積核尺寸也就變成了13×13×25613×13×256。一個有4096個這樣尺寸的卷積核分別對輸入圖像做4096次的全卷積操作,最後的結果就是一個列向量,一共有4096個數。這也就是最後的輸出,但是AlexNet最終是要分1000個類,所以通過第八層,也就是全連接的第三層,由此得到1000個類輸出。
Alexnet網路中各個層發揮了不同的作用,ReLU,多個CPU是為了提高訓練速度,重疊pool池化是為了提高精度,且不容易產生過擬合,局部歸一化響應是為了提高精度,而數據增益與dropout是為了減少過擬合。
VGG net
在ILSVRC-2014中,牛津大學的視覺幾何組提出的VGGNet模型在定位任務第一名和分類任務第一名[[i]]。如今在計算機視覺領域,卷積神經網路的良好效果深得廣大開發者的喜歡,並且上文提到的AlexNet模型擁有更好的效果,所以廣大從業者學習者試圖將其改進以獲得更好地效果。而後來很多人經過驗證認為,AlexNet模型中所謂的局部歸一化響應浪費了計算資源,但是對性能卻沒有很大的提升。VGG的實質是AlexNet結構的增強版,它側重強調卷積神經網路設計中的深度。將卷積層的深度提升到了19層,並且在當年的ImageNet大賽中的定位問題中獲得了第一名的好成績。整個網路向人們證明了我們是可以用很小的卷積核取得很好地效果,前提是我們要把網路的層數加深,這也論證了我們要想提高整個神經網路的模型效果,一個較為有效的方法便是將它的深度加深,雖然計算量會大大提高,但是整個復雜度也上升了,更能解決復雜的問題。雖然VGG網路已經誕生好幾年了,但是很多其他網路上效果並不是很好地情況下,VGG有時候還能夠發揮它的優勢,讓人有意想不到的收獲。
與AlexNet網路非常類似,VGG共有五個卷積層,並且每個卷積層之後都有一個池化層。當時在ImageNet大賽中,作者分別嘗試了六種網路結構。這六種結構大致相同,只是層數不同,少則11層,多達19層。網路結構的輸入是大小為224*224的RGB圖像,最終將分類結果輸出。當然,在輸入網路時,圖片要進行預處理。
VGG網路相比AlexNet網路,在網路的深度以及寬度上做了一定的拓展,具體的卷積運算還是與AlexNet網路類似。我們主要說明一下VGG網路所做的改進。第一點,由於很多研究者發現歸一化層的效果並不是很好,而且佔用了大量的計算資源,所以在VGG網路中作者取消了歸一化層;第二點,VGG網路用了更小的3x3的卷積核,而兩個連續的3x3的卷積核相當於5x5的感受野,由此類推,三個3x3的連續的卷積核也就相當於7x7的感受野。這樣的變化使得參數量更小,節省了計算資源,將資源留給後面的更深層次的網路。第三點是VGG網路中的池化層特徵池化核改為了2x2,而在AlexNet網路中池化核為3x3。這三點改進無疑是使得整個參數運算量下降,這樣我們在有限的計算平台上能夠獲得更多的資源留給更深層的網路。由於層數較多,卷積核比較小,這樣使得整個網路的特徵提取效果很好。其實由於VGG的層數較多,所以計算量還是相當大的,卷積層比較多成了它最顯著的特點。另外,VGG網路的拓展性能比較突出,結構比較簡潔,所以它的遷移性能比較好,遷移到其他數據集的時候泛化性能好。到現在為止,VGG網路還經常被用來提出特徵。所以當現在很多較新的模型效果不好時,使用VGG可能會解決這些問題。
GoogleNet
谷歌於2014年Imagenet挑戰賽(ILSVRC14)憑借GoogleNet再次斬獲第一名。這個通過增加了神經網路的深度和寬度獲得了更好地效果,在此過程中保證了計算資源的不變。這個網路論證了加大深度,寬度以及訓練數據的增加是現有深度學習獲得更好效果的主要方式。但是增加尺寸可能會帶來過擬合的問題,因為深度與寬度的加深必然會帶來過量的參數。此外,增加網路尺寸也帶來了對計算資源侵佔過多的缺點。為了保證計算資源充分利用的前提下去提高整個模型的性能,作者使用了Inception模型,這個模型在下圖中有展示,可以看出這個有點像金字塔的模型在寬度上使用並聯的不同大小的卷積核,增加了卷積核的輸出寬度。因為使用了較大尺度的卷積核增加了參數。使用了1*1的卷積核就是為了使得參數的數量最少。
Inception模塊
上圖表格為網路分析圖,第一行為卷積層,輸入為224×224×3 ,卷積核為7x7,步長為2,padding為3,輸出的維度為112×112×64,這裡面的7x7卷積使用了 7×1 然後 1×7 的方式,這樣便有(7+7)×64×3=2,688個參數。第二行為池化層,卷積核為3×33×3,滑動步長為2,padding為 1 ,輸出維度:56×56×64,計算方式:1/2×(112+2×1?3+1)=56。第三行,第四行與第一行,第二行類似。第 5 行 Inception mole中分為4條支線,輸入均為上層產生的 28×28×192 結果:第 1 部分,1×1 卷積層,輸出大小為28×28×64;第 2 部分,先1×1卷積層,輸出大小為28×28×96,作為輸入進行3×3卷積層,輸出大小為28×28×128;第 3部分,先1×1卷積層,輸出大小為28×28×32,作為輸入進行3×3卷積層,輸出大小為28×28×32;而第3 部分3×3的池化層,輸出大小為輸出大小為28×28×32。第5行的Inception mole會對上面是個結果的輸出結果並聯,由此增加網路寬度。
ResNet
2015年ImageNet大賽中,MSRA何凱明團隊的ResialNetworks力壓群雄,在ImageNet的諸多領域的比賽中上均獲得了第一名的好成績,而且這篇關於ResNet的論文Deep Resial Learning for Image Recognition也獲得了CVPR2016的最佳論文,實至而名歸。
上文介紹了的VGG以及GoogleNet都是增加了卷積神經網路的深度來獲得更好效果,也讓人們明白了網路的深度與廣度決定了訓練的效果。但是,與此同時,寬度與深度加深的同時,效果實際會慢慢變差。也就是說模型的層次加深,錯誤率提高了。模型的深度加深,以一定的錯誤率來換取學習能力的增強。但是深層的神經網路模型犧牲了大量的計算資源,學習能力提高的同時不應當產生比淺層神經網路更高的錯誤率。這個現象的產生主要是因為隨著神經網路的層數增加,梯度消失的現象就越來越明顯。所以為了解決這個問題,作者提出了一個深度殘差網路的結構Resial:
上圖就是殘差網路的基本結構,可以看出其實是增加了一個恆等映射,將原本的變換函數H(x)轉換成了F(x)+x。示意圖中可以很明顯看出來整個網路的變化,這樣網路不再是簡單的堆疊結構,這樣的話便很好地解決了由於網路層數增加而帶來的梯度原來越不明顯的問題。所以這時候網路可以做得很深,到目前為止,網路的層數都可以上千層,而能夠保證很好地效果。並且,這樣的簡單疊加並沒有給網路增加額外的參數跟計算量,同時也提高了網路訓練的效果與效率。
在比賽中,為了證明自己觀點是正確的,作者控制變數地設計幾個實驗。首先作者構建了兩個plain網路,這兩個網路分別為18層跟34層,隨後作者又設計了兩個殘差網路,層數也是分別為18層和34層。然後對這四個模型進行控制變數的實驗觀察數據量的變化。下圖便是實驗結果。實驗中,在plain網路上觀測到明顯的退化現象。實驗結果也表明,在殘差網路上,34層的效果明顯要好於18層的效果,足以證明殘差網路隨著層數增加性能也是增加的。不僅如此,殘差網路的在更深層的結構上收斂性能也有明顯的提升,整個實驗大為成功。
除此之外,作者還做了關於shortcut方式的實驗,如果殘差網路模塊的輸入輸出維度不一致,我們如果要使維度統一,必須要對維數較少的進行増維。而增維的最好效果是用0來填充。不過實驗數據顯示三者差距很小,所以線性投影並不是特別需要。使用0來填充維度同時也保證了模型的復雜度控制在比較低的情況下。
隨著實驗的深入,作者又提出了更深的殘差模塊。這種模型減少了各個層的參數量,將資源留給更深層數的模型,在保證復雜度很低的情況下,模型也沒有出現梯度消失很明顯的情況,因此目前模型最高可達1202層,錯誤率仍然控製得很低。但是層數如此之多也帶來了過擬合的現象,不過諸多研究者仍在改進之中,畢竟此時的ResNet已經相對於其他模型在性能上遙遙領先了。
殘差網路的精髓便是shortcut。從一個角度來看,也可以解讀為多種路徑組合的一個網路。如下圖:
ResNet可以做到很深,但是從上圖中可以體會到,當網路很深,也就是層數很多時,數據傳輸的路徑其實相對比較固定。我們似乎也可以將其理解為一個多人投票系統,大多數梯度都分布在論文中所謂的effective path上。
DenseNet
在Resnet模型之後,有人試圖對ResNet模型進行改進,由此便誕生了ResNeXt模型。
這是對上面介紹的ResNet模型結合了GoogleNet中的inception模塊思想,相比於Resnet來說更加有效。隨後,誕生了DenseNet模型,它直接將所有的模塊連接起來,整個模型更加簡單粗暴。稠密相連成了它的主要特點。
我們將DenseNet與ResNet相比較:
從上圖中可以看出,相比於ResNet,DenseNet參數量明顯減少很多,效果也更加優越,只是DenseNet需要消耗更多的內存。
總結
上面介紹了卷積神經網路發展史上比較著名的一些模型,這些模型非常經典,也各有優勢。在算力不斷增強的現在,各種新的網路訓練的效率以及效果也在逐漸提高。從收斂速度上看,VGG>Inception>DenseNet>ResNet,從泛化能力來看,Inception>DenseNet=ResNet>VGG,從運算量看來,Inception<DenseNet< ResNet<VGG,從內存開銷來看,Inception<ResNet< DenseNet<VGG。在本次研究中,我們對各個模型均進行了分析,但從效果來看,ResNet效果是最好的,優於Inception,優於VGG,所以我們第四章實驗中主要採用谷歌的Inception模型,也就是GoogleNet。
② 卷積神經網路
一般由卷積層,匯聚層,和全連接層交叉堆疊而成,使用反向傳播演算法進行訓練(反向傳播,再重新看一下)
卷積神經網路有三個結構上的特性:局部連接,權重共享以及子采樣
濾波器filter 卷積核convolution kernel
局部連接,其實就是根據時間,權重遞減 最後為0 參數就傳播不到遠處了
局部連接 乘以 濾波器 得特徵映射
互相關,是一個衡量兩個序列相關性的函數,
互相關和卷積的區別在於 卷積核僅僅是否進行翻轉,因此互相關也可以稱為 不翻轉卷積
使用卷積 是為了進行特徵抽取,卷積核 是否進行翻轉和其特徵抽取的能力無關。
當卷積核是可以學習的參數,卷積和互相關是等價的,因此,其實兩者差不多。
Tips:P是代表特徵映射
③ 卷積神經網路為什麼適合圖像處理
神經網路的本質就在於做信息形式的變換,而要想做數據的處理,首要解決的問題就是如何將數據張量化,問題就在於卷積神經網路要處理的數據必須是向量形式,對於圖像這種數據類型來說,如果將其展開成一維的向量,且不說得到向量的維數過高,網路太深導致網路中參數太多,圖像中的空間信息也會丟失。
而卷積神經網路能夠用卷積的方式從原信息中提取"部分特定的信息(信息跟卷積核相關)",且對於二維的圖像來說是原生支持的(不需要處理),這就保留了圖像中的空間信息,而空間信息是具有可平移性質的.。
並且卷積神經網路的參數就只是卷積核的參數以及偏置(Bias),而卷積核的參數可以做到共享,卷積核也可以用多個,從多個角度對原圖像解讀。
這就是卷積神經網路的幾個特點:局部感知,參數共享,多核,平移不變性正是因為這些特點,在圖像領域處理上,卷積神經網路取代了人工神經網路。
卷積神經網路 (CNN) 是當今最流行的模型之一。這種神經網路計算模型使用多層感知器的變體,並包含一個或多個可以完全連接或池化的卷積層。這些卷積層創建了記錄圖像區域的特徵圖,該區域最終被分成矩形並發送出去進行非線性處理。
優點:
圖像識別問題的非常高的准確性。自動檢測重要特徵,無需任何人工監督。權重共享。
缺點:
CNN 不對物體的位置和方向進行編碼。缺乏對輸入數據空間不變的能力。需要大量的訓練數據。
④ 卷積神經網路
關於花書中卷積網路的筆記記錄於 https://www.jianshu.com/p/5a3c90ea0807 。
卷積神經網路(Convolutional Neural Network,CNN或ConvNet)是一種具有 局部連接、權重共享 等特性的深層前饋神經網路。卷積神經網路是受生物學上感受野的機制而提出。 感受野(Receptive Field) 主要是指聽覺、視覺等神經系統中一些神經元的特性,即 神經元只接受其所支配的刺激區域內的信號 。
卷積神經網路最早是主要用來處理圖像信息。如果用全連接前饋網路來處理圖像時,會存在以下兩個問題:
目前的卷積神經網路一般是由卷積層、匯聚層和全連接層交叉堆疊而成的前饋神經網路,使用反向傳播演算法進行訓練。 卷積神經網路有三個結構上的特性:局部連接,權重共享以及匯聚 。這些特性使卷積神經網路具有一定程度上的平移、縮放和旋轉不變性。
卷積(Convolution)是分析數學中一種重要的運算。在信號處理或圖像處理中,經常使用一維或二維卷積。
一維卷積經常用在信號處理中,用於計算信號的延遲累積。假設一個信號發生器每個時刻t 產生一個信號 ,其信息的衰減率為 ,即在 個時間步長後,信息為原來的 倍。假設 ,那麼在時刻t收到的信號 為當前時刻產生的信息和以前時刻延遲信息的疊加:
我們把 稱為 濾波器(Filter)或卷積核(Convolution Kernel) 。假設濾波器長度為 ,它和一個信號序列 的卷積為:
信號序列 和濾波器 的卷積定義為:
一般情況下濾波器的長度 遠小於信號序列長度 ,下圖給出一個一維卷積示例,濾波器為 :
二維卷積經常用在圖像處理中。因為圖像為一個兩維結構,所以需要將一維卷積進行擴展。給定一個圖像 和濾波器 ,其卷積為:
下圖給出一個二維卷積示例:
注意這里的卷積運算並不是在圖像中框定卷積核大小的方框並將各像素值與卷積核各個元素相乘並加和,而是先把卷積核旋轉180度,再做上述運算。
在圖像處理中,卷積經常作為特徵提取的有效方法。一幅圖像在經過卷積操作後得到結果稱為 特徵映射(Feature Map) 。
最上面的濾波器是常用的高斯濾波器,可以用來對圖像進行 平滑去噪 ;中間和最下面的過濾器可以用來 提取邊緣特徵 。
在機器學習和圖像處理領域,卷積的主要功能是在一個圖像(或某種特徵)上滑動一個卷積核(即濾波器),通過卷積操作得到一組新的特徵。在計算卷積的過程中,需要進行卷積核翻轉(即上文提到的旋轉180度)。 在具體實現上,一般會以互相關操作來代替卷積,從而會減少一些不必要的操作或開銷。
互相關(Cross-Correlation)是一個衡量兩個序列相關性的函數,通常是用滑動窗口的點積計算來實現 。給定一個圖像 和卷積核 ,它們的互相關為:
互相關和卷積的區別僅在於卷積核是否進行翻轉。因此互相關也可以稱為不翻轉卷積 。當卷積核是可學習的參數時,卷積和互相關是等價的。因此,為了實現上(或描述上)的方便起見,我們用互相關來代替卷積。事實上,很多深度學習工具中卷積操作其實都是互相關操作。
在卷積的標準定義基礎上,還可以引入濾波器的 滑動步長 和 零填充 來增加卷積多樣性,更靈活地進行特徵抽取。
濾波器的步長(Stride)是指濾波器在滑動時的時間間隔。
零填充(Zero Padding)是在輸入向量兩端進行補零。
假設卷積層的輸入神經元個數為 ,卷積大小為 ,步長為 ,神經元兩端各填補 個零,那麼該卷積層的神經元數量為 。
一般常用的卷積有以下三類:
因為卷積網路的訓練也是基於反向傳播演算法,因此我們重點關注卷積的導數性質:
假設 。
, , 。函數 為一個標量函數。
則由 有:
可以看出, 關於 的偏導數為 和 的卷積 :
同理得到:
當 或 時, ,即相當於對 進行 的零填充。從而 關於 的偏導數為 和 的寬卷積 。
用互相關的「卷積」表示,即為(注意 寬卷積運算具有交換性性質 ):
在全連接前饋神經網路中,如果第 層有 個神經元,第 層有 個神經元,連接邊有 個,也就是權重矩陣有 個參數。當 和 都很大時,權重矩陣的參數非常多,訓練的效率會非常低。
如果採用卷積來代替全連接,第 層的凈輸入 為第 層活性值 和濾波器 的卷積,即:
根據卷積的定義,卷積層有兩個很重要的性質:
由於局部連接和權重共享,卷積層的參數只有一個m維的權重 和1維的偏置 ,共 個參數。參數個數和神經元的數量無關。此外,第 層的神經元個數不是任意選擇的,而是滿足 。
卷積層的作用是提取一個局部區域的特徵,不同的卷積核相當於不同的特徵提取器。
特徵映射(Feature Map)為一幅圖像(或其它特徵映射)在經過卷積提取到的特徵,每個特徵映射可以作為一類抽取的圖像特徵。 為了提高卷積網路的表示能力,可以在每一層使用多個不同的特徵映射,以更好地表示圖像的特徵。
在輸入層,特徵映射就是圖像本身。如果是灰度圖像,就是有一個特徵映射,深度 ;如果是彩色圖像,分別有RGB三個顏色通道的特徵映射,深度 。
不失一般性,假設一個卷積層的結構如下:
為了計算輸出特徵映射 ,用卷積核 分別對輸入特徵映射 進行卷積,然後將卷積結果相加,並加上一個標量偏置 得到卷積層的凈輸入 再經過非線性激活函數後得到輸出特徵映射 。
在輸入為 ,輸出為 的卷積層中,每個輸出特徵映射都需要 個濾波器以及一個偏置。假設每個濾波器的大小為 ,那麼共需要 個參數。
匯聚層(Pooling Layer)也叫子采樣層(Subsampling Layer),其作用是進行特徵選擇,降低特徵數量,並從而減少參數數量。
常用的匯聚函數有兩種:
其中 為區域 內每個神經元的激活值。
可以看出,匯聚層不但可以有效地減少神經元的數量,還可以使得網路對一些小的局部形態改變保持不變性,並擁有更大的感受野。
典型的匯聚層是將每個特徵映射劃分為 大小的不重疊區域,然後使用最大匯聚的方式進行下采樣。匯聚層也可以看做是一個特殊的卷積層,卷積核大小為 ,步長為 ,卷積核為 函數或 函數。過大的采樣區域會急劇減少神經元的數量,會造成過多的信息損失。
一個典型的卷積網路是由卷積層、匯聚層、全連接層交叉堆疊而成。
目前常用卷積網路結構如圖所示,一個卷積塊為連續 個卷積層和 個匯聚層( 通常設置為 , 為 或 )。一個卷積網路中可以堆疊 個連續的卷積塊,然後在後面接著 個全連接層( 的取值區間比較大,比如 或者更大; 一般為 )。
目前,整個網路結構 趨向於使用更小的卷積核(比如 和 )以及更深的結構(比如層數大於50) 。此外,由於卷積的操作性越來越靈活(比如不同的步長),匯聚層的作用變得也越來越小,因此目前比較流行的卷積網路中, 匯聚層的比例也逐漸降低,趨向於全卷積網路 。
在全連接前饋神經網路中,梯度主要通過每一層的誤差項 進行反向傳播,並進一步計算每層參數的梯度。在卷積神經網路中,主要有兩種不同功能的神經層:卷積層和匯聚層。而參數為卷積核以及偏置,因此 只需要計算卷積層中參數的梯度。
不失一般性,第 層為卷積層,第 層的輸入特徵映射為 ,通過卷積計算得到第 層的特徵映射凈輸入 ,第 層的第 個特徵映射凈輸入
由 得:
同理可得,損失函數關於第 層的第 個偏置 的偏導數為:
在卷積網路中,每層參數的梯度依賴其所在層的誤差項 。
卷積層和匯聚層中,誤差項的計算有所不同,因此我們分別計算其誤差項。
第 層的第 個特徵映射的誤差項 的具體推導過程如下:
其中 為第 層使用的激活函數導數, 為上采樣函數(upsampling),與匯聚層中使用的下采樣操作剛好相反。如果下采樣是最大匯聚(max pooling),誤差項 中每個值會直接傳遞到上一層對應區域中的最大值所對應的神經元,該區域中其它神經元的誤差項的都設為0。如果下采樣是平均匯聚(meanpooling),誤差項 中每個值會被平均分配到上一層對應區域中的所有神經元上。
第 層的第 個特徵映射的誤差項 的具體推導過程如下:
其中 為寬卷積。
LeNet-5雖然提出的時間比較早,但是是一個非常成功的神經網路模型。基於LeNet-5 的手寫數字識別系統在90年代被美國很多銀行使用,用來識別支票上面的手寫數字。LeNet-5 的網路結構如圖:
不計輸入層,LeNet-5共有7層,每一層的結構為:
AlexNet是第一個現代深度卷積網路模型,其首次使用了很多現代深度卷積網路的一些技術方法,比如採用了ReLU作為非線性激活函數,使用Dropout防止過擬合,使用數據增強來提高模型准確率等。AlexNet 贏得了2012 年ImageNet 圖像分類競賽的冠軍。
AlexNet的結構如圖,包括5個卷積層、3個全連接層和1個softmax層。因為網路規模超出了當時的單個GPU的內存限制,AlexNet 將網路拆為兩半,分別放在兩個GPU上,GPU間只在某些層(比如第3層)進行通訊。
AlexNet的具體結構如下:
在卷積網路中,如何設置卷積層的卷積核大小是一個十分關鍵的問題。 在Inception網路中,一個卷積層包含多個不同大小的卷積操作,稱為Inception模塊。Inception網路是由有多個inception模塊和少量的匯聚層堆疊而成 。
v1版本的Inception模塊,採用了4組平行的特徵抽取方式,分別為1×1、3× 3、5×5的卷積和3×3的最大匯聚。同時,為了提高計算效率,減少參數數量,Inception模塊在進行3×3、5×5的卷積之前、3×3的最大匯聚之後,進行一次1×1的卷積來減少特徵映射的深度。如果輸入特徵映射之間存在冗餘信息, 1×1的卷積相當於先進行一次特徵抽取 。
⑤ (7)卷積神經網路的基本結構
卷積神經網路主要結構有:卷積層、池化層、和全連接層。通過堆疊這些層結構形成一個卷積神經網路。將原始圖像轉化為類別得分,其中卷積層和全連接層擁有參數,激活層和池化層沒有參數。參數更新通過反向傳播實現。
(1)卷積層
卷積核是一系列的濾波器,用來提取某一種特徵
我們用它來處理一個圖片,當圖像特徵與過濾器表示的特徵相似時,卷積操作可以得到一個比較大的值。
當圖像特徵與過濾器不相似時,卷積操作可以得到一個比較小的值,實際上,卷積的結果特徵映射圖顯示的是對應卷積核所代表的特徵在原始特徵圖上的分布情況。
每個濾波器在空間上(寬度和高度)都比較小,但是深度和輸入數據保持一致(特徵圖的通道數),當卷積核在原圖像滑動時,會生成一個二維激活圖,激活圖上每個空間位置代表原圖像對該卷積核的反應。每個卷積層,會有一整個集合的卷積核,有多少個卷積核,輸出就有多少個通道。每個卷積核生成一個特徵圖,這些特徵圖堆疊起來組成整個輸出結果。
卷積核體現了參數共享和局部連接的模式。每個卷積核的大小代表了一個感受野的大小。
卷積後的特徵圖大小為(W-F+2*P)/s+1 ;P 為填充 s 為步長
(2)池化層
池化層本質上是下采樣,利用圖像局部相關性的原理(認為最大值或者均值代表了這個局部的特徵),對圖像進行子抽樣,可以減少數據處理量同時保留有用信息。這里池化有平均池化,L2範式池化,最大池化,經過實踐,最大池化的效果要好於平均池化(平均池化一般放在卷積神經網路的最後一層),最大池化有利於保存紋理信息,平均池化有利於保存背景信息。實際上(因為信息損失的原因)我們可以看到,通過在卷積時使用更大的步長也可以縮小特徵映射的尺寸,並不一定要用池化,有很多人不建議使用池化層。32*32在5*5卷積核步長為1下可得到28*28。
池化操作可以逐漸降低數據體的空間尺寸,這樣的話就能減少網路中參數的數量,使得計算資源耗費變少,也能有效控制過擬合。
(3)全連接層
通過全連接層將特徵圖轉化為類別輸出。全連接層不止一層,在這個過程中為了防止過擬合會引入DropOut。最新研究表明,在進入全連接層之前,使用全局平均池化可以有效降低過擬合。
(4)批歸一化BN——Batch Normal
隨著神經網路訓練的進行,每個隱層的參數變化使得後一層的輸入發生變化,從而每一批的訓練數據的分布也隨之改變,致使網路在每次迭代中都需要擬合不同的數據分布,增大訓練復雜度和過擬合的風險,只能採用較小的學習率去解決。
通常卷積層後就是BN層加Relu。BN已經是卷積神經網路中的一個標准技術。標准化的過程是可微的,因此可以將BN應用到每一層中做前向和反向傳播,同在接在卷積或者全連接層後,非線性層前。它對於不好的初始化有很強的魯棒性,同時可以加快網路收斂速度。
(5)DropOut
Dropout對於某一層神經元,通過定義的概率來隨機刪除一些神經元,同時保持輸入層與輸出層神經元的個數不變,然後按照神經網路的學習方法進行參數更新,下一次迭代中,重新隨機刪除一些神經元,直至訓練結束。
(6)softmax層
Softmax層也不屬於CNN中單獨的層,一般要用CNN做分類的話,我們習慣的方式是將神經元的輸出變成概率的形式,Softmax就是做這個的: 。顯然Softmax層所有的輸出相加為1,按照這個概率的大小確定到底屬於哪一類。