『壹』 ResNet網路
ResNet (Resial Neural Network,殘差網路)由微軟研究院何凱明等人提出的,通過在深度神經網路中加入殘差單元(Resial Unit)使得訓練深度比以前更加高效。ResNet在2015年的ILSVRC比賽中奪得冠軍,ResNet的結構可以極快的加速超深神經網路的訓練,模型准確率也有非常大的提升。
在ResNet之前,瑞士教授Schimidhuber提出了Highway Network,其原理與ResNet非常相似。通常認為神經網路的深度對其性能非常重要,但是網路越深訓練越困難,Highway Network的目標就是解決極深的神經網路難以訓練的問題。
Highway Network相當於修改了每一層激活函數,此前激活函數只是對輸入做一次非線性變換y=H(x, Wh), 而Highway Network則允許保留一部分比例的原始輸入x,即y=H(x, Wh)* T(x , Wt)+x*C(x, Wc),其中T為變換系數,C為保留系數,論文中令C=1-T。這樣前面一層的信息,有一定比例可以不經過矩陣乘法和非線性變換,直接傳輸到下一層,彷彿一條信息高速公路,因此得名Highway Network。
結果顯示,B比A略好,這是因為A中的零填充確實沒有殘差學習。而C比B稍好,這是由於投影快捷連接引入了額外參數。但A、B、C之間的細微差異表明投影連接對於解決退化問題不是至關重要的,而不/少使用投影連接可以減少內存/時間復雜性和模型大小。而且無參數恆等快捷連接對於瓶頸架構(3層殘差學習單元)尤為重要,因為瓶頸架構中層具有較小的輸入輸出,快捷連接是連接到兩個高維端,此時恆等快捷連接無需參數,而使用投影的話則會顯示時間和模型復雜度加倍。因此,恆等快捷連接可以為瓶頸設計得到更有效的模型。
最後,作者嘗試了更深的1000層以上的神經網路,發現神經網路仍然能夠較好的學習,但是其測試誤差比100多層的殘差網路要差,而訓練誤差則與100多層的殘差網路相似,作者認為這可能是由於過擬合導致的,可通過加大正則化來解決這一問題。
在ResNet V1中,作者研究通過加入殘差單元使得訓練深度達到上百層的神經網路成為可能,解決了梯度消失/爆炸的問題。而在ResNet V2中作者進一步證明了恆等映射(Identity mapping)的重要性。同時作者還提出了一種新的殘差單元(採用了預激活)使得訓練變得更簡單,同時還提高了模型的泛化能力。
在ResNet V2中,作者提出了不止在殘差單元內部,而是在整個神經網路中都創建了『直接』的計算傳播路徑。在ResNet V1中,殘差學習單元的
上式同樣表明了在一個mini-batch中不可能出現梯度消失的現象,因為上式求導的第二部分對於一個mini-batch來說,不可能所有樣本其導數都為-1,因此,可能會出現權重很小的情況,但是不會出現梯度消失的情況。
通過研究這些不同的快捷連接,作者發現大部分快捷連接方式無法很好地收斂,其中很大部分是由於使用這些快捷連接後或多或少會出現梯度消失或者梯度爆炸的現象,最後結果顯示恆等映射效果最好。
雖然恆等映射在這些方法中表寫結果最好,仍需引起注意的是1×1的卷積捷徑連接引入了更多的參數,本應該比恆等捷徑連接具有更加強大的表達能力。事實上,shortcut-only gating 和1×1的卷積涵蓋了恆等捷徑連接的解空間(即,他們能夠以恆等捷徑連接的形式進行優化)。然而,它們的訓練誤差比恆等捷徑連接的訓練誤差要高得多,這表明了這些模型退化問題的原因是優化問題,而不是表達能力的問題。
在上圖b中,採用先加後BN再激活的方法,此時f(x)就包含了BN和ReLU。這樣的結果比原始a要差。這主要是因為BN層改變了流經快捷連接的信號,阻礙了信息的傳遞。
在c中,ReLU在相加之前,此時f(x)=x,為恆等映射。此時殘差單元中的F(x)輸出經由ReLU後變為非負,然而一個「殘差」函數的輸出應該是(−∞,+∞) 的。造成的結果就是,前向傳遞的信號是單調遞增的。這會影響表達能力,結果也變得更差了。
結果顯示,只使用ReLU預激活(d)的結果與原始ResNet結果很接近,這個與ReLU層不與BN層連接使用,因此無法獲得BN所帶來的好處。而當BN和ReLU都使用在預激活上時(e),結果得到了可觀的提升。
預激活的影響有兩個方面:第一,由於f(x)也是恆等映射,相比於V1優化變得更加簡單;第二,在預激活中使用BN能提高模型的正則化。
對於f(x)為恆等映射的好處:一方面若使用f= ReLU,如果信號是負的時候會造成一定的影響,無法傳遞有用的負信號,而當殘差單元很多時,這個影響將會變得尤為突出;另一方面當f是一個恆等映射時,信號在兩個單元間能夠很直接的傳遞。
在ResNet V1中作者提出了殘差學習單元,並從理論和實驗上證明使用直連的shortcuts有助於解決深度達到上百層的神經網路的訓練問題。而在ResNet V2中作者證明了在shortcuts中使用直接映射(即H(x) = h(x) + F(x)中h(x) = x)得到的效果最好。在ResNext中作者將bottleneck拆分成多個分支,提出了神經網路中的第三個維度(另外兩個維度分別為depth,神經網路層數深度,width,寬度,channel數),命名為 Cardinality ,並在多個數據集中證明了將bottleneck拆分能夠降低訓練錯誤率和提高准確率。
ResNext的靈感來源於VGG/ResNet和Inception:(1)在VGG、ResNet中,作者使用了相同結構的卷積層進行了堆疊,構建了層數很深但是結構簡單的神經網路;(2)而在Inception中,提出了一種叫做 split-transform-merge 的策略,將輸入(採用1x1 卷積核)分裂為幾個低維 embedding,再經過一系列特定卷積層的變換,最後連接在一起。
而在ResNet中,作者將原ResNet bottleneck中的一條path拆分為多個分支(multi branch),以此分支數量提出神經網路中的第三個重要維度——Cardinality。這一想法結合了VGG中的相同結構堆疊和Inception中的split-transform-merge策略,即如上圖所示,每個bottleneck 拆分為多個分支進行堆疊,這些分支的結構相同(這里借鑒了VGG的思想),而具體到分支的結構時又採用了Inception的split-transform-merge策略。與Inception不同的是Inception的每個分支結構都是需要認為的設計,而在ResNext中每個分支結構都相同。最終每個bottleneck的輸出就變成了:
這些所有的bottlenecks結構都遵循兩個原則:
作者提出了 三種效果相同的ResNext的表示方法,如下圖所示:
其中a,b 結構相似,只是在merge這一步的地方不同,而c則借鑒了AlexNet中分組卷積的思想,將輸入和輸出都分為多個組。
作者首先評估權衡了cardinality和width的關系。
接著,作者又評估了使用增加cardinality和depth/width來增加模型復雜度後的效果:
最後,作者還研究了shortcuts對於ResNext的重要性,在ResNet-50中,不使用shortcuts准確率下降了7%,而在ResNext-50中准確率也下降了4%,說明shortcuts對於殘差網路來說確實是非常重要的。
簡言之,增加cardinality比增加depth和width效果要好,同時,shortcuts對於模型的准確率也是至關重要的。
參考:
Deep Resial Learning for Image Recognition.
Aggregated Resial Transformations for Deep Neural Networks.
Identity Mappings in Deep Resial Networks.
ResNet論文翻譯——中文版
Identity Mappings in Deep Resial Networks(譯)
TensorFlow實現經典卷積網路. 黃文堅,唐源
『貳』 深度殘差網路是卷積網路的一種嗎
深度殘差網路Resnet實際上就是卷積神經網路的一種,只不過其結構比較特殊,對於非常深的網路優化的比較好
『叄』 參差模塊原理
殘差模塊的原理是將一個映射的學習轉化為一個恆等映射和一個殘差之和的學習。
殘差網路,顧名思義,其精髓在於殘差模塊,整個網路則由多個殘差模塊構成。
殘差模塊的主要特點是把兩層卷積結果與輸入信號的和作為輸出信號,這正是殘差網路的主要特色。
『肆』 深度學習之卷積神經網路經典模型
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。
『伍』 十分鍾一起學會ResNet殘差網路
深度卷積網路自然的整合了低中高不同層次的特徵,特徵的層次可以靠加深網路的層次來豐富。從而,在構建卷積網路時,網路的深度越高,可抽取的特徵層次就越豐富。所以一般我們會傾向於使用更深層次的網路結構,以便取得更高層次的特徵。但是在使用深層次的網路結構時我們會遇到兩個問題,梯度消失,梯度爆炸問題和網路退化的問題。
但是當使用更深層的網路時,會發生梯度消失、爆炸問題,這個問題很大程度通過標準的初始化和正則化層來基本解決,這樣可以確保幾十層的網路能夠收斂,但是隨著網路層數的增加,梯度消失或者爆炸的問題仍然存在。
還有一個問題就是網路的退化,舉個例子,假設已經有了一個最優化的網路結構,是18層。當我們設計網路結構的時候,我們並不知道具體多少層次的網路時最優化的網路結構,假設設計了34層網路結構。那麼多出來的16層其實是冗餘的,我們希望訓練網路的過程中,模型能夠自己訓練這五層為恆等映射,也就是經過這層時的輸入與輸出完全一樣。但是往往模型很難將這16層恆等映射的參數學習正確,那麼就一定會不比最優化的18層網路結構性能好,這就是隨著網路深度增加,模型會產生退化現象。它不是由過擬合產生的,而是由冗餘的網路層學習了不是恆等映射的參數造成的。
ResNet是在2015年有何凱明,張翔宇,任少卿,孫劍共同提出的,ResNet使用了一個新的思想,ResNet的思想是假設我們涉及一個網路層,存在最優化的網路層次,那麼往往我們設計的深層次網路是有很多網路層為冗餘層的。那麼我們希望這些冗餘層能夠完成恆等映射,保證經過該恆等層的輸入和輸出完全相同。具體哪些層是恆等層,這個會有網路訓練的時候自己判斷出來。將原網路的幾層改成一個殘差塊,殘差塊的具體構造如下圖所示:
可以看到X是這一層殘差塊的輸入,也稱作F(x)為殘差,x為輸入值,F(X)是經過第一層線性變化並激活後的輸出,該圖表示在殘差網路中,第二層進行線性變化之後激活之前,F(x)加入了這一層輸入值X,然後再進行激活後輸出。在第二層輸出值激活前加入X,這條路徑稱作shortcut連接。
我們發現,假設該層是冗餘的,在引入ResNet之前,我們想讓該層學習到的參數能夠滿足h(x)=x,即輸入是x,經過該冗餘層後,輸出仍然為x。但是可以看見,要想學習h(x)=x恆等映射時的這層參數時比較困難的。ResNet想到避免去學習該層恆等映射的參數,使用了如上圖的結構,讓h(x)=F(x)+x;這里的F(x)我們稱作殘差項,我們發現,要想讓該冗餘層能夠恆等映射,我們只需要學習F(x)=0。學習F(x)=0比學習h(x)=x要簡單,因為一般每層網路中的參數初始化偏向於0,這樣在相比於更新該網路層的參數來學習h(x)=x,該冗餘層學習F(x)=0的更新參數能夠更快收斂,如圖所示:
假設該曾網路只經過線性變換,沒有bias也沒有激活函數。我們發現因為隨機初始化權重一般偏向於0,那麼經過該網路的輸出值為[0.6 0.6],很明顯會更接近與[0 0],而不是[2 1],相比與學習h(x)=x,模型要更快到學習F(x)=0。
並且ReLU能夠將負數激活為0,過濾了負數的線性變化,也能夠更快的使得F(x)=0。這樣當網路自己決定哪些網路層為冗餘層時,使用ResNet的網路很大程度上解決了學習恆等映射的問題,用學習殘差F(x)=0更新該冗餘層的參數來代替學習h(x)=x更新冗餘層的參數。
這樣當網路自行決定了哪些層為冗餘層後,通過學習殘差F(x)=0來讓該層網路恆等映射上一層的輸入,使得有了這些冗餘層的網路效果與沒有這些冗餘層的網路效果相同,這樣很大程度上解決了網路的退化問題。
我們發現很深的網路層,由於參數初始化一般更靠近0,這樣在訓練的過程中更新淺層網路的參數時,很容易隨著網路的深入而導致梯度消失,淺層的參數無法更新。
可以看到,假設現在需要更新 參數因為隨機初始化偏向於0,通過鏈式求導我們會發現, 相乘會得到更加接近於0的數,那麼所求的這個 的梯度就接近於0,也就產生了梯度消失的現象。
ResNet最終更新某一個節點的參數時,由於 ,由於鏈式求導後的結果如圖所示,不管括弧內右邊部分的求導參數有多小,因為左邊的1的存在,並且將原來的鏈式求導中的連乘變成了連加狀態(正是 ),都能保證該節點參數更新不會發生梯度消失或梯度爆炸現象。
這樣ResNet在解決了阻礙更深層次網路優化問題的兩個重要問題後,ResNet就能訓練更深層次幾百層乃至幾千層的網路並取得更高的精確度了。
這里是應用了ResNet的網路圖,這里如果遇到了h(x)=F(x)+x中x的維度與F(x)不同的維度時,我們需要對identity加入Ws來保持Ws*x的維度與F(x)的維度一致。
x與F(x)維度相同時:
x與F(x)維度不同時:
下邊是ResNet的網路結構圖:
使用1*1卷積減少參數和計算量:
如果用了更深層次的網路時,考慮到計算量,會先用1 * 1的卷積將輸入的256維降到64維,然後通過1*1恢復。這樣做的目的是減少參數量和計算量。
左圖是ResNet34,右圖是ResNet50/101/152。這一個模塊稱作building block,右圖稱之為bottleneck design。在面對50,101,152層的深層次網路,意味著有很大的計算量,因此這里使用1 * 1卷積先將輸入進行降維,然後再經過3 * 3卷積後再用 卷積進行升維。使用1*1卷積的好處是大大降低參數量計算量。
通過上述的學習,你應該知道了,現如今大家普遍認為更好的網路是建立在更寬更深的網路基礎上,當你需要設計一個深度網路結構時,你永遠不知道最優的網路層次結構是多少層,一旦你設計的很深入了,那勢必會有很多冗餘層,這些冗餘層一旦沒有成功學習恆等變換 ,那就會影響網路的預測性能,不會比淺層的網路學習效果好從而產生退化問題。
ResNet的過人之處,是他很大程度上解決了當今深度網路頭疼的網路退化問題和梯度消失問題。使用殘差網路結構 代替原來的沒有shortcut連接的 ,這樣更新冗餘層的參數時需要學習 比學習 要容易得多。而shortcut連接的結構也保證了反向傳播更新參數時,很難有梯度為0的現象發生,不會導致梯度消失。
這樣,ResNet的構建,使我們更朝著符合我們的直覺走下去,即越深的網路對於高級抽象特徵的提取和網路性能更好,不用在擔心隨著網路的加深發生退化問題了。
近段時間,准備持續發表一些CNN常見的網路模型講解。好了,今天的十分鍾就帶你一起學會ResNet,下次的十分鍾我們再見。
『陸』 注意力機制加在什麼位置
注意力機制可以加在編碼層和解碼層之間,甚至可以加在Auto-Encoder裡面。
此外,深度殘差收縮網路是一種特殊的注意力機制演算法,實現了注意力機制下的軟閾值化;把注意力機制嵌入到了殘差模塊裡面。
視覺注意力機制:
視覺注意力機制是人類視覺所特有的大腦信號處理機制。人類視覺通過快速掃描全局圖像,獲得需要重點關注的目標區域,也就是一般所說的注意力焦點,而後對這一區域投入更多注意力資源,以獲取更多所需要關注目標的細節信息,而抑制其他無用信息。
這是人類利用有限的注意力資源從大量信息中快速篩選出高價值信息的手段,是人類在長期進化中形成的一種生存機制,人類視覺注意力機制極大地提高了視覺信息處理的效率與准確性。
『柒』 SENet及對輕量級網路的一些理解
轉自: https://zhuanlan.hu.com/p/71995304
受限於硬體的羸弱,深度學習在上世紀的發展一直是不溫不火,直到2012年,Alexnet橫空出世,深度學習才開始前所未有的大發展。隨著技術的發展,卷積神經網路逐漸取代了之前全連接的神經網路,成為深度學習領域的主流演算法。
卷積神經網路的優勢在於能夠更好的提取特徵和權值共享,自Alexnet之後,VGG又提出了神經網路的深度越深,效果越好的思想。自此深度成為構建網路時所考慮的第一要素。此時,又有人提出了Inception模型,這是人們在關注深度之外第一次關注網路的時間復雜度和空間復雜度。
圖1
如圖1所示,就是Inception v1的模型,該模型主要利用了1x1卷積進行了降維處理,達到了減小網路參數量和計算量的效果。在接下來的改進中,Inception又提出了利用兩層3x3網路取代一層5x5網路這樣的奇思妙想,進一步達到了減輕網路復雜度的作用。
如圖2所示,就是5x5卷積變成3x3卷積的示意圖。
圖2
從此之後,輕量級網路開始盛行。諸如Squeezenet,Mobilenet等都是輕量級網路中的傑出代表。
自Inception之後,人們已經不再通過暴力的增加網路層數的方法來企圖獲得更高的准確率了,然而面對復雜的問題,過淺的網路很難達到理想的效果,所以加深網路依然是解決圖像分類問題的最佳途徑。但是增加網路很容易造成overfiting甚至訓練集上得到的效果也比淺層網路要差,所以如何有效的增加網路層數就成了深度學習領域研究的重中之重。
為了解決這個問題,很多學者提出了自己的見解,如resnet所講述的殘差網路就是一例。然而殘差網路雖然能夠增加層數但是層數增加到三位數之後再增加也就有些無能為力了。此時作者另闢蹊徑,提出了一種新型的網路結構SENet,這個網路結構可以對所有網路進行改進然後做到真正有效的增加層數,無論原網路層數有多深,通過加入SENet,都能增加相當數量的深度,並有效的提高實驗效果。值得一提的是SENet在2017年的ImageNet挑戰賽獲得冠軍。
從Inception開始,學者們提出網路的時候就主要是提出一個block,然後用這個block像搭積木一樣的搭出整個網路。同樣,作者也是用這個方法設計網路的,作者提出了一個Squeeze-and-Excitation block,然後用這個SE block搭出了整個網路。
卷積神經網路雖然有諸多的好處,但是卷積神經網路捕捉到的只是局部的信息,假如卷積核是7x7,那麼感受野的大小也只有7x7。但是一張圖片的每一個像素點之間都是互相有聯系的,之前使用局部感受野的網路都忽略掉了全局像素點之間的關聯信息,使得實驗效果不夠理想。Inception通過多尺度的卷積核,找到了提取一張feature map上全局關聯信息的方法,然而直到本文網路之前都沒有誰考慮各通道之間的全局關聯信息。所以作者將關注點放到了通道關聯信息上,作者發現提取出通道之間互相關聯的信息可以有效的增加神經網路的分類准確率。
圖3
如圖3所示,就是一個SE block。對於任意給定的變換
(1)
我們可以構造一個對應的SE塊來進行特徵重新校準。首先通過擠壓操作,跨越空間維度WXH產生一個全局描述符,這個全局描述符聚合了所有通道的空間信息,之後再進行激勵操作,其中通過基於通道依賴性的門控機制為每個通道學習特定采樣的激活,控制每個通道的激勵。然後特徵映射U被重新加權以生成SE塊的輸出,再與之前的block結合在一起,就達到了提取通道關聯信息的目的。
SE網路可以通過簡單地堆疊SE block的集合來生成,也可以用作架構中任意深度的原始塊的直接替換。
新CNN架構的開發是一項具有挑戰性的工程任務,通常涉及許多新的超參數和網路各層配置的選擇。相比之下,上面概述的SE塊的設計是簡單的,並且可以直接與現有的最新架構一起使用,其卷積層可以通過直接用對應的SE層來替換從而使效果得到加強。另外,SE塊在計算上是輕量級的,並且在模型復雜性和計算負擔方面僅稍微增加。為了支持這些聲明,作者開發了一些SENets,即SE-ResNet,SE-Inception,SE-ResNeXt和SE-Inception-ResNet,並在ImageNet 2012數據集上對SENets進行了廣泛的評估。此外,為了證明SE塊的一般適用性,作者還呈現了ImageNet之外的結果,這表明作者所提出的方法不受限於特定的數據集或任務。
圖3所示的Ftr,我們可以將其看做一個普通的卷積層,事實上,在SE-ResNet,SE-Inception中,對應的Ftr分別就是殘差塊和Inception塊。
Squeeze操作的目的其實就是將空間信息提取出來,為了網路的輕量級,事實上我們還希望能夠將信息進行壓縮,不要增加過大的時間復雜度和空間復雜度。
因此作者選取了全局平均池化進行Squeeze操作。如圖3所示,我們將通過全局平均池化得到的向量設為Z,那麼z的第c個元素即可通過公式(2)進行計算:
(2)
這個操作實際上是在得到U之後再進行的全局平均池化。一般CNN的每個通道的濾波器都是對局部感受野進行特徵提取,因此U中的每個feature map都無法利用與其他feature map之間的關聯關系,而且在較低網路層次上對應到原圖尺寸上的感受野相對於較高層數的來說,無疑是很小的,這樣空間關聯信息的流失就會更加嚴重。
那麼作者提出的這個Squeeze,實際上就相當於將感受野擴展到了全局,自然能夠提取的特徵就更為豐富,通過訓練得到的分類識別的准確率就更高了。
為了利用在上一個操作中得到的全局信息,作者就提出了Excitation這個操作來全面捕獲通道相關性。如圖4和圖5所示,就分別是SE-Inception Mole和SE-Inception Mole。作者指出我們所需的這個Excitation必須是靈活的同時又要能學習到非互斥的信息。
那麼通過觀察圖4和圖5我們也能輕易的得知:
(3)
其中指的是Relu函數,指的是sigmoid函數,r為壓縮比例。這實際上就是兩個全連接層再加上兩個激活層。第一層全連接層的作用就是將global pooling所得到的全局信息進行壓縮,作者通過實驗發現,壓縮比例r=16的時候實驗結果最為理想。那麼第二層全連接層的作用就是將被壓縮的向量進行還原,還原到和global pooling層之後的向量大小一致。然後再將該向量與Ftr得到的三維卷積進行乘運算,實際上該向量中的每個值就與三維卷積中每個通道對應的feature map 相乘,這樣每一個feather map就得到了與其他通道的空間關聯特徵了。
圖4
那麼圖4和圖5中的C指的就是通道的數目,而指的就是這個模塊輸入的feather map的尺寸大小。而通過圖示我們也能清楚的看到SE block可以通用的加在所有的網路結構中從而達到提升性能的作用。
SENet通過堆疊一組SE塊來構建。實際上,它是通過用原始塊的SE對應部分(即SE殘差塊)替換每個原始塊(即殘差塊)而產生的,作者在表1中描述了SE-ResNet-50和SE-ResNeXt-50的架構。
圖5
表1
作者通過實驗發現,SE block改進resnet-50時,所增加參數量不超過10%,卻提升了1.5個百分點的准確率,並且作者後來通過實驗發現整體網路最末尾的SE block對效果提升作用很小,去除掉這些block網路的准確率也不過下降0.1個百分點,而增加的額外參數量就減小到4%了。如表2所示,是幾個原有的網路結構的top-1和top-5的准確率,original表示的是網路提出者得到的結果,而re-implementation指的是作者復現的結果,而SENet指的是作者運用SENet加強之後得到的結果,很明顯有顯著的准確率提升。
表2(該表截取自論文)
同時,作者還提出了一個計算模型復雜度的方法來探究運用了SENet之後,模型的參數量到底增加了多少,很顯然准確率增加百分比相同的情況下,參數量增加越少的話,演算法性價比越高。
兩個全連接層的參數量都是,那麼兩個全連接層的參數量就是。以resnet為例,假設resnet一共包含了S個stage,其中第s個stage裡麵包含了個重復的殘差塊,那麼用SENet加強過的resnet所增加的參數量就可以用公式(4)進行計算:
(4)
SENet的結構非常簡單,特別容易部署,不需要引入新的函數或者卷積層,並且增加的參數量微乎其微,是一個有效增加神經網路分類准確率的方法。同時,作者通過實驗發現,在Faster-rcnn等用於實現目標檢測的網路中增加SENet塊進行加強,也能得到很好的效果,這進一步證明了SENet網路的通用性。
接下來,作者思考了最後一個問題,增加的SE block添加在原有block中位置的不同會不會影響到實驗結果。為此,作者進行了對比試驗。
如圖6所示, 是原來的殘差網路與作者在四個不同位置添加了SE block的四種不同的網路結構,總共是五個不同的網路結構。
圖6
表3
而表3即是四種不同的SENet結構的錯誤率對比,我們能夠看到SE-PRE結構是其中相對表現最好的,這說明了SE block塊所在位置確實會影響到神經網路的整體效果,所以我們在運用SENet時,對於其所添加的位置應該好好斟酌。
這篇論文提出了一個名為名為SE block的架構單元,通過使網路能夠執行動態的信道特徵重新校準來提高網路的表示能力。實驗證明了SENets的有效性,它在多個數據集和任務之間實現了最先進的性能。此外,SE塊揭示了以前的體系結構無法充分地對通道相關關系建模。並且SE塊生成的特徵重要度值可以用於其他任務,例如用於模型壓縮的網路剪枝。
『捌』 新息與殘差有什麼區別
新息與殘差的區別在於:二者指代不同、二者特徵不同、二者代表相關分析不同。
1、特徵不同:
(1)由於其也是序列,所以也被稱為新息序列:x(t)=x(t)+e(t),此式表明,x(t)可表達為兩項之和:第一項,x(t)它是被序列歷史所確定的;第二項e(t),根據歷史數對其預報為零。
直觀而言,在無偏預報意義下,原序列歷史不包含對e(t)的信息,故此時稱為它對原序列的新息。對極特殊的情況下,e(t)恆等於0時,此序列無新息,這樣的序列稱為純確定型。
(2)在回歸分析中,測定值與按回歸方程預測的值之差,以δ表示。殘差δ遵從正態分布N(0,σ2)。(δ-殘差的均值)/殘差的標准差,稱為標准化殘差,以δ*表示。δ*遵從標准正態分布N(0,1)。實驗點的標准化殘差落在(-2,2)區間以外的概率≤0.05。
若某一實驗點的標准化殘差落在(-2,2)區間以外,可在95%置信度將其判為異常實驗點,不參與回歸直線擬合。顯然,有多少對數據,就有多少個殘差。殘差分析就是通過殘差所提供的信息,分析出數據的可靠性、周期性或其它干擾。
2、指代不同:
(1)考察時間序列{x(t)},根據歷史數據對x(n+1)的無偏預報x(n+1),且用斜體代表x尖,即x的估計值,預報誤差e(n+1)=x(n+1)-x(n+1),e(n+1)被稱為新息。
(2)殘差在數理統計中是指實際觀察值與估計值(擬合值)之間的差。
3、代表相關分析不同:
(1)新息定理是新息預報的基礎。新息預報雖然公式較復雜,但佔用的內存是有限的,並不隨t而增長,而且每步預報是用遞推計算,特別是MA序列,由新息預報公式可以看出,只要能判斷出MA模型的階數,不必計算出滑動平均參數就可以遞推進行新息預報。
由新息定理可以看出,時刻t的新息et是隨著樣本數據xt的輸入經過遞推而得到的。
可以證明,無論是AR、MA或ARMA序列,當k充分大後,新息適時預報都與平穩預報漸近趨於一致。因此,在實際應用時,對於連續預報問題如果要求從較少的數據開始預報,並希望盡可能給出精確的預報值,那麼,在開始一個階段,可以進行新息適時預報。
(2)殘差中殘差圖的分布趨勢可以幫助判明所擬合的線性模型是否滿足有關假設。如殘差是否近似正態分布、是否方差齊次,變數間是否有其它非線性關系及是否還有重要自變數未進入模型等。
當判明有某種假設條件欠缺時, 進一步的問題就是加以校正或補救。需分析具體情況,探索合適的校正方案,如非線性處理,引入新自變數,或考察誤差是否有自相關性。
(8)殘差網路是加在哪裡的擴展閱讀:
殘差應用——殘差網路:
深度殘差網路。如果深層網路的後面那些層是恆等映射,那麼模型就退化為一個淺層網路。那當前要解決的就是學習恆等映射函數了。 但是直接讓一些層去擬合一個潛在的恆等映射函數H(x)=x,比較困難,這可能就是深層網路難以訓練的原因。
但是,如果把網路設計為H(x)=F(x)+x,可以轉換為學習一個殘差函數F(x)=H(x)-x。只要F(x)=0,就構成了一個恆等映射H(X)=x。 而且,擬合殘差肯定更加容易。
F是求和前網路映射,H是從輸入到求和後的網路映射。比如把5映射到5.1,那麼引入殘差前是:F'(5)=5.1,引入殘差後是H(5)=5.1,H(5)=F(5)+5,F(5)=0.1。這里的F'和F都表示網路參數映射,引入殘差後的映射對輸出的變化更敏感。
比如s輸出從5.1變到5.2,映射的輸出增加了2%,而對於殘差結構輸出從5.1到5.2,映射F是從0.1到0.2,增加了100%。明顯後者輸出變化對權重的調整作用更大,所以效果更好。殘差的思想都是去掉相同的主體部分,從而突出微小的變化。
參考資料來源:網路-殘差
參考資料來源:網路-新息
參考資料來源:網路-新息定理