過擬合是建模過程中經常遇到的問題,我自己在建模時也經常先把結果做到過擬合,然後再不斷地簡化模型,減少過擬合。當然也在過擬合上吃過大虧,上個月我和幾個小夥伴一起打了一場kaggle,不斷的地去刷LB,大概刷到了銀牌的位置,結果出結果時我們掉到了600多名,連銅牌都沒拿到TT。在ML和DL中解決過擬合的方法有一些差異,但基本的思想還是通用的,本文主要整理了一下在CNN中如何減少過擬合的方法。

1.Early Stopping

對模型進行訓練的過程即是對模型的引數進行學習更新的過程,這個引數學習的過程往往會用到一些迭代方法,如梯度下降(Gradient descent)學習演算法。

Early stopping

便是一種迭代次數截斷的方法來防止過擬合的方法,即在模型對訓練資料集迭代收斂之前停止迭代來防止過擬合。

Early stopping方法的具體做法是:在每一個Epoch結束時計算validation data的accuracy,當accuracy不再提高時,就停止訓練。這種做法很符合直觀感受,因為accurary都不再提高了,在繼續訓練也是無益的,只會提高訓練的時間。並不是說validation accuracy一降下來便認為不再提高了,因為可能經過這個Epoch後,accuracy降低了,但是隨後的Epoch又讓accuracy又上去了,所以不能根據一兩次的連續降低就判斷不再提高。一般的做法是,在訓練的過程中,記錄到目前為止最好的

validation accuracy

,當連續

10

Epoch

(或者更多次)沒達到最佳

accuracy

時,則可以認為

accuracy

不再提高了。此時便可以停止迭代了。

防止過擬合有哪些方法

2.Dada Augmentation

“資料和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已!“透過資料集擴增得到更多符合要求的資料,這樣目標空間(target domain)和源空間(source domain)的資料分佈(distribution)越趨近於一致,從而減少了過擬合的風險。

防止過擬合有哪些方法

CNN中的Dada Augmentation

影象識別中資料集擴增一般有以下方法:

水平翻轉

隨機裁剪、平移變換

顏色、光照變換

3.Regularization

L1正則化/Lasso

偏向於稀疏,它會自動進行特徵選擇,去掉一些沒用的特徵,也就是將這些特徵對應的權重置為0。

L1正則化將係數w的l1範數作為懲罰項加到損失函式上,由於正則項非零,這就迫使那些弱的特徵所對應的係數變成0。因此L1正則化往往會使學到的模型很稀疏(係數w經常為0),這個特性使得L1正則化成為一種很好的特徵選擇方法。

L2正則化/Ridge regression

L2主要功能是為了防止過擬合,當要求引數越小時,說明模型越簡單,而模型越簡單則,越趨向於平滑,從而防止過擬合。

L2正則化將係數向量的L2範數新增到了損失函式中。由於L2懲罰項中係數是二次方的,這使得L2和L1有著諸多差異,最明顯的一點就是,L2正則化會讓係數的取值變得平均。對於關聯特徵,這意味著他們能夠獲得更相近的對應係數。還是以Y=X1+X2為例,假設X1和X2具有很強的關聯,如果用L1正則化,不論學到的模型是Y=X1+X2還是Y=2X1,懲罰都是一樣的,都是2alpha。但是對於L2來說,第一個模型的懲罰項是2alpha,但第二個模型的是4*alpha。可以看出,係數之和為常數時,各系數相等時懲罰是最小的,所以才有了L2會讓各個係數趨於相同的特點。

防止過擬合有哪些方法

Regularization示意圖

可以看出,L2正則化對於特徵選擇來說一種穩定的模型,不像L1正則化那樣,係數會因為細微的資料變化而波動。所以L2正則化和L1正則化提供的價值是不同的,L2正則化對於特徵理解來說更加有用:表示能力強的特徵對應的係數是非零。

因此,一句話總結就是:L1會趨向於產生少量的特徵,而其他的特徵都是0,而L2會選擇更多的特徵,這些特徵都會接近於0。Lasso在特徵選擇時候非常有用,而Ridge就只是一種規則化而已。

4.Dropout

Dropout是指在深度學習網路的訓練過程中,對於指定的網路層,以一定的機率使某些神經元停止工作。對於隨機梯度下降來說,由於是隨機丟棄,故而每一個mini-batch都在訓練不同的網路。

防止過擬合有哪些方法

Dropout示意圖

為何有效:

每次從原始的網路中找到一個更瘦的網路進行訓練,計算更快;

Droupout是特殊的Ensemble,即每次做完dropout後,都會產生一個新的神經網路模型,dropout rate = 0。5的時候隨機生成的網路結構最多。

強迫每一個神經單元和隨機挑選出來的其他神經單元共同工作,消除減弱了神經元節點間的聯合適應性,增強了泛化能力。

注意點:

在訓練時,每個神經單元都可能以機率 p 被去除,那麼在測試階段,每個神經單元都是存在的,因此權重引數w要乘以p,否則會造成預測結果偏大。

參考資料:

推薦閱讀: