【DL碎片5】深度學(xué)習(xí)中的正則化(Regularization))

深度學(xué)習(xí)中的正則化(Regularization)

一、Bias(偏差) & Variance(方差)

在機(jī)器學(xué)習(xí)中,這兩個(gè)名詞經(jīng)常讓我們傻傻分不清。
我們不妨用案例來看看怎么區(qū)分。
假設(shè)我們正在做一個(gè)分類器,分別在訓(xùn)練集和驗(yàn)證集上測試,以下為四種可能的情況:

四種情況

可見①、④兩種情況的訓(xùn)練集誤差都很小,接近optimal error,這種就稱為low bias。說明訓(xùn)練的很到位了。
相反,②、③兩者的訓(xùn)練集誤差很大,這就稱為high bias。因此我們知道,bias就是衡量訓(xùn)練集和我們的最小誤差的差距。

再來看看variance是怎么判斷。①情況下,驗(yàn)證集相比訓(xùn)練集誤差上升了很多,這就是high variance。而②呢,雖然它的驗(yàn)證集誤差更大,但是相比它的訓(xùn)練集誤差,基本沒太大變化,因此它不能叫l(wèi)ow variance。所以,說白了,variance是指你的驗(yàn)證集和你訓(xùn)練集的效果的差別,而不是某個(gè)絕對(duì)的值。

用這樣一個(gè)圖可以更加清晰地理解兩者的意思:

bias和variance的關(guān)系

最后不妨總結(jié)一下,我直接總結(jié)在一張圖里:

這么好的圖,還不隨手保存?

高bias往往意味著模型根本沒訓(xùn)練到位,也就是欠擬合。而高variance往往意味著模型訓(xùn)練過頭了,過擬合了。但注意,過擬合一般是對(duì)于訓(xùn)練集誤差很小而驗(yàn)證集/測試集誤差很大而言。如果兩者都高的話,只能說模型太爛了,不知道怎么評(píng)價(jià)了。

二、如何解決bias和variance的問題

如果你的模型訓(xùn)練結(jié)果是high bias,我們一般用以下幾種方法來改進(jìn):

  1. 嘗試使用更復(fù)雜更大的網(wǎng)絡(luò)結(jié)構(gòu)(增加單元數(shù)、增加層數(shù),或者更改結(jié)構(gòu))
  2. 訓(xùn)練更長的時(shí)間(增加迭代次)數(shù)

因?yàn)閔igh bias意味著我們訓(xùn)練的還不夠,連訓(xùn)練集的內(nèi)容都無法很好的識(shí)別。所以這種情況下不用去想增加數(shù)據(jù)量,因?yàn)檫@個(gè)沒關(guān)系,是模型太差了。

當(dāng)bias問題解決好了之后,如果還有high variance問題,那我們可以這樣改進(jìn):

  1. 收集更多的訓(xùn)練樣本去訓(xùn)練
  2. 使用 正則化手段

為什么這個(gè)時(shí)候可以嘗試收集更多的數(shù)據(jù)來解決呢?因?yàn)?,high variance意味著你的訓(xùn)練集和驗(yàn)證集的效果有很大差別,很可能是因?yàn)槟愕挠?xùn)練集里面的數(shù)據(jù)并不能很好地反映驗(yàn)證集里面的特征,或者說驗(yàn)證集中有一些需要學(xué)習(xí)到的東西在你的訓(xùn)練集中卻沒有,所以模型無論如何學(xué)習(xí)你的訓(xùn)練集,也無法很好地預(yù)測驗(yàn)證集的數(shù)據(jù),因此我們應(yīng)該收集更多的數(shù)據(jù),學(xué)習(xí)更多的特征。

如果你增加了數(shù)據(jù)量去訓(xùn)練之后,variance還是很大,那說明我們遇到了典型的 over fitting,我們就需要考慮用 正則化手段了。

三、正則化(Regularization)

很多人一聽到“正則化”這個(gè)詞,就覺得高深莫測,比如我,一直以來都覺得這個(gè)詞很奇怪,然后老師們講課也都是說“正則化,就是給損失函數(shù)加一個(gè)正則化項(xiàng),相當(dāng)于給它一個(gè)懲罰...”云云,更加讓人覺得高神莫測。

現(xiàn)在終于明白了,大家可以這樣理解,我現(xiàn)場想了 一個(gè)例子:

假設(shè)我們的模型就是一只 蚊子,我們要訓(xùn)練它去模擬空中的一些點(diǎn)的整體路徑:
我們空中的點(diǎn)也分為訓(xùn)練集和測試集,蚊子去學(xué)習(xí)訓(xùn)練集的路徑,然后閉上眼睛,按照自己學(xué)習(xí)到的那個(gè)路徑去預(yù)測測試集的點(diǎn)是否在路徑上。

蚊子飛行游戲

首先,蚊子自以為聰明靈活,自由自在地飛翔,它輕輕松松地經(jīng)過了所有訓(xùn)練集的點(diǎn):


蚊子自由自在地飛翔,經(jīng)過所有訓(xùn)練點(diǎn)

很明顯,訓(xùn)練集滿分!每個(gè)點(diǎn)都完美經(jīng)過了!
接下來給它蒙上眼睛,看看它能否經(jīng)過預(yù)測集的點(diǎn):


很可惜,自以為聰明的蚊子按照自己學(xué)習(xí)到的復(fù)雜的路徑上上下下,卻幾乎一個(gè)點(diǎn)都沒預(yù)測對(duì)。。。這就是over fitting!因?yàn)槊總€(gè)數(shù)據(jù)都帶有隨機(jī)性,你不能學(xué)的太認(rèn)真,正所謂“你認(rèn)真,就輸了”。

但是蚊子也沒辦法,它也不知道怎么“不認(rèn)真”,于是我們來想辦法,強(qiáng)迫它別那么較真。
我們想了個(gè)什么辦法呢?請(qǐng)看:

我們?cè)O(shè)計(jì)了一個(gè) 掛墜,給蚊子掛上,這樣蚊子飛起來就有些費(fèi)勁了,沒辦法自由自在上躥下跳地飛行了,這也就是大家常常聽說的“懲罰項(xiàng)”,因?yàn)樯砩嫌袀€(gè)掛墜,你蚊子上下飛就很費(fèi)力,于是限制了蚊子的亂動(dòng)

給蚊子掛一個(gè)掛墜

再次起飛:


帶重飛行

果真,蚊子的飛行沒有那么“皮”了,它怎么省力怎么飛,每次看到新的點(diǎn),它只是忘那個(gè)方向偏一點(diǎn),不能偏太多,因?yàn)橄乱粋€(gè)點(diǎn)可能方向又變了,那得累死它,所以它在掛墜的限制下,會(huì)努力找一個(gè)中間的位置,讓它不費(fèi)力,又能盡可能擬合訓(xùn)練點(diǎn)。

接著,捂上眼睛進(jìn)入預(yù)測區(qū):


負(fù)重飛行就是不一樣

這次的成績就好多了。蚊子很驚喜,感嘆這掛墜好神奇。

這個(gè) 掛掛墜,就是“正則化”

當(dāng)然,舉例子是為了容易理解,具體的原理可能會(huì)有差別。
具體的正則化,就是在前面所說的“給損失函數(shù)加一個(gè)正則化項(xiàng)(掛墜)”,掛墜怎么設(shè)計(jì),是很復(fù)雜的,不能太重也不能太輕,而且說不定還要隨時(shí)變動(dòng),這里的細(xì)節(jié)就不深究了,我們直接看看常見的正則化方法:

假設(shè)我們的損失函數(shù) J(w,b)=avg(L(y,y'))
這里由于不方便打公式,所以我用avg來表示求所有訓(xùn)練樣本損失的平均值,
正則化項(xiàng)一般采用L2正則化,也就是給J加上一個(gè) (λ/2m) * sum(w^2),也就是所有w的平方和,再乘以λ/2m,m是樣本量。
綜合起來就是:J(w,b)=avg(L(y,y')) + (λ/2m) * sum(w^2)

這樣一來,我們?cè)谟锰荻认陆档臅r(shí)候,求J對(duì)w的偏導(dǎo),你會(huì)發(fā)現(xiàn)dw變大了,而我們的更新法則為w-->w-α·dw,因此最終選擇的 參數(shù)w會(huì)變得更小。參數(shù)更小,對(duì)于模型來說,就意味著更加簡單,于是我們的目的就達(dá)到了。

其他的正則化方法:

除了加一個(gè)懲罰項(xiàng),其實(shí)正則化還有多種多樣的方法,但是總體的思想史一樣的,就是想辦法使得我們的模型不要那么復(fù)雜。下面簡單介紹兩種方法:

(1)dropout 丟棄法

這個(gè)dropout是神經(jīng)網(wǎng)絡(luò)中常用的正則化方法,就是在訓(xùn)練過程中,隨機(jī)地“丟棄”一些神經(jīng)元,強(qiáng)行簡化模型!
具體的操作方法通常是:在一層神經(jīng)網(wǎng)絡(luò)之后,隨機(jī)按照一定概率“敲掉”一部分神經(jīng)元,然后再將激活值傳給下一層,下一層如果有必要,再敲掉一些,再傳給下一層... ...


dropout

為什么這種方法可以起到正則化作用呢?

我們訓(xùn)練模型實(shí)際上就是學(xué)習(xí)參數(shù),參數(shù)就是每個(gè)神經(jīng)元的權(quán)重。
現(xiàn)在 每個(gè)神經(jīng)元都有可能被丟掉,因此模型訓(xùn)練的時(shí)候,模型不敢給任何神經(jīng)元過大的參數(shù),因此這樣風(fēng)險(xiǎn)太大,萬一給某個(gè)神經(jīng)元的權(quán)重很大,結(jié)果下一回這個(gè)神經(jīng)元就被敲掉了,那這個(gè)模型肯定會(huì)表現(xiàn)很差。因此,在dropout機(jī)制下,每個(gè)神經(jīng)元最后的參數(shù)都會(huì)比較小。

這里注意,我們在訓(xùn)練的時(shí)候,采用dropout敲掉神經(jīng)元,但是并不是真的把它敲沒了,而是暫時(shí)“失活”,等訓(xùn)練完畢,在預(yù)測的時(shí)候,我們又會(huì)使用它們。dropout只是讓我們?cè)谟?xùn)練的時(shí)候讓參數(shù)變小。

當(dāng)然了,這里就有了一個(gè) 超參數(shù)(hyperparameter)需要我們?nèi)ピO(shè)置了,一般如果該層神經(jīng)網(wǎng)絡(luò)的神經(jīng)元很多,我們可以設(shè)置drop掉0.5甚至更多比例的神經(jīng)元,對(duì)于神經(jīng)元不多的,一般設(shè)置為0.25左右。

(2)early-stopping

這個(gè)很簡單,說白了就是不要訓(xùn)練那么久了,見好就收。這里就不多贅述了。


好了,我覺得就差不多了吧。今天的文章也early stopping一下,今天可是七夕呀!七夕呀!我也是有女朋友的人?。∠茸咭徊? ? ?ω?? )?
歡迎關(guān)注我的專欄:
DeepLearning.ai學(xué)習(xí)筆記
和我一起一步步學(xué)習(xí)深度學(xué)習(xí)。
專欄其他文章:
【DL筆記1】Logistic回歸:最基礎(chǔ)的神經(jīng)網(wǎng)絡(luò)
【DL筆記2】神經(jīng)網(wǎng)絡(luò)編程原則&Logistic Regression的算法解析
【DL筆記3】一步步親手用python實(shí)現(xiàn)Logistic Regression
【DL筆記4】神經(jīng)網(wǎng)絡(luò)詳解,正向傳播和反向傳播
【DL碎片1】神經(jīng)網(wǎng)絡(luò)參數(shù)初始化的學(xué)問
【DL碎片2】神經(jīng)網(wǎng)絡(luò)中的優(yōu)化算法
【DL碎片3】神經(jīng)網(wǎng)絡(luò)中的激活(Activation)函數(shù)及其對(duì)比
【DL碎片4】深度學(xué)習(xí)中的的超參數(shù)調(diào)節(jié)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 文章主要分為:一、深度學(xué)習(xí)概念;二、國內(nèi)外研究現(xiàn)狀;三、深度學(xué)習(xí)模型結(jié)構(gòu);四、深度學(xué)習(xí)訓(xùn)練算法;五、深度學(xué)習(xí)的優(yōu)點(diǎn)...
    艾剪疏閱讀 22,216評(píng)論 0 58
  • 原文地址:http://www.cnblogs.com/subconscious/p/5058741.html 神...
    Albert陳凱閱讀 5,595評(píng)論 0 48
  • 我感恩我擁有: 1、感謝您,花老師。拋給我知識(shí)鏈接時(shí)是那樣的帥,毫無保留。 2、感謝您,花老師。是您的努力讓我看到...
    小泥蛋兒閱讀 139評(píng)論 0 0
  • 終究還是忘不了,難放下,總會(huì)在內(nèi)心的一隅,跌跌撞撞的撞進(jìn)去,而后沉浸,沉浸。到清醒的那一刻,才發(fā)現(xiàn)悲傷逆流成河。
    慕慕_閱讀 123評(píng)論 0 0
  • 夜來幽夢忽轉(zhuǎn)醒,寂寞最恨寒衾。欲問阿妻可伶仃?牽腸有孕身,輾轉(zhuǎn)聽蟲聲。 營營誤卻幾多情,百里山關(guān)難行。長愿棹舟分漂...
    余語于隅閱讀 546評(píng)論 6 20

友情鏈接更多精彩內(nèi)容