2019.10.14
第一章? 深度學(xué)習(xí)的實(shí)用層面
1.1 訓(xùn)練/開發(fā)/測(cè)試
建模時(shí)所用的超參的設(shè)定取決于諸多因素,如:(1)具體的場(chǎng)景饺鹃,如圖像識(shí)別莫秆、自然語言處理间雀;(2)數(shù)據(jù)規(guī)模,包括樣本的規(guī)模和特征的規(guī)模镊屎;等惹挟。因此,在模型開發(fā)過程中缝驳,通常較難一開始就會(huì)設(shè)定出一組合適的訓(xùn)練參數(shù)连锯,而是通過不斷地調(diào)試,找到最合適的參數(shù)用狱。
訓(xùn)練集/驗(yàn)證集/測(cè)試集 的劃分:要保證驗(yàn)證集和測(cè)試集是同一分布运怖。
1.2 偏差/方差
老生常談的幾點(diǎn)
1. 欠擬合導(dǎo)致偏差,過擬合導(dǎo)致方差
2. 觀察訓(xùn)練集和測(cè)試集的誤差夏伊,可以確定模型處于欠擬合還是過擬合的狀態(tài)摇展,從而確定當(dāng)前的誤差主要是方差還是偏差導(dǎo)致的。
1.3 機(jī)器學(xué)習(xí)基礎(chǔ)
1. 調(diào)參首先要確認(rèn)當(dāng)前模型是偏差狀態(tài)還是方差狀態(tài)溺忧;
2. 更復(fù)雜的網(wǎng)絡(luò)降低偏差吗购,更大的數(shù)據(jù)降低方差;
3. 只要正則化合適砸狞,更大的網(wǎng)絡(luò)基本沒有壞處,除了需耗費(fèi)更多的訓(xùn)練時(shí)間镀梭。
1.4 正則化
1.4.1 正則化項(xiàng)的概念
1. 對(duì)于神經(jīng)網(wǎng)絡(luò)刀森,有最常用的兩種正則化方法:
L1正則化:在損失函數(shù)里加入所有w的絕對(duì)值和b的絕對(duì)值之和(的平均值),其中b項(xiàng)有時(shí)候省略
L2正則化:在損失函數(shù)里加入所有w的平方和b的平方之和(的平均值)
2. 正則化項(xiàng)前面的系數(shù):表示了在整個(gè)損失函數(shù)中正則化項(xiàng)的權(quán)重
1.4.2 正則化項(xiàng)與梯度下降
L2正則:w的梯度會(huì)隨著w本身不斷減斜ㄕ恕(接近與0)而不斷減小研底,因此其向0的逼近是逐漸減速的,會(huì)導(dǎo)致w成為比較小但不為0的數(shù)透罢。結(jié)論:L2正則會(huì)導(dǎo)致最終訓(xùn)練出的參數(shù)都接近0榜晦,但大部分并不為0
L1正則:w的梯度下降方向在大于0時(shí)為-1,小于0時(shí)為1羽圃,因此會(huì)迅速收斂到0乾胶。結(jié)論:L1正則會(huì)導(dǎo)致大部分w都為0,少部分不為0
1.5 為什么正則化可以減少過擬合(減小方差)
1. 正則可以弱化(L2)或去除(L1)部分神經(jīng)元之間的連接朽寞,從而使整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)變得簡(jiǎn)單识窿。
2. 正則化使得w變小,進(jìn)而使得加權(quán)求和的值變小脑融,進(jìn)而使得喂入激活函數(shù)的值在零附近的“近似線性區(qū)域”喻频,從而簡(jiǎn)化了整個(gè)網(wǎng)絡(luò)的映射關(guān)系。
1.6 dropout(隨機(jī)失活)正則化
dropout操作:在訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)時(shí)(在喂入一組數(shù)據(jù)前)肘迎,對(duì)各個(gè)隱藏層的神經(jīng)元隨機(jī)去除一部分甥温。比如假設(shè)隱藏層本來全是4個(gè)神經(jīng)元锻煌,設(shè)置去除比例為0.25,則每層變?yōu)?個(gè)神經(jīng)元姻蚓。然后在被簡(jiǎn)化的網(wǎng)絡(luò)上進(jìn)行FP和BP宋梧,并調(diào)整對(duì)應(yīng)的w和b。
作用:dropout把神經(jīng)網(wǎng)絡(luò)暫時(shí)進(jìn)行了簡(jiǎn)化史简,比如dropout之前乃秀,層與層之間是4*4的參數(shù)矩陣,dropout后變成了3*3圆兵,有利于防止過擬合跺讯。
注:=只是在訓(xùn)練時(shí)進(jìn)行dropout,預(yù)測(cè)時(shí)使用完整的網(wǎng)絡(luò)殉农。
1.7 理解dropout(直觀)
1. dropout使得網(wǎng)絡(luò)不會(huì)只重視少量輸入(最初的輸入特征或上一層的輸出)刀脏,而是相對(duì)平等地對(duì)待所有特征。試想:假設(shè)把某個(gè)輸入的w調(diào)得過大超凳,結(jié)果下一輪時(shí)這個(gè)節(jié)點(diǎn)被drop掉了愈污,使得網(wǎng)絡(luò)的預(yù)測(cè)效果大打折扣。因此轮傍,網(wǎng)絡(luò)會(huì)傾向于把每個(gè)w都調(diào)得不那么大(每個(gè)特征都發(fā)揮作用暂雹,但都不大),而不是少量特征的w很大创夜,而其余的w很泻脊颉(只有少數(shù)特征發(fā)揮決定性作用)。從這個(gè)角度看驰吓,dropout的作用很像L2正則化涧尿。
2. 每層可以設(shè)置不同的keep_prob參數(shù),一般經(jīng)驗(yàn)是:輸入層keep_prob保持為1檬贰,若層神經(jīng)元數(shù)較多則把keep_prob參數(shù)設(shè)置的較小一些姑廉,反之則較大一些。
3. dropout本質(zhì)是正則化翁涤,因此其作用是為了防止過擬合桥言。
4. dropout正則化目前被廣泛應(yīng)用到計(jì)算機(jī)視覺領(lǐng)域,其它領(lǐng)域則鮮有使用迷雪。
1.8 其它正則化方法
1.8.1 擴(kuò)充數(shù)據(jù)集
以圖像識(shí)別為例限书,把原始樣本的圖片進(jìn)行左右反轉(zhuǎn)、傾斜章咧、裁邊等操作倦西,即可構(gòu)造大量樣本。更大的數(shù)據(jù)集可以降低過擬合(正則化方法就是指降低過擬合的方法)赁严。但這類方法在其它領(lǐng)域不怎么好用扰柠。
1.8.2 early stopping
1. 概念:整個(gè)迭代訓(xùn)練過程中粉铐,訓(xùn)練集的誤差持續(xù)下降,測(cè)試集或驗(yàn)證集的誤差則先下降后增大卤档,可以認(rèn)為拐點(diǎn)就是開始過擬合的點(diǎn)蝙泼。early stopping則是使用某種方式持續(xù)關(guān)注這種變化的趨勢(shì),并適時(shí)停止訓(xùn)練劝枣。
2. 優(yōu)缺點(diǎn)(與L2正則化對(duì)比):
優(yōu)點(diǎn):early stopping不涉及具體的罰項(xiàng)汤踏,因此也沒有相應(yīng)的參數(shù)lambda,少一個(gè)需要調(diào)的超參舔腾。相比較來說L2正則則要嘗試大量的lambda來確定最優(yōu)值溪胶,增大了訓(xùn)練成本。
缺點(diǎn):L2正則化每設(shè)定一個(gè)lambda值稳诚,就相當(dāng)于確定了一個(gè)具體的帶罰項(xiàng)的成本函數(shù)哗脖,接下來的訓(xùn)練則是一門心思減小成本函數(shù)。相當(dāng)于防止過擬合和降低成本函數(shù)是分成前后兩步干的扳还。而early stopping則相當(dāng)于把兩步揉到一起干才避,在為了防止過擬合停止訓(xùn)練的時(shí)刻,也等于放棄了繼續(xù)減小成本函數(shù)氨距。
1.9 標(biāo)準(zhǔn)化輸入
(原視頻起名“正則化輸入”桑逝,不是很合理)
神經(jīng)網(wǎng)絡(luò)的輸入特征一定要進(jìn)行標(biāo)準(zhǔn)化處理,即減去均值俏让、除以方差肢娘。
若原始特征是正態(tài)分布,則標(biāo)準(zhǔn)化后為標(biāo)準(zhǔn)正太分布舆驶。
若不進(jìn)行標(biāo)準(zhǔn)化操作,不同的特征可能分布在不同量級(jí)而钞,如年齡和收入沙廉。若以原始特征作為輸入,則對(duì)應(yīng)的合適的w也可能差了量級(jí)臼节,從而導(dǎo)致迭代優(yōu)(梯度下降等)化難以進(jìn)行撬陵。
1.10 梯度消失和梯度爆炸
直觀理解:假設(shè)一個(gè)非常非常深的DNN,假設(shè)中間的層不做非線性變換网缝,則FP可以表示為
暫時(shí)忽略b
假設(shè)每層的W都是大于1的巨税,很多相乘之后變大更加的大,則對(duì)每個(gè)參數(shù)而言粉臊,(損失函數(shù)的)梯度都會(huì)特別大草添,這叫梯度爆炸
假設(shè)每層的W都是小于1的,則很多相乘后變得接近于0扼仲,對(duì)每個(gè)參數(shù)而言远寸,梯度都會(huì)變得特別小抄淑,這叫梯度消失。
為什么會(huì)有都大于1或都小于1這種事呢驰后,取決于初始化肆资。假設(shè)初始化的W都非常小,一直處于梯度消失區(qū)灶芝,則訓(xùn)練變得基本沒有進(jìn)展郑原;假設(shè)W都初始化的很大,則上來就梯度爆炸夜涕,對(duì)應(yīng)的可能是損失函數(shù)在震蕩而遲遲不能收斂犯犁。這也是為什么參數(shù)初始化如此重要了。
1.11? 神經(jīng)網(wǎng)絡(luò)的權(quán)重初始化
1. 激活函數(shù)為tanh時(shí)钠乏,令W的方差為 :(Xavier初始化)
2. 激活函數(shù)是ReLU栖秕,權(quán)重w的初始化一般令其方差為? :
3. 另一種初始化w的方法恨闪,令其方差為 2/(n[l-1]+n[l]):
?合適的初始化是為了避免梯度消失或梯度爆炸譬正,更深的就不咋知道了。
原文鏈接:https://blog.csdn.net/cherry_yu08/article/details/79116862
1.12 梯度的數(shù)值逼近
在求解在
處的導(dǎo)數(shù)時(shí):
數(shù)學(xué)的解法:先求出f(x)的導(dǎo)函數(shù)f'(x)杜漠,再把代入俏拱,求出f'(
)
數(shù)值的解法:搞一個(gè)較小的值暑塑,求出
,讓
盡量的小就是所謂的數(shù)值逼近锅必。
計(jì)算機(jī)解決數(shù)學(xué)問題事格,本質(zhì)都是用數(shù)值的方法。
1.13 梯度檢驗(yàn)
對(duì)于一個(gè)神經(jīng)網(wǎng)絡(luò)搞隐,梯度檢驗(yàn)的步驟如下:
(0)先有一組確定好的參數(shù)值(比如初始化值)
(1)把所有的參數(shù)即所有的w和b整合成一個(gè)巨大的vector驹愚,表達(dá)為,此時(shí)的損失也可以表示為
(2)求出偏導(dǎo)構(gòu)成的向量 (怎么事先求出來劣纲。逢捺。。)
(3)循環(huán)執(zhí)行 assert
1.14 關(guān)于梯度檢驗(yàn)的注意事項(xiàng)
1. 梯度檢驗(yàn)是用來debug的癞季,不是每輪梯度下降都進(jìn)行梯度檢驗(yàn)劫瞳;
2. 如果有正則化項(xiàng),進(jìn)行梯度檢驗(yàn)時(shí)不要遺漏绷柒;
3. 梯度檢驗(yàn)時(shí)不應(yīng)帶dropout
4. 初始化后應(yīng)該進(jìn)行梯度檢驗(yàn)志于,訓(xùn)練一段時(shí)間后或許應(yīng)該重新檢驗(yàn)一下。
(不會(huì)真正用到废睦,畢竟都是調(diào)包俠)