誤差分析(Error Analysis)
假設(shè)你正在通過神經(jīng)網(wǎng)絡(luò)構(gòu)建一個貓分類器枪眉,在經(jīng)過訓(xùn)練數(shù)據(jù)集訓(xùn)練后捺檬,使用調(diào)整集進(jìn)行調(diào)整的時候發(fā)現(xiàn)算法的出錯率是 10%,其中有很多狗的照片被錯誤的分類成貓贸铜。此時堡纬,你是否應(yīng)該集中精力攻克算法對于狗照片的誤識別問題聂受?更極端的,是否干脆直接用接下來的幾個月去做一個狗的分類器烤镐?
得出這個問題的答案不應(yīng)該僅僅依靠直覺或是他人的建議蛋济,而是應(yīng)該試著分析 100 張調(diào)整數(shù)據(jù)集中被錯誤分類的圖片,統(tǒng)計其中由于錯誤的將狗的照片分類導(dǎo)致的誤差的概率:
如果這 100 張照片中只有 5 張來源于此炮叶,那么就說明即便你 100% 的解決了狗的照片誤分類問題碗旅,也最多能夠讓算法的出錯率從 10% 降到 9.5%,這個 0.5% 被稱為改進(jìn)上限(ceiling)悴灵,而很明顯這個結(jié)果是不能令人滿意的,此時應(yīng)該集中精力分析和解決其他可能的影響因素
如果這 100 張照片中有 50 張來源于此骂蓖,那么就說明如果你 100% 的解決了狗的照片誤判問題积瞒,可能能夠讓算法的出錯率從 10% 降到 5%,即改進(jìn)的上限是 5%登下,那么此時解決狗的照片誤判問題有可能是一個值得努力的方向
同樣地茫孔,如果你已經(jīng)找到了多個可能導(dǎo)致調(diào)整樣本集中照片被錯誤分類的原因,那么分析哪一個方向的改進(jìn)可以提供更多可能性的時候可以仿照 Andrew 做下面這張表格:
表格的行是待分析的照片被芳,表格的列則列明可能導(dǎo)致錯誤分類的原因缰贝,最后一列可以添加一個備注列,便于更詳細(xì)的描述相應(yīng)行的照片的特點畔濒。在此基礎(chǔ)上統(tǒng)計每一個原因出現(xiàn)的概率剩晴,最終找到那個可能提供更高的改進(jìn)上限的因素。
處理被錯誤標(biāo)記的數(shù)據(jù)
有時候你會在調(diào)整數(shù)據(jù)集中發(fā)現(xiàn)有些數(shù)據(jù)的標(biāo)簽其實是被錯誤的標(biāo)記了侵状,此時如果你的訓(xùn)練數(shù)據(jù)集很大赞弥,那么如果這些標(biāo)簽錯誤的原因是隨機(jī)和偶發(fā)的(random errors),考慮到神經(jīng)網(wǎng)絡(luò)的穩(wěn)健性和重新檢查全部標(biāo)簽所耗費(fèi)的時間趣兄,其實可以不必去校對訓(xùn)練數(shù)據(jù)集中的數(shù)據(jù)并重新訓(xùn)練绽左。此時在調(diào)整數(shù)據(jù)集的調(diào)試過程中,可以在上述表格的基礎(chǔ)上添加一列 Incorrect Labled 來統(tǒng)計有多少誤分類的照片是由于錯誤標(biāo)記造成的艇潭,然后統(tǒng)計出這個因素造成的錯誤比例拼窥,進(jìn)而分析是否需要手動修改調(diào)整數(shù)據(jù)集中被誤標(biāo)記的數(shù)據(jù)。
如果經(jīng)過一系列調(diào)整使得算法中最終由于誤標(biāo)記造成的錯誤分類所占的比例上升到一定程度蹋凝,則此時才應(yīng)該考慮手動修改調(diào)整集中的錯誤標(biāo)簽鲁纠,同時需要注意的是:
如果對于調(diào)整集進(jìn)行了修改,那么測試集也要進(jìn)行修改以保證二者的分布情況相同
在修改的時候鳍寂,不僅要檢查算法錯誤判定的樣本房交,同樣也要考慮檢查算法正確分類的樣本的標(biāo)簽是否正確
考慮到訓(xùn)練集的數(shù)據(jù)量,這些修改不一定要在訓(xùn)練集中同樣進(jìn)行
快速搭建你的第一個系統(tǒng)
在神經(jīng)網(wǎng)絡(luò)系統(tǒng)的構(gòu)思過程中伐割,通過對問題的分析可以發(fā)現(xiàn)諸多需要考慮的因素和方向候味,但在這個階段過多的停留會耽誤很多的時間刃唤。所以 Andrew 建議大家在打造一個全新的系統(tǒng)時不要對于問題反復(fù)的 “overthink", 盡快建立數(shù)據(jù)集及衡量指標(biāo)白群,并隨即著手構(gòu)建系統(tǒng)原型尚胞,在此基礎(chǔ)上再通過偏差分析、方差分析和誤差分析來確認(rèn)下一步的工作方向帜慢。這會大大縮短整個項目的時間笼裳,并且分析的結(jié)果會自動指明那些可能的方向中真正值得去花時間改進(jìn)的地方。
采用分布情況不同的訓(xùn)練集和調(diào)整集
假設(shè)需要打造一個用于移動客戶端的手機(jī)應(yīng)用粱玲,其功能是通過用戶上傳的手機(jī)圖片進(jìn)行貓的識別躬柬,如果手頭上有 100,000 張網(wǎng)絡(luò)下載的高清貓圖和另外 10,000 張用戶手機(jī)拍攝的相對低質(zhì)的貓圖,那么數(shù)據(jù)集該如何進(jìn)行劃分抽减?
方案 A:將所有圖片混合在一起允青,隨機(jī)打亂后按照一定比例劃分訓(xùn)練數(shù)據(jù)集,調(diào)整數(shù)據(jù)集和測試數(shù)據(jù)集
方案 B:在訓(xùn)練數(shù)據(jù)集全部使用網(wǎng)絡(luò)獲取的圖片卵沉,或者添加部分手機(jī)獲取的圖片颠锉,而在調(diào)整數(shù)據(jù)集和測試數(shù)據(jù)集中全部使用手機(jī)圖片
這兩個方案哪一個更好?
很多人可能都會選擇 A史汗,包括我自己琼掠,而在 Andrew 看來 B 才是更加合理的選擇,因為這使得系統(tǒng)在使用調(diào)整數(shù)據(jù)集進(jìn)行調(diào)整時得到的參數(shù)更加接近其真實的工作環(huán)境停撞,進(jìn)而后期在實際應(yīng)用中準(zhǔn)確率會更高瓷蛙,用戶也會更加滿意。
但這種做法也產(chǎn)生了一個問題:如果測試數(shù)據(jù)集和調(diào)整數(shù)據(jù)集的分布情況相同戈毒,那么如果系統(tǒng)在測試數(shù)據(jù)集和調(diào)整數(shù)據(jù)集上分別的誤差值為 1% 和 10%速挑,那么此時可以放心的下結(jié)論說系統(tǒng)的方差值較高,即此時應(yīng)該納入更多的數(shù)據(jù)或者正則化來改進(jìn)系統(tǒng)副硅。而當(dāng)測試數(shù)據(jù)集和調(diào)整數(shù)據(jù)集不再具有相同的分布姥宝,那么這個結(jié)論將無法確定的得出。比如對應(yīng)前面的貓分類器的例子恐疲,很可能訓(xùn)練集上表現(xiàn)更好是因為采用的是高清的網(wǎng)絡(luò)圖片腊满,而調(diào)整集中的相對較差的表現(xiàn)主要可以歸因于較差的圖片質(zhì)量。
得出更確切的結(jié)論的辦法就是在訓(xùn)練數(shù)據(jù)集中再單獨(dú)分出一個小的數(shù)據(jù)集培己,在此稱為 training-dev set碳蛋。將系統(tǒng)用剩余的訓(xùn)練數(shù)據(jù)集重新進(jìn)行訓(xùn)練并得到誤差值之后,再測試系統(tǒng)在這個 training-dev set 和調(diào)整數(shù)據(jù)集上的誤差值:
如果系統(tǒng)在三個數(shù)據(jù)集上的誤差值分別為 1%省咨, 9.5%肃弟, 10% ,那么此時可以判斷系統(tǒng)具有較高的方差值,因為其在前兩個數(shù)據(jù)集上具有較大差異的表現(xiàn)
如果系統(tǒng)在三個數(shù)據(jù)集上的誤差值分別為 1%笤受,1.5% 穷缤,10%,那么此時我們可以判定差別主要來源于數(shù)據(jù)的不匹配(mismatch)
當(dāng)然前面這個例子的判斷基于假設(shè)人類在類似問題的錯誤率為 0% 或接近 0%箩兽,如果人類的表現(xiàn)不是這個數(shù)值津肛,那么這些數(shù)值的相對大小則需要另行判斷。
再一次地汗贫,不同誤差之間的相對值大小對應(yīng)模型的問題如下:
人類水平表現(xiàn) VS 訓(xùn)練集誤差值間的差異衡量的是可避免偏差大小
訓(xùn)練集與 training-dev set 之間的誤差相對大小反映系統(tǒng)的方差情況
而 training-dev set 與驗證數(shù)據(jù)集之間的誤差相對大小反映數(shù)據(jù)不匹配對于誤差的貢獻(xiàn)情況
驗證數(shù)據(jù)集和測試數(shù)據(jù)集間的誤差相對大小反映系統(tǒng)對于驗證數(shù)據(jù)集是否存在過擬合情況
數(shù)據(jù)不匹配的處理
對于數(shù)據(jù)不匹配問題目前并沒有系統(tǒng)性的解決方案身坐,Andrew 在這里建議應(yīng)該首先分析訓(xùn)練數(shù)據(jù)集和驗證數(shù)據(jù)集的差異主要來源于哪里,在找到這些差異之后可以通過收集更多接近于驗證數(shù)據(jù)集的數(shù)據(jù)落包,或者通過人工數(shù)據(jù)合成向測試數(shù)據(jù)集添加相應(yīng)的差異因素等方式來使其更加接近于驗證集部蛇。需要注意的是如果通過合成的方式進(jìn)行數(shù)據(jù)修飾,那么要防止引入的修飾成分過于單一而使得算法對于這一修飾做出過擬合咐蝇,即應(yīng)該盡量多樣化涯鲁。
遷移學(xué)習(xí)(Transfer learning)
這是一個我之前一直沒有花時間理解的概念,一直以為遷移學(xué)習(xí)是和深度學(xué)習(xí)嘹害、機(jī)器學(xué)習(xí)等并列的一項技術(shù)撮竿,但實際上遷移學(xué)習(xí)是指把之前在一項任務(wù)上學(xué)習(xí)得到的知識/模型稍作修改應(yīng)用在另一個任務(wù)上去吮便,也就是對于學(xué)習(xí)到的知識的遷移笔呀,所以我個人覺得更直觀的翻譯是學(xué)習(xí)的遷移。
例如假設(shè)我們已經(jīng)有一個通過足夠動物數(shù)據(jù)訓(xùn)練后的動物圖像識別模型髓需,如果此時需要一個醫(yī)療影像識別模型许师,那么可能可以通過修改最后一層的輸出,并用新任務(wù)的數(shù)據(jù)來重新訓(xùn)練網(wǎng)絡(luò)僚匆。由于在之前的訓(xùn)練中微渠,網(wǎng)絡(luò)已經(jīng)對于如何識別物體建立了相當(dāng)程度的基礎(chǔ),因此可以假設(shè)其對于如醫(yī)學(xué)影像中的腫瘤識別等問題也具有一定的解決能力咧擂。此時動物圖像識別的訓(xùn)練就稱為基礎(chǔ)訓(xùn)練或者叫預(yù)訓(xùn)練逞盆,在預(yù)訓(xùn)練的基礎(chǔ)上采用新任務(wù)的數(shù)據(jù)進(jìn)行訓(xùn)練的過程叫做微調(diào)(fine-tuning)。
遷移學(xué)習(xí)常見的應(yīng)用場景是預(yù)訓(xùn)練任務(wù)的數(shù)據(jù)量遠(yuǎn)高于被遷移到的新領(lǐng)域的數(shù)據(jù)量松申,否則就沒有必要做這個遷移云芦,應(yīng)該一開始就采用新任務(wù)的數(shù)據(jù)進(jìn)行訓(xùn)練。在后面 Andrew 會講到遷移學(xué)習(xí)中取決于新任務(wù)的數(shù)據(jù)量贸桶,一般會對預(yù)訓(xùn)練得到的參數(shù)全部或部分的進(jìn)行凍結(jié)舅逸,即不通過微調(diào)改變這些參數(shù),使得網(wǎng)絡(luò)對于之前的知識得以保留皇筛。當(dāng)新任務(wù)的數(shù)據(jù)量足夠多的時候也可以選擇將預(yù)訓(xùn)練的參數(shù)作為初始化的值琉历,而不是隨機(jī)初始化,在此基礎(chǔ)上對網(wǎng)絡(luò)進(jìn)行微調(diào)。由于計算機(jī)視覺相關(guān)應(yīng)用訓(xùn)練所需數(shù)據(jù)量通常要更大旗笔,所以訓(xùn)練一個網(wǎng)絡(luò)需要很長的時間彪置,所以這個領(lǐng)域的研究者更多的會采用遷移學(xué)習(xí)來加速自己的工作。
多任務(wù)學(xué)習(xí)(Multi-task learning)
與每一次只執(zhí)行一個任務(wù)换团,例如單個物體的識別不同的是可以通過神經(jīng)網(wǎng)絡(luò)一次性執(zhí)行多個任務(wù)悉稠,例如在自動駕駛中,需要自動駕駛車輛同時識別行人艘包、其他車輛的猛、路標(biāo)、交通指示燈等等想虎。
多任務(wù)對應(yīng)的網(wǎng)絡(luò)的輸出層有多個輸出值卦尊,此時的成本函數(shù)的定義為:
J = ∑∑L(?j(i), yj(i)) / m = ∑∑(-yj(i)log?j(i) - (1 - yj(i))log(1 - ?j(i))) / m,其中最外層的 ∑ 是加總所有 m 個訓(xùn)練樣本舌厨,即 i = 1, 2, 3,..., m岂却,而內(nèi)層的 ∑ 則是加總輸出特征的數(shù)量 n,j = 1, 2, 3,..., n
注意多任務(wù)與 softmax 不同的是后者會給每一個樣本提供一個標(biāo)簽裙椭,而多任務(wù)可以對于同一個樣本提供多個標(biāo)簽躏哩。同時,如果輸入數(shù)據(jù)的標(biāo)簽不完整揉燃,即只標(biāo)記了部分的標(biāo)簽值扫尺,輸入的矩陣中未標(biāo)記標(biāo)簽部分會被設(shè)置為 “?”,此時在加總計算時忽略掉這部分即可炊汤。
已經(jīng)有研究證明正驻,當(dāng)神經(jīng)網(wǎng)絡(luò)足夠大的時候,多任務(wù)的表現(xiàn)要優(yōu)于將這些任務(wù)分拆為多個子任務(wù)并獨(dú)立訓(xùn)練的結(jié)果抢腐。例如對于前面的自動駕駛的例子姑曙,由于對于各個對象的識別所需要的網(wǎng)絡(luò)的基礎(chǔ)架構(gòu)是相通的,或者說基礎(chǔ)能力是相同的迈倍,假設(shè)對于上述四個特征做過標(biāo)記的獨(dú)立數(shù)據(jù)各自有 100,000 個伤靠,那么此時采用 400,000 數(shù)據(jù)來訓(xùn)練一個多任務(wù)系統(tǒng),其表現(xiàn)通常會優(yōu)于分別用 100,000 輸入來訓(xùn)練 4 個獨(dú)立的網(wǎng)絡(luò)啼染。
所以總結(jié)起來多任務(wù)的應(yīng)用前提是:
這些多個任務(wù)之間共享相當(dāng)多的底層特征
對于執(zhí)行各個子任務(wù)來說都有幾乎相同數(shù)量的數(shù)據(jù)
神經(jīng)網(wǎng)絡(luò)要足夠大
端對端的深度學(xué)習(xí)
端到端的深度學(xué)習(xí)之所以如此得名是因為相比將一項復(fù)雜的任務(wù)分成多個階段來執(zhí)行的方式宴合,端對端學(xué)習(xí)方式通過構(gòu)建一個龐大的神經(jīng)網(wǎng)絡(luò),直接從輸入(一端)構(gòu)建與輸出(另一端)間的關(guān)系提完,省去了中間的任務(wù)切割和逐個擊破的步驟形纺。聽起來似乎端對端的深度學(xué)習(xí)可以直接解決所有的問題,但其實端對端的深度學(xué)習(xí)只有在具備海量的數(shù)據(jù)和使用龐大的神經(jīng)網(wǎng)絡(luò)的時候才能達(dá)到或超越分階段執(zhí)行的效果徒欣。具體到在應(yīng)用中如何選擇逐样,Andrew 總結(jié)端對端深度學(xué)習(xí)的優(yōu)勢和缺點如下:
優(yōu)點:
讓數(shù)據(jù)自己說話:不人為的要求系統(tǒng)按照人類的思維去解釋現(xiàn)象,而是讓系統(tǒng)自己尋找規(guī)律
需要更少的手工設(shè)計算法的過程和時間
缺點:
- 收集海量數(shù)據(jù)和構(gòu)建龐大的神經(jīng)網(wǎng)絡(luò)所需的資源、成本和技術(shù)能力限制
盡管神經(jīng)網(wǎng)絡(luò)領(lǐng)域里的很多研究者對于在系統(tǒng)中實施手工設(shè)計比較抵觸脂新,但在 Andrew 看來神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的知識來源于兩個方面:
數(shù)據(jù)本身
算法設(shè)計者手工在算法中添加的促進(jìn)算法學(xué)習(xí)的設(shè)計挪捕,如特定特征的引導(dǎo)識別,網(wǎng)絡(luò)架構(gòu)設(shè)計等
因此當(dāng)數(shù)據(jù)量本身非常大的時候争便,當(dāng)然可以盡量減少人工干預(yù)级零,讓數(shù)據(jù)自己說話。但當(dāng)你所有具備的數(shù)據(jù)量非常小的時候滞乙,系統(tǒng)中的人工干預(yù)部分可以使得人類將已有的知識傳遞給系統(tǒng)奏纪,并在很大程度上決定最終系統(tǒng)表現(xiàn)的優(yōu)劣。
所以對于是否采用端對端的深度學(xué)習(xí)斩启,總結(jié)一句話就是:
Do you have sufficient data to learn a function of the complexity needed to map x to y?
你是否具備足夠多的數(shù)據(jù)來使得系統(tǒng)能夠構(gòu)建出具備直接從 x 映射到 y 所需的復(fù)雜度要求的函數(shù)序调?再翻譯一下就是:如果數(shù)據(jù)數(shù)量和技術(shù)能力不達(dá)標(biāo),分階段執(zhí)行兔簇!