所謂過擬合,就是當一個模型過於復雜后,它可以很好的處理訓練數據的每一個數據,甚至包括其中的隨機噪點。而沒有總結訓練數據中趨勢。使得在應對未知數據時錯誤里一下變得很大。這明顯不是我們要的結果。
我們想要的是在訓練中,忽略噪點的干擾,總結整體趨勢。在應對未知數據時也能保持訓練時的正確率。
上圖中第一種情況,模型過於簡單,未能很好的反應數據的總體趨勢。
第三種情況就屬於過擬合的情況。雖然完美的反應了練習數據的狀況,但是明顯被噪點影響了。
第二種情況是我們想要的理想狀況。
為了避免過擬合,通常使用的方法就是正則化(regularizer)。
正則化的思想就是在損失函數中加入刻畫模型復雜度的指標。假設用於刻畫模型在訓練數據上的表現的損失函數為J(θ),那么在優化時不是直接優化J(θ),而是優化J(θ) + λR(w)。
其中R(w)表示的是模型復雜度。λ表示模型復雜度損失在總損失中的比例。
對於θ表示的是一個神經網絡中所有參數,包括weight和 biases。
而復雜度只由權重(weight)來決定。
常用的刻畫復雜度R(w)有兩種:
L1
L2:
兩種思想都是希望限制權重的大小,使得模型不能擬合訓練數據中的隨機噪點。
兩種方式在TensorFlow中的提供的函數為:
tf.contrib.layers.l1_regularizer(scale, scope=None)
tf.contrib.layers.l2_regularizer(scale, scope=None)
參考資料:
《Tensorflow+實戰Google深度學習框架》4.4.2節
http://blog.csdn.net/u012436149/article/details/70264257
http://blog.csdn.net/sinat_29957455/article/details/78397601