VGG為Deep learning中的一大經典模型,他主要的貢獻是將CNN透過較小的Conv堆疊使模型能夠變得更 “深”
接下來會用四個part來介紹VGG: Introduction, Key Point, Experiment以及最後的Conclusion。
# Introduction
當時候發展VGG的背景建立於CNN(AlexNet獲得影像識別冠軍)的成功以及深度學習於GPU上加速的成功。
在當時候Paper研究CNN的改善主要有兩種,一種是使用更小的Conv或是更小的stride,另一種主要是利用不同的Data Augmentation,例如: Multiple Scale training等。而在VGG的paper中主要是將兩個合併在一起,提供一個更深且結果穩定的網路。
#Key Point
VGG最重要的概念就是使用大量的3 X 3 Conv,作者認為將較大的Conv抽換成較小的Conv可讓Receptive field提高 (也可說是information 量提高)。此外,使用較多的較小的Conv可以提高Non-Linearity,而與大的Conv比較下減少parameter。
而在使用3 X 3 Conv有些小技巧,我們可透過上面的範例可知道,若使用5 X 5 Conv,我們可替換使用兩個3 X 3 Conv (以上面範例來說,5X5 Conv 等於 兩個 3 X 3 Conv,Output皆為4)。而使用 7 X 7 Conv,我們可替換使用三個3 X 3 Conv (以上面範例來說,7X7 Conv 等於 三個 3 X 3 Conv,Output皆為2)。
在VGG中,作者認為2X2 pooling可得到更多的資訊量,因此相較AlexNet 3X3 pooling,VGG改用更小的pooling,並不會overlap。
VGG中在training以及testing資料上有做一些不一樣的處理,training的部分有使用Multiple scale training。在每次training 時,從一個固定的亂數範圍中,random一個數字,並縮放至那個數字,並隨機剪裁成所需大小。在testing的部分有使用多個crop進行預測,將資料rescale成一個大小,並利用固定的crop大小預測左上、右上、左下、右下跟中間,並平均成最後預測結果。
VGG其他的貢獻就是證明Deeper > shallow。另外就是有透過實驗證明LRN無法提高準確度,LRN主要是跨feature map進行normalization(pixel-wise),讓資料的差異性更大。對於使用normalization,最近Batch normalization被大家所推崇,可讓收斂速度提升並得到更好結果。但Batch normalization對於Batch size較小時,會失效。因此也有人提出Layer normalization,在Batch size較小的情境下使用。
#Experiment
VGG當初實作是使用C++ Caffet,並用4個Nvidia Titan Black GPU training 模型。每一個Model實驗,作者說都要跑2–3周
這張只要講到VGG就一定會提到的實驗表,而其中D跟E為最後大家廣為人知的VGG-16跟VGG-19
從此A vs A-LRN實驗中,可得知加入LRN會降低準確率
從B vs C實驗中,可發現若加入1 X 1 Conv,可提高準確度,作者認為加入1 X1 Conv將會提高Non-Linearity。此外,作者有實驗將兩個3X3均替換成5X5的Conv做為比較,並發現3X3的accury高出7%
從C vs D中,將1 X 1 Conv替換成 3 X 3 Conv可發現結果也更好了,作者解釋為3 X 3 Conv相較於 1 X 1 Conv可得到更多的空間資訊量。
在D跟E的實驗比較中,可發現在這樣的深度中,結果已經有點緊繃,需要做更多的Data Augmentaion,才可以讓更多更深的模型學得更好。這是VGG模型的缺陷,當模型越來越深,資料在每一層的耗損越來越高(Ex: Gradient Vanishing),使得在後面幾層就無法學習出好的結果。這個問題在ResNet有被解決,因此RestNet才可以疊出幾百層。ResNet在每兩層conv會有一個shortcut將輸入直接連結到後面的網路,因為傳統的conv layer在傳遞資料的時候,不可避免地都會有資料損耗的問題,而此residual unit則某種程度上可以保存資料的完整性
為縮短training時間,VGG在實驗過程有使用transfer learning,BCDE模型的前四個Conv以及FC的weight將使用已經訓練好的A做為initial,其他沒有被A inital的就由模型自行學習。
#Conclusion
VGG論文中的結論主要為使用較小的Conv使model變深可得到較好的準確度以及LRN對模型較無太大的幫助。
作者在賽後仍有優化模型,透過D跟E的ensemble,使模型優化,accuracy接近GoogLeNet。
最後一個比較,VGG模型加深,也隨之帶來的權重大幅提升以及運算時間大幅提升,但對於一個最簡單(single crop)以及層數較接近的CNN,VGG的預測效果相較於AlexNet 、GoogLeNet等均有較好的準確度。
這是這次VGG論文的介紹,感謝大家。
Ref: