什么是過擬合(overfitting?)?
其實過擬合就相當于我們生活中的自負,機器學習模型于自信,已經(jīng)到了自負的階段了,這樣往往得不到我們想要的結(jié)果.?

上圖分類的例子中(我們的目的是把紅色和藍色區(qū)分開來),其中黑色的曲線是正常的模型。然而綠色的線就是過擬合模型,盡管它很精確的區(qū)分了訓練數(shù)據(jù),但是并沒有具體描述這些數(shù)據(jù)的整體特征,因此我們換上新的測試數(shù)據(jù)時,適應性會很差。

由回歸例子的圖可以看出,第三條線盡管經(jīng)過了所有的訓練數(shù)據(jù)點,但是不能反映數(shù)據(jù)的趨勢,因此它的預測能力會很不足。
解決方法:
方法一:?
增加數(shù)據(jù)量, 大部分過擬合產(chǎn)生的原因是因為數(shù)據(jù)量太少了. 如果我們有成千上萬的數(shù)據(jù), 紅線也會慢慢被拉直, 變得沒那么扭曲 .?
方法二:

運用正規(guī)化. 簡化機器學習的關鍵公式為 y=Wx . W為機器需要學習到的各種參數(shù). 在過擬合中, W 的值往往變化得特別大或特別小. 為了不讓W變化太大, 我們在計算誤差上做些手腳. 原始的 cost 誤差是這樣計算, cost = 預測值-真實值的平方. 如果 W 變得太大, 我們就讓 cost 也跟著變大, 變成一種懲罰機制. 所以我們把 W 自己考慮進來. 這里 abs 是絕對值. 這一種形式的 正規(guī)化, 叫做 l1 正規(guī)化. L2 正規(guī)化和 l1 類似, 只是絕對值換成了平方. 其他的l3, l4 也都是換成了立方和4次方等等. 形式類似. 用這些方法,我們就能保證讓學出來的線條不會過于扭曲.
方法三:
還有一種專門用在神經(jīng)網(wǎng)絡的正規(guī)化的方法, 叫作 dropout. 在訓練的時候, 我們隨機忽略掉一些神經(jīng)元和神經(jīng)聯(lián)結(jié) , 是這個神經(jīng)網(wǎng)絡變得”不完整”. 用一個不完整的神經(jīng)網(wǎng)絡訓練一次.第二次再隨機忽略另一些, 變成另一個不完整的神經(jīng)網(wǎng)絡. 有了這些隨機 drop 掉的規(guī)則, 我們可以想象其實每次訓練的時候,我們都讓每一次預測結(jié)果都不會依賴于其中某部分特定的神經(jīng)元, Dropout 的做法是從根本上讓神經(jīng)網(wǎng)絡沒機會過度依賴.
dropout 解決 overfitting 問題
代碼:


結(jié)果:
(1)當keep_prob=1時,會出現(xiàn)過擬合。

由圖我們可以看出,test和train存在著差距。
(2)當keep_prob=0.5時。

由圖可以看出,test和train幾乎重合,這就體現(xiàn)了dropout 解決 overfitting 問題。