深度學習中的欠擬合和過擬合簡介
通常情況下,當我們訓練機器學習模型時,我們可以使用某個訓練集,在訓練集上計算一些被稱為訓練誤差(training error)的度量誤差,目標是降低訓練誤差。機器學習和最佳化不同的地方在於,我們也希望泛化誤差(generalization error)(也被稱為測試誤差(test error))很低。泛化誤差被定義為新輸入的誤差期望。這裡,期望的計算基於不同的可能輸入,這些輸入採自於系統在現實中遇到的分佈。
通常,我們度量模型在訓練集中分出來的測試集(test set)樣本上的效能,來評估機器學習模型的泛化誤差。
當我們只能觀測到訓練集時,我們如何才能影響測試集的效能呢?統計學習理論(statistical learning theory)提供了一些答案。如果訓練集和測試集的資料是任意收集的,那麼我們能夠做的確實很有限。如果我們可以對訓練集和測試集資料的收集方式有些假設,那麼我們能夠對演算法做些改進。
訓練集和測試集資料透過資料集上被稱為資料生成過程(data generating process)的機率分佈生成。通常,我們會做一系列被統稱為獨立同分布假設的假設。該假設是說,每個資料集中的樣本都是彼此相互獨立的(independent),並且訓練集和測試集是同分布的(identically distributed),取樣自相同的分佈。這個假設使我們能夠在單個樣本的機率分佈描述資料生成過程。然後相同的分佈可以用來生成每一個訓練樣本和每一個測試樣本。我們將這個共享的潛在的分佈稱為資料生成分佈(data generating distribution)。我們能觀察到訓練誤差和測試誤差之間的直接聯絡是,隨機模型訓練誤差的期望和該模型測試誤差的期望是一樣的。假設我們有機率分佈p(x,y),從中重複取樣生成訓練集和測試集。對於某個固定的w,訓練集誤差的期望恰好和測試集誤差的期望一樣,這是因為這兩個期望的計算都使用了相同的資料集生成過程。這兩種情況的唯一區別是資料集的名字不同。
當然,當我們使用機器學習演算法時,我們不會提前固定引數,然後從資料集中取樣。我們會在訓練集上取樣,然後挑選引數去降低訓練集誤差,然後再在測試集上取樣。在這個過程中,測試誤差期望會大於或等於訓練誤差期望。以下是決定機器學習演算法效果是否好的因素:降低訓練誤差、縮小訓練誤差和測試誤差的差距。
這兩個因素對應機器學習的兩個主要挑戰:欠擬合(underfitting)和過擬合(overfitting)。欠擬合是指模型不能在訓練集上獲得足夠低的誤差。而過擬合是指訓練誤差和測試誤差之間的差距太大。
透過調整模型的容量(capacity),我們可以控制模型是否偏向於過擬合或者欠擬合。通俗地,模型的容量是指其擬合各種函式的能力。容量低的模型可能很難擬合訓練集。容量高的模型可能會過擬合,因為記住了不適用於測試集的訓練集性質。
一種控制訓練演算法容量的方法是選擇假設空間(hypothesis space),即學習演算法可以選擇為解決方案的函式集。例如,線性迴歸函式將關於其輸入的所有線性函式作為假設空間。
當機器學習演算法的容量適合於所執行任務的複雜度和所提供訓練資料的數量時,演算法效果通常會最佳。容量不足的模型不能解決複雜任務。容量高的模型能夠解決複雜的任務,但是當其容量高於任務所需時,有可能會過擬合。
從預先知道的真實分佈p(x,y)預測而出現的誤差被稱為貝葉斯誤差(Bayes error)。訓練誤差和泛化誤差會隨訓練集的大小發生變化。泛化誤差的期望從不會因為訓練樣本數目的增加而增加。對於非引數模型而言,更多的資料會得到更好的泛化能力,直到達到最佳可能的泛化誤差。任何模型容量小於最優容量的固定引數模型會漸進到大於貝葉斯誤差的誤差值。值得注意的是,具有最優容量的模型仍然有可能在訓練誤差和泛化誤差之間存在很大的差距。在這種情況下,我們可以透過收集更多的訓練樣本來縮小差距。
正則化是指我們修改學習演算法,使其降低泛化誤差而非訓練誤差。
過擬合(overfitting):是指在模型引數擬合過程中的問題,由於訓練資料包含抽樣誤差,訓練時,複雜的模型將抽樣也考慮在內,將抽樣誤差也進行了很好的擬合。具體表現就是最終模型在訓練集上效果好;在測試集上效果差。模型泛化能力弱。
我們擬合的模型一般是用來預測未知的結果(不在訓練集內),過擬合雖然在訓練集上效果好,但是在實際使用時(測試集)效果差。同時,在很多問題上,我們無法窮盡所有狀態,不可能將所有情況都包含在訓練集上。所以,必須要解決過擬合問題。
機器學習演算法為了滿足儘可能複雜的任務,其模型的擬合能力一般遠遠高於問題複雜度,也就是說,機器學習演算法有”擬合出正確規則的前提下,進一步擬合噪聲”的能力。而傳統的函式擬合問題(如機器人系統辨識),一般都是透過經驗、物理、數學等推匯出一個含參模型,模型複雜度確定了,只需要調整個別引數即可,模型”無多餘能力”擬合噪聲。
防止過擬合:
(1)、獲取更多資料:這是解決過擬合最有效的方法,只要給足夠多的資料,讓模型”看見”儘可能多的”例外情況”,它就會不斷修正自己,從而得到更好的結果。
如何獲取更多資料,可以有以下幾個方法:
A、從資料來源頭獲取更多資料:例如物體分類,就再多拍些照片;但是,在很多情況下,大幅增加資料本身並不容易;另外,我們也不清楚獲取多少資料才算夠。
B、根據當前資料集估計資料分佈引數,使用該分佈產生更多資料:這個一般不用,因為估計分佈引數的過程也會代入抽樣誤差。
C、資料增強(Data Augmentation):透過一定規則擴充資料。例如在物體分類問題裡,物體在影像中的位置、姿態、尺度、整體圖片明暗度等都不會影響分類結果。我們就可以透過影像平移、翻轉、縮放、切割等手段將資料庫成倍擴充。
(2)、使用合適的模型:過擬合主要是有兩個原因造成的:資料太少+模型太複雜。所以,我們可以透過使用合適複雜度的模型來防止過擬合的問題,讓其足夠擬合真正的規則,同時又不至於擬合太多抽樣誤差。
對於神經網路而言,我們可以從以下四個方面來限制網路能力:
A、網路結構(Architecture):減少網路的層數、神經元個數等均可以限制網路的擬合能力。
B、訓練時間(Early stopping):對於每個神經元而言,其啟用函式在不同區間的效能是不同的。當網路權值較小時,神經元的啟用函式工作線上性區,此時神經元的擬合能力較弱(類似線性神經元)。我們在初始化網路的時候一般都是初始為較小的權值。訓練時間越長,部分網路權值可能越大。如果我們在合適時間停止訓練,就可以將網路的能力限制在一定範圍內。
C、限制權值(weight-decay),也叫正則化(regularization):這類方法直接將權值的大小加入到Cost裡,在訓練的時候限制權值變大。
D、增加噪聲Noise:在輸入中加噪聲:噪聲會隨著網路傳播,按照權值的平方放大,並傳播到輸出層,對誤差Cost產生影響。在權值上加噪聲:在初始化網路的時候,用0均值的高斯分佈作為初始化。對網路的響應加噪聲:如在前向傳播過程中,讓神經元的輸出變為binary或random。顯然,這種有點亂來的做法會打亂網路的訓練過程,讓訓練更慢,但據Hinton說,在測試集上效果會有顯著提升。
(3)、結合多種模型:簡而言之,訓練多個模型,以每個模型的平均輸出作為結果。從N個模型裡隨機選擇一個作為輸出的期望誤差,會比所有模型的平均輸出的誤差大。A、Bagging:是分段函式的概念,用不同的模型擬合不同部分的訓練集。以隨機森林(rand forests)為例,就是訓練了一堆互不關聯的決策樹。一般不單獨使用神經網路做Bagging。B、Boosting:既然訓練複雜神經網路比較慢,那我們就可以只使用簡單的神經網路(層數、神經元數限制等)。透過訓練一系列簡單的神經網路,加權平均其輸出。C、Dropout:這是一個很高效的方法。在訓練時,每次隨機忽略隱層的某些節點,這樣,我們相當於隨機從模型中取樣選擇模型,同時,由於每個網路只見過一個訓練資料(每次都是隨機的新網路),所以類似bagging的做法。
(4)、貝葉斯方法。
在統計學中,過擬合(overfitting,或稱過度擬合)現象是指在擬合一個統計模型時,使用過多引數。對比於可獲取的資料總量來說,一個荒謬的模型只要足夠複雜,是可以完美地適應資料。過擬合一般可以視為違反奧卡姆剃刀原則。當可選擇的引數的自由度超過資料所包含資訊內容時,這會導致最後(擬合後)模型使用任意的引數,這會減少或破壞模型一般化的能力更甚於適應資料。過擬合的可能性不只取決於引數個數和資料,也跟模型架構與資料的一致性有關。此外對比於資料中的預期的噪聲或錯誤數量,跟模型錯誤的數量也有關。
在統計和機器學習中,為了避免過擬合現象,需要使用額外的技巧,如交叉驗證、提早停止、貝斯資訊量準則、赤池資訊量準則或模型比較等。
以上內容主要摘自: 、 和
GitHub:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2215430/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 機器學習–過度擬合 欠擬合機器學習
- 過擬合與欠擬合-股票投資中的機器學習機器學習
- 欠擬合與過擬合技術總結
- 過擬合和欠擬合以及相對應的解決辦法
- 什麼是人工智慧領域的過擬合和欠擬合人工智慧
- Pytorch_第八篇_深度學習 (DeepLearning) 基礎 [4]---欠擬合、過擬合與正則化PyTorch深度學習
- 深度學習中“過擬合”的產生原因和解決方法深度學習
- 今日面試題分享:如何理解模型的過擬合與欠擬合,以及如何解決?面試題模型
- 演算法金 | 詳解過擬合和欠擬合!性感嫵媚 VS 大殺四方演算法
- 【深度學習篇】--神經網路中的調優二,防止過擬合深度學習神經網路
- 機器學習中的過擬合機器學習
- 過擬合詳解:監督學習中不準確的「常識」
- 什麼是機器學習迴歸演算法?【線性迴歸、正規方程、梯度下降、正則化、欠擬合和過擬合、嶺迴歸】機器學習演算法梯度
- 機器學習之過擬合的風險機器學習
- 梯度下降、過擬合和歸一化梯度
- 《神經網路和深度學習》系列文章二十五:過擬合與正則化(2)神經網路深度學習
- 深度學習2.0-25.Train-Val-Test劃分檢測過擬合(交叉驗證)深度學習AI
- 如何解決過度擬合
- overfitting(過度擬合)的概念
- Tensorflow-交叉熵&過擬合熵
- 深度學習和圖形學渲染的結合和應用深度學習
- 如何理解過擬合、正則化和交叉驗證
- 機器學習中用來防止過擬合的方法有哪些?機器學習
- Dalvik虛擬機器簡要介紹和學習計劃虛擬機
- 深度學習 CNN 和 RNN 等模型簡介深度學習CNNRNN模型
- 通過編寫簡易虛擬DOM,來學習虛擬DOM 的知識!
- 原理解析-過擬合與正則化
- 深度學習中的貝葉斯統計簡介深度學習
- 4擬合線性函式的k和b函式
- Python科學計算——任意波形擬合Python
- Python擬合曲線Python
- Tensorflow 深度學習簡介(自用)深度學習
- 貝葉斯深度學習簡介深度學習
- 深度學習基本概念簡介深度學習
- pytorch擬合sin函式PyTorch函式
- 7.6 模型擬合及預測模型
- Dalvik虛擬機器垃圾收集機制簡要介紹和學習計劃虛擬機
- 從模型複雜度角度來理解過擬合現象模型複雜度