深入理解泛化


[TOC]

1.引言

什么是泛化呢?

先舉個栗子:

  小明和小李都上了高三。小明頭腦機靈,一邊刷着五年高考三年模擬一邊總結做題規律,而小李一門心思刷題,一套完了又一套,刷的試卷堆成山了卻沒有對錯題進行總結。高考結束成績公布,小明超出一本線幾十分,而小李卻勉強上了二本線。這是為什么呢?

  原來高考試題一般是新題,誰也沒做過,平時的刷題就是為了掌握試題的規律,能夠舉一反三、學以致用,這樣面對新題時也能從容應對。這種對規律的掌握便是泛化能力。

  在這個例子中,小明善於總結做題規律,可以說是他的泛化能力好;而小李只知道刷題卻沒有掌握做題規律,可以說是他的泛化能力差。

2.泛化的定義

  機器學習(深度學習)的根本問題是優化和泛化之間的對立。

  優化(optimization)是指調節模型以在訓練數據上得到最佳性能(即機器學習中的學習),而泛化(generalization)是指訓練好的模型在前所未見的數據上的性能好壞。

  機器學習的目的當然是得到良好的泛化,但你無法控制泛化,只能基於訓練數據調節模型。

對泛化能力可以從以下六個方面來理解:

  1. 泛化能力最直接的定義是訓練數據和真實數據間的差異,訓練模型的目地是要模型在完全陌生的數據上進行測試的;

  2. 泛化能力還可以看成模型的稀疏性。正如奧卡姆的剪刀指出的,面對不同的解釋時,最簡單的解釋是最好的解釋。在機器學習中,具有泛化能力的模型中應該有很多參數是接近0的。而在深度學習中,則是待優化的矩陣應該對稀疏性有偏好性。

  3. 泛化能力的第三種解釋是生成模型中的高保真能力。具有泛化能力的模型應在其每個抽象層次具有重構特征的能力。

  4. 第四種解釋是模型能夠有效的忽視瑣碎的特征,或者說在無關的變化下都能找到相同的特征。

  5. 泛化能力還可以看成模型的信息壓縮能力。

      這里涉及到解釋為什么深度學習有效的一種假說,信息瓶頸(information bottleneck),說的是一個模型對特征進行壓縮(降維)的能力越強,其就越更大的可能性做出准確的分類。信息壓縮能力可以概括上述的四種關於泛化能力的解釋,稀疏的模型因其結構而完成了信息的壓縮,生成能力強,泛化誤差低的模型因信息壓縮而可能,而忽略無關特征是信息壓縮的副產品。

  6. 理解泛化能力的最后一種角度是風險最小化。

      這是從博弈論的角度來看,泛化能力強的模型能盡可能降低自己在真實環境中遇到意外的風險,因此會在內部產生對未知特征的預警機制,並提前做好應對預案。這是一種很抽象的也不那么精確的解釋,但隨着技術的進步,人們會找出在該解釋下進行模型泛化能力的量化評價方法。

3.數據集分類

數據集可以分為:

  • 訓練集:實際訓練算法的數據集;用來計算梯度或者Jacobian矩陣,並確定每次迭代中網絡權值的更新;
  • 驗證集:用於跟蹤其學習效果的數據集;是一個指示器,用來表明訓練數據點之間所形成的網絡函數發生了什么,並且驗證集上的誤差值在整個訓練過程中都將被監測;
  • 測試集:用於產生最終結果的數據集 。

為了讓測試集能有效反映網絡的泛化能力,需要牢記:

  第一,測試集絕不能以任何形式用於訓練網絡,即使是用於從一組備選網絡中挑選網絡中挑選網絡。測試集只能在所有的訓練和模型選擇完成后使用;

  第二、測試集必須代表網絡使用中涉及的所有情形(當輸入空間是高維或者形狀復雜時,難以保證)。

舉個栗子:

  老師出了10 道習題供同學們練習,考試時老師又用同樣的這10道題作為試題,這個考試成績能否有效反映出同學們學得好不好呢?

  答案是否定的,可能有的同學只會做這10 道題卻能得高分.回到我們的問題上來,我們希望得到泛化性能強的模型?好比是希望同學們對課程學得很好、獲得了對所學知識"舉一反三"的能力;訓練樣本相當於給同學們練習的習題,測試過程則相當於考試.顯然,若測試樣本被用作訓練了,則得到的將是過於"樂觀"的估計結果。

4.泛化能力分類

根據泛化能力強弱,可以分為:

Snipaste_2019-11-15_10-49-24.png

  • 欠擬合:模型不能在訓練集上獲得足夠低的誤差;
  • 擬合:測試誤差與訓練誤差差距較小;
  • 過擬合:訓練誤差和測試誤差之間的差距太大;
  • 不收斂:模型不是根據訓練集訓練得到的。

  在機器學習中,可以用Bias(偏差)、Variance(方差)衡量欠擬合、剛好擬合、過擬合。

對於Bias:

  • Bias衡量模型擬合訓練數據的能力(訓練數據不一定是整個 training dataset,而是只用於訓練它的那一部分數據,例如:mini-batch);
  • Bias反映的是模型在樣本上的輸出與真實值之間的誤差,即模型本身的精准度;
  • Bias 越小,擬合能力越高(可能產生overfitting);反之,擬合能力越低(可能產生underfitting)。

對於Variance:

  • Variance描述的是預測值的變化范圍,離散程度,也就是離其期望值的距離。方差越大,數據的分布越分散,模型的穩定程度越差;
  • Variance反映的是模型每一次輸出結果與模型輸出期望之間的誤差,即模型的穩定性;
  • Variance越小,模型的泛化的能力越高;反之,模型的泛化的能力越低。
圖片1.png 圖片2.png

  左圖是高偏差,對應欠擬合;右圖是高方差,對應過擬合,中間是Just Right,對應剛好擬合。

對於過擬合,可以理解為:

**  過擬合**指的是給定一堆數據,這堆數據帶有噪聲,利用模型去擬合這堆數據,可能會把噪聲數據也給擬合了,這點很致命,一方面會造成模型比較復雜(想想看,本來一次函數能夠擬合的數據,現在由於數據帶有噪聲,導致要用五次函數來擬合,多復雜!),另一方面,模型的泛化性能太差了(本來是一次函數生成的數據,結果由於噪聲的干擾,得到的模型是五次的),遇到了新的數據讓你測試,你所得到的過擬合的模型,正確率是很差的。

5.從訓練過程來理解泛化

image-20191115110255593.png image-20191115110310372.png

  模型的容量(capacity):通常指模型中可學習參數的個數(或模型復雜度)。

  訓練剛開始的時候,模型還在學習過程中,在訓練集以及測試集上同時具有較高的誤差,此時模型的偏差較大。這個時候,模型還沒有學習到知識,處於欠擬合狀態,曲線落在欠擬合區域。

  隨着訓練的進行,訓練誤差和測試誤差都下降。隨着模型的進一步訓練,在訓練集上表現的越來越好,終於在突破一個點之后,訓練集的誤差繼續下降,而測試集的誤差上升了,此時模型的方差較大,就進入了過擬合區間。 它通常發生在模型過於復雜的情況下,如參數過多等,會使得模型的預測性能變弱,並且增加數據的波動性。雖然模型在訓練時的效果可以表現的很完美,基本上記住了數據的全部特點,但這種模型在未知數據的表現能力會大減折扣,因為簡單的模型泛化能力通常都是很弱的。

  因此,所使用的模型應該具有足夠多的參數,以防欠擬合,即模型應避免記憶資源不足。在容量過大與容量不足之間要找到一個折中,即最優容量。

這里有兩個地方需要注意。

(1) 模型訓練過程中,訓練集的誤差一定一直低於測試集嗎?

  未必。如果這兩個集合本來就取自於同樣的數據分布,比如從一個數據集中隨機采樣,那么有可能測試的誤差從一開始就低於訓練集。不過,總體的趨勢肯定是不變的,兩者從一開始慢慢下降直到最后過擬合,訓練集的誤差低於測試集。

(2) 模型的訓練一定會過擬合嗎?

  這也不一定!如果數據集足夠大,很可能模型的能力不夠始終都不會過擬合。另一方面,有很多的方法可以阻止,或者減緩模型的過擬合,比如正則化。

參考資料

1.聊聊神經網絡中的正則化

2.尹恩·古德費洛.深度學習[M].北京:人民郵電出版社,2017.8

3.馬丁 T·哈根,章毅(譯).神經網絡設計.第二版.北京:機械出版社,2017.12

4. 深度學習500問

5.談談自己對正則化的一些理解

6.網上其它資料(后補)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM