2.5 数据不匹配时,偏差和方差的分析-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
| 2.4 在不同的劃分上進(jìn)行訓(xùn)練并測(cè)試 | 回到目錄 | 2.6 定位數(shù)據(jù)不匹配 |
數(shù)據(jù)不匹配時(shí),偏差和方差的分析 (Bias and Variance with Mismatched Data Distribution)
估計(jì)學(xué)習(xí)算法的偏差和方差真的可以幫你確定接下來(lái)應(yīng)該優(yōu)先做的方向,但是,當(dāng)你的訓(xùn)練集來(lái)自和開(kāi)發(fā)集、測(cè)試集不同分布時(shí),分析偏差和方差的方式可能不一樣,我們來(lái)看為什么。
我們繼續(xù)用貓分類器為例,我們說(shuō)人類在這個(gè)任務(wù)上能做到幾乎完美,所以貝葉斯錯(cuò)誤率或者說(shuō)貝葉斯最優(yōu)錯(cuò)誤率,我們知道這個(gè)問(wèn)題里幾乎是0%。所以要進(jìn)行錯(cuò)誤率分析,你通常需要看訓(xùn)練誤差,也要看看開(kāi)發(fā)集的誤差。比如說(shuō),在這個(gè)樣本中,你的訓(xùn)練集誤差是1%,你的開(kāi)發(fā)集誤差是10%,如果你的開(kāi)發(fā)集來(lái)自和訓(xùn)練集一樣的分布,你可能會(huì)說(shuō),這里存在很大的方差問(wèn)題,你的算法不能很好的從訓(xùn)練集出發(fā)泛化,它處理訓(xùn)練集很好,但處理開(kāi)發(fā)集就突然間效果很差了。
但如果你的訓(xùn)練數(shù)據(jù)和開(kāi)發(fā)數(shù)據(jù)來(lái)自不同的分布,你就不能再放心下這個(gè)結(jié)論了。特別是,也許算法在開(kāi)發(fā)集上做得不錯(cuò),可能因?yàn)橛?xùn)練集很容易識(shí)別,因?yàn)橛?xùn)練集都是高分辨率圖片,很清晰的圖像,但開(kāi)發(fā)集要難以識(shí)別得多。所以也許軟件沒(méi)有方差問(wèn)題,這只不過(guò)反映了開(kāi)發(fā)集包含更難準(zhǔn)確分類的圖片。所以這個(gè)分析的問(wèn)題在于,當(dāng)你看訓(xùn)練誤差,再看開(kāi)發(fā)誤差,有兩件事變了。首先算法只見(jiàn)過(guò)訓(xùn)練集數(shù)據(jù),沒(méi)見(jiàn)過(guò)開(kāi)發(fā)集數(shù)據(jù)。第二,開(kāi)發(fā)集數(shù)據(jù)來(lái)自不同的分布。而且因?yàn)槟阃瑫r(shí)改變了兩件事情,很難確認(rèn)這增加的9%誤差率有多少是因?yàn)樗惴](méi)看到開(kāi)發(fā)集中的數(shù)據(jù)導(dǎo)致的,這是問(wèn)題方差的部分,有多少是因?yàn)殚_(kāi)發(fā)集數(shù)據(jù)就是不一樣。
為了弄清楚哪個(gè)因素影響更大,如果你完全不懂這兩種影響到底是什么,別擔(dān)心我們馬上會(huì)再講一遍。但為了分辨清楚兩個(gè)因素的影響,定義一組新的數(shù)據(jù)是有意義的,我們稱之為訓(xùn)練-開(kāi)發(fā)集,所以這是一個(gè)新的數(shù)據(jù)子集。我們應(yīng)該從訓(xùn)練集的分布里挖出來(lái),但你不會(huì)用來(lái)訓(xùn)練你的網(wǎng)絡(luò)。
我的意思是我們已經(jīng)設(shè)立過(guò)這樣的訓(xùn)練集、開(kāi)發(fā)集和測(cè)試集了,并且開(kāi)發(fā)集和測(cè)試集來(lái)自相同的分布,但訓(xùn)練集來(lái)自不同的分布。
我們要做的是隨機(jī)打散訓(xùn)練集,然后分出一部分訓(xùn)練集作為訓(xùn)練-開(kāi)發(fā)集(training-dev),就像開(kāi)發(fā)集和測(cè)試集來(lái)自同一分布,訓(xùn)練集、訓(xùn)練-開(kāi)發(fā)集也來(lái)自同一分布。
但不同的地方是,現(xiàn)在你只在訓(xùn)練集訓(xùn)練你的神經(jīng)網(wǎng)絡(luò),你不會(huì)讓神經(jīng)網(wǎng)絡(luò)在訓(xùn)練-開(kāi)發(fā)集上跑后向傳播。為了進(jìn)行誤差分析,你應(yīng)該做的是看看分類器在訓(xùn)練集上的誤差,訓(xùn)練-開(kāi)發(fā)集上的誤差,還有開(kāi)發(fā)集上的誤差。
比如說(shuō)這個(gè)樣本中,訓(xùn)練誤差是1%,我們說(shuō)訓(xùn)練-開(kāi)發(fā)集上的誤差是9%,然后開(kāi)發(fā)集誤差是10%,和以前一樣。你就可以從這里得到結(jié)論,當(dāng)你從訓(xùn)練數(shù)據(jù)變到訓(xùn)練-開(kāi)發(fā)集數(shù)據(jù)時(shí),錯(cuò)誤率真的上升了很多。而訓(xùn)練數(shù)據(jù)和訓(xùn)練-開(kāi)發(fā)數(shù)據(jù)的差異在于,你的神經(jīng)網(wǎng)絡(luò)能看到第一部分?jǐn)?shù)據(jù)并直接在上面做了訓(xùn)練,但沒(méi)有在訓(xùn)練-開(kāi)發(fā)集上直接訓(xùn)練,這就告訴你,算法存在方差問(wèn)題,因?yàn)橛?xùn)練-開(kāi)發(fā)集的錯(cuò)誤率是在和訓(xùn)練集來(lái)自同一分布的數(shù)據(jù)中測(cè)得的。所以你知道,盡管你的神經(jīng)網(wǎng)絡(luò)在訓(xùn)練集中表現(xiàn)良好,但無(wú)法泛化到來(lái)自相同分布的訓(xùn)練-開(kāi)發(fā)集里,它無(wú)法很好地泛化推廣到來(lái)自同一分布,但以前沒(méi)見(jiàn)過(guò)的數(shù)據(jù)中,所以在這個(gè)樣本中我們確實(shí)有一個(gè)方差問(wèn)題。
我們來(lái)看一個(gè)不同的樣本,假設(shè)訓(xùn)練誤差為1%,訓(xùn)練-開(kāi)發(fā)誤差為1.5%,但當(dāng)你開(kāi)始處理開(kāi)發(fā)集時(shí),錯(cuò)誤率上升到10%。現(xiàn)在你的方差問(wèn)題就很小了,因?yàn)楫?dāng)你從見(jiàn)過(guò)的訓(xùn)練數(shù)據(jù)轉(zhuǎn)到訓(xùn)練-開(kāi)發(fā)集數(shù)據(jù),神經(jīng)網(wǎng)絡(luò)還沒(méi)有看到的數(shù)據(jù),錯(cuò)誤率只上升了一點(diǎn)點(diǎn)。但當(dāng)你轉(zhuǎn)到開(kāi)發(fā)集時(shí),錯(cuò)誤率就大大上升了,所以這是數(shù)據(jù)不匹配的問(wèn)題。因?yàn)槟愕膶W(xué)習(xí)算法沒(méi)有直接在訓(xùn)練-開(kāi)發(fā)集或者開(kāi)發(fā)集訓(xùn)練過(guò),但是這兩個(gè)數(shù)據(jù)集來(lái)自不同的分布。但不管算法在學(xué)習(xí)什么,它在訓(xùn)練-開(kāi)發(fā)集上做的很好,但開(kāi)發(fā)集上做的不好,所以總之你的算法擅長(zhǎng)處理和你關(guān)心的數(shù)據(jù)不同的分布,我們稱之為數(shù)據(jù)不匹配的問(wèn)題。
我們?cè)賮?lái)看幾個(gè)樣本,我會(huì)在下一行里寫(xiě)出來(lái),因上面沒(méi)空間了。所以訓(xùn)練誤差、訓(xùn)練-開(kāi)發(fā)誤差、還有開(kāi)發(fā)誤差,我們說(shuō)訓(xùn)練誤差是10%,訓(xùn)練-開(kāi)發(fā)誤差是11%,開(kāi)發(fā)誤差為12%,要記住,人類水平對(duì)貝葉斯錯(cuò)誤率的估計(jì)大概是0%,如果你得到了這種等級(jí)的表現(xiàn),那就真的存在偏差問(wèn)題了。存在可避免偏差問(wèn)題,因?yàn)樗惴ㄗ龅谋热祟愃讲詈芏?#xff0c;所以這里的偏差真的很高。
最后一個(gè)例子,如果你的訓(xùn)練集錯(cuò)誤率是10%,你的訓(xùn)練-開(kāi)發(fā)錯(cuò)誤率是11%,開(kāi)發(fā)錯(cuò)誤率是20%,那么這其實(shí)有兩個(gè)問(wèn)題。第一,可避免偏差相當(dāng)高,因?yàn)槟阍谟?xùn)練集上都沒(méi)有做得很好,而人類能做到接近0%錯(cuò)誤率,但你的算法在訓(xùn)練集上錯(cuò)誤率為10%。這里方差似乎很小,但數(shù)據(jù)不匹配問(wèn)題很大。所以對(duì)于這個(gè)樣本,我說(shuō),如果你有很大的偏差或者可避免偏差問(wèn)題,還有數(shù)據(jù)不匹配問(wèn)題。
我們看看這張幻燈片里做了什么,然后寫(xiě)出一般的原則,我們要看的關(guān)鍵數(shù)據(jù)是人類水平錯(cuò)誤率,你的訓(xùn)練集錯(cuò)誤率,訓(xùn)練-開(kāi)發(fā)集錯(cuò)誤率,所以這分布和訓(xùn)練集一樣,但你沒(méi)有直接在上面訓(xùn)練。根據(jù)這些錯(cuò)誤率之間差距有多大,你可以大概知道,可避免偏差、方差數(shù)據(jù)不匹配問(wèn)題各自有多大。
我們說(shuō)人類水平錯(cuò)誤率是4%的話,你的訓(xùn)練錯(cuò)誤率是7%,而你的訓(xùn)練-開(kāi)發(fā)錯(cuò)誤率是10%,而開(kāi)發(fā)錯(cuò)誤率是12%,這樣你就大概知道可避免偏差有多大。因?yàn)槟阒?#xff0c;你希望你的算法至少要在訓(xùn)練集上的表現(xiàn)接近人類。而這大概表明了方差大小,所以你從訓(xùn)練集泛化推廣到訓(xùn)練-開(kāi)發(fā)集時(shí)效果如何?而這告訴你數(shù)據(jù)不匹配的問(wèn)題大概有多大。技術(shù)上你還可以再加入一個(gè)數(shù)字,就是測(cè)試集表現(xiàn),我們寫(xiě)成測(cè)試集錯(cuò)誤率,你不應(yīng)該在測(cè)試集上開(kāi)發(fā),因?yàn)槟悴幌M麑?duì)測(cè)試集過(guò)擬合。但如果你看看這個(gè),那么這里的差距就說(shuō)明你對(duì)開(kāi)發(fā)集過(guò)擬合的程度。所以如果開(kāi)發(fā)集表現(xiàn)和測(cè)試集表現(xiàn)有很大差距,那么你可能對(duì)開(kāi)發(fā)集過(guò)擬合了,所以也許你需要一個(gè)更大的開(kāi)發(fā)集,對(duì)吧?要記住,你的開(kāi)發(fā)集和測(cè)試集來(lái)自同一分布,所以這里存在很大差距的話。如果算法在開(kāi)發(fā)集上做的很好,比測(cè)試集好得多,那么你就可能對(duì)開(kāi)發(fā)集過(guò)擬合了。如果是這種情況,那么你可能要往回退一步,然后收集更多開(kāi)發(fā)集數(shù)據(jù)。現(xiàn)在我寫(xiě)出這些數(shù)字,這數(shù)字列表越往后數(shù)字越大。
這里還有個(gè)例子,其中數(shù)字并沒(méi)有一直變大,也許人類的表現(xiàn)是4%,訓(xùn)練錯(cuò)誤率是7%,訓(xùn)練-開(kāi)發(fā)錯(cuò)誤率是10%。但我們看看開(kāi)發(fā)集,你發(fā)現(xiàn),很意外,算法在開(kāi)發(fā)集上做的更好,也許是6%。所以如果你見(jiàn)到這種現(xiàn)象,比如說(shuō)在處理語(yǔ)音識(shí)別任務(wù)時(shí)發(fā)現(xiàn)這樣,其中訓(xùn)練數(shù)據(jù)其實(shí)比你的開(kāi)發(fā)集和測(cè)試集難識(shí)別得多。所以這兩個(gè)(7%,10%)是從訓(xùn)練集分布評(píng)估的,而這兩個(gè)(6%,6%)是從開(kāi)發(fā)測(cè)試集分布評(píng)估的。所以有時(shí)候如果你的開(kāi)發(fā)測(cè)試集分布比你應(yīng)用實(shí)際處理的數(shù)據(jù)要容易得多,那么這些錯(cuò)誤率可能真的會(huì)下降。所以如果你看到這樣的有趣的事情,可能需要比這個(gè)分析更普適的分析,我在下一張幻燈片里快速解釋一下。
所以,我們就以語(yǔ)音激活后視鏡為例子,事實(shí)證明,我們一直寫(xiě)出的數(shù)字可以放到一張表里,在水平軸上,我要放入不同的數(shù)據(jù)集。比如說(shuō),你可能從一般語(yǔ)音識(shí)別任務(wù)里得到很多數(shù)據(jù),所以你可能會(huì)有一堆數(shù)據(jù),來(lái)自小型智能音箱的語(yǔ)音識(shí)別問(wèn)題的數(shù)據(jù),你購(gòu)買的數(shù)據(jù)等等。然后你收集了和后視鏡有關(guān)的語(yǔ)音數(shù)據(jù),在車?yán)镤浀摹K赃@是表格的軸,不同的數(shù)據(jù)集。在另一條軸上,我要標(biāo)記處理數(shù)據(jù)不同的方式或算法。
首先,人類水平,人類處理這些數(shù)據(jù)集時(shí)準(zhǔn)確度是多少。然后這是神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)的數(shù)據(jù)集上達(dá)到的錯(cuò)誤率,然后還有神經(jīng)網(wǎng)絡(luò)沒(méi)有訓(xùn)練過(guò)的數(shù)據(jù)集上達(dá)到的錯(cuò)誤率。所以結(jié)果我們上一張幻燈片說(shuō)是人類水平的錯(cuò)誤率,數(shù)字填入這個(gè)單元格里(第二行第二列),人類對(duì)這一類數(shù)據(jù)處理得有多好,比如來(lái)自各種語(yǔ)音識(shí)別系統(tǒng)的數(shù)據(jù),那些進(jìn)入你的訓(xùn)練集的成千上萬(wàn)的語(yǔ)音片段,而上一張幻燈片中的例子是4%。這個(gè)數(shù)字(7%),可能是我們的訓(xùn)練錯(cuò)誤率,在上一張幻燈片中的例子中是7%。是的,如果你的學(xué)習(xí)算法見(jiàn)過(guò)這個(gè)樣本,在這個(gè)樣本上跑過(guò)梯度下降,這個(gè)樣本來(lái)自你的訓(xùn)練集分布或一般的語(yǔ)音識(shí)別數(shù)據(jù)分布,你的算法在訓(xùn)練過(guò)的數(shù)據(jù)中表現(xiàn)如何呢?然后這就是訓(xùn)練-開(kāi)發(fā)集錯(cuò)誤率,通常來(lái)自這個(gè)分布的錯(cuò)誤率會(huì)高一點(diǎn),一般的語(yǔ)音識(shí)別數(shù)據(jù),如果你的算法沒(méi)在來(lái)自這個(gè)分布的樣本上訓(xùn)練過(guò),它的表現(xiàn)如何呢?這就是我們說(shuō)的訓(xùn)練-開(kāi)發(fā)集錯(cuò)誤率。
如果你移到右邊去,這個(gè)單元格是開(kāi)發(fā)集錯(cuò)誤率,也可能是測(cè)試集錯(cuò)誤,在剛剛的例子中是6%。而開(kāi)發(fā)集和測(cè)試集,實(shí)際上是兩個(gè)數(shù)字,但都可以放入這個(gè)單元格里。如果你有來(lái)自后視鏡的數(shù)據(jù),來(lái)自從后視鏡應(yīng)用在車?yán)飳?shí)際錄得的數(shù)據(jù),但你的神經(jīng)網(wǎng)絡(luò)沒(méi)有在這些數(shù)據(jù)上做過(guò)反向傳播,那么錯(cuò)誤率是多少呢?
我們?cè)谏弦粡埢脽羝鞯姆治鍪怯^察這兩個(gè)數(shù)字之間的差異(Human level 4%和Training error 7%),還有這兩個(gè)數(shù)字之間(Training error 7%和Training-dev error 10%),這兩個(gè)數(shù)字之間(Training-dev error 10%和Dev/Test dev 6%)。這個(gè)差距(Human level 4%和Training error 7%)衡量了可避免偏差大小,這個(gè)差距Training error 7%和Training-dev error 10%)衡量了方差大小,而這個(gè)差距(Training-dev error 10%和Dev/Test dev 6%)衡量了數(shù)據(jù)不匹配問(wèn)題的大小。
事實(shí)證明,把剩下的兩個(gè)數(shù)字(rearview mirror speech data 6%和Error on examples trained on 6%),也放到這個(gè)表格里也是有用的。如果結(jié)果這也是6%,那么你獲得這個(gè)數(shù)字的方式是你讓一些人自己標(biāo)記他們的后視鏡語(yǔ)音識(shí)別數(shù)據(jù),看看人類在這個(gè)任務(wù)里能做多好,也許結(jié)果也是6%。做法就是,你收集一些后視鏡語(yǔ)音識(shí)別數(shù)據(jù),把它放在訓(xùn)練集中,讓神經(jīng)網(wǎng)絡(luò)去學(xué)習(xí),然后測(cè)量那個(gè)數(shù)據(jù)子集上的錯(cuò)誤率,但如果你得到這樣的結(jié)果,好吧,那就是說(shuō)你已經(jīng)在后視鏡語(yǔ)音數(shù)據(jù)上達(dá)到人類水平了,所以也許你對(duì)那個(gè)數(shù)據(jù)分布做的已經(jīng)不錯(cuò)了。
當(dāng)你繼續(xù)進(jìn)行更多分析時(shí),分析并不一定會(huì)給你指明一條前進(jìn)道路,但有時(shí)候你可能洞察到一些特征。比如比較這兩個(gè)數(shù)字(General speech recognition Human level 4%和rearview mirror speech data 6%),告訴我們對(duì)于人類來(lái)說(shuō),后視鏡的語(yǔ)音數(shù)據(jù)實(shí)際上比一般語(yǔ)音識(shí)別更難,因?yàn)槿祟惗加?%的錯(cuò)誤,而不是4%的錯(cuò)誤,但看看這個(gè)差值,你就可以了解到偏差和方差,還有數(shù)據(jù)不匹配這些問(wèn)題的不同程度。所以更一般的分析方法是,我已經(jīng)用過(guò)幾次了。我還沒(méi)用過(guò),但對(duì)于很多問(wèn)題來(lái)說(shuō)檢查這個(gè)子集的條目,看看這些差值,已經(jīng)足夠讓你往相對(duì)有希望的方向前進(jìn)了。但有時(shí)候填滿整個(gè)表格,你可能會(huì)洞察到更多特征。
最后,我們以前講過(guò)很多處理偏差的手段,講過(guò)處理方差的手段,但怎么處理數(shù)據(jù)不匹配呢?特別是開(kāi)發(fā)集、測(cè)試集和你的訓(xùn)練集數(shù)據(jù)來(lái)自不同分布時(shí),這樣可以用更多訓(xùn)練數(shù)據(jù),真正幫你提高學(xué)習(xí)算法性能。但是,如果問(wèn)題不僅來(lái)自偏差和方差,你現(xiàn)在又有了這個(gè)潛在的新問(wèn)題,數(shù)據(jù)不匹配,有什么好辦法可以處理數(shù)據(jù)不匹配的呢?實(shí)話說(shuō),并沒(méi)有很通用,或者至少說(shuō)是系統(tǒng)解決數(shù)據(jù)不匹配問(wèn)題的方法,但你可以做一些嘗試,可能會(huì)有幫助,我們?cè)谙乱粋€(gè)視頻里看看這些嘗試。
所以我們講了如何使用來(lái)自和開(kāi)發(fā)集、測(cè)試集不同分布的訓(xùn)練數(shù)據(jù),這可以給你提供更多訓(xùn)練數(shù)據(jù),因此有助于提高你的學(xué)習(xí)算法的性能,但是,潛在問(wèn)題就不只是偏差和方差問(wèn)題,這樣做會(huì)引入第三個(gè)潛在問(wèn)題,數(shù)據(jù)不匹配。如果你做了錯(cuò)誤分析,并發(fā)現(xiàn)數(shù)據(jù)不匹配是大量錯(cuò)誤的來(lái)源,那么你怎么解決這個(gè)問(wèn)題呢?但結(jié)果很不幸,并沒(méi)有特別系統(tǒng)的方法去解決數(shù)據(jù)不匹配問(wèn)題,但你可以做一些嘗試,可能會(huì)有幫助,我們來(lái)看下一段視頻。
課程板書(shū)
| 2.4 在不同的劃分上進(jìn)行訓(xùn)練并測(cè)試 | 回到目錄 | 2.6 定位數(shù)據(jù)不匹配 |
總結(jié)
以上是生活随笔為你收集整理的2.5 数据不匹配时,偏差和方差的分析-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2.4 使用来自不同分布的数据,进行训练
- 下一篇: 2.6 处理数据不匹配问题-深度学习第三