給《機器視覺與應用》課程出大作業的時候,正好涉及到這方面內容,所以簡單整理了一下(參考 的課程)。按照之前的套路寫:
是什么
過擬合()是指在模型參數擬合過程中的問題,由于訓練數據包含抽樣誤差,訓練時,復雜的模型將抽樣誤差也考慮在內,將抽樣誤差也進行了很好的擬合。
具體表現就是最終模型在訓練集上效果好;在測試集上效果差。模型泛化能力弱。
為什么
為什么要解決過擬合現象?這是因為我們擬合的模型一般是用來預測未知的結果(不在訓練集內),過擬合雖然在訓練集上效果好,但是在實際使用時(測試集)效果差。同時,在很多問題上,我們無法窮盡所有狀態,不可能將所有情況都包含在訓練集上。所以,必須要解決過擬合問題。
為什么在機器學習中比較常見?這是因為機器學習算法為了滿足盡可能復雜的任務,其模型的擬合能力一般遠遠高于問題復雜度,也就是說,機器學習算法有「擬合出正確規則的前提下,進一步擬合噪聲」的能力。
而傳統的函數擬合問題(如機器人系統辨識),一般都是通過經驗、物理、數學等推導出一個含參模型,模型復雜度確定了,只需要調整個別參數即可。模型「無多余能力」擬合噪聲。
怎么樣
既然過擬合這么討厭,我們應該怎么防止過擬合呢?最近深度學習比較火,我就以神經網絡為例吧:
1. 獲取更多數據
這是解決過擬合最有效的方法,只要給足夠多的數據,讓模型「看見」盡可能多的「例外情況」,它就會不斷修正自己機器學習防止過擬合,從而得到更好的結果:
如何獲取更多數據,可以有以下幾個方法:
2. 使用合適的模型
前面說了,過擬合主要是有兩個原因造成的:數據太少 + 模型太復雜。所以,我們可以通過使用合適復雜度的模型來防止過擬合問題,讓其足夠擬合真正的規則,同時又不至于擬合太多抽樣誤差。
(PS:如果能通過物理、數學建模,確定模型復雜度,這是最好的方法,這也就是為什么深度學習這么火的現在,我還堅持說初學者要學掌握傳統的建模方法。)
對于神經網絡而言,我們可以從以下四個方面來限制網絡能力:
2.1 網絡結構
這個很好理解,減少網絡的層數、神經元個數等均可以限制網絡的擬合能力;
2.2 訓練時間 Early
對于每個神經元而言,其激活函數在不同區間的性能是不同的:
當網絡權值較小時,神經元的激活函數工作在線性區,此時神經元的擬合能力較弱(類似線性神經元)。
有了上述共識之后,我們就可以解釋為什么限制訓練時間(early )有用:因為我們在初始化網絡的時候一般都是初始為較小的權值。訓練時間越長,部分網絡權值可能越大。如果我們在合適時間停止訓練,就可以將網絡的能力限制在一定范圍內。
2.3 限制權值 -decay,也叫正則化()
原理同上,但是這類方法直接將權值的大小加入到 Cost 里,在訓練的時候限制權值變大。以 L2 為例:
訓練過程需要降低整體的 Cost機器學習防止過擬合,這時候,一方面能降低實際輸出與樣本之間的誤差C0,也能降低權值大小。
2.4 增加噪聲 Noise
給網絡加噪聲也有很多方法:
2.4.1 在輸入中加噪聲:
噪聲會隨著網絡傳播,按照權值的平方放大,并傳播到輸出層,對誤差 Cost 產生影響。推導直接看 的 PPT 吧:
在輸入中加高斯噪聲,會在輸出中生成
的干擾項。訓練時,減小誤差,同時也會對噪聲產生的干擾項進行懲罰,達到減小權值的平方的目的,達到與 L2 類似的效果(對比公式)。
2.4.2 在權值上加噪聲
在初始化網絡的時候,用 0 均值的高斯分布作為初始化。Alex 的手寫識別 RNN 就是用了這個方法
, Alex, et al. "A novel for ." IEEE on and 31.5 (2009): 855-868.
- It may work , in ()
2.4.3 對網絡的響應加噪聲
如在前向傳播過程中,讓默寫神經元的輸出變為 或 。顯然,這種有點亂來的做法會打亂網絡的訓練過程,讓訓練更慢,但據 說,在測試集上效果會有顯著提升 (But it does on the test set!)。
3. 結合多種模型
簡而言之,訓練多個模型,以每個模型的平均輸出作為結果。
從 N 個模型里隨機選擇一個作為輸出的期望誤差
,會比所有模型的平均輸出的誤差
大(我不知道公式里的圓括號為什么顯示不了):
大概基于這個原理,就可以有很多方法了:
3.1
簡單理解,就是分段函數的概念:用不同的模型擬合不同部分的訓練集。以隨機森林(Rand )為例,就是訓練了一堆互不關聯的決策樹。但由于訓練神經網絡本身就需要耗費較多自由,所以一般不單獨使用神經網絡做 。
3.2
既然訓練復雜神經網絡比較慢,那我們就可以只使用簡單的神經網絡(層數、神經元數限制等)。通過訓練一系列簡單的神經網絡,加權平均其輸出。
3.3
這是一個很高效的方法。
在訓練時,每次隨機(如 50% 概率)忽略隱層的某些節點;這樣,我們相當于隨機從 2^H 個模型中采樣選擇模型;同時,由于每個網絡只見過一個訓練數據(每次都是隨機的新網絡),所以類似的做法,這就是我為什么將它分類到「結合多種模型」中;
此外,而不同模型之間權值共享(共同使用這 H 個神經元的連接權值),相當于一種權值正則方法,實際效果比 L2 更好。
4. 貝葉斯方法
這部分我還沒有想好怎么才能講得清楚,為了不誤導初學者,我就先空著,以后如果想清楚了再更新。當然,這也是防止過擬合的一類重要方法。
綜上: