【深度學習】模型選擇、欠/過擬合和感受野(三)

寫在最前面的話:這一篇文章要整理的知識點有點稀疏,內容不是很多。

模型選擇

在深度學習中,不同的參數設置,不同的隱層數量對模型都有相應的影響,但是經過訓練後,它們最終都可以達到相同的實驗結果,那麼我們該如何對這些模型作選擇呢,對不同的條件下的模型選出一個相對較好的模型?其實,模型的選擇方式可以通過超參數的設置,模型的容量、驗證集的情況來定。

泛化能力

在【深度學習】理解欄目(二)中,我們提到了泛化能力這個概念。泛化能力 是指模型對未知數據的預測能力,是一種用於評估機器學習算法的能力的指標。而泛化誤差可以反映模型的泛化能力,誤差越小,模型越穩定。泛化誤差(generalization error) 又是指訓練後的模型在測試集上的誤差,也叫測試誤差(test error)。通常情況下,我們都是利用最小化訓練誤差來訓練模型,但是我們並不關心訓練模型的誤差結果,而是關心測試誤差,因爲測試誤差是模型在測試集上的平均損失,反映了模型對未知測試數據集的預測能力。

驗證數據集跟測試集作用差不多,驗證集也是未經模型訓練過的數據集,但從嚴格意義上說,測試集只能在模型訓練完畢,所有參數都被選定後才能使用的,我們不能在訓練過程中使用測試集來選擇參數,更不能從訓練誤差中估計出泛化誤差。因此,我們可通過預留一小部分數據,作爲訓練時用於輔助模型在訓練過程中對參數的選擇,這部分數據即爲驗證集。

過擬合和欠擬合

決定機器學習算法效果的兩個重要因素是:降低訓練誤差、縮小訓練誤差和測試誤差的差距。而這兩個因素主要受到模型複雜度訓練數據集的大小的影響,因而產生兩個典型問題:過擬合和欠擬合。

過/欠擬合
過擬合(overfitting): 選擇的模型中包含了過多的參數,以至於模型對已知數據(訓練集)預測得非常好,但是對於未知的數據(測試集)預測結果很差,使得模型的訓練誤差遠小於它在測試數據集上的誤差,這種現象稱爲過擬合。產生的原因是訓練樣本中有些標註錯誤的樣本或者樣本本身的特點被當作潛在樣本都具有的一般性質,因而造成泛化能力下降。過擬合不能避免,只能通過減少訓練集的大小,或者採用正則化,又或者使用dropout(在隨機層去掉一部分神經元)來緩解。

欠擬合(underfitting):選擇的模型包含參數太少,以至於模型對已知數據(訓練集)的預測都很差,使得訓練誤差較大,就更不用說測試集的情況了。產生的原因是學習能力低下。可採用增加訓練數據,優化算法來解決。

模型複雜度

模型複雜度,直觀地拿多項式函數來說,是高階和低階的區別,高階多項式參數多,而低階多項式參數少,因此高階比低階複雜度高。模型的複雜度也反映模型的容量大小。容量小的模型容易出現欠擬合,模型擬合能力過弱;容量大的模型容易出現過擬合,模型擬合能力過強。我們可以通過選擇不同的假設空間來改變模型的容量。

假設空間:是指所有可能的函數/模型組成的一個空間,它代指模型的函數集合,即模型的表示容量(representational capacity),但由於某些限制(比如優化算法不完善,損失函數不好等),無法使得所有可能的函數都實現,只能有其中一部分函數成功,稱爲模型的有效容量(effective capacity)。模型的有效容量一般小於模型的表示容量。

如何在模型的假設空間中選出最佳函數呢?對於實際操作起來,這是一個非常困難的優化問題,鑑於侷限,在實際應用中我們只能選取一個訓練誤差足夠低的函數作爲最佳函數。

感受野

最後,我突然想起感受野這個概念,因此想着順便梳理一下(專業術語插得有點突然…)。感受野的解釋是 在神經網絡中,用來表示網絡內部的不同位置的神經元對輸入圖像的感受範圍的大小。(我還是不太懂,“感受”這詞有點抽象)再具體一點,就是神經網絡的每一層的輸出(叫特徵圖)上的每一個像素點對應輸入圖上的區域大小。如下圖所示:
感受野
有圖就很好理解了。上圖中,有上下兩個矩形:上爲小矩形,假設是當前層輸出的特徵圖,一共12個淺灰色小格;下爲大矩形,假設爲當前層爲輸入的圖像,一共28個淺灰色小格,(深灰格是池化後的結果),那麼輸出的特徵圖中,紅色這一個像素格對應的是下面紅框的區域爲它的感受野。

感受野如何計算?

瞭解了什麼是感受野之後,該如何計算感受野呢?下面要舉栗子啦~~
感受野計算
原圖(Raw Image)是一個7x7大小的矩形,初始輸入圖像的每個單元的感受野被定義爲1。第一層卷積(conv1)輸出的是3x3大小的特徵圖,每個單元的感受野的大小爲3,第二層卷積(conv2)輸出的是2x2大小的特徵圖,每個單元的感受野爲5。

計算方式如下,爲了方便解釋,我們需要定義一些符號,用rnr_n表示第n格卷積層中,每個單元的感受野的大小;knk_nsns_n分別表示第n格卷積層的kernel size核大小和stride步長。對Raw Image進行kernel_size=3, stride=2,padding=0的卷積操作得到conv1的輸出,那麼根據卷積輸出公式:
Featuresize=(Inputsizekernelsize+2padding)stride+1Feature_{size}=\frac{(Input_{size}-kernel_{size}+2*padding)}{stride}+1
得到輸出特徵圖的大小爲(7-3)/2+1=3,根據感受野大小的公式(來自知乎上一個大佬的總結):
rn=rn1+(kn1)i=1n1sir_n=r_{n-1}+(k_n-1)\prod_{i=1}^{n-1}s_i
其中r0=1r_0=1,得到conv1的每個單元的感受野爲(1+(3-1)x1)=3,conv2的每個單元的感受野爲(3+(2-1)x2)=5。

感受野的中心公式:
centern=centern1+(kn12paddingn)sn1center_n=center_{n-1}+(\frac{k_n-1}{2}-padding_n)*s_{n-1}

那麼,知道感受野有什麼作用呢?別人說,理解感受野有兩個好處,一,理解卷積的本質;二,更好的理解CNN的整個架構。我認爲,理解感受野能幫助設計網絡結構,可以大概知道每一層網絡覆蓋原圖的哪一部分,獲取了什麼特徵的信息,如果該層的感受野的值很大,那麼表示它包含的原圖範圍很大,獲取的特徵可能是高層次特徵,相反,感受野很小,則包含的特徵趨向於局部細節,更是低層次的特徵。因此,知道感受野,可以用來大致判斷神經網絡中每一層的抽象意義。

總結

本文主要介紹了模型選擇、欠擬合、過擬合以及感受野的相關概念和計算,又進一步瞭解地掃盲深度學習的知識點~哈哈,今天的筆記特別簡單,理解也很輕鬆!還是那句話,如有錯誤,歡迎指出,謝謝支持!

參考文章:
http://www.huaxiaozhuan.com/%E7%BB%9F%E8%AE%A1%E5%AD%A6%E4%B9%A0/chapters/9_model_selection.html
https://zhuanlan.zhihu.com/p/28492837
https://www.cnblogs.com/augustone/p/10528148.html
添加鏈接描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章