1. 程式人生 > >CNN的經典文章要點總結(持續更新中)

CNN的經典文章要點總結(持續更新中)

AlexNet(2012)

  • 資料:

輸入要求:256*256

結構包含8層帶權重的層:5層卷積層+3層全連線層

引數:batchsize= 128,momentum=0.9,weight decay=0.0005img

具體貢獻點:

1.ReLU Nonlinearity

之前:f(x) = tanh(x) or f(x) = (1 + e-x)-1,稱之為 saturating nonlinearities

改為:f(x) = max(0; x) ,稱之為 non-saturating nonlinearity ,called RectifiedLinear Units (ReLUs)

後者比前者在訓練時的收斂速度明顯加快 使用梯度下降訓練,這些飽和(saturating)的非線性啟用函式會造成梯度消失現象,降低訓練速度。使用非飽和的非線性啟用函式ReLu可以避免這個問題。img

雖然表現最明顯的是加快訓練速度,但原先的本意是為了阻止過擬合

2.Training on Multiple GPUs

GPU並行訓練將GPU通訊限制在某些特定的層上。

這意味著,比如,第三層的核心從所有的第二層核心對映(kernel map)中獲得輸入,但是,第四層的核心只從和自己在同一個GPU上的第三層核心中獲得輸入。

用雙GPU還能提高效果?

與用一個GPU訓練每個卷積層只有一半的核心的網路相比,這種結構將我們的TOP-1錯誤和TOP-5錯誤分別降低了1.7%和1.2%。

3 Local Response Normalization

img

區域性響應歸一化,模仿神經元的側抑制,使得其中響應比較大的值變得相對更大,並抑制其他反饋較小的神經元,增強了模型的泛化能力。

此舉降低了top1和top5的錯誤率1.4%和1.2% ,但後來VGG說這個沒用

4 overlapping pooling

重疊池化池化層的輸出之間會有重疊和覆蓋,提升了特徵的豐富性。文章使用了s = 2(步長),z = 3(池化大小)top-1error和top-5error分別減少了0.4%,0.3%. 發現也能抑制過擬合現象

5.減少過擬合

5.1 data augmentation

  • 1)訓練:從256的影象中依次裁剪出224的影象,再對裁剪後的影象水平翻轉,共擴大((256-224)*(256-224)*2=2048)倍測試:對一張256的影象裁剪5次224的影象(四個角加中心),再水平翻轉,softmax層對10張圖的平均預測取均值做結果

  • 2)改變訓練影象的RGB通道的強度,對每張圖片的RGB值進行PCA得到3*3的協方差矩陣,p為第i個特徵向量,landa為特徵值,a是均值為0標準差為0.1的高斯函式產生的隨機變數。img

    這個方案改變自然影象光照的顏色和強度,而目標的特性不變。降低top1錯誤率1%。

5.2 dropout(1-x)

模型融合:對多個模型預測可以降低測試錯誤率,但代價太昂貴“休學”而非“輟學”,某些節點為了避免過擬合而在本輪訓練中暫時停止更新。每次選擇x的節點進行連線,只有被選中參與連線的節點進行正向和反向傳播,其他的值不變

img

因此,對於一個有N個節點的神經網路,有了dropout後就可以看作是 2的N次方 個模型的集合,但此時要訓練的引數數目是不變的,就解決了費時的問題。

6.訓練設定

img學習率初始設為0.01,當驗證集的錯誤率不再降低的時候,將學習率除以10,在訓練停止前,學習率減小了3次。

7.結果

img

*是對預訓練的模型加一個第六層卷積層再微調,可以提高效果

對多個模型結果取均值(5+1* x 2=7)

VGG16/19(2014)

分類第二,定位第一

img

1.小尺寸3*3卷積核,加深深度

資料處理:224,224,去均值化

  • 用3個3x3的卷積層和1個7x7的卷積層作用效果相同。(假如輸入影象是7x7,那麼用3x3之後變成5x5,再來兩個就是1x1,這與1個7x7的卷積層效果相同。)
  • 但計算量大大減小,3(3x3C2)=27C2個權重引數化,VS 1(7x7C2)=49C2(C表示輸入和輸出都是C個通道)

2.資料尺寸抖動

  • 訓練輸入:採用隨機裁剪的方式,獲取固定大小224x224的輸入影象。
    • Training image size: 令S為影象的最小邊,如果最小邊S=224,則直接在影象上進行224x224區域隨機裁剪,這時相當於裁剪後的影象能夠幾乎覆蓋全部的影象資訊;如果最小邊S>>224,那麼做完224x224區域隨機裁剪後,每張裁剪圖,只能覆蓋原圖的一小部分內容。
  • 資料生成方式:首先對影象進行放縮變換,將影象的最小邊縮放到S大小,然後
    • 方法1: 在S=224和S=384的尺度下,對影象進行224x224區域隨機裁剪
    • 方法2: 令S隨機的在[Smin,Smax]區間取樣取值,再進行隨機裁剪(其中Smin=256,Smax=512)
  • 預測方式:作者考慮了兩種預測方式:
    • 方法1: multi-crop,即對影象進行多樣本的隨機裁剪,然後通過網路預測每一個樣本的結構,最終對所有結果平均
    • 方法2: densely, 利用FCN的思想,將原圖直接送到網路進行預測,將最後的全連線層改為1x1的卷積,這樣最後可以得出一個預測的score map,再對結果求平均

3.實驗結論

img1.LRN沒有提高效果,反而增加了記憶體消耗和計算時間。

2.D>C>B,1x1卷積層有用但不如3x3效果好

3.B與5x5相比,效果更好,小濾波器效果好

4.深度增加,效果提高

5.尺寸抖動訓練效果更好,尺度抖動說的是在範圍內隨機取樣S

NIN

論文提到的Mlpconv = conv + 1x1
這裡寫圖片描述
這裡寫圖片描述

1.小卷積核1x1,提高網路表現力

實現跨通道的互動和資訊整合。“這種級聯的跨通道引數池結構允許交叉通道資訊的複雜且可學習的互動。”

一般來說卷積層要提升表達能力,主要依靠增加輸出通道數,但副作用是計算量增大和過擬合。每一個輸出通道對應一個濾波器,同一個濾波器共享引數,只能提取一類特徵,因此一個輸出通道只能做一種特徵處理。1*1可以把這些相關性很高的、在同一個空間位置但是不同通道的特徵連線在一起。進行卷積核通道數的降維和升維,減少引數量。

2.全域性平均池化

對每個特徵圖一整張圖片進行全域性均值池化,每張特徵圖都可以得到一個輸出。優點是1在feature map 和類別之間強制對映,卷積結構more native,2減少大量的引數,有效避免過擬合 ,3對空間資訊求和,more robust

Mlpconv layers model the local patches better, and global average pooling acts as a structural regularizer that prevents overfitting globally.

GoogleNet (v1 2014)

分類第一,貢獻點:

1.全域性平均池化代替全連線層

2.多尺寸濾波器組合

Inception Module中包含了3種不同尺寸的卷積和1個最大池化,增加了網路對不同尺度的適應性,這一部分和Multi-Scale的思想類似。最後Inception Module通過4個分支中不同尺寸的1x1、3x3、5x5等小型卷積將相關性很高的節點連線在一起,就完成了其設計初衷,構建出了很高效的稀疏結構。

3.借鑑1x1,還用於降維

借鑑了NIN,提出Inception Module,提高了引數的利用效率,(引數量只有alexnet的1/12)

(借鑑NIN)增加了分支網路,NIN的MLPconv層擁有更強的提升表達能力,允許在輸出通道之間組合資訊,因此效果明顯。可以說,MLPConv基本等效於普通卷積層後再連線1x1的卷積和ReLU啟用函式。1x1卷積可以跨通道組織資訊,提高網路的表達能力,一個1x1的卷積就可以很自然地把這些相關性很高的、在同一個空間位置但是不同通道的特徵連線在一起,同時可以對輸出通道降維

由於較高層會獲取較高的抽象特徵,其空間集中度會減少,所以3x3和5x5的大尺寸卷積比例應該有所提升,但大尺寸濾波會帶來大量引數量,所以本文采用1x1卷積來降維。
這裡寫圖片描述

在Inception Net中,還使用到了輔助分類節點(auxiliary classifiers),即將中間某一層的輸出用作分類,並按一個較小的權重(0.3)加到最終分類結果中。這樣相當於做了模型融合,同時給網路增加了反向傳播的梯度訊號,也提供了額外的正則化,對於整個Inception Net的訓練很有裨益。

4.訓練方法-多尺度輸入

這裡寫圖片描述

這裡寫圖片描述

inception v2 (2015,Batch Normalization)

問題:深層網路訓練時,由於模型引數在不斷修改,所以各層的輸入的概率分佈在不斷變化,這使得我們必須使用較小的學習率及較好的權重初值,導致訓練很慢,同時也導致使用saturating nonlinearities 啟用函式(如sigmoid,正負兩邊都會飽和)時訓練很困難。

當各層輸入分佈的變動導致模型需要不停地去擬合新的分佈。當一個學習系統的輸入分佈是變化的時,即訓練集的樣本分佈和測試集的樣本分佈不一致,訓練的模型就很難有較好的泛化能力(這也算過擬合吧?),這叫做 covariate shift (Shimodaira, 2000),解決辦法是:對每層的輸入進行歸一化。

提出,Batch Normalization,減少協變數轉移,

  • 修正層輸入的均值和方差,把輸入規範化,減少梯度對引數或初始值的依賴,可以使用更高的學習率而沒有發散的風險;
  • 起到了正則項的作用,有效防止過擬合
  • 有效防止網路出現飽和,加速深度神經網路訓練。

img

但不是直接在每層規範化,因為如果模型的優化求梯度時不考慮到歸一化的話,會影響模型,就是你優化半天學到了某種分佈,一規範化,就把這它破壞了。

具體操作:

設標準化值為x1,x2…它們的線性變換為y1…m。e是為了數值穩定加到小批量資料方差上的常量

但這樣生成的x絕對值太小,降低了模型表達能力,引入可學習的γ和β去擬合出與原先等價的變換
這裡寫圖片描述

  • 最好將BN加在卷積層之後,啟用之前。

Inception-v3

1.nxn卷積核 –>1xn+nx1

將一個較大的二維卷積拆成兩個較小的一維卷積,比如將7x7卷積拆成1x7卷積和7x1卷積,或者將3x3卷積拆成1x3卷積和3x1卷積。

img

  • 一方面節約了大量引數,加速運算並減輕了過擬合(比將7x7卷積拆成1x7卷積和7x1卷積,比拆成3個3x3卷積更節約引數)
  • 同時增加了一層非線性擴充套件模型表達能力。
  • 本文發現這種分解在前面的層上不能很好地工作,但是對於中等網格尺寸(在mxm特徵圖上,m∈(12,20)),這種分解有非常好的結果

2.利用輔助分類器

引入了輔助分類器的概念,以改善非常深的網路的收斂。最初的動機是將有用的梯度推向較低層,使其立即有用,並通過抵抗非常深的網路中的消失梯度問題來提高訓練過程中的收斂。Lee等人[11]也認為輔助分類器促進了更穩定的學習和更好的收斂。有趣的是,我們發現輔助分類器在訓練早期並沒有導致改善收斂:在兩個模型達到高精度之前,有無側邊網路的訓練進度看起來幾乎相同。接近訓練結束,輔助分支網路開始超越沒有任何分支的網路的準確性,達到了更高的穩定水平。

本文認為輔助分類器起著正則化項的作用

3.卷積和池化平行使用

這裡寫圖片描述

4.網路結構
這裡寫圖片描述

ResNet

Resnet在不斷加神經網路的深度時,會出現一個Degradation的問題,即準確率會先上升然後達到飽和,再持續增加深度則會導致準確率下降。這並不是過擬合的問題,因為不光在測試集上誤差增大,訓練集本身誤差也會增大。假設有一個比較淺的網路達到了飽和的準確率,那麼後面再加上幾個的全等對映層,起碼誤差不會增加,即更深的網路不應該帶來訓練集上誤差上升。而這裡提到的使用全等對映直接將前一層輸出傳到後面的思想,就是ResNet的靈感來源。傳統的卷積層或全連線層在資訊傳遞時,或多或少會存在資訊丟失、損耗等問題。ResNet在某種程度上解決了這個問題,通過直接將輸入資訊繞道傳到輸出,保護資訊的完整性,整個網路則只需要學習輸入、輸出差別的那一部分,簡化學習目標和難度。

1.殘差塊-shortcuts

這裡寫圖片描述

左邊:34層;右邊:50/101/152層,使用1x1降低引數量

原本的優化目標是H(x)=F(x)+x
這裡寫圖片描述

  • 當輸出通道數一樣時,ws=1,直接相加;
  • 當輸出通道數不一樣時,通過1x1xN的卷積操作變成一樣的通道然後相加。

2.網路結構

這裡寫圖片描述

Densenet

2017CVPR best paper
這裡寫圖片描述

所有在前圖層作為輸入,自身作為後續圖層的輸入,共有1+2+3+….+L 共L(L+1)/2個直接連線

緩解梯度消失問題,加強特徵傳播,鼓勵特徵重用,並大幅減少引數數量。

1.密集連線

受隨機深度網路啟發,

1.當第i層被扔掉之後,第i+1層就直接連到了i-1層,當第2到i層都被扔掉之後,第i+1層就直接用到了第1層的特徵,因此隨機深度網路其實可以看出是一個具有隨機密集連線的Densenet;

2.既然隨機扔掉很多層也不會破壞演算法的收斂性,說明resnet具有比較 明顯的冗餘性,網路的每一層只提取了很少的特徵,既然每層學習的特徵很少,那能不能降低每層的計算量來減少冗餘;

–> 所以densenet設計:1.網路中的每一層都直接與前面層相連,實現特徵的重複利用;2.把網路的每一層設計的特別窄,即每層學習的特徵圖很少,降低冗餘性同時降低計算引數量。

dense block & transition layers

由於密集的串聯連線需要相同的feature map大小,但pooling操作後大小會變,但pooling又必不可少,所以提出dense block,在blocl之間是transition layer,包括BN+1x1 conv+2x2 AveP
這裡寫圖片描述

另外,dense block也會減少引數量,只在block內進行密集連線,層數少了。否則到最後就會連線很多的前面的層數。

Growth rate - k

控制每層的輸出feature map個數,第l層有k(l-1)+k’,k‘是輸入的通道數。

雖然每層只增加k個輸出,但後面層的輸入依然會很多,因此引入bottlneck layer,其實是引入1*1的卷積層金少輸入數量。本文將帶有bottleneck layer的網路成為DenseNet-B。

除了在Denseblock內減少特徵圖的數量,還可以在transition layers中來進一步compression。如果一個Dense block產生m個特徵圖輸出,則transition 產生 [θm]個輸出,θ∈(0,1],這種操作成為DenseNet-C

以上兩種合起來成為DenseNet-BC

網路結構:
這裡寫圖片描述

本文說densenet的結構可以大大減少過擬合現象,在不做資料增強的情況下,cifar10的誤差從7.33%降到5.19%,cifar100從28.2%降到19.64%,實驗還發現現在的過擬合,當把k從12增加到24時,增長的4倍引數導致誤差從5.77%增加到5.83%.DenseNet-BC bottleneck and compression layers 可以有效抑制。

SENet

ImageNet2017冠軍,top5 2.251%,之前是2016 2.991%(中國公安部三所 Trimps-Soushen隊)

1.通道特徵校驗

這裡寫圖片描述

不是一個完整的網路結構,是一個block,可以插入到現有的網路中,作者的動機是希望顯式地建模特徵通道之間的相互依賴關係,通過學習的方式來自動獲取到每個特徵通道的重要程度,然後依照這個重要程度去提升有用的特徵並抑制對當前任務用處不大的特徵。

具體操作:

  • 對卷積層作global average pooling,這是考慮到每個卷積核都是以一個區域性感受野的方式進行卷積,所以不能利用區域性感受野以外的紋理資訊,所以作者提出了Squeeze(GAP)
  • 對得到的1x1xC方塊做卷積(因為是1x1所以fc和conv只是叫法問題),通過卷積核的權重自學習(這些權重評判通道特徵重要性),C/r是為了降低引數量
  • 最後對原始的X(HxWxC)與SE block 對應相乘。就是最後的Scale操作
    這裡寫圖片描述

博文參考