訓(xùn)練、測(cè)試、驗(yàn)證集
今天主要討論神經(jīng)網(wǎng)絡(luò)機(jī)器學(xué)習(xí)中的問題,然后是隨機(jī)神經(jīng)網(wǎng)絡(luò),還會(huì)學(xué)習(xí)確保神經(jīng)網(wǎng)絡(luò)正確運(yùn)行的技巧。
在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí),我們需要做出很多決策,例如:
神經(jīng)網(wǎng)絡(luò)分多少層;每層含有多少個(gè)隱藏單元;學(xué)習(xí)速率是多少;各層采用哪些激活函數(shù)等。
創(chuàng)建新應(yīng)用的過程中,我們不可能從一開始就準(zhǔn)確預(yù)測(cè)出這些信息和其他超參數(shù)。實(shí)際上,應(yīng)用型深度學(xué)習(xí)是一個(gè)高度迭代的過程,通常在項(xiàng)目啟動(dòng)時(shí),我們會(huì)先有一個(gè)初步想法,比如構(gòu)建一個(gè)含有特定層數(shù),隱藏單元數(shù)量或者數(shù)據(jù)集個(gè)數(shù)等等的神經(jīng)網(wǎng)絡(luò),然后編碼,并嘗試運(yùn)行這些代碼,通過運(yùn)行和測(cè)試得到該神經(jīng)網(wǎng)絡(luò)或這些配置信息的運(yùn)行結(jié)果,你可能會(huì)根據(jù)輸出結(jié)果重新完善自己的想法,改變策略,或者為了找到更好的神經(jīng)網(wǎng)絡(luò)不斷迭代更新自己的方案。

所以說,應(yīng)用深度學(xué)習(xí)是一個(gè)典型的迭代過程,需要多次循環(huán)往復(fù),才能為應(yīng)用程序找到一個(gè)稱心的神經(jīng)網(wǎng)絡(luò),因此循環(huán)該過程的效率是決定項(xiàng)目進(jìn)展速度的一個(gè)關(guān)鍵因素,而創(chuàng)建高質(zhì)量的訓(xùn)練數(shù)據(jù)集,驗(yàn)證集和測(cè)試集也有助于提高循環(huán)效率。
通常將數(shù)據(jù)劃分幾部分,一部分作為訓(xùn)練集,一部分作為簡單交叉驗(yàn)證集,有時(shí)也稱為驗(yàn)證集,最后一部分則作為測(cè)試集。接下來,我們開始對(duì)訓(xùn)練集執(zhí)行算法,通過驗(yàn)證集選擇最好的模型,經(jīng)過充分驗(yàn)證,我們選定了最終模型,然后就可以在測(cè)試集上進(jìn)行評(píng)估,為了無偏評(píng)估算法的運(yùn)行狀況。
在機(jī)器學(xué)習(xí)發(fā)展的小數(shù)據(jù)量時(shí)代,常見做法是將所有數(shù)據(jù)三七分,就是人們常說的 70% 驗(yàn)證集,30%測(cè)試集,如果沒有明確設(shè)置驗(yàn)證集,也可以按照 60%訓(xùn)練,20%驗(yàn)證和 20%測(cè) 試集來劃分。這是前幾年機(jī)器學(xué)習(xí)領(lǐng)域普遍認(rèn)可的最好的實(shí)踐方法。
但是在大數(shù)據(jù)時(shí)代,我們現(xiàn)在的數(shù)據(jù)量可能是百萬級(jí)別,那么驗(yàn)證集和測(cè)試集占數(shù)據(jù)總量的比例會(huì)趨向于變得更小。因?yàn)?em>驗(yàn)證集的目的就是驗(yàn)證不同的算法,檢驗(yàn)?zāi)姆N算法更有效,測(cè)試集的主要目的是正確評(píng)估分類器的性能,對(duì)最終所選定的神經(jīng)網(wǎng)絡(luò)系統(tǒng)做出無偏估計(jì)。假設(shè)我們有 100 萬條數(shù)據(jù),其中 1 萬條作為驗(yàn)證集,1 萬條作為測(cè)試集, 100 萬里取 1 萬,比例是 1%,即:訓(xùn)練集占 98%,驗(yàn)證集和測(cè)試集各占 1%。對(duì)于數(shù)據(jù)量過 百萬的應(yīng)用,訓(xùn)練集可以占到 99.5%,驗(yàn)證和測(cè)試集各占 0.25%,或者驗(yàn)證集占0.4%,測(cè)試集占 0.1%。
總結(jié)一下,在機(jī)器學(xué)習(xí)中,我們通常將樣本分成訓(xùn)練集,驗(yàn)證集和測(cè)試集三部分,數(shù)據(jù)集規(guī)模相對(duì)較小,適用傳統(tǒng)的劃分比例,數(shù)據(jù)集規(guī)模較大的,驗(yàn)證集和測(cè)試集要小于數(shù)據(jù)總量的 20%或10%。
另外,確保驗(yàn)證集和測(cè)試集的數(shù)據(jù)與訓(xùn)練集都來自同一分布。
最后一點(diǎn),就算沒有測(cè)試集也不要緊,測(cè)試集的目的是對(duì)最終所選定的神經(jīng)網(wǎng)絡(luò)系統(tǒng)做 出無偏估計(jì),如果不需要無偏估計(jì),也可以不設(shè)置測(cè)試集。所以如果只有驗(yàn)證集,沒有測(cè)試 集,我們要做的就是,在訓(xùn)練集上訓(xùn)練,嘗試不同的模型框架,在驗(yàn)證集上評(píng)估這些模型, 然后迭代并選出適用的模型。因?yàn)轵?yàn)證集中已經(jīng)涵蓋測(cè)試集數(shù)據(jù),其不再提供無偏性能評(píng)估。
偏差、方差

假設(shè)這就是數(shù)據(jù)集,如果給這個(gè)數(shù)據(jù)集擬合一條直線,可能得到一個(gè)邏輯回歸擬合,但 它并不能很好地?cái)M合該數(shù)據(jù),這是高偏差(highbias)的情況,我們稱為“欠擬合(” underfitting)。
相反的如果我們擬合一個(gè)非常復(fù)雜的分類器,比如深度神經(jīng)網(wǎng)絡(luò)或含有隱藏單元的神經(jīng) 網(wǎng)絡(luò),可能就非常適用于這個(gè)數(shù)據(jù)集,但是這看起來也不是一種很好的擬合方式分類器方差較高(high variance),數(shù)據(jù)過度擬合(overfitting)。
在兩者之間,可能還有一些像圖中這樣的,復(fù)雜程度適中,數(shù)據(jù)擬合適度的分類器,這 個(gè)數(shù)據(jù)擬合看起來更加合理,我們稱之為“適度擬合”(just right)是介于過度擬合和欠擬合中間的一類。

理解偏差和方差的兩個(gè)關(guān)鍵數(shù)據(jù)是訓(xùn)練集誤差(train set error)和驗(yàn)證集誤差(dev set error)。
假定訓(xùn)練集誤差是1%,為了方便論證,假定驗(yàn)證集誤差是11%,可以看出訓(xùn)練集設(shè)置得非常好,而驗(yàn)證集相對(duì)較差,我們可能過度擬合了訓(xùn)練集,在某種程度上,驗(yàn)證集并沒有充分利用交叉驗(yàn)證集的作用,像這種情況,我們稱之為“高方差”。
通過查看訓(xùn)練集誤差和驗(yàn)證集誤差,我們便可以診斷算法是否具有高方差。也就是說衡 量訓(xùn)練集和驗(yàn)證集誤差就可以得出不同結(jié)論。
假設(shè)訓(xùn)練集誤差是 15%,我們把訓(xùn)練集誤差寫在首行,驗(yàn)證集誤差是 16%,而真實(shí)數(shù)據(jù)情況錯(cuò)誤率幾乎為0%(就是人為標(biāo)注數(shù)據(jù)沒有錯(cuò)誤)。可以看出訓(xùn)練數(shù)據(jù)的擬合度不高,就是數(shù)據(jù)欠擬合,就是說這種算法的偏差比較高。相反,它對(duì)于驗(yàn)證集產(chǎn)生的結(jié)果卻是合理的,驗(yàn)證集中的錯(cuò)誤率只比訓(xùn)練集多了1%,所以這種算法偏差高。
再假定訓(xùn)練集誤差是 15%,偏差相當(dāng)高了,但是,驗(yàn)證集的評(píng)估結(jié)果更糟糕,錯(cuò)誤率達(dá)到 30%,在這種情況下,我會(huì)認(rèn)為這種算法偏差高,因?yàn)樗谟?xùn)練集上結(jié)果不理想, 而且方差也很高,這是方差偏差都很糟糕的情況
再看最后一個(gè)例子,訓(xùn)練集誤差率是0.5%,驗(yàn)證集誤差是1%,用戶看到這樣的結(jié)果會(huì)很開心,因?yàn)橹挥?%錯(cuò)誤率,偏差和方差都很低。
但是這里需要明確一點(diǎn),這些假設(shè)預(yù)測(cè)都是基于真實(shí)數(shù)據(jù)的人為標(biāo)注錯(cuò)誤率接近0%,也就是所說的最優(yōu)誤差,也稱為貝葉斯誤差。如果最優(yōu)誤差15%,而再看我們分類器的訓(xùn)練誤差15%,驗(yàn)證誤差16%,那么15%的錯(cuò)誤率對(duì)訓(xùn)練集來說也是非常合理的,偏差不高,方差也非常低。
先不考慮最優(yōu)誤差會(huì)高的情況(也就是真實(shí)數(shù)據(jù)的標(biāo)注都不準(zhǔn),錯(cuò)誤率高),我們假設(shè)最優(yōu)誤差接近0%,查看訓(xùn)練集誤差,我們可以判斷數(shù)據(jù)擬合情況,至少對(duì)于訓(xùn)練數(shù)據(jù)是這樣,可以判斷是否有偏差問題,然后查看錯(cuò)誤率有多高。當(dāng)完成訓(xùn)練集訓(xùn)練,開始使用驗(yàn)證集驗(yàn)證時(shí),我們可以判斷方差是否過高,從訓(xùn)練集到驗(yàn)證集的這個(gè)過程中,我們可以判斷方差是否過高。
以上分析的前提都是假設(shè)基本誤差很小,訓(xùn)練集和驗(yàn)證集數(shù)據(jù)來自相同分布,如果沒有 這些假設(shè)作為前提,分析過程更加復(fù)雜。
機(jī)器學(xué)習(xí)基礎(chǔ)
在初始模型訓(xùn)練完成后,首先要知道算法的偏差高不高,如果偏差較高,試著評(píng)估訓(xùn)練集或者訓(xùn)練數(shù)據(jù)的性能(說明一下訓(xùn)練集誤差在一定程度上反應(yīng)偏差,但偏差有自己的計(jì)算公式,可以百度搜索下如何計(jì)算)。如果偏差的確很高,甚至無法擬合訓(xùn)練集,那么要做的就是選擇一個(gè)新的網(wǎng)絡(luò),比如含有更多隱藏層或者隱藏單元的網(wǎng)絡(luò),或者花費(fèi)更多的時(shí)間來訓(xùn)練網(wǎng)絡(luò),或者嘗試更先進(jìn)的優(yōu)化算法。訓(xùn)練學(xué) 習(xí)算法時(shí),會(huì)不斷嘗試這些方法,直到解決掉偏差問題,這是最低標(biāo)準(zhǔn),反復(fù)嘗試,直到 可以擬合數(shù)據(jù)為止,至少能夠擬合訓(xùn)練集。
如果網(wǎng)絡(luò)足夠大,通常可以很好的擬合訓(xùn)練集,只要你能擴(kuò)大網(wǎng)絡(luò)規(guī)模。如果最優(yōu)誤差不是很高,那么訓(xùn)練一個(gè)更大的網(wǎng)絡(luò),你至少可以能很好的擬合訓(xùn)練集,至少可以擬合或者過擬合訓(xùn)練集。一旦偏差降低到可以接受的數(shù)值,檢查一下方差有沒有問題,為了評(píng)估方差,我們要看驗(yàn)證集性能。如果方差高,最好的解決方法就是采用更多的數(shù)據(jù),如果我們無法獲得更多的數(shù)據(jù),我們也可以嘗試正則化來減少過擬合。有時(shí)候我們不得不反復(fù)嘗試,但是,如果能找到更合適的神經(jīng)網(wǎng)絡(luò)框架,有時(shí)它可能會(huì)一箭雙雕,同時(shí)減少方差和偏差。
大家注意兩點(diǎn):
第一點(diǎn),高偏差和高方差是兩種不同的情況,我們后續(xù)要嘗試的方法也可能完全不同, 通常會(huì)用訓(xùn)練驗(yàn)證集來診斷算法是否存在偏差或方差問題,然后根據(jù)結(jié)果選擇嘗試部分方法。舉個(gè)例子,如果算法存在高偏差問題,準(zhǔn)備更多訓(xùn)練數(shù)據(jù)其實(shí)也沒什么用處,至少這不是更有效的方法,所以大家要清楚存在的問題是偏差還是方差,還是兩者都有問題,明確這 一點(diǎn)有助于我們選擇出最有效的方法。
第二點(diǎn),在機(jī)器學(xué)習(xí)的初期階段,關(guān)于所謂的偏差方差權(quán)衡的討論屢見不鮮,原因是我們能嘗試的方法有很多??梢栽黾悠?,減少方差,也可以減少偏差,增加方差,但是在深度學(xué)習(xí)的早期階段,我們沒有太多工具可以做到只減少偏差或方差卻不影響到另一方。但在當(dāng)前的深度學(xué)習(xí)和大數(shù)據(jù)時(shí)代,只要持續(xù)訓(xùn)練一個(gè)更大的網(wǎng)絡(luò),只要準(zhǔn)備了更多數(shù)據(jù),那么也并非只有這兩種情況,我們假定是這樣,那么,只要正則適度,通常構(gòu)建一個(gè)更大的網(wǎng)絡(luò)便可以,在不影響方差的同時(shí)減少偏差,而采用更多數(shù)據(jù)通??梢栽?strong>不過多影響偏差的同時(shí)減少方差。這兩步實(shí)際要做的工作是:訓(xùn)練網(wǎng)絡(luò),選擇網(wǎng)絡(luò)或者準(zhǔn)備更多數(shù)據(jù),現(xiàn)在我們有工具可以做到在減少偏差或方差的同時(shí),不對(duì)另一方產(chǎn)生過多不良影響。我覺得這就是深度學(xué)習(xí)對(duì)監(jiān)督式學(xué)習(xí)大有裨益的一個(gè)重要原因,也是我們不用太過關(guān)注如何平衡偏差和方差的一個(gè)重要原因,但有時(shí)我們有很多選擇,減少偏差或方差而不增加另一方。最終,我們會(huì)得到一個(gè)非常規(guī)范化的網(wǎng)絡(luò)。從下節(jié)課開始,我們將講解正則化,訓(xùn)練一個(gè)更大的網(wǎng)絡(luò)幾乎沒有任何負(fù)面影響,而訓(xùn)練一個(gè)大型神經(jīng)網(wǎng)絡(luò)的主要代價(jià)也只是計(jì)算時(shí)間,前提是網(wǎng)絡(luò)是比較 規(guī)范化的。