# [論文閱讀筆記] - Deep Residual Learning for Image Recognition  * 今天要跟大家介紹這個在影像辨識上非常經典的一個模型,Resnet,那他原始的這篇論文叫這個deep residual learning,這篇是由何凱明等人提出,何凱明是在CV領域非常有名的大大,現在好像才30幾歲,非常年輕。那這篇論文在2015提出,在2016年獲得了CVPR的年度最佳論文。也在當年的imagenet比賽獲得了冠軍。    * 首先為什麼要使用residual learning這種方式來學習呢?主要是因為近年來神經網路有往越來越深發展的趨勢。  (來源:林軒田教授的機器學習技法課程投影片) * 神經網路中的每一個layer都可以想像成是在做一種特徵轉換,例如在手寫辨識中,輸入為一個一個的pixel,那例如說現在所使用的模型是兩層的MLP那第一層可能會學習出筆畫,也就是由一個個的pixel經過特徵轉換組合出筆畫,那第二層可能就會再將這些筆畫組合成是不是某一個數字的分數,在經過一個activation function輸出結果這樣。那想像現在如果我們只有一層的perceptron 那這一層就要做很雜的特徵轉換,這樣在訓練上會比較困難,效果也可能不會太好。總結來說越深的網路可以讓每一層所做的要做的事簡單化,由此可以讓網路由低階的特徵經過一層層的轉換,組合出較高階的特徵,進而使模型的準確率提升。  * 但相應的深層的NN也有缺點,例如說他的model complexity會過高,也就是too powerful,造成overfitting。而我們也不能簡單的直接增加層數,會造成gradient vanishing或是gradient exploding,甚至還會造成degradation的問題。  * 那上述的三個問題中的兩個在當時已經有不錯的解決方式,例如梯度消失的問題可以透過BN,而overfitting的部分則是可以透過一些regularization的方式例如L2、L1、Dropou、Stochastic depth等方式來改善。而這篇主要address的點是degradation的問題。    * 簡單來說degradation就是當網路越來越深,網路的訓練會越來越困難,在原論文中做了這個實驗,就是這張圖,分別使用20 layers與56 layers的plain net來訓練,那這邊可以看到一個很詭異的現象,在training error的部分,56 layer竟然收斂在比20 layer還要差的地方,這個現象既不是overfitting,也不是gradient vanishing所造成,因為overfitting是指過度擬合訓練資料,導致模型在測試資料上表現的不如預期,而作者在論文中說他們在訓練時有使用了BN,並且觀測每一層的gradient,發現並沒有梯度消失的問題出現。那就很奇怪了,因為照理來說56 layers的網路應該更加powerful,至少在training data上要可以很好的去擬合。 * 這個degradation problem的具體原因目前還是在研究中,原論文中說是因為現有的solver也就是optimizer不夠好,無法在有限的時間內去收斂到相對來說較好的解。我還有看到一種說法是說,每一層layer相當於對解的機率的分佈做了轉換,而經過多層的疊加會使這個分佈往一個特定的方向偏移,因此偏離我們所希望求得的較好的解。因而使網路難以收斂到好的解。  * 那這篇論文就是想要解決這個degradtion的問題,他的想法是這樣,我們相對於plain net,加入一些identity layer,若這些identity layer為optimal的,也就是這些層不做事,只是單純的把feature pass過去,也就是權重都是1,那這樣一來網路應該要表現的與原本的網路相同,也可以這樣說就是至少不會比原本的網路差,這篇論文就是以這個想法為基礎,想辦法使網路學習到identity layer,並且在identity mapping的基礎上,讓網路做一些small correction,令error進一步下降。但訓練網路的過程通常是隨機的,要使網路學習到權重剛好都是1是困難的。所以接下來詳細的介紹一下這篇論文是透過什麼方式來做到在identity mapping的基礎上,做small correction,使網路的error進一步下降。   * 那這篇論文提出了一個看起來很簡單,但卻非常有效的方法,就是透過shortcut connection,將identity pass過去。原先網路域學習的function H(x)可以想為identity x與small correction F(x),shortcut connection讓網路改以學習residual function F(x)=H(x)-x,可以想像成他是在這個identity的基礎上,去做一些微小的修正。由先前的討論,我們可以知道加入這樣的層可以使網路的表現至少比原本的網路還要好,最差最差的worst case就是這個F(x)的權重都為0,這一層只做pass feature的動作。這種情況會發生在網路認為特徵已經足夠好,不需要再進一步轉換的時候。換個角度去看,剛剛提到在訓練的隨機過程中使權重學到都是1是困難的,這邊加上shortcut connection可以想成將問題變為使F(x)的權重學習為都是0,這是一個比較簡單的問題,因為backprop時若權重為0,那這個neuron就死掉了,也就是固定在0。此外shortcut connection比較有趣的事情是,當F(x)權重都為0時,gradient也能透過shortcut順利的反向傳播下去,使前面的layer可以繼續訓練到,某方面來說也解決了gradient vanishing的問題。 * 論文中將加入shortcut connection的單元稱為residual block。這個方法的優點是,不需增加任何的parameters,且相對於原先的網路只需要微小的修改,就是加上一個summation的動作。 * 這一頁就是這整篇論文最核心的精髓。  * 接下來就是一些小問題需要解決,例如說網路在做downsampling的時候,也就是經過pooling的時候,會造成identity與F(x)的輸出維度不符無法相加,那就可以透過1x1的conv.來做降維的動作。大概就是調整paddig跟stride來使identity與F(x)的輸出達到相同的維度。  * 再來是bottleneck layer,簡單來說就是隨著feature map的depth也就是feature的channel數越來越長,計算量會越來越大,故提出了這個bottleneck的結構,在進入真正要學習feature的3x3 conv.前,先降低feature map的channel數,使3x3 conv.所需的計算量降低,並在做完3x3 conv.後再做升維的動作。可想而知這樣的操作必定會損失一些feature,在何凱明大大今年三月發布的論文Design space design中也指出in general 不加入bottleneck的網路表現的較佳。  * Resnet的設計大概是,當feature的大小減半,channel數就double。  * 若想實作的朋友可以參考這張圖,其中分別提出了不同層數的ResNet架構。  * 這邊是plain net與resnet對於20與56 layer的訓練結果比較。其中粗線代表validation error,細線為training error。 * 可以看出在加入shortcut connection後的ResNet不會出現degradation的問題,error隨著層數的增加而下降。  * 而這是ResNet在ImageNet的表現,可以看出ResNet在當年表現的比其他的model還要好。   * ResNet這種在identity的基礎上增加微小修正的方式,會造成權重的浪費,在網路中大多數的layer是貢獻很少的。 * 而ResNet在合併feature的時候是使用summation,而這種方式,在兩者的分佈很不相同的時候,會造成資訊的流失。因此在DenseNet這篇論文中提出了使用concatenate來合併特徵。  * 在Visualizing the Loss Landscape of Neural Nets這篇論文中提出了Filter-Wise Normalization,透過這個方法可以產生出高解析度的loss surface,並且可以跨model來比較。 * 上圖是論文中plain net-56與ResNet-56的loss surface,可以看出在加入shortcut connection後,surface變得更平滑,透過momentum或是Adam等solver就能夠到達好的解。 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up