天天看點

CNN基礎論文 精讀+複現----AlexNet(一)

文章目錄

  • ​​前言​​
  • ​​1-2頁​​
  • ​​摘要與引言​​
  • ​​資料集​​
  • ​​3-5頁​​
  • ​​Relu函數(ReLU Nonlinearity)​​
  • ​​多GPU并行(Training on Multiple GPUs)​​
  • ​​局部響應歸一化( Local Response Normalization)​​
  • ​​重疊池化(Overlapping Pooling)​​
  • ​​整體結構(Overall Architecture)​​
  • ​​5-6頁​​
  • ​​減少過拟合(Reducing Overfitting)​​
  • ​​資料增強​​
  • ​​Dropout​​

前言

上個禮拜複現了 LeNet-5,沒看過的可以去看一下,CNN基礎論文複現----LeNet5 (一). 這幾天弄另一篇比較知名的論文AlexNet。

論文原版和中英文對照版放GitHub上了:​​https://github.com/shitbro6/paper​​

這篇論文和上一篇有很多相同的知識點,建議大概過一下LeNet,再看這個會輕松一些。

還好這篇文章比較短,隻有9頁。

1-2頁

摘要與引言

這篇文章的結構比上一篇LeNet-5要清晰的多。

首先摘要說了一下背景,就是有個團隊他們發明了一種新的網絡模型,用它跑了一下2010年的競賽資料集,取得了很好的效果,然後又改進了一下這個網絡模型,并拿他去參加了2012年的競賽,取得了第一名的好成績,并且比第二名的正确率好很多。

摘要中有一句話 ​

​we achieved top-1 and top- 5 error rates of 37.5% and 17.0%​

​ 簡單的說一下這裡提到的 top-1 和 top-5錯誤率,

top-1:通俗的講 假如模型預測隻有一張狗的圖檔,且隻能輸出一個預測結果,如果預測的結果剛好為狗,則叫top-1正确率,反之,預測錯誤就叫top-1錯誤率。

top-5:同理top-1 ,這裡輸出的為五個預測結果,五個預測結果中錯誤的機率,就是top-5錯誤率。

之後的引言部分介紹了一下目前訓練模型的弊端,就是在機器上訓練的很好,然後放到現實生活中就不太行了,是以為了盡量改善這個情況,需要更好的模型和更大的資料(也就是防止過拟合導緻現實情況表現變差),整篇文章似乎都在圍繞如果防止過拟合這個主要問題展開的讨論。

這兩部分提到的一些概念:

  • 卷積層、池化層、全連接配接層這種就不說了,上一篇文章中也說過了,可以看下面的連結。卷積神經網絡基礎
  • softmax:這個函數一般用于分類中的問題,就是将輸出的值通過softmax映射到【0,1】上,用于表示機率問題,我覺得知道有這個作用就行了。​​深究softmax​​
  • 非飽和神經元(non-saturating neurons): 相對于飽和神經元來講,飽和神經元最後的值會被擠壓到一個特定的區間,比如sigmoid函數的[0,1] tanh函數的[-1,1],而這個文章中的非飽和函數使用的是relu 函數,他沒有限制到特定的區間,是以沒有最大值限制。
  • 過拟合,dropout:在我前一篇的文章介紹過了,這裡就簡單說一下,過拟合就是防止過分拟合訓練集,把噪聲也訓練上了,dropout就是訓練的時候故意扔掉一些特征,目的也是防止過拟合。

引言最後作者說了一下,網絡共有8個學習層 其中,5個卷積層, 3個全連接配接層。

引言的最後作者說 ,使用 當年的 GTX580 上訓練了五六天~好家夥,一會我就扔谷歌雲上看看訓練多久,也不知道谷歌雲能不能線上下載下傳這麼大的資料集,我可不想下我電腦上。。。

資料集

第二頁中間介紹了一下論文使用的資料集–ImageNet ,就是作者提到的競賽中使用的資料集。

剛看了一下網上的簡介,ImageNet資料集有1400W+的圖檔,2W多個類别??離譜啊,據說有1T的大小,我硬碟才512G。我感覺這個資料集如果雲上下不下來的話我就用CIFAR10了。。。。

這裡面的分辨率有很多種不同的像素分辨率,然後論文中說通過采樣固定到統一的 256 * 256分辨率。

3-5頁

上來第一段介紹了一下網絡 它包含八個學習層–5 個卷積層和 3 個全連接配接層。

Relu函數(ReLU Nonlinearity)

作者提到使用Relu函數,可以提高訓練速度,比tanh等快了6倍,并且還能防止梯度消失的現象。

前面介紹非飽和函數的時候也提到了,Relu函數通俗講就是要麼取0要麼取本身 , 通常情況下 ​

​f(x) = max(0,x)​

​。

如果網絡參數設定的不合理,很有可能導緻激活函數的計算一直在0區間内,造成輸出的梯度一直是0區間,最後導緻模型崩潰(訓練速度大幅增加)。

Relu函數也有一定缺點,這裡就不叙述了,記得設定較小的學習率。

對于Relu函數過多的原理我認為沒必要深究,對比LeNet-5中的sigmoid和tanh ,隻知道為啥要用以及優缺點就行了。

多GPU并行(Training on Multiple GPUs)

這是第三章第二小節提到的概念,由于當時GPU不是很好,作者使用的 GTX580進行訓練,GPU發展到現在,又有雲伺服器,如果想在現在用多路GPU,也隻是Pytorch調用API的問題,是以我覺得這一章大概看一下就行了,知道有這麼個事就OK。

局部響應歸一化( Local Response Normalization)

Local Response Normalization 簡稱 LRN。

第三章第三小節,文章上來說了一堆公式,LRN實際上就是起 ‘抑制’ Relu函數的作用,剛才上面已經提到了非飽和神經元,就是說Relu函數并沒有将結果擠壓到一個特定的範圍中,是以要對Relu得到的結果進行歸一化,使用局部歸一化的方案有助于增加泛化能力。

泛化能力:

指算法模型對于未知資料的預測能力。

若算法學習到了資料模型背後的規律,則當換一組資料模型時,算法依舊能夠給出合理的輸出,則表明該算法具有不錯的泛化能力。

重疊池化(Overlapping Pooling)

之前在LeNet-5中的那個池化,是池化卷積核k=X 則步長也就為X,是以在卷積視窗移動的過程中是沒有元素重疊的(就是沒有元素被重複使用)。在這裡作者将使用 卷積核尺寸 > 移動步長 的情況,這樣的話就有元素被使用多次,發生重疊。

經過作者的測試,發現這樣使用池化層,降低了錯誤率,且不易發生過拟合現象。

整體結構(Overall Architecture)

這一節作者描述了一下他的網絡結構。

給出了一張圖:

CNN基礎論文 精讀+複現----AlexNet(一)

這張圖相比較LeNet-5的圖,看上去亂的多,原因就是因為作者将多路GPU并行的情況描述在了圖中,是以看上去會沒那麼簡潔。在網上找到下面一個多路GPU簡化版:

CNN基礎論文 精讀+複現----AlexNet(一)

由于我們現在使用單GPU運作,是以找了一個單GPU版本:

CNN基礎論文 精讀+複現----AlexNet(一)

這個圖看上去就清晰多了。

5-6頁

減少過拟合(Reducing Overfitting)

前面一直在提,使用重疊池化,使用dropout,使用Relu函數,都是為了減少過拟合,因為訓練集資料量很大,拟合過度會導緻結果出現嚴重偏差。

資料增強

文章中提到使用了兩種方式進行資料增強,這兩種方式都是通過很少的計算量進行圖像的變換。在代碼中使用CPU進行圖像變換生成,而訓練模型使用GPU是以不占計算量,

第一種方法,作者将輸入的 256*256尺寸的圖檔 ,随機扣一個224 * 224尺寸的圖檔,這樣就導緻每次輸入的和原始的有稍微的差別,作者測試将 一個圖檔取四個角和中間,然後水準旋轉,得到十個樣本,通過softmax進行平均。

第二種方法,就是 改變RGB通道的強度,實際上就是對RGB通道進行某種運算,怎麼算的沒必要深究(我沒看懂),導緻顔色和明暗發生變化,即對圖像加噪。然後說這個方案降低了 top-1 1%以上的錯誤率。

Dropout

前面在LeNet-5中已經出現了類似dropout的算法,這裡算是正式提出了?

前面已經說了很多次這個算法了,簡單了解就是在正常的網絡訓練中,每一個部分,或者說每一個特征都參與了運算。而在dropout中,故意的丢掉一部分特征。比如進行人物識别的時候,故意隻給半邊臉。

像下面這樣:

CNN基礎論文 精讀+複現----AlexNet(一)

繼續閱讀