本系列是編者學(xué)習(xí)吳恩達(dá)deeplearning.ai 深度學(xué)習(xí)系列課程的筆記蚣驼。
編者有一定機(jī)器學(xué)習(xí)基礎(chǔ),也看過(guò)Andrew的機(jī)器學(xué)習(xí)課程。由于Andrew的課程非常通俗易懂姑食,筆記中會(huì)省略那些幫助理解的例子纱耻、圖形等芭梯,只把最終的觀點(diǎn)、解釋弄喘、結(jié)論和解決方案做整理玖喘,以供日后查看,另外編者也在某些地方蘑志,結(jié)合原版論文做出了一些批注和補(bǔ)充累奈,所以稱(chēng)之為精華版。
本篇是Course1+Course2+Course3卖漫,主要講述NN和DNN的宏觀概念费尽,以及激活函數(shù)、正則化羊始、優(yōu)化函數(shù)旱幼、參數(shù)調(diào)優(yōu)、性能評(píng)價(jià)突委、網(wǎng)絡(luò)構(gòu)建周期柏卤、構(gòu)建思路與處理辦法等廣泛適用于各種神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)技術(shù)冬三。
1 深度網(wǎng)絡(luò)和深度學(xué)習(xí)
1.1 深度學(xué)習(xí)簡(jiǎn)介
1.1.2 什么是神經(jīng)網(wǎng)絡(luò)
Example:房?jī)r(jià)預(yù)測(cè)
- 輸入為:房屋大小,臥室數(shù)量缘缚,周邊富裕程度等
- 隱藏單元:可以通過(guò)輸入組合得到家庭人口數(shù)量勾笆,周邊學(xué)校質(zhì)量,交通便利度等二級(jí)指標(biāo)
- 輸出為房?jī)r(jià)
神經(jīng)網(wǎng)絡(luò)的實(shí)質(zhì)是一個(gè)精細(xì)的映射函數(shù)
1.1.3 用神經(jīng)網(wǎng)絡(luò)進(jìn)行有監(jiān)督學(xué)習(xí)
使用神經(jīng)網(wǎng)絡(luò)進(jìn)行有監(jiān)督學(xué)習(xí)的第一個(gè)問(wèn)題是要定義好模型的輸入和輸出桥滨。
根據(jù)不同的輸入數(shù)據(jù)類(lèi)型(特征類(lèi)型)(結(jié)構(gòu)化窝爪、非結(jié)構(gòu)、半結(jié)構(gòu)等)齐媒,選擇不同的網(wǎng)絡(luò)結(jié)構(gòu)蒲每。
1.1.4 為什么深度學(xué)習(xí)會(huì)興起
原因主要是數(shù)據(jù)量激增。
- 當(dāng)標(biāo)簽數(shù)據(jù)集量不大時(shí)喻括,神經(jīng)網(wǎng)絡(luò)和機(jī)器學(xué)習(xí)模型很難分出優(yōu)劣邀杏,效果主要取決于算法細(xì)節(jié)和對(duì)數(shù)據(jù)的處理。
- 當(dāng)數(shù)據(jù)量足夠大時(shí)唬血,復(fù)雜的大規(guī)模神經(jīng)網(wǎng)絡(luò)望蜡,具有相當(dāng)大的參數(shù)空間,可以訓(xùn)練出很強(qiáng)的非線性效果拷恨,因此效果穩(wěn)定比機(jī)器學(xué)習(xí)模型要好脖律。
另外一個(gè)原因是計(jì)算力增強(qiáng):包括效率加速、硬件加速挑随、算法加速(例如從sigmoid激活函數(shù)->Relu函數(shù)状您,可以加速梯度下降)等。
1.2 神經(jīng)網(wǎng)絡(luò)基礎(chǔ)
1.2.18 logistic回歸代價(jià)函數(shù)的解釋
首先給出一個(gè)符號(hào)定義:
- 即給定x兜挨,預(yù)測(cè)y為1的概率為
- 那么當(dāng)y=1時(shí):
- 當(dāng)y=0時(shí):
整合一下膏孟,
如果各個(gè)數(shù)據(jù)點(diǎn)是獨(dú)立的,那么每次分類(lèi)都是準(zhǔn)的概率為
這變成了一個(gè)極大似然估計(jì)的問(wèn)題拌汇,即給定這么多的樣本柒桑,想要把模型的參數(shù)求出來(lái),則需要對(duì)上式取最大值噪舀,這可以通過(guò)先取對(duì)數(shù)來(lái)簡(jiǎn)化魁淳,即
這就是logistic回歸代價(jià)函數(shù)的相反數(shù)(因?yàn)橐∽钚≈担?br>
其中其實(shí)就是模型的輸出預(yù)測(cè)值
- 另外補(bǔ)充一下,為什么MSE(均方差)代價(jià)函數(shù)不適用于logistic回歸与倡,主要是因?yàn)槠溆迷趌ogistic回歸中將產(chǎn)生非凸函數(shù)界逛,梯度下降用不了。MSE在回歸問(wèn)題中很好用纺座,但在分類(lèi)問(wèn)題中由于預(yù)測(cè)輸出是離散值息拜,就不太好用了。
1.3 淺層神經(jīng)網(wǎng)絡(luò)
1.3.6 激活函數(shù)
-
sigmoid函數(shù)是一種,即
少欺,但基本上不怎么用喳瓣,只在做二元分類(lèi)時(shí)輸出層用起來(lái)比較方便。
image.png -
tanh(雙曲正切函數(shù))幾乎總是比sigmoid函數(shù)要好一些赞别,而且由于關(guān)于0對(duì)稱(chēng)畏陕,所以自帶數(shù)據(jù)歸一化的功能。
image.png -
ReLU函數(shù)仿滔,是最常用的默認(rèn)激活函數(shù)惠毁。其好處主要在于導(dǎo)數(shù)比較大,尤其是在z比較大的范圍之內(nèi)堤撵,而關(guān)于z<0的部分仁讨,Andrew的解釋是神經(jīng)元較多,一般不會(huì)讓它小于0实昨。導(dǎo)數(shù)較大,意味著做梯度下降時(shí)速度快盐固。
image.png -
leaky ReLU函數(shù)荒给,是ReLU的一種變形,可以作為備選刁卜。
image.png 總的來(lái)說(shuō)志电,根據(jù)Andrew的語(yǔ)氣,激活函數(shù)的選擇是一個(gè)比較玄學(xué)的事情蛔趴,主要是靠經(jīng)驗(yàn)來(lái)選擇挑辆,目前恐怕主要就是ReLU函數(shù)了。
1.3.7 為什么需要非線性激活函數(shù)
原因:如果是線性激活函數(shù)孝情,那么神經(jīng)網(wǎng)絡(luò)就是輸入的線性組合鱼蝉,訓(xùn)練不出來(lái)復(fù)雜的非線性關(guān)系。
唯一的可能使用的就是在輸出層箫荡,做回歸任務(wù)時(shí)魁亦,可能就用線性激活。
1.3.9 神經(jīng)網(wǎng)絡(luò)的梯度下降法
梯度下降本質(zhì)就是求導(dǎo)了羔挡,神經(jīng)網(wǎng)絡(luò)里求導(dǎo)(反向傳播)著重使用鏈?zhǔn)椒▌t洁奈,這里不多說(shuō)。
值得一說(shuō)的是绞灼,可以批量進(jìn)行梯度下降(mini-batch gradient descent)利术,只需將輸入和輸出都由向量變成矩陣即可〉桶考慮到代價(jià)函數(shù)對(duì)各個(gè)輸入的代價(jià)是取平均值的印叁,梯度下降時(shí)對(duì)應(yīng)的參數(shù)調(diào)整也要取平均保持一致。
1.3.11 隨機(jī)初始化
- 為什么不能全初始化為0:如果全都初始化為0,所有隱藏單元全都在做一樣的事情喉钢,所以最后這些隱藏層都沒(méi)用姆打。
所以一般是隨機(jī)初始化。另外初始化時(shí)一般都是非常小的隨機(jī)數(shù)肠虽,因?yàn)槿绻胹igmoid/tanh激活函數(shù)時(shí)幔戏,值太大會(huì)讓梯度下降很慢。 - 這里涉及一個(gè)參數(shù)税课,將隨機(jī)生成的數(shù)字縮小一定的倍數(shù)闲延,比如較小的網(wǎng)絡(luò),這個(gè)數(shù)字可以是0.01.
1.4 深度神經(jīng)網(wǎng)絡(luò)
1.4.1 深度神經(jīng)網(wǎng)絡(luò)(DNN)
logistic回歸可以看做是一個(gè)單層的神經(jīng)網(wǎng)絡(luò)韩玩,之后加隱藏層成為一個(gè)淺層神經(jīng)網(wǎng)絡(luò)垒玲,再加隱藏層稱(chēng)為深度神經(jīng)網(wǎng)絡(luò)。
1.4.5 為什么使用深層表示
DNN奏效的原因可以通過(guò)一個(gè)例子來(lái)解釋?zhuān)?/p>
- 比如一個(gè)人臉識(shí)別算法找颓,要構(gòu)造一個(gè)DNN合愈,輸入圖像信息,第一個(gè)隱藏層可以捕捉圖像中人臉的各種邊緣击狮,第二個(gè)隱藏層可以識(shí)別出小的組成部分佛析,第三個(gè)隱藏層就可以是一個(gè)整體。復(fù)雜的特征需要逐層去構(gòu)建彪蓬。
深層相對(duì)于淺層的好處是網(wǎng)絡(luò)的規(guī)拇缒可以得到控制:
- 比如n個(gè)特征做異或,成對(duì)異或档冬,logn層的網(wǎng)絡(luò)就可以完成膘茎,神經(jīng)元個(gè)數(shù)為n;但是如果只用1個(gè)隱藏層酷誓,至少需要
個(gè)隱藏層神經(jīng)元才能枚舉全部可能披坏。
但是從分析問(wèn)題角度來(lái)講,一定是由淺入深的:先看看logistic回歸是否奏效呛牲,然后逐步增加隱藏層數(shù)刮萌。
1.4.6 超參數(shù)
DNN的超參數(shù)其實(shí)很多:學(xué)習(xí)率,隱藏層數(shù)娘扩,各隱藏層神經(jīng)元數(shù)着茸,迭代次數(shù),正則化參數(shù)等等等等琐旁,這些超參會(huì)影響最終學(xué)習(xí)的結(jié)果涮阔。
- 但是如何把這些參數(shù)調(diào)到最好的值呢?只有試灰殴。通過(guò)一些intuition和調(diào)試手段敬特,這個(gè)過(guò)程在有經(jīng)驗(yàn)的ML eng. 手上會(huì)更快,但不會(huì)沒(méi)有。
- 另外伟阔,如果數(shù)據(jù)是在變化的(很少有不變的)辣之,那么在前幾個(gè)月調(diào)成最優(yōu)的超參,很可能現(xiàn)在就不適用了皱炉,只能繼續(xù)調(diào)參怀估。
2 提升DNN:調(diào)參、正則化和優(yōu)化
2.1 神經(jīng)學(xué)習(xí)應(yīng)用
2.1.1 訓(xùn)練/驗(yàn)證/測(cè)試集
在大數(shù)據(jù)集和DNN的語(yǔ)境下合搅,驗(yàn)證集和測(cè)試集的比例一般會(huì)更小多搀。
- 比如1M的數(shù)據(jù)集,可能驗(yàn)證集10k灾部,測(cè)試集10k康铭,就足以用來(lái)選擇、測(cè)試模型算法赌髓。
- ML中一般是6:2:2从藤,或者7:3之類(lèi)的,在大數(shù)據(jù)集下不適用锁蠕。
第二點(diǎn)就是三個(gè)子集的數(shù)據(jù)來(lái)源應(yīng)該是同分布的:
- Andrew舉了一個(gè)例子呛哟,訓(xùn)練集都是高分辨率的攝影網(wǎng)站上的貓咪照片,驗(yàn)證集和測(cè)試集用用戶(hù)自己的隨手拍匿沛,會(huì)導(dǎo)致效果很差。
2.1.2 偏差/方差
在訓(xùn)練集和驗(yàn)證集取自同分布给赞,且基本誤差(人類(lèi)誤差)較小的情況下:
- 訓(xùn)練集誤差明顯小于驗(yàn)證集誤差:高方差(過(guò)擬合)
- 訓(xùn)練集誤差和驗(yàn)證集誤差都很大:高偏差(欠擬合)
- 訓(xùn)練集誤差和驗(yàn)證集誤差都很大且訓(xùn)練集誤差明顯小于驗(yàn)證集誤差:既高方差又高偏差(有些數(shù)據(jù)區(qū)域偏差高萝喘,即像線性分類(lèi)器蜈首,有些數(shù)據(jù)區(qū)域方差又高,像過(guò)擬合的復(fù)雜曲線抡笼。尤其在高維情況下容易出現(xiàn))
2.1.3 優(yōu)化方案
-
高偏差(訓(xùn)練集):
- 用一個(gè)更大的網(wǎng)絡(luò)是一個(gè)穩(wěn)妥的方案
- 多訓(xùn)練一段時(shí)間,但未必會(huì)奏效
- 換網(wǎng)絡(luò)結(jié)構(gòu)黄鳍,這個(gè)甚至有可能變差
-
當(dāng)解決了高偏差問(wèn)題推姻,如果出現(xiàn)了高方差(驗(yàn)證集)的問(wèn)題:
- 多搞一些數(shù)據(jù),如果可以
- 正則化
- 換網(wǎng)絡(luò)結(jié)構(gòu)框沟,這是一個(gè)需要嘗試的事情藏古。
優(yōu)化就是這兩個(gè)部分的來(lái)回迭代,先搞好訓(xùn)練集(bias)忍燥,然后看驗(yàn)證集(variance)拧晕,有任何修正,需要重新從訓(xùn)練集開(kāi)始再來(lái)一次梅垄,直到兩個(gè)數(shù)據(jù)子集上都質(zhì)量合格厂捞,任務(wù)就完成了。
- 一個(gè)誤會(huì):在deep learning早期經(jīng)常有偏差和方差做trade-off的思想,那是數(shù)據(jù)量不夠的時(shí)候靡馁,現(xiàn)在只要通過(guò)延長(zhǎng)訓(xùn)練復(fù)雜度欲鹏,增加數(shù)據(jù)量等方式,還是可以改善一個(gè)而不影響另一個(gè)臭墨。
2.1.4 正則化
正則化就是在正常的代價(jià)函數(shù)后面再加一項(xiàng)關(guān)于參數(shù)向量的代價(jià)赔嚎,為正則化參數(shù)。
- L2正則化(最常見(jiàn)):加參數(shù)向量/矩陣的L2范數(shù)*
裙犹,即到原點(diǎn)的歐式距離尽狠。
- 用于矩陣時(shí),就是對(duì)神經(jīng)網(wǎng)絡(luò)引入正則化叶圃,其中袄膏,參數(shù)矩陣僅為最后一個(gè)隱藏層到輸出層的參數(shù)矩陣
- 矩陣的L2范數(shù)稱(chēng)為Frobenius norm (F)
- 這種正則化也被稱(chēng)為權(quán)重衰退,因?yàn)樵谇髮?dǎo)(反向傳播)之后掺冠,權(quán)重矩陣每個(gè)更新沉馆,相比于沒(méi)有正則化時(shí),會(huì)首先將原參數(shù)矩陣縮小至原來(lái)的
德崭,然后再減去原來(lái)的反向傳播項(xiàng)斥黑。
- L1正則化:加參數(shù)向量/矩陣的L1范數(shù)*
。
2.1.5 為什么正則化可以減少過(guò)擬合
代價(jià)函數(shù)中存在一個(gè)眉厨,會(huì)讓參數(shù)矩陣普遍偏小锌奴,那么算出來(lái)的z值(激勵(lì)前值)就會(huì)偏小,假設(shè)用tanh激活函數(shù)憾股,其在z值于0附近時(shí)鹿蜀,幾乎是一個(gè)線性函數(shù),而用線性函數(shù)做激勵(lì)最多只能反映一個(gè)線性關(guān)系服球。
- 注意在調(diào)試學(xué)習(xí)曲線的時(shí)候茴恰,把這個(gè)正則項(xiàng)拿掉。
2.1.6 Dropout正則化
可以翻譯為隨機(jī)失活正則化斩熊,其主要思想是訓(xùn)練過(guò)程中往枣,隨機(jī)剔除一些神經(jīng)元,使得網(wǎng)絡(luò)變得更簡(jiǎn)單粉渠,趨向于欠擬合分冈。
- 具體來(lái)說(shuō),執(zhí)行訓(xùn)練之前渣叛,對(duì)每個(gè)訓(xùn)練樣本丈秩,每個(gè)需要正則化的層中的每個(gè)神經(jīng)元,我們都隨機(jī)生成一個(gè)數(shù)(0或1淳衙,1的概率為超參keep_prob)蘑秽。
- 在訓(xùn)練過(guò)程中饺著,需要dropout的層在計(jì)算激勵(lì)值之后,和生成的隨機(jī)數(shù)乘一下肠牲,干掉那些需要忽略的神經(jīng)元的輸出幼衰。
- 最后將剩下的激勵(lì)值都除以keep_prob,以確保在對(duì)下一層的輸入沒(méi)有Scale上的改變缀雳。
- 在測(cè)試集上就不需要搞keep_prob渡嚣,直接用已有的參數(shù)做測(cè)試就可以了。
- 這種方式稱(chēng)為inverted dropout
2.1.7 理解dropout
- 由于每個(gè)神經(jīng)元都有可能被隨機(jī)抹除掉肥印,所以某個(gè)后層神經(jīng)元不能把所有權(quán)重都?jí)涸谇懊婺骋粋€(gè)神經(jīng)元上识椰,而是要分散權(quán)重都前一層的所有神經(jīng)元。
- 這在事實(shí)上讓收縮了權(quán)重矩陣深碱,和L2正則化起到了類(lèi)似地作用腹鹉。(編者注:
,分散權(quán)重敷硅,F(xiàn)范數(shù)會(huì)小一些)
- 各層的keep_prob也可以不同功咒,對(duì)于復(fù)雜的層,keep_prob可以大一些防止過(guò)擬合绞蹦;對(duì)于很簡(jiǎn)單的層力奋,比如輸出層,可以讓keep_prob直接=1幽七,即不采用此策略景殷。輸入層的keep_prob,一般就是1澡屡,即不刪輸入特征滨彻,如果一定要用Dropout,keep_prob也要接近1.
- 本質(zhì)上dropout只是一個(gè)正則化手段:Andrew舉了一個(gè)例子挪蹭,在CV里面,特征非常多休偶,但數(shù)據(jù)量不夠梁厉,所以容易過(guò)擬合(編者:像線性回歸中組合了太多高次項(xiàng)),因此常用dropout正則化踏兜。但在其他問(wèn)題上词顾,如果沒(méi)有出現(xiàn)overfit,就別考慮dropout碱妆。
- 缺點(diǎn):此時(shí)代價(jià)函數(shù)就沒(méi)有明確定義了肉盹,完全變成了一個(gè)概率上的事情,因此學(xué)習(xí)曲線也沒(méi)法畫(huà)了疹尾,所以一般是先把keep_prob全都設(shè)為1上忍,根據(jù)學(xué)習(xí)曲線確定代碼沒(méi)問(wèn)題骤肛,然后再開(kāi)dropout。
2.1.8 其它正則化方法
- 對(duì)原始數(shù)據(jù)集做一些簡(jiǎn)單的變化窍蓝,也是一種擴(kuò)充數(shù)據(jù)量的辦法腋颠,可以作為一種正則化方法來(lái)使用。
- 通過(guò)學(xué)習(xí)曲線吓笙,在訓(xùn)練到過(guò)擬合之前淑玫,就提前中止,前提是這個(gè)位置的錯(cuò)誤率你很滿意面睛。本質(zhì)上絮蒿,訓(xùn)練從初始的參數(shù)為隨機(jī)小參數(shù)到后來(lái)越來(lái)越大,我們提前中止叁鉴,實(shí)際上也是收縮了權(quán)重土涝,和L2正則化有類(lèi)似的作用。
- 優(yōu)點(diǎn):運(yùn)行一次梯度下降看曲線就可以了亲茅,計(jì)算代價(jià)低回铛;而L2正則化就要經(jīng)常改變
,觀察學(xué)習(xí)曲線克锣。
- 缺點(diǎn):對(duì)于ML任務(wù)來(lái)說(shuō)茵肃,如果選定了模型,比如NN袭祟,后面的過(guò)程有兩個(gè)正交的組成部分验残,一個(gè)是讓代價(jià)更低,即學(xué)習(xí)過(guò)程巾乳,如梯度下降您没;另一個(gè)是給對(duì)應(yīng)的模型解決過(guò)擬合的問(wèn)題,例如用正則化胆绊。而提前中止會(huì)讓這兩個(gè)事情耦合在一起氨鹏,只能同時(shí)考慮一大坨超參,會(huì)讓思考復(fù)雜化压状。
2.1.9 輸入歸一化
主要是讓輸入特征的數(shù)據(jù)范圍大小一致仆抵,如果差的太多,它們對(duì)應(yīng)的參數(shù)范圍差的也會(huì)非常大种冬,代價(jià)函數(shù)會(huì)變得非沉统螅“狹長(zhǎng)”,不利于梯度下降娱两。歸一化后莺匠,參數(shù)范圍也差不多,代價(jià)函數(shù)更像一個(gè)均勻的碗十兢,有利于梯度下降趣竣。
Andrew給的歸一化方案是所有數(shù)據(jù)減均值除方差摇庙,在各個(gè)特征上都這樣做。
2.1.10 梯度消失和梯度爆炸
如果一個(gè)網(wǎng)絡(luò)層數(shù)非常非常多期贫,那么假設(shè)每個(gè)權(quán)重矩陣都為跟匆,
為單位矩陣,假設(shè)激活函數(shù)是a=z通砍,那么輸出層的激勵(lì)值將為
玛臂,由于指數(shù)爆炸,最后這個(gè)激勵(lì)值將變得非常小封孙。類(lèi)似地迹冤,如果權(quán)重矩陣是
,激勵(lì)值又會(huì)非常大虎忌。同樣的泡徙,反向傳播中的各級(jí)導(dǎo)數(shù)(梯度)也有類(lèi)似地問(wèn)題。這就是深層網(wǎng)絡(luò)中的梯度消失和爆炸問(wèn)題膜蠢。
2.1.11 權(quán)重初始化
通過(guò)權(quán)重初始化可以改善梯度消失和梯度爆炸的問(wèn)題堪藐。之前我們說(shuō)權(quán)重初始化只需要設(shè)置為隨機(jī)小值即可。
- 進(jìn)一步挑围,如果特征比較多礁竞,我們就希望每個(gè)特征的參數(shù)權(quán)值比較小,否則特征越多杉辙,激勵(lì)越高模捂。
- Xavier初始化(tanh激勵(lì)函數(shù))
- 形式上講,我們希望對(duì)于每一個(gè)單個(gè)神經(jīng)元蜘矢,輸入?yún)?shù)權(quán)值的方差為
狂男。注意到輸入?yún)?shù)的期望(均值)一般是0,就是標(biāo)準(zhǔn)正態(tài)的均值品腹;輸入越多岖食,方差越小,權(quán)值和0的距離也越小舞吭。
- 編程上講县耽,每個(gè)權(quán)值被設(shè)置為標(biāo)準(zhǔn)正態(tài)分布的一個(gè)隨機(jī)量
。
- 在這種情況下镣典,如果輸入也被正則化了,那么激勵(lì)值也就大約在均值為0唾琼,方差為1的分布下產(chǎn)生兄春,這就解決了梯度消失和爆炸問(wèn)題。
- 形式上講,我們希望對(duì)于每一個(gè)單個(gè)神經(jīng)元蜘矢,輸入?yún)?shù)權(quán)值的方差為
- 當(dāng)激勵(lì)函數(shù)用ReLU函數(shù)時(shí)锡溯,一般方差為
更為合適赶舆。
也是一種選擇哑姚。
2.2 優(yōu)化算法
2.2.2 mini-batch 梯度下降
用了mini-batch后,學(xué)習(xí)曲線的下降(代價(jià)函數(shù)值下降)將成為抖動(dòng)的芜茵,有噪聲的叙量。mini-batch size越小,噪聲越大九串;mini-batch size = 1時(shí)绞佩,就會(huì)退化為隨機(jī)梯度下降,噪聲是極大的猪钮。
2.2.3 指數(shù)加權(quán)平均
意思是說(shuō)品山,當(dāng)前預(yù)測(cè)值不僅和當(dāng)前觀測(cè)有關(guān),而且和之前的次觀測(cè)有關(guān)烤低。
越大肘交,考慮之前的權(quán)重就越大,預(yù)測(cè)曲線會(huì)越平穩(wěn)扑馁,對(duì)于峰值谷值會(huì)有更長(zhǎng)時(shí)間的滯后涯呻;
越小,噪聲越大腻要,曲線會(huì)不平穩(wěn)复罐,但是和觀測(cè)值會(huì)很貼近。
一般取0.9,0.95,0.98等
(編者注:計(jì)算機(jī)網(wǎng)絡(luò)中闯第,印象中TCP協(xié)議中的延遲預(yù)測(cè)似乎也用過(guò)類(lèi)似的方案市栗,本質(zhì)上是一種簡(jiǎn)單的預(yù)測(cè)模型)
2.2.5 指數(shù)加權(quán)平均偏差修正
一般來(lái)說(shuō),咳短,這樣當(dāng)
比較大時(shí)填帽,早期的預(yù)測(cè)值會(huì)非常小,為了減弱早期的誤差咙好,公式將輸出修正為
篡腌,這樣在i比較小時(shí),可以獲得較大補(bǔ)償勾效,i較大時(shí)嘹悼,補(bǔ)償基本就沒(méi)了。
2.2.6 動(dòng)量梯度下降(Momentum)
- 動(dòng)量梯度下降就利用了指數(shù)加權(quán)平均的思想层宫,每次進(jìn)行梯度下降時(shí)杨伙,不將此次下降完全獨(dú)立于之前的梯度下降,而是借鑒一部分之前的梯度下降萌腿。
- 具體來(lái)說(shuō)限匣,每次做梯度下降時(shí),算出的dW,db毁菱,不直接作用于當(dāng)前的W,b米死,首先計(jì)算
锌历,然后讓
, b也同理。Momentum不做偏差修正峦筒。
- 為什么要借鑒之前的梯度呢究西?一個(gè)直觀的感覺(jué)就是抖動(dòng)。對(duì)于一個(gè)狹長(zhǎng)的代價(jià)函數(shù)物喷,如果在寬上來(lái)回抖動(dòng)卤材,會(huì)歪曲到達(dá)谷值的路徑,對(duì)之前若干次梯度的平均脯丝,基本可以抵消抖動(dòng)商膊,使得梯度直達(dá)谷值,加速優(yōu)化宠进。
2.2.7 RMSprop梯度下降(root mean square)
這個(gè)方法和Momentum有點(diǎn)類(lèi)似晕拆,intuition也是差不多的,只要找對(duì)了方向材蹬,學(xué)習(xí)率就可以放大一些实幕。
再具體公式上,RMSprop有一定差異堤器。
- 可以看到昆庇,相比于Momentum,RMS為當(dāng)前梯度增加了平方項(xiàng)闸溃,然后在學(xué)習(xí)時(shí)又將其平方根作為分母整吆。
- 這表示的含義是:假設(shè)仍然是一個(gè)狹長(zhǎng)的代價(jià)函數(shù),對(duì)于寬來(lái)說(shuō)辉川,少少移動(dòng)一段表蝙,就會(huì)導(dǎo)致較大的變化,所以梯度(dW)是較大的乓旗,那對(duì)應(yīng)的
也是很大的府蛇,作為分母時(shí),整體的移動(dòng)步伐就比較小了屿愚。
2.2.8 Adam優(yōu)化算法(Adaptive moment estimation)
Adam基本就是把Momentum和RMSprop的結(jié)合汇跨。
- 首先用Momentum算出
,然后用RMSprop算出
- 然后分別用對(duì)應(yīng)的參數(shù)
,
做偏差修正
- 最后用以下式子進(jìn)行學(xué)習(xí)
編者:總結(jié)一下妆距,根據(jù)Andrew所說(shuō)穷遂,目前RMSprop和Adam是在各種網(wǎng)絡(luò)中都比較有效的。至于其中原因娱据,直覺(jué)上就是找對(duì)方向蚪黑,減小錯(cuò)誤方向抖動(dòng),提高學(xué)習(xí)率。但具體的證明和推導(dǎo)似乎比較缺乏祠锣,優(yōu)化算法這里更多的可能是實(shí)戰(zhàn)經(jīng)驗(yàn)給出的。Andrew也提到早期的優(yōu)化算法往往沒(méi)什么適用性咽安,所以人們對(duì)其信心也不高伴网,直到RMSprop和Adam算法出現(xiàn)。所以用的時(shí)候妆棒,直接撈二者之一用即可澡腾。
2.2.9 學(xué)習(xí)率衰退
核心思想是當(dāng)接近local optica時(shí)(已經(jīng)在谷底附近),較小的學(xué)習(xí)率能夠避免在這附近兜圈子糕珊。有很多算法會(huì)逐步調(diào)整學(xué)習(xí)率动分,一般的是在過(guò)一輪數(shù)據(jù)之后,降低一些红选,有多項(xiàng)式的澜公,指數(shù)的,甚至有手動(dòng)的喇肋,都可以坟乾,有用但不做為主要的超參來(lái)看待。
2.2.10 局部最優(yōu)的問(wèn)題
- 很多人會(huì)質(zhì)疑梯度下降會(huì)不會(huì)收斂到local optica上蝶防。Andrew的解釋是甚侣,梯度為0的維度可能是極大值,也可能是極小值间学,如果維度非常多殷费,要找到一個(gè)全空間上的local optica概率極小,需要在全部維度上都是極小值才可以低葫。
- 常見(jiàn)的情況是在一部分維度是極小值详羡,一部分維度是極大值,形成了鞍點(diǎn)氮采。
- 鞍點(diǎn)的問(wèn)題是周邊的梯度都非常平緩殷绍,要快速走出去就需要更好的優(yōu)化算法,比如Adam等鹊漠。
2.3 調(diào)參和batch norm
2.3.1-2.3.3 調(diào)參
Andrew給超參的優(yōu)先級(jí)排了個(gè)序:
- 學(xué)習(xí)率
- Momentum 參數(shù)
主到,決定滯后度和平滑度;隱藏單元數(shù)躯概;mini-batch size
- 層數(shù)
登钥,學(xué)習(xí)率衰退
- Adam優(yōu)化算法中的其他參數(shù),基本不用調(diào)
至于具體的調(diào)參過(guò)程娶靡,Andrew給的建議是隨機(jī)取值(相比于grid取值)(在合適范圍內(nèi)牧牢,線性or對(duì)數(shù),根據(jù)含義定)+由粗到細(xì)的搜索高維參數(shù)空間。
調(diào)參有兩種過(guò)程塔鳍,一種要長(zhǎng)時(shí)間跟蹤一個(gè)模型伯铣,根據(jù)學(xué)習(xí)曲線變化,不斷調(diào)整超參轮纫,改善模型腔寡;另一種是先設(shè)置一大組超參,然后并行地訓(xùn)練模型掌唾,最后做出比較放前。肯定是后者更優(yōu)糯彬,但是要考慮算力是否足夠凭语。
2.3.4-2.3.7 batch norm
batch norm怎么做
batch norm的intuition是對(duì)輸入的正則化,對(duì)于DNN撩扒,每一層如果理解為一個(gè)logistic回歸似扔,那其實(shí)應(yīng)該對(duì)每一層的激勵(lì)值做正則化,但事實(shí)上還沒(méi)做却舀。
不過(guò)從習(xí)慣上來(lái)看(或者不知道的理由)虫几,正則化都是對(duì)激勵(lì)前的值z(mì)做的,而非激勵(lì)值挽拔。具體做法是先對(duì)各層的z值減均值除方差辆脸,像正常正交化一樣,得到螃诅,然后做下式變換:
- 可以看到啡氢,如果
,
取合適的值术裸,很有可能
倘是;
-
,
已經(jīng)成為網(wǎng)絡(luò)的新參數(shù)(注意不是超參)袭艺,和
,
同等地位搀崭,同樣要通過(guò)優(yōu)化算法來(lái)求;
- 另一方面猾编,如果對(duì)
統(tǒng)一減均值瘤睹,那
偏移參數(shù)就被消掉了,所以如果用batch norm答倡,
參數(shù)就不用訓(xùn)練了轰传。
batch norm為什么能加速優(yōu)化算法呢?
- 第一個(gè)原因和輸入歸一化一樣瘪撇,能讓代價(jià)函數(shù)均勻點(diǎn)获茬,下降快些港庄;
- 第二個(gè)原因是能讓各層的學(xué)習(xí)相對(duì)獨(dú)立,而不是參數(shù)學(xué)習(xí)都耦合在一起恕曲。因?yàn)樵诟鲗又g都有batch norm能夠做正則化鹏氧,把輸入(z值)規(guī)范到一定的分布上(
,
),這樣對(duì)后續(xù)的影響就沒(méi)有那么大了佩谣。
- 這里涉及到一個(gè)概念叫covariate shift:其意思表示訓(xùn)練集和測(cè)試集必須同來(lái)源度帮,同分布,如果不一致的話就不要期待有很高的準(zhǔn)確率了稿存。
- 如果把網(wǎng)絡(luò)前層的激勵(lì)值看成輸入的話,如果這些輸入總是在不同分布上瞳秽,后面的網(wǎng)絡(luò)總是要做緩慢地調(diào)整(因?yàn)榭赡芎髮右呀?jīng)飽和瓣履,z值已經(jīng)比較大了)來(lái)適應(yīng)前層的學(xué)習(xí)結(jié)果,否則lose就會(huì)很高练俐,這稱(chēng)為internal covariate shift袖迎。
- 由于batch norm是在mini-batch size上來(lái)做的,所以對(duì)z值做歸一化時(shí)的均值和方差都是不準(zhǔn)的腺晾,這樣就導(dǎo)致后層的輸入是有噪聲的燕锥,誤打誤撞和Dropout正則化有些類(lèi)似,也起到了一些正則化的作用悯蝉,但是別把它當(dāng)真的正則化來(lái)用(解決過(guò)擬合)归形。【編者注:batch norm論文作者認(rèn)為這可以減少對(duì)Dropout的需求鼻由,Andrew認(rèn)為這兩者可以結(jié)合用暇榴,目的不同。Andrew的理解應(yīng)該更客觀些蕉世“簦】
測(cè)試集怎么做batch norm
由于在測(cè)試集上你不可能也做mini-batch,【編者注:測(cè)試集和用戶(hù)輸入類(lèi)似狠轻,你不能讓用戶(hù)一次只能輸入一大批奸例,用戶(hù)只會(huì)輸入一個(gè)樣本】,這樣batch norm中的第一步歸一化也沒(méi)法做了向楼,因?yàn)闆](méi)有均值查吊、方差。
解決方案就是要估計(jì)測(cè)試集的各層的,
蜜自,考慮到測(cè)試集菩貌、訓(xùn)練集同分布,那么仍然可以采用指數(shù)加權(quán)平均延續(xù)訓(xùn)練集mini-batch的
重荠,
箭阶。
2.3.8-2.3.9 softmax回歸
softmax激勵(lì)函數(shù)
softmax是一個(gè)特殊的激勵(lì)函數(shù)虚茶,它輸入是一個(gè)向量,輸出是一個(gè)向量仇参。
- 不同于之間的激勵(lì)函數(shù)輸入是標(biāo)量嘹叫,輸出是標(biāo)量。
- 其計(jì)算方式為對(duì)每個(gè)元素做
诈乒,
- 也就是說(shuō)要求輸出的向量求和為1
- 主要用于多分類(lèi)器罩扇,表示各個(gè)分類(lèi)的概率,加和為1.
softmax回歸
- softmax回歸是對(duì)logistic回歸的一種多分類(lèi)擴(kuò)展怕磨;當(dāng)分類(lèi)數(shù)只有2的時(shí)候喂饥,softmax回歸就退化成了logistic回歸。
- softmax是對(duì)比與hardmax肠鲫,hardmax會(huì)把輸出的激勵(lì)向量员帮,只保留1個(gè)1,剩下均為0.
- 損失函數(shù)為(C為分類(lèi)數(shù)):
- 非當(dāng)前分類(lèi)的不計(jì)損失导饲,當(dāng)前分類(lèi)的按預(yù)測(cè)的log值計(jì)入損失
- 代價(jià)函數(shù)為損失函數(shù)在各個(gè)樣本之和捞高。
- 非常幸運(yùn),對(duì)于這個(gè)代價(jià)函數(shù)
3 結(jié)構(gòu)化機(jī)器學(xué)習(xí)項(xiàng)目
3.1 機(jī)器學(xué)習(xí)系統(tǒng)優(yōu)化周期
- 首先是在訓(xùn)練集中把模型的準(zhǔn)確性做到和人類(lèi)專(zhuān)家接近渣锦∠醺冢【低偏差】
- 一般來(lái)說(shuō),會(huì)把人類(lèi)專(zhuān)家組的錯(cuò)誤率當(dāng)做貝葉斯錯(cuò)誤率(理論上最低值)的一個(gè)很緊的上界袋毙。
- 模型準(zhǔn)確率和人類(lèi)專(zhuān)家準(zhǔn)確率之間的差距稱(chēng)為可避免誤差型檀。
- 可避免誤差優(yōu)化方法:
- 訓(xùn)練一個(gè)更大的網(wǎng)絡(luò);
- 梯度下降更久一些听盖,或者選用更高級(jí)的優(yōu)化算法(Momentum, RMSprop, Adam)
- 改善網(wǎng)絡(luò)結(jié)構(gòu)贱除;
- 搜索超參。
- 其次是讓訓(xùn)練集誤差和驗(yàn)證集誤差較低媳溺≡禄希【低方差】
- 方差的優(yōu)化方法:
- 多搞一些數(shù)據(jù);
- 正則化(L2悬蔽,dropout扯躺,數(shù)據(jù)擴(kuò)充等)
- 改善網(wǎng)絡(luò)機(jī)構(gòu);
- 搜索超參蝎困。
- 方差的優(yōu)化方法:
- 如果訓(xùn)練集录语,驗(yàn)證集都沒(méi)問(wèn)題,但是測(cè)試集出了問(wèn)題禾乘,說(shuō)明出現(xiàn)了【驗(yàn)證集過(guò)擬合】澎埠。
- 驗(yàn)證集過(guò)擬合的優(yōu)化方法:
- 擴(kuò)充驗(yàn)證集。
- 驗(yàn)證集過(guò)擬合的優(yōu)化方法:
3.2 數(shù)據(jù)不匹配
3.2.1-3.2.5 定義與問(wèn)題識(shí)別
數(shù)據(jù)不匹配是說(shuō)訓(xùn)練的數(shù)據(jù)來(lái)源和分布始藕,與測(cè)試集的數(shù)據(jù)來(lái)源和分布不一致蒲稳。Andrew舉了一個(gè)例子氮趋,比如一個(gè)識(shí)別貓咪的分類(lèi)器,訓(xùn)練集中的數(shù)據(jù)都是網(wǎng)絡(luò)上的高清貓咪江耀,結(jié)果算法的實(shí)際輸入是普通用戶(hù)拍的高糊貓咪照剩胁,這就屬于分布不一致的問(wèn)題。
一般來(lái)說(shuō)祥国,很可能數(shù)據(jù)來(lái)源于兩個(gè)部分昵观,其中部分一易于收集、量大舌稀,通常用于訓(xùn)練集啊犬,部分二量少,不易于收集壁查,通常是用戶(hù)輸入椒惨。拿到這兩部分?jǐn)?shù)據(jù),如何訓(xùn)模型呢:
- 方案1:全混一起潮罪,然后再分訓(xùn)練集、驗(yàn)證集领斥、測(cè)試集嫉到。主要問(wèn)題在于測(cè)試集和真實(shí)場(chǎng)景的用戶(hù)輸入的分布不太一樣。
- 方案2:將部分二按2:1:1拆成3份月洛,一份進(jìn)訓(xùn)練集何恶,一份做驗(yàn)證集,一份做測(cè)試集嚼黔。這種方案是可以采納的细层。
仍然存在的問(wèn)題時(shí),如果按方案二進(jìn)行分割唬涧,驗(yàn)證集很難說(shuō)明問(wèn)題疫赎,因?yàn)轵?yàn)證集效果差有可能是算法高方差導(dǎo)致的,也有可能是數(shù)據(jù)不匹配導(dǎo)致的碎节。解決方案是從訓(xùn)練集中抽同分布的一小部分做訓(xùn)練驗(yàn)證集捧搞。
- 如果訓(xùn)練驗(yàn)證集效果相比于訓(xùn)練集差,那就是高方差問(wèn)題狮荔;
- 如果訓(xùn)練驗(yàn)證集效果還不錯(cuò)胎撇,但驗(yàn)證集效果差,那就是數(shù)據(jù)不匹配導(dǎo)致的殖氏。
3.2.6-3.2.10 數(shù)據(jù)不匹配解決方案
3.2.6 人工合成數(shù)據(jù)
人工合成數(shù)據(jù)使得訓(xùn)練集和測(cè)試集的數(shù)據(jù)分布更接近晚树,比如給數(shù)據(jù)加噪聲,但要注意噪聲的分布范圍也必須很大(至少和源數(shù)據(jù)一樣大)雅采,否則容易在局部噪聲上過(guò)擬合爵憎,這種過(guò)擬合人類(lèi)也很難分辨出來(lái)慨亲。
3.2.7 遷移學(xué)習(xí)
遷移學(xué)習(xí)是說(shuō),現(xiàn)有兩個(gè)任務(wù)A和B纲堵,它們有一定的相關(guān)性巡雨,比如A是從圖像中識(shí)別是否是一只貓,B是識(shí)別X光席函。遷移學(xué)習(xí)就是先把任務(wù)A訓(xùn)出來(lái)铐望,然后把網(wǎng)絡(luò)的輸出層換掉,然后在最后一層初始化權(quán)重茂附,其它層不變正蛙,再用B的數(shù)據(jù)集去訓(xùn)練最后一層權(quán)重。
- 遷移學(xué)習(xí)主要解決的是任務(wù)標(biāo)簽樣本少的問(wèn)題营曼,其思路就是用一個(gè)很相關(guān)問(wèn)題(標(biāo)簽樣本很充足)的網(wǎng)絡(luò)做預(yù)訓(xùn)練(pre-training)乒验,然后在當(dāng)前問(wèn)題上做微調(diào)(fine-tuning)。
- 其主要思想是蒂阱,在前面層學(xué)到的是比較初級(jí)的特征锻全,在圖像的例子里面,前層可能是輪廓录煤,局部特征抽取等等鳄厌,那這些知識(shí)用在X光圖片里面也可以用,所以遷移學(xué)習(xí)實(shí)際上是一種知識(shí)遷移妈踊。
- 當(dāng)然如果當(dāng)前任務(wù)標(biāo)簽樣本足夠多了嚎,重新訓(xùn)練全部層全部參數(shù),也是可以的廊营。
3.2.8 多任務(wù)學(xué)習(xí)
多任務(wù)學(xué)習(xí)是在一個(gè)神經(jīng)網(wǎng)絡(luò)里面同時(shí)完成多項(xiàng)任務(wù)歪泳。一個(gè)最經(jīng)典的例子就是在圖像識(shí)別中同時(shí)識(shí)別多種物體,比如車(chē)露筒、行人呐伞、路面標(biāo)記、指示牌等慎式。相比之下荸哟,logistic回歸只能做二元分類(lèi),softmax回歸只能輸出某一種分類(lèi)(損失函數(shù)決定的瞬捕,只在最準(zhǔn)的分類(lèi)上有損失)鞍历,而多任務(wù)學(xué)習(xí)可以對(duì)一個(gè)樣本同時(shí)打多個(gè)標(biāo)簽。
- 能進(jìn)行多任務(wù)學(xué)習(xí)的一個(gè)基礎(chǔ)是肪虎,這多個(gè)任務(wù)有很多低層的相似性劣砍。比如車(chē)、行人扇救、指示牌等都是圖像處理中的物體刑枝,底層都需要輪廓香嗓、拼接等。
- 第二個(gè)就是多個(gè)任務(wù)的樣本量是差不多的装畅,這樣放在一起學(xué)習(xí)要比單獨(dú)學(xué)習(xí)的效果要好靠娱。
- 代價(jià)函數(shù)就是多個(gè)標(biāo)簽都有損失。
- 多任務(wù)學(xué)習(xí)需要一個(gè)比較大的網(wǎng)絡(luò)掠兄,如果網(wǎng)絡(luò)比較小像云,有可能不如分開(kāi)學(xué)習(xí)。
3.2.9-3.2.10 端到端的深度學(xué)習(xí)
端到端的深度學(xué)習(xí)是說(shuō)蚂夕,如果一個(gè)任務(wù)是由多個(gè)部分來(lái)完成的迅诬,舉個(gè)例子,一個(gè)語(yǔ)音識(shí)別系統(tǒng)婿牍,可能先要做音節(jié)切割侈贷,然后拼成單詞,然后拼成句子等脂,然后理解語(yǔ)義等等俏蛮,可以通過(guò)一個(gè)足夠復(fù)雜的DNN來(lái)直接從輸入做到輸出,即輸入一段話上遥,輸出語(yǔ)義搏屑。
- 做end-to-end DL說(shuō)起來(lái)簡(jiǎn)單,但不是萬(wàn)金油露该,它需要及其大量的數(shù)據(jù),如果數(shù)據(jù)量非常充足第煮,那么確實(shí)是一種捷徑解幼,而且往往效果更好。
- end-to-end DL會(huì)摒棄人類(lèi)對(duì)這個(gè)任務(wù)的理解包警,以機(jī)器的角度去學(xué)習(xí)理解這個(gè)任務(wù)撵摆,有可能得到更好的結(jié)果。當(dāng)然這也有可能成為一個(gè)弊端害晦,因?yàn)槿祟?lèi)的理解并不一定就是錯(cuò)的特铝。
- 具體end-to-end如何應(yīng)用,應(yīng)用到何種地步壹瘟,主要是靠實(shí)際任務(wù)性質(zhì)和標(biāo)簽數(shù)據(jù)量來(lái)決定的鲫剿。