導航:首頁 > 網路營銷 > 卷積神經網路有哪些新的模型

卷積神經網路有哪些新的模型

發布時間:2022-12-27 07:21:15

A. 構建ResNet卷積神經網路

2015年,微軟亞洲研究院的何凱明團隊發布了一種特殊的卷積神經網路——殘差神經網路(ResNet)。在殘差神經網路出現之前,最深的深度神經網路只有二三十層左右,這該神經網路卻可以在實驗中輕松達到上百層甚至上千層,另外不會佔用過多訓練時間,也正因如此,圖像識別准確率有了顯著增強。此模型更是在同年的ImageNet大賽中,獲得圖像分類、定位、檢測三個項目的冠軍。在國際大賽上取得如此優異的成績,證明了殘差神經網路是個實用性強且優異的模型。在本研究中的貓狗二分類的實驗中,也是基於殘差神經網路來構建分類模型的。
在本文中我們將把kaggle貓狗數據集應用於ResNet-18和ResNet-50網路模型。使用Resnet來探究當前使用卷積神經網路的准確率。如圖4-1為ResNet的經典網路結構圖——ResNet-18。

ResNet-18都是由BasicBlock組成,從圖4-2也可得知50層及以上的ResNet網路模型由BottleBlock組成。在我們就需要將我們預處理過的數據集放入現有的Resnet-18和ResNet-50模型中去訓練,首先我們通過前面提到的圖像預處理把訓練圖像裁剪成一個96x96的正方形尺寸,然後輸入到我們的模型中,這里就介紹一下ResNet-18的網路模型的結構,因為ResNet50與第五章的ResNet-34模型結構相仿。
ResNet-18的模型結構為:首先第一層是一個7×7的卷積核,輸入特徵矩陣為[112,112,64],經過卷積核64,stride為2得到出入特徵矩陣[56,56,64]。第二層一開始是由一個3×3的池化層組成的,接著是2個殘差結構,一開始的輸入的特徵矩陣為[56,56,64],需要輸出的特徵矩陣shape為[28,28,128], 然而主分支與shortcut的輸出特徵矩陣shape必須相同,所以[56,56,64]這個特徵矩陣的高和寬從56通過主分支的stride為2來縮減為原來的一半即為28,再通過128個卷積核來改變特徵矩陣的深度。然而這里的shortcut加上了一個1x1的卷積核,stride也為2,通過這個stride,輸入的特徵矩陣的寬和高也縮減為原有的一半,同時通過128個卷積核將輸入的特徵矩陣的深度也變為了128。第三層,有2個殘差結構,輸入的特徵矩陣shape是[28,28,128],輸出特徵矩陣shape是[14,14,256], 然而主分支與shortcut的輸出特徵矩陣shape必須相同,所以[14,14,256]這個特徵矩陣的高和寬從14通過主分支的stride為2來縮減為原來的一半即為7,再通過128個卷積核來改變特徵矩陣的深度。然而這里的shortcut加上了一個1×1的卷積核,stride也為2,通過這個stride,輸入的特徵矩陣的寬和高也縮減為原有的一半,同時通過256個卷積核將輸入的特徵矩陣的深度也變為了256。第四層,有2個殘差結構,經過上述的相同的變化過程得到輸出的特徵矩陣為[7,7,512]。第五層,有2個殘差結構, 經過上述的相同的變化過程得到輸出的特徵矩陣為[1,1,512]。接著是平均池化和全連接層。

B. 卷積神經網路

一般由卷積層,匯聚層,和全連接層交叉堆疊而成,使用反向傳播演算法進行訓練(反向傳播,再重新看一下)
卷積神經網路有三個結構上的特性:局部連接,權重共享以及子采樣

濾波器filter 卷積核convolution kernel
局部連接,其實就是根據時間,權重遞減 最後為0 參數就傳播不到遠處了

局部連接 乘以 濾波器 得特徵映射

互相關,是一個衡量兩個序列相關性的函數,
互相關和卷積的區別在於 卷積核僅僅是否進行翻轉,因此互相關也可以稱為 不翻轉卷積
使用卷積 是為了進行特徵抽取,卷積核 是否進行翻轉和其特徵抽取的能力無關。
當卷積核是可以學習的參數,卷積和互相關是等價的,因此,其實兩者差不多。

Tips:P是代表特徵映射

C. 深度學習之卷積神經網路經典模型

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。

D. 一文看懂卷積神經網路-CNN(基本原理+獨特價值+實際應用)

在 CNN 出現之前,圖像對於人工智慧來說是一個難題,有2個原因:

圖像需要處理的數據量太大,導致成本很高,效率很低

圖像在數字化的過程中很難保留原有的特徵,導致圖像處理的准確率不高

下面就詳細說明一下這2個問題:

圖像是由像素構成的,每個像素又是由顏色構成的。

現在隨隨便便一張圖片都是 1000×1000 像素以上的, 每個像素都有RGB 3個參數來表示顏色信息。

假如我們處理一張 1000×1000 像素的圖片,我們就需要處理3百萬個參數!

1000×1000×3=3,000,000

這么大量的數據處理起來是非常消耗資源的,而且這只是一張不算太大的圖片!

卷積神經網路 – CNN 解決的第一個問題就是「將復雜問題簡化」,把大量參數降維成少量參數,再做處理。

更重要的是:我們在大部分場景下,降維並不會影響結果。比如1000像素的圖片縮小成200像素,並不影響肉眼認出來圖片中是一隻貓還是一隻狗,機器也是如此。

圖片數字化的傳統方式我們簡化一下,就類似下圖的過程:

假如有圓形是1,沒有圓形是0,那麼圓形的位置不同就會產生完全不同的數據表達。但是從視覺的角度來看, 圖像的內容(本質)並沒有發生變化,只是位置發生了變化 。

所以當我們移動圖像中的物體,用傳統的方式的得出來的參數會差異很大!這是不符合圖像處理的要求的。

而 CNN 解決了這個問題,他用類似視覺的方式保留了圖像的特徵,當圖像做翻轉,旋轉或者變換位置時,它也能有效的識別出來是類似的圖像。

那麼卷積神經網路是如何實現的呢?在我們了解 CNN 原理之前,先來看看人類的視覺原理是什麼

深度學習的許多研究成果,離不開對大腦認知原理的研究,尤其是視覺原理的研究。

1981 年的諾貝爾醫學獎,頒發給了 David Hubel(出生於加拿大的美國神經生物學家) 和TorstenWiesel,以及 Roger Sperry。前兩位的主要貢獻,是「 發現了視覺系統的信息處理 」,可視皮層是分級的。

人類的視覺原理如下:從原始信號攝入開始(瞳孔攝入像素 Pixels),接著做初步處理(大腦皮層某些細胞發現邊緣和方向),然後抽象(大腦判定,眼前的物體的形狀,是圓形的),然後進一步抽象(大腦進一步判定該物體是只氣球)。下面是人腦進行人臉識別的一個示例:

對於不同的物體,人類視覺也是通過這樣逐層分級,來進行認知的:

我們可以看到,在最底層特徵基本上是類似的,就是各種邊緣,越往上,越能提取出此類物體的一些特徵(輪子、眼睛、軀乾等),到最上層,不同的高級特徵最終組合成相應的圖像,從而能夠讓人類准確的區分不同的物體。

那麼我們可以很自然的想到:可以不可以模仿人類大腦的這個特點,構造多層的神經網路,較低層的識別初級的圖像特徵,若干底層特徵組成更上一層特徵,最終通過多個層級的組合,最終在頂層做出分類呢?

答案是肯定的,這也是許多深度學習演算法(包括CNN)的靈感來源。

典型的 CNN 由3個部分構成:

卷積層

池化層

全連接層

如果簡單來描述的話:

卷積層負責提取圖像中的局部特徵;池化層用來大幅降低參數量級(降維);全連接層類似傳統神經網路的部分,用來輸出想要的結果。

下面的原理解釋為了通俗易懂,忽略了很多技術細節,如果大家對詳細的原理感興趣,可以看這個視頻《 卷積神經網路基礎 》。

卷積層的運算過程如下圖,用一個卷積核掃完整張圖片:

這個過程我們可以理解為我們使用一個過濾器(卷積核)來過濾圖像的各個小區域,從而得到這些小區域的特徵值。

在具體應用中,往往有多個卷積核,可以認為,每個卷積核代表了一種圖像模式,如果某個圖像塊與此卷積核卷積出的值大,則認為此圖像塊十分接近於此卷積核。如果我們設計了6個卷積核,可以理解:我們認為這個圖像上有6種底層紋理模式,也就是我們用6中基礎模式就能描繪出一副圖像。以下就是25種不同的卷積核的示例:

總結:卷積層的通過卷積核的過濾提取出圖片中局部的特徵,跟上面提到的人類視覺的特徵提取類似。

池化層簡單說就是下采樣,他可以大大降低數據的維度。其過程如下:

上圖中,我們可以看到,原始圖片是20×20的,我們對其進行下采樣,采樣窗口為10×10,最終將其下采樣成為一個2×2大小的特徵圖。

之所以這么做的原因,是因為即使做完了卷積,圖像仍然很大(因為卷積核比較小),所以為了降低數據維度,就進行下采樣。

總結:池化層相比卷積層可以更有效的降低數據維度,這么做不但可以大大減少運算量,還可以有效的避免過擬合。

這個部分就是最後一步了,經過卷積層和池化層處理過的數據輸入到全連接層,得到最終想要的結果。

經過卷積層和池化層降維過的數據,全連接層才能」跑得動」,不然數據量太大,計算成本高,效率低下。

典型的 CNN 並非只是上面提到的3層結構,而是多層結構,例如 LeNet-5 的結構就如下圖所示:

卷積層 – 池化層- 卷積層 – 池化層 – 卷積層 – 全連接層

在了解了 CNN 的基本原理後,我們重點說一下 CNN 的實際應用有哪些

卷積神經網路 – CNN 很擅長處理圖像。而視頻是圖像的疊加,所以同樣擅長處理視頻內容。下面給大家列一些比較成熟的應用�:

圖像分類、檢索

圖像分類是比較基礎的應用,他可以節省大量的人工成本,將圖像進行有效的分類。對於一些特定領域的圖片,分類的准確率可以達到 95%+,已經算是一個可用性很高的應用了。

典型場景:圖像搜索…

目標定位檢測

可以在圖像中定位目標,並確定目標的位置及大小。

典型場景:自動駕駛、安防、醫療…

目標分割

簡單理解就是一個像素級的分類。

他可以對前景和背景進行像素級的區分、再高級一點還可以識別出目標並且對目標進行分類。

典型場景:美圖秀秀、視頻後期加工、圖像生成…

人臉識別

人臉識別已經是一個非常普及的應用了,在很多領域都有廣泛的應用。

典型場景:安防、金融、生活…

骨骼識別

骨骼識別是可以識別身體的關鍵骨骼,以及追蹤骨骼的動作。

典型場景:安防、電影、圖像視頻生成、游戲…

今天我們介紹了 CNN 的價值、基本原理和應用場景,簡單總結如下:

CNN 的價值:

能夠將大數據量的圖片有效的降維成小數據量(並不影響結果)

能夠保留圖片的特徵,類似人類的視覺原理

CNN 的基本原理:

卷積層 – 主要作用是保留圖片的特徵

池化層 – 主要作用是把數據降維,可以有效的避免過擬合

全連接層 – 根據不同任務輸出我們想要的結果

CNN 的實際應用:

圖片分類、檢索

目標定位檢測

目標分割

人臉識別

骨骼識別

本文首發在 easyAI - 人工智慧知識庫

《 一文看懂卷積神經網路-CNN(基本原理+獨特價值+實際應用) 》

E. 神經網路:卷積神經網路(CNN)

神經網路 最早是由心理學家和神經學家提出的,旨在尋求開發和測試神經的計算模擬。

粗略地說, 神經網路 是一組連接的 輸入/輸出單元 ,其中每個連接都與一個 權 相關聯。在學習階段,通過調整權值,使得神經網路的預測准確性逐步提高。由於單元之間的連接,神經網路學習又稱 連接者學習。

神經網路是以模擬人腦神經元的數學模型為基礎而建立的,它由一系列神經元組成,單元之間彼此連接。從信息處理角度看,神經元可以看作是一個多輸入單輸出的信息處理單元,根據神經元的特性和功能,可以把神經元抽象成一個簡單的數學模型。

神經網路有三個要素: 拓撲結構、連接方式、學習規則

神經網路的拓撲結構 :神經網路的單元通常按照層次排列,根據網路的層次數,可以將神經網路分為單層神經網路、兩層神經網路、三層神經網路等。結構簡單的神經網路,在學習時收斂的速度快,但准確度低。

神經網路的層數和每層的單元數由問題的復雜程度而定。問題越復雜,神經網路的層數就越多。例如,兩層神經網路常用來解決線性問題,而多層網路就可以解決多元非線性問題

神經網路的連接 :包括層次之間的連接和每一層內部的連接,連接的強度用權來表示。

根據層次之間的連接方式,分為:

1)前饋式網路:連接是單向的,上層單元的輸出是下層單元的輸入,如反向傳播網路,Kohonen網路

2)反饋式網路:除了單項的連接外,還把最後一層單元的輸出作為第一層單元的輸入,如Hopfield網路

根據連接的范圍,分為:

1)全連接神經網路:每個單元和相鄰層上的所有單元相連

2)局部連接網路:每個單元只和相鄰層上的部分單元相連

神經網路的學習

根據學習方法分:

感知器:有監督的學習方法,訓練樣本的類別是已知的,並在學習的過程中指導模型的訓練

認知器:無監督的學習方法,訓練樣本類別未知,各單元通過競爭學習。

根據學習時間分:

離線網路:學習過程和使用過程是獨立的

在線網路:學習過程和使用過程是同時進行的

根據學習規則分:

相關學習網路:根據連接間的激活水平改變權系數

糾錯學習網路:根據輸出單元的外部反饋改變權系數

自組織學習網路:對輸入進行自適應地學習

摘自《數學之美》對人工神經網路的通俗理解:

神經網路種類很多,常用的有如下四種:

1)Hopfield網路,典型的反饋網路,結構單層,有相同的單元組成

2)反向傳播網路,前饋網路,結構多層,採用最小均方差的糾錯學習規則,常用於語言識別和分類等問題

3)Kohonen網路:典型的自組織網路,由輸入層和輸出層構成,全連接

4)ART網路:自組織網路

深度神經網路:

Convolutional Neural Networks(CNN)卷積神經網路

Recurrent neural Network(RNN)循環神經網路

Deep Belief Networks(DBN)深度信念網路

深度學習是指多層神經網路上運用各種機器學習演算法解決圖像,文本等各種問題的演算法集合。深度學習從大類上可以歸入神經網路,不過在具體實現上有許多變化。

深度學習的核心是特徵學習,旨在通過分層網路獲取分層次的特徵信息,從而解決以往需要人工設計特徵的重要難題。

Machine Learning vs. Deep Learning 

神經網路(主要是感知器)經常用於 分類

神經網路的分類知識體現在網路連接上,被隱式地存儲在連接的權值中。

神經網路的學習就是通過迭代演算法,對權值逐步修改的優化過程,學習的目標就是通過改變權值使訓練集的樣本都能被正確分類。

神經網路特別適用於下列情況的分類問題:

1) 數據量比較小,缺少足夠的樣本建立模型

2) 數據的結構難以用傳統的統計方法來描述

3) 分類模型難以表示為傳統的統計模型

缺點:

1) 需要很長的訓練時間,因而對於有足夠長訓練時間的應用更合適。

2) 需要大量的參數,這些通常主要靠經驗確定,如網路拓撲或「結構」。

3)  可解釋性差 。該特點使得神經網路在數據挖掘的初期並不看好。

優點:

1) 分類的准確度高

2)並行分布處理能力強

3)分布存儲及學習能力高

4)對噪音數據有很強的魯棒性和容錯能力

最流行的基於神經網路的分類演算法是80年代提出的 後向傳播演算法 。後向傳播演算法在多路前饋神經網路上學習。 

定義網路拓撲

在開始訓練之前,用戶必須說明輸入層的單元數、隱藏層數(如果多於一層)、每一隱藏層的單元數和輸出層的單元數,以確定網路拓撲。

對訓練樣本中每個屬性的值進行規格化將有助於加快學習過程。通常,對輸入值規格化,使得它們落入0.0和1.0之間。

離散值屬性可以重新編碼,使得每個域值一個輸入單元。例如,如果屬性A的定義域為(a0,a1,a2),則可以分配三個輸入單元表示A。即,我們可以用I0 ,I1 ,I2作為輸入單元。每個單元初始化為0。如果A = a0,則I0置為1;如果A = a1,I1置1;如此下去。

一個輸出單元可以用來表示兩個類(值1代表一個類,而值0代表另一個)。如果多於兩個類,則每個類使用一個輸出單元。

隱藏層單元數設多少個「最好」 ,沒有明確的規則。

網路設計是一個實驗過程,並可能影響准確性。權的初值也可能影響准確性。如果某個經過訓練的網路的准確率太低,則通常需要採用不同的網路拓撲或使用不同的初始權值,重復進行訓練。

後向傳播演算法學習過程:

迭代地處理一組訓練樣本,將每個樣本的網路預測與實際的類標號比較。

每次迭代後,修改權值,使得網路預測和實際類之間的均方差最小。

這種修改「後向」進行。即,由輸出層,經由每個隱藏層,到第一個隱藏層(因此稱作後向傳播)。盡管不能保證,一般地,權將最終收斂,學習過程停止。

演算法終止條件:訓練集中被正確分類的樣本達到一定的比例,或者權系數趨近穩定。

後向傳播演算法分為如下幾步:

1) 初始化權

網路的權通常被初始化為很小的隨機數(例如,范圍從-1.0到1.0,或從-0.5到0.5)。

每個單元都設有一個偏置(bias),偏置也被初始化為小隨機數。

2) 向前傳播輸入

對於每一個樣本X,重復下面兩步:

向前傳播輸入,向後傳播誤差

計算各層每個單元的輸入和輸出。輸入層:輸出=輸入=樣本X的屬性;即,對於單元j,Oj = Ij = Xj。隱藏層和輸出層:輸入=前一層的輸出的線性組合,即,對於單元j, Ij =wij Oi + θj,輸出=

3) 向後傳播誤差

計算各層每個單元的誤差。

輸出層單元j,誤差:

Oj是單元j的實際輸出,而Tj是j的真正輸出。

隱藏層單元j,誤差:

wjk是由j到下一層中單元k的連接的權,Errk是單元k的誤差

更新 權 和 偏差 ,以反映傳播的誤差。

權由下式更新:

 其中,△wij是權wij的改變。l是學習率,通常取0和1之間的值。

 偏置由下式更新:

  其中,△θj是偏置θj的改變。

Example

人類視覺原理:

深度學習的許多研究成果,離不開對大腦認知原理的研究,尤其是視覺原理的研究。1981 年的諾貝爾醫學獎,頒發給了 David Hubel(出生於加拿大的美國神經生物學家) 和Torsten Wiesel,以及Roger Sperry。前兩位的主要貢獻,是「發現了視覺系統的信息處理」, 可視皮層是分級的 。

人類的視覺原理如下:從原始信號攝入開始(瞳孔攝入像素Pixels),接著做初步處理(大腦皮層某些細胞發現邊緣和方向),然後抽象(大腦判定,眼前的物體的形狀,是圓形的),然後進一步抽象(大腦進一步判定該物體是只氣球)。

對於不同的物體,人類視覺也是通過這樣逐層分級,來進行認知的:

在最底層特徵基本上是類似的,就是各種邊緣,越往上,越能提取出此類物體的一些特徵(輪子、眼睛、軀乾等),到最上層,不同的高級特徵最終組合成相應的圖像,從而能夠讓人類准確的區分不同的物體。

可以很自然的想到:可以不可以模仿人類大腦的這個特點,構造多層的神經網路,較低層的識別初級的圖像特徵,若干底層特徵組成更上一層特徵,最終通過多個層級的組合,最終在頂層做出分類呢?答案是肯定的,這也是許多深度學習演算法(包括CNN)的靈感來源。

卷積神經網路是一種多層神經網路,擅長處理圖像特別是大圖像的相關機器學習問題。卷積網路通過一系列方法,成功將數據量龐大的圖像識別問題不斷降維,最終使其能夠被訓練。

CNN最早由Yann LeCun提出並應用在手寫字體識別上。LeCun提出的網路稱為LeNet,其網路結構如下:

這是一個最典型的卷積網路,由 卷積層、池化層、全連接層 組成。其中卷積層與池化層配合,組成多個卷積組,逐層提取特徵,最終通過若干個全連接層完成分類。

CNN通過卷積來模擬特徵區分,並且通過卷積的權值共享及池化,來降低網路參數的數量級,最後通過傳統神經網路完成分類等任務。

降低參數量級:如果使用傳統神經網路方式,對一張圖片進行分類,那麼,把圖片的每個像素都連接到隱藏層節點上,對於一張1000x1000像素的圖片,如果有1M隱藏層單元,一共有10^12個參數,這顯然是不能接受的。

但是在CNN里,可以大大減少參數個數,基於以下兩個假設:

1)最底層特徵都是局部性的,也就是說,用10x10這樣大小的過濾器就能表示邊緣等底層特徵

2)圖像上不同小片段,以及不同圖像上的小片段的特徵是類似的,也就是說,能用同樣的一組分類器來描述各種各樣不同的圖像

基於以上兩個假設,就能把第一層網路結構簡化

用100個10x10的小過濾器,就能夠描述整幅圖片上的底層特徵。

卷積運算的定義如下圖所示:

如上圖所示,一個5x5的圖像,用一個3x3的 卷積核 :

   101

   010

   101

來對圖像進行卷積操作(可以理解為有一個滑動窗口,把卷積核與對應的圖像像素做乘積然後求和),得到了3x3的卷積結果。

這個過程可以理解為使用一個過濾器(卷積核)來過濾圖像的各個小區域,從而得到這些小區域的特徵值。在實際訓練過程中, 卷積核的值是在學習過程中學到的。

在具體應用中,往往有多個卷積核,可以認為, 每個卷積核代表了一種圖像模式 ,如果某個圖像塊與此卷積核卷積出的值大,則認為此圖像塊十分接近於此卷積核。如果設計了6個卷積核,可以理解為這個圖像上有6種底層紋理模式,也就是用6種基礎模式就能描繪出一副圖像。以下就是24種不同的卷積核的示例:

池化 的過程如下圖所示:

可以看到,原始圖片是20x20的,對其進行采樣,采樣窗口為10x10,最終將其采樣成為一個2x2大小的特徵圖。

之所以這么做,是因為即使做完了卷積,圖像仍然很大(因為卷積核比較小),所以為了降低數據維度,就進行采樣。

即使減少了許多數據,特徵的統計屬性仍能夠描述圖像,而且由於降低了數據維度,有效地避免了過擬合。

在實際應用中,分為最大值采樣(Max-Pooling)與平均值采樣(Mean-Pooling)。

LeNet網路結構:

注意,上圖中S2與C3的連接方式並不是全連接,而是部分連接。最後,通過全連接層C5、F6得到10個輸出,對應10個數字的概率。

卷積神經網路的訓練過程與傳統神經網路類似,也是參照了反向傳播演算法

第一階段,向前傳播階段:

a)從樣本集中取一個樣本(X,Yp),將X輸入網路;

b)計算相應的實際輸出Op

第二階段,向後傳播階段

a)計算實際輸出Op與相應的理想輸出Yp的差;

b)按極小化誤差的方法反向傳播調整權矩陣。

F. 卷積神經網路之GAN(附完整代碼)

不管何種模型,其損失函數(Loss Function)選擇,將影響到訓練結果質量,是機器學習模型設計的重要部分。對於判別模型,損失函數是容易定義的,因為輸出的目標相對簡單。但對於生成模型,損失函數卻是不容易定義的。
GAN演算法原理:
1)G是一個生成圖片的網路,它接收一個隨機的雜訊z,通過這個雜訊生成圖片,記做G(z)。

3)在最理想的狀態下,G可以生成足以「以假亂真」的圖片G(z)。對於D來說,它難以判定G生成的圖片究竟是不是真實的,因此D(G(z)) = 0.5。

4)這樣目的就達成了:得到了一個生成式的模型G,它可以用來生成圖片。

在訓練過程中,生成網路G的目標就是盡量生成真實的圖片去欺騙判別網路D。而判別網路D的目標就是盡量把G生成的圖片和真實的圖片分別開來。這樣,G和D構成了一個動態的「博弈過程」。

2.再以理論抽象進行說明:

GAN是一種通過對抗過程估計生成模型的新框架。框架中同時訓練兩個模型:捕獲數據分布的生成模型G,和估計樣本來自訓練數據的概率的判別模型D。G的訓練程序是將D錯誤的概率最大化。可以證明在任意函數G和D的空間中,存在唯一的解決方案,使得G重現訓練數據分布,而D=0.5(D判斷不出真假,50%概率,跟拋硬幣決定一樣)。在G和D由多層感知器定義的情況下,整個系統可以用反向傳播進行訓練。在訓練或生成樣本期間,不需要任何馬爾科夫鏈或展開的近似推理網路。實驗通過對生成的樣品的定性和定量評估,證明了GAN框架的潛在優勢。

Goodfellow從理論上證明了該演算法的收斂性。在模型收斂時,生成數據和真實數據具有相同分布,從而保證了模型效果。

GAN公式形式如下:

1)公式中x表示真實圖片,z表示輸入G網路的雜訊,G(z)表示G網路生成的圖片;

2)D(x)表示D網路判斷圖片是否真實的概率,因為x就是真實的,所以對於D來說,這個值越接近1越好。

3)G的目的:D(G(z))是D網路判斷G生成的圖片的是否真實的概率。G應該希望自己生成的圖片「越接近真實越好」。也就是說,G希望D(G(z))盡可能得大,這時V(D, G)會變小。因此公式的最前面記號是min_G。

4)D的目的:D的能力越強,D(x)應該越大,D(G(x))應該越小。這時V(D,G)會變大。因此式子對於D來說是求最大max_D。

GAN訓練過程:

GAN通過隨機梯度下降法來訓練D和G。

1)首先訓練D,D希望V(G, D)越大越好,所以是加上梯度(ascending)

2)然後訓練G時,G希望V(G, D)越小越好,所以是減去梯度(descending);

GAN訓練具體過程如下:

GAN演算法優點:

1)使用了latent code,用以表達latent dimension、控制數據隱含關系等;

2)數據會逐漸統一;

3)不需要馬爾可夫鏈;

4)被認為可以生成最好的樣本(不過沒法鑒定「好」與「不好」);

5)只有反向傳播被用來獲得梯度,學習期間不需要推理;

6)各種各樣的功能可以被納入到模型中;

7)可以表示非常尖銳,甚至退化的分布。

GAN演算法缺點:

1)Pg(x)沒有顯式表示;

2)D在訓練過程中必須與G同步良好;

3)G不能被訓練太多;

4)波茲曼機必須在學習步驟之間保持最新。
GAN的應用范圍較廣,擴展性也強,可應用於圖像生成、數據增強和圖像處理等領域。

1)圖像生成:

目前GAN最常使用的地方就是圖像生成,如超解析度任務,語義分割等。

2)數據增強:

用GAN生成的圖像來做數據增強。主要解決的問題是a)對於小數據集,數據量不足,可以生成一些數據;b)用原始數據訓練一個GAN,GAN生成的數據label不同類別。

GAN生成式對抗網路是一種深度學習模型,是近年來復雜分布上無監督學習最具有前景的方法之一,值得深入研究。GAN生成式對抗網路的模型至少包括兩個模塊:G模型-生成模型和D模型-判別模型。兩者互相博弈學習產生相當好的輸出結果。GAN演算法應用范圍較廣,擴展性也強,可應用於圖像生成、數據增強和圖像處理等領域。

G. 卷積神經網路

關於花書中卷積網路的筆記記錄於 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的卷積相當於先進行一次特徵抽取

H. 何凱明在2015提出的卷積神經網路模型的里程碑的模型是

何凱明在2015提出的卷積神經網路模型的里程碑的模型是ResNet。

卷積神經網路是由Yann LeCun在1989年提出的LeNet中首先被使用,但是由於當時的計算能力不夠,並沒有得到廣泛的應用,到了1998年Yann LeCun及其合作者構建了更加完備的卷積神經網路LeNet-5並在手寫數字的識別問題中取得成功,LeNet-5的成功使卷積神經網路的應用得到關注。

卷積神經網路是近年發展起來的,並引起廣泛重視的一種高效識別方法,20世紀60年代,Hubel和Wiesel在研究貓腦皮層中用於局部敏感和方向選擇的神經元時發現其獨特的網路結構可以有效地降低反饋神經網路的復雜性,繼而提出了卷積神經網路(Convolutional Neural Networks-簡稱CNN)。

I. 【閱讀筆記】改進卷積神經網路的14個小技巧

原文: https://mp.weixin.qq.com/s/Lh_lJNvV9BGhc6no2ln-_g

原題目誤導性太大

1)架構要遵循應用

你也許會被 Google Brain 或者 DeepMind 這些奇特的實驗室所發明的那些耀眼的新模型所吸引,但是其中許多在你的用例或者業務環境中要麼是不可能實現,要麼是實現起來非常不現實。你應該使用對你的特定應用最有意義的模型,這種模型或許比較簡單,但是仍然很強大,例如 VGG。

2)網路路徑的激增

每年的 ImageNet Challenge 的冠軍都會使用比上一屆冠軍更加深層的網路。從 AlexNet 到 Inception,再到 ResNet,Smith 注意到了「網路中路徑數量倍增」的趨勢,並且「ResNet 可以是不同長度的網路的指數集合」。

3)爭取簡單

然而,更大的並不一定是更好的。在名為「Bigger is not necessarily better」的論文中,Springenberg 等人演示了如何用更少的單元實現最先進的結果。參考:https://arxiv.org/pdf/1412.6806.pdf

4)增加對稱性

無論是在建築上,還是在生物上,對稱性被認為是質量和工藝的標志。Smith 將 FractalNet 的優雅歸功於網路的對稱性。

5)金字塔式的形狀

你也許經常在表徵能力和減少冗餘或者無用信息之間權衡。卷積神經網路通常會降低激活函數的采樣,並會增加從輸入層到最終層之間的連接通道。

6)過度訓練

另一個權衡是訓練准確度和泛化能力。用類似 drop-out 或者 drop-path 的方法進行正則化可以提高泛化能力,這是神經網路的重要優勢。請在比你的實際用例更加苛刻的問題下訓練你的網路,以提高泛化性能。

7)全面覆蓋問題空間

為了擴展你的訓練數據和提升泛化能力,請使用雜訊和數據增強,例如隨機旋轉、裁剪和一些圖像操作。

8)遞增的特徵構造

隨著網路結構越來越成功,它們進一部簡化了每一層的「工作」。在非常深層的神經網路中,每一層僅僅會遞增的修改輸入。在 ResNets 中,每一層的輸出和它的輸入時很相似的,這意味著將兩層加起來就是遞增。實踐中,請在 ResNet 中使用較短的跳變長度。

9)標准化層的輸入

標准化是另一個可以使計算層的工作變得更加容易的方法,在實踐中被證明可以提升訓練和准確率。批量標准化(batch normalization)的發明者認為原因在於處理內部的協變數,但是 Smith 認為,「標准化把所有層的輸入樣本放在了一個平等的基礎上(類似於一種單位轉換),這允許反向傳播可以更有效地訓練」。

10)輸入變換

研究表明,在 Wide ResNets 中,性能會隨著連接通道的增加而增強,但是你需要權衡訓練代價與准確度。AlexNet、VGG、Inception 和 ResNets 都在第一層使用了輸入變換以讓輸入數據能夠以多種方式被檢查。

11)可用的資源決指引著層的寬度

然而,可供選擇的輸出數量並不是顯而易見的,這依賴於你的硬體能力以及期望的准確度。

12)Summation Joining

Summation 是一種常用的合並分支的方式。在 ResNets 中,使用總和作為連接的機制可以讓每一個分支都能計算殘差和整體近似。如果輸入跳躍連接一直存在,那麼 summation 會讓每一層學到正確地東西(例如與輸入的差別)。在任何分支都可以被丟棄的網路(例如 FractalNet)中,你應該使用這種方式類保持輸出的平滑。

13)下采樣變換

在池化的時候,利用級聯連接(concatenation joining)來增加輸出的數量。當使用大於 1 的步長時,這會同時處理連接並增加連接通道的數量。

14)用於競爭的 Maxout

Maxout 被用在你只需要選擇一個激活函數的局部競爭網路中。使用求和以及平均值會包含所有的激活函數,所以不同之處在於 maxout 只選擇一個「勝出者」。Maxout 的一個明顯的用例是每個分支具有不同大小的內核,而 Maxout 可以包含尺度不變性。

1)使用調優過的預訓練網路

「如果你的視覺數據和 ImageNet 相似,那麼使用預訓練網路會幫助你學習得更快」,機器學習公司 Diffbot 的 CEO Mike Tung 解釋說。低水平的卷積神經網路通常可以被重復使用,因為它們大多能夠檢測到像線條以及邊緣這些模式。將分類層用你自己的層替換,並且用你特定的數據去訓練最後的幾個層。

2)使用 freeze-drop-path

Drop-path 會在訓練的迭代過程中隨機地刪除一些分支。Smith 測試了一種相反的方法,它被稱為 freeze-path,就是一些路徑的權重是固定的、不可訓練的,而不是整體刪除。因為下一個分支比以前的分支包含更多的層,並且正確的內容更加容易近似得到,所以網路應該會得到更好的准確度。

3)使用循環的學習率

關於學習率的實驗會消耗大量的時間,並且會讓你遇到錯誤。自適應學習率在計算上可能是非常昂貴的,但是循環學習率不會這樣。使用循環學習率(CLR)時,你可以設置一組最大最小邊界,在邊界范圍內改變學習率。Smith 甚至還在論文《Cyclical Learning Rates for Training Neural Networks》中提供了計算學習率的最大值和最小值的方法。參考:https://arxiv.org/pdf/1506.01186.pdf

4)在有雜訊的標簽中使用 bootstrapping 

在現實中,很多數據都是混亂的,標簽都是主觀性的或者是缺失的,而且預測的對象可能是訓練的時候未曾遇到過的。Reed 等人在文章《TRAINING DEEP NEURAL NETWORKS ON NOISY LABELS WITH BOOTSTRAPPING》中描述了一種給網路預測目標注入一致性的方法。直觀地講,這可以奏效,通過使網路利用對環境的已知表示(隱含在參數中)來過濾可能具有不一致的訓練標簽的輸入數據,並在訓練時清理該數據。參考:https://arxiv.org/pdf/1412.6596

5)採用有 Maxout 的 ELU,而不是 ReLU

ELU 是 ReLU 的一個相對平滑的版本,它能加速收斂並提高准確度。與 ReLU 不同,ELU 擁有負值,允許它們以更低的計算復雜度將平均單位激活推向更加接近 0 的值,就像批量標准化一樣參考論文《FAST AND ACCURATE DEEP NETWORK LEARNING BY EXPONENTIAL LINEAR UNITS (ELUS)》,https://arxiv.org/pdf/1511.07289.pdf。如果您使用具有全連接層的 Maxout,它們是特別有效的。

閱讀全文

與卷積神經網路有哪些新的模型相關的資料

熱點內容
網路行為哪些違法 瀏覽:452
中國的移動網路好嗎 瀏覽:401
刮風然後網路異常 瀏覽:501
榮耀手機如何用數據線共享網路 瀏覽:670
獲取不了網路參數怎麼設置 瀏覽:934
無線網路盒插線介面 瀏覽:632
台式在哪裡開啟無線網路 瀏覽:684
區域內找不到無線網路電視 瀏覽:584
網路安全手機發布 瀏覽:673
想學習網路技術哪裡可以學 瀏覽:960
深入學校網路安全講座 瀏覽:258
什麼軟體可以連接滿格網路 瀏覽:947
你的網路密碼設置是否安全 瀏覽:635
如何建設網路生態文明 瀏覽:1001
win10怎麼修改家庭網路 瀏覽:359
移動網路如何轉網 瀏覽:258
機頂盒無信號有網路 瀏覽:195
對講機數字與網路連接不上 瀏覽:836
sci是什麼網路意思 瀏覽:572
虛擬機沒網路怎麼修改 瀏覽:223

友情鏈接