目錄git
什麼是泛化呢?github
先舉個栗子:算法
小明和小李都上了高三。小明頭腦機靈,一邊刷着五年高考三年模擬一邊總結作題規律,而小李一門心思刷題,一套完了又一套,刷的試卷堆成山了卻沒有對錯題進行總結。高考結束成績公佈,小明超出一本線幾十分,而小李卻勉強上了二本線。這是爲何呢?網絡
原來高考試題通常是新題,誰也沒作過,平時的刷題就是爲了掌握試題的規律,可以觸類旁通、學以至用,這樣面對新題時也能從容應對。這種對規律的掌握即是泛化能力。機器學習
在這個例子中,小明善於總結作題規律,能夠說是他的泛化能力好;而小李只知道刷題卻沒有掌握作題規律,能夠說是他的泛化能力差。函數
機器學習(深度學習)的根本問題是優化和泛化之間的對立。性能
優化(optimization)是指調節模型以在訓練數據上獲得最佳性能(即機器學習中的學習),而泛化(generalization)是指訓練好的模型在前所未見的數據上的性能好壞。學習
機器學習的目的固然是獲得良好的泛化,但你沒法控制泛化,只能基於訓練數據調節模型。測試
對泛化能力能夠從如下六個方面來理解:優化
泛化能力最直接的定義是訓練數據和真實數據間的差別,訓練模型的目地是要模型在徹底陌生的數據上進行測試的;
泛化能力還能夠當作模型的稀疏性。正如奧卡姆的剪刀指出的,面對不一樣的解釋時,最簡單的解釋是最好的解釋。在機器學習中,具備泛化能力的模型中應該有不少參數是接近0的。而在深度學習中,則是待優化的矩陣應該對稀疏性有偏好性。
泛化能力的第三種解釋是生成模型中的高保真能力。具備泛化能力的模型應在其每一個抽象層次具備重構特徵的能力。
第四種解釋是模型可以有效的忽視瑣碎的特徵,或者說在無關的變化下都能找到相同的特徵。
泛化能力還能夠當作模型的信息壓縮能力。
這裏涉及到解釋爲何深度學習有效的一種假說,信息瓶頸(information bottleneck),說的是一個模型對特徵進行壓縮(降維)的能力越強,其就越更大的可能性作出準確的分類。信息壓縮能力能夠歸納上述的四種關於泛化能力的解釋,稀疏的模型因其結構而完成了信息的壓縮,生成能力強,泛化偏差低的模型因信息壓縮而可能,而忽略無關特徵是信息壓縮的副產品。
理解泛化能力的最後一種角度是風險最小化。
這是從博弈論的角度來看,泛化能力強的模型能儘量下降本身在真實環境中遇到意外的風險,所以會在內部產生對未知特徵的預警機制,並提早作好應對預案。這是一種很抽象的也不那麼精確的解釋,但隨着技術的進步,人們會找出在該解釋下進行模型泛化能力的量化評價方法。
數據集能夠分爲:
爲了讓測試集能有效反映網絡的泛化能力,須要牢記:
第一,測試集毫不能以任何形式用於訓練網絡,即便是用於從一組備選網絡中挑選網絡中挑選網絡。測試集只能在全部的訓練和模型選擇完成後使用;
第2、測試集必須表明網絡使用中涉及的全部情形(當輸入空間是高維或者形狀複雜時,難以保證)。
舉個栗子:
老師出了10 道習題供同窗們練習,考試時老師又用一樣的這10道題做爲試題,這個考試成績可否有效反映出同窗們學得好很差呢?
答案是否認的,可能有的同窗只會作這10 道題卻能得高分.回到咱們的問題上來,咱們但願獲得泛化性能強的模型?比如是但願同窗們對課程學得很好、得到了對所學知識"觸類旁通"的能力;訓練樣本至關於給同窗們練習的習題,測試過程則至關於考試.顯然,若測試樣本被用做訓練了,則獲得的將是過於"樂觀"的估計結果。
根據泛化能力強弱,能夠分爲:
在機器學習中,能夠用Bias(誤差)、Variance(方差)衡量欠擬合、恰好擬合、過擬合。
對於Bias:
對於Variance:
左圖是高誤差,對應欠擬合;右圖是高方差,對應過擬合,中間是Just Right,對應恰好擬合。
對於過擬合,能夠理解爲:
過擬合指的是給定一堆數據,這堆數據帶有噪聲,利用模型去擬合這堆數據,可能會把噪聲數據也給擬合了,這點很致命,一方面會形成模型比較複雜(想一想看,原本一次函數可以擬合的數據,如今因爲數據帶有噪聲,致使要用五次函數來擬合,多複雜!),另外一方面,模型的泛化性能太差了(原本是一次函數生成的數據,結果因爲噪聲的干擾,獲得的模型是五次的),遇到了新的數據讓你測試,你所獲得的過擬合的模型,正確率是不好的。
模型的容量(capacity):一般指模型中可學習參數的個數(或模型複雜度)。
訓練剛開始的時候,模型還在學習過程當中,在訓練集以及測試集上同時具備較高的偏差,此時模型的誤差較大。這個時候,模型尚未學習到知識,處於欠擬合狀態,曲線落在欠擬合區域。
隨着訓練的進行,訓練偏差和測試偏差都降低。隨着模型的進一步訓練,在訓練集上表現的愈來愈好,終於在突破一個點以後,訓練集的偏差繼續降低,而測試集的偏差上升了,此時模型的方差較大,就進入了過擬合區間。 它一般發生在模型過於複雜的狀況下,如參數過多等,會使得模型的預測性能變弱,而且增長數據的波動性。雖然模型在訓練時的效果能夠表現的很完美,基本上記住了數據的所有特色,但這種模型在未知數據的表現能力會大減折扣,由於簡單的模型泛化能力一般都是很弱的。
所以,所使用的模型應該具備足夠多的參數,以防欠擬合,即模型應避免記憶資源不足。在容量過大與容量不足之間要找到一個折中,即最優容量。
這裏有兩個地方須要注意。
(1) 模型訓練過程當中,訓練集的偏差必定一直低於測試集嗎?
未必。若是這兩個集合原本就取自於一樣的數據分佈,好比從一個數據集中隨機採樣,那麼有可能測試的偏差從一開始就低於訓練集。不過,整體的趨勢確定是不變的,二者從一開始慢慢降低直到最後過擬合,訓練集的偏差低於測試集。
(2) 模型的訓練必定會過擬合嗎?
這也不必定!若是數據集足夠大,極可能模型的能力不夠始終都不會過擬合。另外一方面,有不少的方法能夠阻止,或者減緩模型的過擬合,好比正則化。
2.尹恩·古德費洛.深度學習[M].北京:人民郵電出版社,2017.8
3.馬丁 T·哈根,章毅(譯).神經網絡設計.第二版.北京:機械出版社,2017.12
4.深度學習500問
6.網上其它資料(後補)