1. 程式人生 > >TensorFlow 過擬合與正則化(regularizer)

TensorFlow 過擬合與正則化(regularizer)

sdn 就是 one 方式 regular logs none 使用 log

所謂過擬合,就是當一個模型過於復雜後,它可以很好的處理訓練數據的每一個數據,甚至包括其中的隨機噪點。而沒有總結訓練數據中趨勢。使得在應對未知數據時錯誤裏一下變得很大。這明顯不是我們要的結果。

我們想要的是在訓練中,忽略噪點的幹擾,總結整體趨勢。在應對未知數據時也能保持訓練時的正確率。

技術分享圖片

上圖中第一種情況,模型過於簡單,未能很好的反應數據的總體趨勢。

第三種情況就屬於過擬合的情況。雖然完美的反應了練習數據的狀況,但是明顯被噪點影響了。

第二種情況是我們想要的理想狀況。

為了避免過擬合,通常使用的方法就是正則化(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

TensorFlow 過擬合與正則化(regularizer)