過擬合與欠擬合(Python深度學習 學習記錄)

2021-10-06 14:33:20 字數 1809 閱讀 3875

機器學習的根本問題是優化和泛化之間的對立。優化是指調節模型以在訓練資料上得到最佳效能(即機器學習中的學習),而泛化是指訓練好的模型在前所未見的資料上的效能好壞。機器學習的目的當然是得到良好的泛化,但你無法控制泛化,只能基於訓練資料調節模型。

訓練開始時,優化和泛化是相關的:訓練資料上的損失越小,測試資料上的損失也越小。這時的模型是欠擬合的,即仍有改進的空間,網路還沒有對訓練資料中所有相關模式建模。但在訓練資料上迭代一定次數之後,泛化不再提高,驗證指標先是不變,然後開始變差,即模型開始過擬合。這時模型開始學習僅和訓練資料有關的模式,但這種模式對新資料來說是錯誤的或無關緊要的。

為了防止模型從訓練資料中學到錯誤或無關緊要的模式,最優解決方法是獲取更多的訓練資料。模型的訓練資料越多,泛化能力自然也越好。如果無法獲取更多資料,次優解決方法是調節模型允許儲存的資訊量,或對模型允許儲存的資訊加以約束。如果乙個網路只能記住幾個模式,那麼優化過程會迫使模型集中學習最重要的模式,這樣更可能得到良好的泛化。這種降低過擬合的方法叫作正則化。我們先介紹幾種最常見的正則化方法

防止過擬合的最簡單的方法就是減小模型大小,即減少模型中可學習引數的個數(這由層數和每層的單元個數決定)。在深度學習中,模型中可學習引數的個數通常被稱為模型的容量。直觀上來看,引數更多的模型擁有更大的記憶容量,因此能夠在訓練樣本和目標之間輕鬆地學會完美的字典式對映,這種對映沒有任何泛化能力。例如,擁有 500 000 個二進位制引數的模型,能夠輕鬆學會 mnist 訓練集中所有數字對應的類別——我們只需讓 50 000 個數字每個都對應 10 個二進位制引數。但這種模型對於新數字樣本的分類毫無用處。始終牢記:深度學習模型通常都很擅長擬合訓練資料,但真正的挑戰在於泛化,而不是擬合。

與此相反,如果網路的記憶資源有限,則無法輕鬆學會這種對映。因此,為了讓損失最小化,網路必須學會對目標具有很強**能力的壓縮表示,這也正是我們感興趣的資料表示。同時請記住,你使用的模型應該具有足夠多的引數,以防欠擬合,即模型應避免記憶資源不足。在容量過大與容量不足之間要找到乙個折中。

不幸的是,沒有乙個魔法公式能夠確定最佳層數或每層的最佳大小。你必須評估一系列不同的網路架構(當然是在驗證集上評估,而不是在測試集上),以便為資料找到最佳的模型大小。要找到合適的模型大小,一般的工作流程是開始時選擇相對較少的層和引數,然後逐漸增加層的大小或增加新層,直到這種增加對驗證損失的影響變得很小。

給定一些訓練資料和一種網路架構,很多組權重值(即很多模型)都可以解釋這些資料。簡單模型比複雜模型更不容易過擬合。這裡的簡單模型是指引數值分布的熵更小的模型(或引數更少的模型)。因此,一種常見的降低過擬合的方法就是強制讓模型權重只能取較小的值,從而限制模型的複雜度,這使得權重值的分布更加規則。這種方法叫作權重正則化,其實現方法是向網路損失函式中新增與較大權重值相關的成本。

這個成本有兩種形式。

l1 正則化:新增的成本與權重係數的絕對值(權重的 l1 範數)成正比。

l2 正則化:新增的成本與權重係數的平方(權重的 l2 範數)成正比。

dropout 是神經網路最有效也最常用的正則化方法之一,它是由多倫多大學的 geoffrey hinton和他的學生開發的。對某一層使用 dropout,就是在訓練過程中隨機將該層的一些輸出特徵捨棄(設定為 0)。假設在訓練過程中,某一層對給定輸入樣本的返回值應該是向量 [0.2, 0.5, 1.3, 0.8, 1.1]。使用 dropout 後,這個向量會有幾個隨機的元素變成 0,比如 [0, 0.5, 1.3, 0, 1.1]。dropout 比率(dropout rate)是被設為 0 的特徵所佔的比例,通常在 0.2~0.5範圍內。測試時沒有單元被捨棄,而該層的輸出值需要按 dropout 比率縮小,因為這時比訓練時有更多的單元被啟用,需要加以平衡。

其核心思想是在層的輸出值中引入雜訊,打破不顯著的偶然模式。如果沒有雜訊的話,網路將會記住這些偶然模式。

欠擬合與過擬合

在用機器學習搭建模型時,經常會碰到這樣一種情況,你的模型演算法在樣本資料中匹配的非常完美。但用新資料測試,發現模型結果和實際差距非常大。那麼恭喜你!你掉進了機器學習中常見的乙個大坑 過擬合。什麼是過擬合呢?機器學習本質上是通過建立資料模型,使其和現有資料相吻合,從而找到資料中內在的規律。如下面三張圖...

欠擬合與過擬合

一 1.欠擬合 訓練集上表現很差 這種情況在測試集上也不會好 高偏差 bias 解決辦法 選擇更複雜的網路 有正則項就減小正則項引數等。2.過擬合 訓練集上表現很好,但測試集上表現很差,高方差 variance 解決辦法 採用更多資料 如果有正則化就增加正則化引數,沒有就加上正則化 dropout等...

過擬合與欠擬合

過擬合與欠擬合 欠擬合 個人理解就是由於資料少 正則化太厲害 模型複雜度太簡單等原因,導致模型沒有學習到足夠的規律,準確率與模型可達到的準確率差距較大。但是模型在訓練集和測試集的曲線趨勢是正常收斂的。解決方法為有 增加特徵,尋找與標籤相關性較大的特徵,在保證特徵沒有共線性的前提下,增加特徵的數量 減...