overfitting就是過擬合, 其直觀的表現如下圖所示,隨著訓練過程的進行,模型複雜度增加,在training data上的error漸漸減小,但是在驗證集上的error卻反而漸漸增大——因為訓練出來的網路過擬合了訓練集, 對訓練集外的資料卻不work, 這稱之為泛化(generalization)效能不好。泛化效能是訓練的效果評價中的首要目標,沒有良好的泛化,就等於南轅北轍, 一切都是無用功。
實際訓練中, 降低過擬合的辦法一般如下:
正則化(regularization)
l2正則化:目標函式中增加所有權重w引數的平方之和, 逼迫所有w盡可能趨向零但不為零. 因為過擬合的時候, 擬合函式需要顧忌每乙個點, 最終形成的擬合函式波動很大, 在某些很小的區間裡, 函式值的變化很劇烈, 也就是某些w非常大. 為此, l2正則化的加入就懲罰了權重變大的趨勢.
l1正則化:目標函式中增加所有權重w引數的絕對值之和, 逼迫更多w為零(也就是變稀疏. l2因為其導數也趨0, 奔向零的速度不如l1給力了). 大家對稀疏規則化趨之若鶩的乙個關鍵原因在於它能實現特徵的自動選擇。一般來說,xi的大部分元素(也就是特徵)都是和最終的輸出yi沒有關係或者不提供任何資訊的,在最小化目標函式的時候考慮xi這些額外的特徵,雖然可以獲得更小的訓練誤差,但在**新的樣本時,這些沒用的特徵權重反而會被考慮,從而干擾了對正確yi的**。稀疏規則化運算元的引入就是為了完成特徵自動選擇的光榮使命,它會學習地去掉這些無用的特徵,也就是把這些特徵對應的權重置為0。
隨機失活(dropout)
在訓練的執行的時候,讓神經元以超引數p的概率被啟用(也就是1-p的概率被設定為0), 每個w因此隨機參與, 使得任意w都不是不可或缺的, 效果類似於數量巨大的模型整合。
逐層歸一化(batch normalization)
這個方法給每層的輸出都做一次歸一化(網路上相當於加了乙個線性變換層), 使得下一層的輸入接近高斯分布. 這個方法相當於下一層的w訓練時避免了其輸入以偏概全, 因而泛化效果非常好.
提前終止(early stopping)
理論上可能的區域性極小值數量隨引數的數量呈指數增長, 到達某個精確的最小值是不良泛化的乙個**. 實踐表明, 追求細粒度極小值具有較高的泛化誤差。這是直觀的,因為我們通常會希望我們的誤差函式是平滑的, 精確的最小值處所見相應誤差曲面具有高度不規則性, 而我們的泛化要求減少精確度去獲得平滑最小值, 所以很多訓練方法都提出了提前終止策略. 典型的方法是根據交叉叉驗證提前終止: 若每次訓練前, 將訓練資料劃分為若干份, 取乙份為測試集, 其他為訓練集, 每次訓練完立即拿此次選中的測試集自測. 因為每份都有一次機會當測試集, 所以此方法稱之為交叉驗證. 交叉驗證的錯誤率最小時可以認為泛化效能最好, 這時候訓練錯誤率雖然還在繼續下降, 但也得終止繼續訓練了.
過擬合及解決方法
在機器學習演算法中,我們經常將原始資料集分為三部分 訓練集 training data 驗證集 validation data 測試集 testing data 1.validation data是什麼?它事實上就是用來避免過擬合的。在訓練過程中,我們通經常使用它來確定一些超引數 比方,依據vali...
過擬合及解決方法
過擬合,指的是模型在訓練集上表現的很好,但是在交叉驗證集合測試集上表現一般,也就是說模型對未知樣本的 表現一般,泛化 generalization 能力較差。通俗一點地來說過擬合就是模型把資料學習的太徹底,以至於把雜訊資料的特徵也學習到了。在機器學習演算法中,我們常常將原始資料集分為三部分 trai...
欠擬合 過擬合及其解決方法
在我們機器學習或者訓練深度神經網路的時候經常會出現欠擬合和過擬合這兩個問題,但是,一開始我們的模型往往是欠擬合的,也正是因為如此才有了優化的空間,我們需要不斷的調整演算法來使得模型的表達能拿更強。但是優化到了一定程度就需要解決過擬合的問題了,這個問題也在學術界討論的比較多。之前搜了很多有的部落格,講...