深度學(xué)習(xí) (DeepLearning) 基礎(chǔ) [4]---欠擬合墓卦、過擬合與正則化
Introduce
在上一篇“深度學(xué)習(xí) (DeepLearning) 基礎(chǔ) [3]---梯度下降法”中我們介紹了梯度下降的主要思想以及優(yōu)化算法禾嫉。本文將繼續(xù)學(xué)習(xí)深度學(xué)習(xí)的基礎(chǔ)知識,主要涉及:
- 欠擬合和過擬合
- 正則化
以下均為個人學(xué)習(xí)筆記匈棘,若有錯誤望指出。
欠擬合和過擬合
要理解欠擬合和過擬合析命,我們需要先清楚一對概念主卫,即偏差和方差。
偏差和方差是深度學(xué)習(xí)中非常有用的一對概念鹃愤,尤其是可以幫助我們理解模型的欠擬合和過擬合簇搅。
- 偏差:模型對于訓(xùn)練集的擬合能力,通俗理解來說软吐,偏差代表模型能夠正確預(yù)測訓(xùn)練集的程度(也就是說瘩将,模型在訓(xùn)練集上表現(xiàn)出的精度)。偏差越高代表模型在訓(xùn)練集上的精度越低。
- 方差:模型對于除訓(xùn)練集之外其他數(shù)據(jù)的預(yù)測能力姿现,即泛化能力肠仪。通俗理解來說,方差代表模型能夠正確預(yù)測測試集的程度(也就是說备典,模型在測試集上表現(xiàn)出的精度)异旧。方差越高代表模型在各測試集上的精度明顯低于訓(xùn)練集上的精度。
理解了偏差和方差的概念之后提佣,那模型欠擬合和過擬合又是什么呢吮蛹?
- 欠擬合:對應(yīng)于高偏差的情況,即模型不能很好地擬合訓(xùn)練數(shù)據(jù)拌屏,在訓(xùn)練集上的預(yù)測精度很低潮针。如下圖所示(藍色線為預(yù)測的模型,可以發(fā)現(xiàn)并不能很好滴擬合訓(xùn)練數(shù)據(jù)):
-
過擬合:對應(yīng)于高方差的情況槐壳,即模型雖然在訓(xùn)練集上的精度很高然低,但是在測試集上的表現(xiàn)確差強人意。這是由于模型過度擬合了訓(xùn)練集务唐,將訓(xùn)練集特有的性質(zhì)當(dāng)成了所有數(shù)據(jù)集的一般性質(zhì)雳攘,導(dǎo)致其在其他數(shù)據(jù)集上的泛化能力特別差。如下圖所示(藍色線為預(yù)測的模型枫笛,可以發(fā)現(xiàn)似乎過度擬合了訓(xùn)練數(shù)據(jù)):
正確模型的擬合曲線如下圖所示(與上面欠擬合和過擬合的曲線圖對比吨灭,可以更好地幫助我們理解欠擬合和過擬合):
在理解了模型欠擬合和過擬合的概念之后,如果我們在訓(xùn)練模型的過程中遇到了這兩類問題刑巧,我們怎么解決呢喧兄?
-
解決欠擬合:
(1) 使用更復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),如增加隱藏層數(shù)目啊楚,隱藏層結(jié)點數(shù)等吠冤。(因為神經(jīng)網(wǎng)絡(luò)如果層數(shù)和節(jié)點數(shù)足夠的話,是可以模擬任何函數(shù)的)
(2) 訓(xùn)練更長時間恭理,即增加神經(jīng)網(wǎng)絡(luò)模型的參數(shù)更新次數(shù)拯辙。(更新次數(shù)不夠可能使得模型還沒找到合適的參數(shù)使損失最小化,降低了模型精度)
(3) 使用其他更合適的神經(jīng)網(wǎng)絡(luò)架構(gòu)颜价,如前饋神經(jīng)網(wǎng)絡(luò)涯保、卷積神經(jīng)網(wǎng)絡(luò)(CNN)、循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)周伦、深度信念網(wǎng)絡(luò)(DBN)等等(后續(xù)將進一步學(xué)習(xí)各種類型的神經(jīng)網(wǎng)絡(luò))夕春;
-
解決過擬合:
(1) 使用更多的訓(xùn)練數(shù)據(jù)。(若是我們能把當(dāng)前領(lǐng)域內(nèi)所有的訓(xùn)練數(shù)據(jù)都拿來學(xué)習(xí)個夠专挪,那么我們的模型還會在這個領(lǐng)域的數(shù)據(jù)上表現(xiàn)差嗎及志?不可能的片排,對吧!)
(2) 為模型添加正則化模塊 (regularization)速侈。(對于正則化概念以及為什么正則化能解決過擬合問題划纽,在本文后續(xù)進行介紹)
(3) 使用其他更合適的神經(jīng)網(wǎng)絡(luò)架構(gòu)。
對于以上策略一般的思考順序锌畸,不論是欠擬合還是過擬合,當(dāng)我們遇到了靖避,都是優(yōu)先考慮能不能使用上述中講到的 (1) 和 (2) 來解決潭枣。如果不行的話再考慮 (3),因為重構(gòu)一個神經(jīng)網(wǎng)絡(luò)的話相對于其他解決方法開銷比較大幻捏。
正則化
直觀理解:正則化是用來防止模型過擬合的一種方法盆犁,其做法是通過在模型損失函數(shù)中加入一項正則項,使得其在訓(xùn)練數(shù)據(jù)擬合損失和模型復(fù)雜度中達到一種權(quán)衡篡九。
通常加入正則化的損失函數(shù)為如下形式:
其中第一項為模型原本的損失函數(shù)谐岁,第二項
為正則化項,w為權(quán)值參數(shù)矩陣榛臼。若q=1伊佃,則為我們常用的L1正則化;若q=2沛善,則為我們常用的L2正則化航揉。
理解了正則化概念以及加入正則化的損失函數(shù)的形式之后,回歸到一個更重要的問題金刁,即為什么正則化能夠防止模型過擬合呢帅涂?以下分別從三個角度來理解正則化在模型訓(xùn)練中的作用。
(1) 從模型擬合曲線的函數(shù)形式來看
為了回答上述問題尤蛮,我們需要先理解過擬合情況下學(xué)習(xí)出來的擬合函數(shù)是什么樣子的媳友。可以看到上述過擬合部分的擬合曲線圖(emm产捞,就是扭來扭去的那張)醇锚,圖中的數(shù)據(jù)點實際上只需要一個二次函數(shù)就能夠很好擬合了。但是從圖中來看轧葛,過擬合情況下學(xué)習(xí)到的函數(shù)搂抒,肯定是大于二次的高次函數(shù)了。 假設(shè)該過擬合得到的函數(shù)為p次函數(shù)尿扯,如下所示:
實際上正確的擬合函數(shù)為二次函數(shù)求晶,如下所示:
我們可以發(fā)現(xiàn),要是我們能夠更新權(quán)值參數(shù)w衷笋,使得w中的w0芳杏、w1和w2非0矩屁,而其余的權(quán)值均為0的話,我們是可以得到一個能夠比較好地擬合上述曲線的模型的爵赵。而正則化就是起到上述這個作用(讓一些不必要的權(quán)值參數(shù)為0)吝秕,從而來防止模型過擬合的。
(2) 從神經(jīng)網(wǎng)絡(luò)模型的復(fù)雜度來看
現(xiàn)在回過頭來看上述對于正則化的直觀理解空幻,里面有講到模型復(fù)雜度烁峭,那模型復(fù)雜度是什么呀?我們可以將其通俗理解成權(quán)值參數(shù)的個數(shù)秕铛,因為網(wǎng)絡(luò)的權(quán)值參數(shù)越多代表著神經(jīng)網(wǎng)絡(luò)更龐大(擁有更多的層和更多的節(jié)點以及更多的邊)约郁,自然而然模型就更復(fù)雜了(如果網(wǎng)絡(luò)中某條邊的權(quán)重w為0的話,那這條邊不就沒了嘛但两,那模型不就更簡單一些了嘛鬓梅,這就是正則化要做的事吧,以上為個人理解)谨湘。
(3) 從加了正則化項的損失函數(shù)來看
現(xiàn)在再來看上述加入正則化的損失函數(shù)的一般形式绽快,第一項為原本的損失函數(shù),第二項為正則化項紧阔。以下分為兩點來進行分析:
- 假設(shè)沒有添加正則化項的話坊罢,模型訓(xùn)練的結(jié)果會使得損失函數(shù)盡可能小,也就是說使得模型擬合訓(xùn)練樣本集的能力最大化寓辱,這就可能導(dǎo)致模型將訓(xùn)練樣本集的一些特殊性質(zhì)當(dāng)成數(shù)據(jù)的普遍性質(zhì)艘绍,使得模型泛化能力差,從而導(dǎo)致過擬合現(xiàn)象秫筏。
- 假設(shè)添加了正則項诱鞠,正則項起到什么作用了?首先我們的目標(biāo)是最小化損失函數(shù)这敬,從某種程度上也需要最小化正則項航夺,而由上述L1、L2正則項的形式來看崔涂,最小化正則項無非是把其中的某些不重要的權(quán)值參數(shù)wi設(shè)置為0阳掐,或者設(shè)置一個比較小的值。因此從這個層面上來理解冷蚂,正則化也是通過將某些不重要權(quán)值參數(shù)設(shè)置為0來防止過擬合的缭保。
需要說明的是:雖然L1正則化和L2正則化都可以防止模型過擬合,但是L1正則化相比于L2正則化會更容易產(chǎn)生稀疏權(quán)值矩陣(也就是說蝙茶,權(quán)值矩陣中更多的權(quán)值為0)艺骂。至于原因,由于個人能力問題隆夯,可能解釋不太清楚钳恕,可以參考知乎問題--L1 相比于 L2 為什么容易獲得稀疏解别伏?