深度学习实战技巧
?
轉(zhuǎn)載聲明:本文為「頂級(jí)程序員」編譯團(tuán)隊(duì)原創(chuàng)文章,轉(zhuǎn)載請(qǐng)聯(lián)系后臺(tái)。
?
1. 為什么要學(xué)習(xí)機(jī)器學(xué)習(xí)策略?
機(jī)器學(xué)習(xí)眾多重要應(yīng)用的基礎(chǔ),包括搜索引擎、垃圾郵件過(guò)濾、語(yǔ)音識(shí)別、商品推薦等。假設(shè)你或者你的團(tuán)隊(duì)正在做機(jī)器學(xué)習(xí)應(yīng)用項(xiàng)目,同時(shí)你想獲得快速進(jìn)步。你可以從這本書中找到滿意的答案。
示例:建立一個(gè)識(shí)別含有貓圖像的新興公司
你正在建立一個(gè)新興公司,該公司將給貓的愛(ài)好者提供大量的貓圖片。你計(jì)劃使用神經(jīng)網(wǎng)絡(luò)來(lái)建立一個(gè)計(jì)算機(jī)視覺(jué)系統(tǒng)用于識(shí)別圖片中的貓。
但不幸的是,你的學(xué)習(xí)算法識(shí)別準(zhǔn)確率不是足夠的好。所以你面臨具大的壓力來(lái)提高算法的識(shí)別準(zhǔn)確率。你應(yīng)該做些什么呢?
你的團(tuán)隊(duì)有許多好的方法,比如:
l 獲得更多的數(shù)據(jù):收集更多貓的圖上。
l 收集大量多樣化的訓(xùn)練集。例如,貓?jiān)诓煌恢玫膱D片;不同毛色的貓;多種相機(jī)設(shè)置拍攝的圖片等。
l 通過(guò)加大梯度下降的迭代次數(shù),來(lái)增加算法的訓(xùn)練時(shí)間。
l 嘗試更大的神經(jīng)網(wǎng)絡(luò),擁有更多的層、隱藏單元和參數(shù)。
l 嘗試更小的神經(jīng)網(wǎng)絡(luò)。
l 嘗試增加正則化(比如L2正則)。
l 改變神經(jīng)網(wǎng)絡(luò)的架構(gòu)(激活函數(shù)、隱藏層的數(shù)量等)。
如果你能夠從以上方法中選擇一個(gè)好的方案,你將打造一個(gè)領(lǐng)先的貓圖片識(shí)別平臺(tái)以及帶領(lǐng)你的公司走向成功。如果你選擇了一個(gè)差的方案,你有可能要浪費(fèi)數(shù)月時(shí)間。
我們應(yīng)該怎么選擇呢?
這本書將告訴你如何選擇。多數(shù)的機(jī)器學(xué)習(xí)問(wèn)題會(huì)留下一些線索,而這些線索會(huì)告訴你哪些是有用的嘗試,哪些是無(wú)用的嘗試。學(xué)會(huì)使用這些線索將會(huì)節(jié)約你數(shù)月或數(shù)年的開(kāi)發(fā)時(shí)間。
2. 怎么使用這本書幫助你的團(tuán)隊(duì)
學(xué)習(xí)完本書后,你將對(duì)如何制定機(jī)器學(xué)習(xí)項(xiàng)目技術(shù)方向有一個(gè)深刻理解。
你的團(tuán)隊(duì)成員有可能不明白為什么你會(huì)建議某一個(gè)具體的方向。或者你想你的團(tuán)隊(duì)能夠定義一個(gè)單一數(shù)量評(píng)估指標(biāo),但他們并不信服。你應(yīng)該如何去說(shuō)服他們?
這就是設(shè)置短章節(jié)的原因:這樣你能夠?qū)⑦@些章節(jié)打印出來(lái)并且提供給你的團(tuán)隊(duì)成員你想要團(tuán)隊(duì)成員知道的1-2內(nèi)容。
在優(yōu)先次序上做一些調(diào)整,對(duì)于你團(tuán)隊(duì)的生產(chǎn)率可能會(huì)產(chǎn)生巨大的影響。通過(guò)幫助你的團(tuán)隊(duì)做出這樣的變化,我希望你能成為你們團(tuán)隊(duì)的超級(jí)英雄。
3. 預(yù)備知識(shí)和符號(hào)約定
如果你已經(jīng)學(xué)習(xí)了機(jī)器學(xué)習(xí)課程(比如在Coursera上我的機(jī)器學(xué)習(xí)慕課課程)或你有應(yīng)用監(jiān)督學(xué)習(xí)的經(jīng)驗(yàn),你將能夠很容易明白下面的內(nèi)容。
假設(shè)你熟悉監(jiān)督學(xué)習(xí)算法:使用標(biāo)識(shí)的訓(xùn)練樣例(x,y),學(xué)習(xí)一個(gè)從x到y(tǒng)的映射函數(shù)。監(jiān)督學(xué)習(xí)算法包含線性回歸、邏輯回歸和神經(jīng)網(wǎng)絡(luò)。機(jī)器學(xué)習(xí)的形式有多種,但是機(jī)器學(xué)習(xí)的主要實(shí)際應(yīng)用都是監(jiān)督學(xué)習(xí)。
我將會(huì)頻繁提及神經(jīng)網(wǎng)絡(luò)(同樣稱為“深度學(xué)習(xí)”)。你只需要對(duì)他們有一個(gè)基本了解即可。
如果你對(duì)在此提到的概念不熟悉,請(qǐng)到Coursera上觀看機(jī)器學(xué)習(xí)課程的前三周視頻。網(wǎng)址:http://ml-class.org
4. 規(guī)模推動(dòng)機(jī)器學(xué)習(xí)的發(fā)展
深度學(xué)習(xí)(神經(jīng)網(wǎng)絡(luò))的許多觀點(diǎn)已經(jīng)存在了十幾年。為什么這些觀點(diǎn)現(xiàn)在才得到重視?
有2個(gè)最為重要的因素推動(dòng)了深度學(xué)習(xí)的發(fā)展:
l 大量可用數(shù)據(jù)。現(xiàn)在人們花費(fèi)更多的時(shí)間使用數(shù)字設(shè)備(筆記本電腦、移動(dòng)設(shè)備)。因此我可以將他們使用數(shù)字設(shè)備產(chǎn)生的大量數(shù)據(jù)用于學(xué)習(xí)算法訓(xùn)練。
l 計(jì)算能力提升。僅僅在幾年前,我們才能夠訓(xùn)練足夠大的神經(jīng)網(wǎng)絡(luò),以利用我們現(xiàn)在擁有的龐大數(shù)據(jù)量。
具體來(lái)講,即使你收集了足夠多的數(shù)據(jù),如果還使用傳統(tǒng)算法(邏輯回歸)來(lái)處理數(shù)據(jù),依然會(huì)出現(xiàn)“停滯”現(xiàn)象。這就意為著即使你給算法在多的數(shù)據(jù),算法的學(xué)習(xí)曲線也會(huì)變平,算法效果不會(huì)在有所提升。
傳統(tǒng)算法似乎不知道如何處理我們現(xiàn)在擁有的所有數(shù)據(jù)。
如果你在同一個(gè)監(jiān)督學(xué)習(xí)任務(wù)訓(xùn)練一個(gè)小的神經(jīng)網(wǎng)絡(luò)(NN),有可能獲得稍微好一點(diǎn)的效果:
這里所說(shuō)的“小型神經(jīng)網(wǎng)絡(luò)”是指一個(gè)神經(jīng)網(wǎng)絡(luò)擁有少數(shù)的隱藏單元/層/參數(shù)。最后,如果你訓(xùn)練一個(gè)大型神經(jīng)網(wǎng)絡(luò),你能夠獲得更好的性能表現(xiàn)。
因此,如果你想得到最好的性能表現(xiàn),(i)你可以訓(xùn)練一個(gè)非常大的神經(jīng)網(wǎng)絡(luò),它性能表現(xiàn)將位于綠色曲線的上方;(ii)擁有更多的數(shù)據(jù)。
還有許多其它的細(xì)節(jié)(比如神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu))也是非常重要的,這些方面也有很多的創(chuàng)新。現(xiàn)階段提升算法的性能最可靠的方法仍然是(i)訓(xùn)練更大的網(wǎng)絡(luò)和(ii)獲得更多的數(shù)據(jù)。
怎樣實(shí)現(xiàn)(i)和(ii)是非常復(fù)雜的。這本書將會(huì)詳細(xì)討論這些細(xì)節(jié)。我們將從對(duì)傳統(tǒng)學(xué)習(xí)算法和神經(jīng)網(wǎng)絡(luò)都有用的一般策略開(kāi)始,并建立對(duì)構(gòu)建深度學(xué)習(xí)系統(tǒng)的最先進(jìn)策略。
5. 你的開(kāi)發(fā)集和測(cè)試集
讓我們回顧一下前面講過(guò)的貓圖像例子:你開(kāi)發(fā)了一款移動(dòng)APP,用戶可以將多種類型的圖片上傳到APP。你希望APP能夠自動(dòng)篩選貓的圖片。
你的團(tuán)隊(duì)擁有一個(gè)龐大的訓(xùn)練集,而這個(gè)訓(xùn)練集是通過(guò)下載不同網(wǎng)站上含有貓的圖片(正樣本)和不含有貓的圖片(負(fù)樣本)組成。他們將該訓(xùn)練集按照70%作為訓(xùn)練集、30%作為測(cè)試集進(jìn)行分割。使用這個(gè)數(shù)據(jù),他們構(gòu)建了一個(gè)在訓(xùn)練集和測(cè)試集都表現(xiàn)很好的貓識(shí)別算法。
但是當(dāng)你將這個(gè)識(shí)別算法部署到移動(dòng)APP時(shí),你會(huì)發(fā)現(xiàn)識(shí)別算法表現(xiàn)非常差。
為什么會(huì)這樣?
你發(fā)現(xiàn)用戶上傳的圖片與你從網(wǎng)站上下載的作為訓(xùn)練集的圖片有些不同:用戶使用手機(jī)拍攝的圖片分辨率低、模糊和光線較差。由于你們訓(xùn)練集/測(cè)試集數(shù)據(jù)都來(lái)自于網(wǎng)站,而你的算法對(duì)于手機(jī)拍攝的圖片缺乏較好的泛化能力。
在大數(shù)據(jù)時(shí)代之前,人們通常將數(shù)據(jù)集按照70%:30%隨機(jī)進(jìn)行分割作為機(jī)器學(xué)習(xí)算法的訓(xùn)練集和測(cè)試集。但是在越來(lái)越多的應(yīng)用中這不是一個(gè)好的方法,因?yàn)橛?xùn)練集的分布(上面例子中指網(wǎng)站圖像)是不同于最終實(shí)際應(yīng)用場(chǎng)景圖像的分布(手機(jī)圖像)。
通常我們的定義:
l 訓(xùn)練集—用于你的學(xué)習(xí)算法中。
l 開(kāi)發(fā)集—用于調(diào)整學(xué)習(xí)算法的參數(shù)、特征選擇以及做出其他的選擇。有時(shí)候?qū)㈤_(kāi)發(fā)集稱為保留交叉驗(yàn)證集。
l 測(cè)試集—用于評(píng)估算法的性能,但是不要使用該數(shù)據(jù)集對(duì)學(xué)習(xí)算法和參數(shù)做出任何決定。
當(dāng)你定義了一個(gè)開(kāi)發(fā)集和測(cè)試集,你的團(tuán)隊(duì)將會(huì)嘗試多種方法(比如選擇不同的學(xué)習(xí)算法參數(shù))觀察哪種方法最好。開(kāi)發(fā)集和測(cè)試集可以讓你的團(tuán)隊(duì)看到你的算法工作的如何。
換句話說(shuō),開(kāi)發(fā)集和測(cè)試集目的是指導(dǎo)你的團(tuán)隊(duì)對(duì)機(jī)器學(xué)習(xí)系統(tǒng)做出最重要的改變。
因此,你應(yīng)該做到:
選擇開(kāi)發(fā)集和測(cè)試集,反映未來(lái)你期望獲得的數(shù)據(jù)并在上面做的更好。
當(dāng)你的實(shí)際數(shù)據(jù)(智能手機(jī)圖像)和測(cè)試集(網(wǎng)站圖像)在性質(zhì)上不一樣時(shí),你的測(cè)試集不應(yīng)該只有可用數(shù)據(jù)的30%那么簡(jiǎn)單。
如果你還沒(méi)有發(fā)你的APP,也就意味著沒(méi)有任何用戶,你將不能獲得使你未來(lái)做的更好的數(shù)據(jù)。但你仍然可以嘗試去接近這一點(diǎn)。例如,請(qǐng)你的朋友們用手機(jī)拍攝一些貓的圖像發(fā)給你。當(dāng)你的APP發(fā)布后,你可以使用實(shí)際用戶數(shù)據(jù)更新程序的開(kāi)發(fā)集/測(cè)試集。
如果你實(shí)在是沒(méi)有辦法去獲得你想要的數(shù)據(jù),也許網(wǎng)站圖像也是一個(gè)不錯(cuò)的開(kāi)始。但是,你應(yīng)該關(guān)注這個(gè)系統(tǒng)缺乏好的泛化能力的風(fēng)險(xiǎn)。
有時(shí)候我們需要去決定投資多少去獲獲取發(fā)好的開(kāi)發(fā)集和測(cè)試集。但是不要假設(shè)訓(xùn)練集與測(cè)試集具有相同的分布。嘗試去挑選能夠反映平臺(tái)實(shí)際應(yīng)用場(chǎng)景的測(cè)試樣本,而不是你使用過(guò)的數(shù)據(jù)。
6. 你的開(kāi)發(fā)集和測(cè)試集應(yīng)該具有相同分布
根據(jù)你的市場(chǎng),你將你的貓APP圖像數(shù)據(jù)分為四個(gè)區(qū)域:(i)美國(guó)、 (ii)中國(guó)、(iii) 印度和(iv)其他。構(gòu)造一個(gè)開(kāi)發(fā)集和一個(gè)測(cè)試集,我們可以將美國(guó)和印度看作開(kāi)發(fā)集;中國(guó)和其他看作測(cè)試集。換句話說(shuō),我們可以隨機(jī)的分配2個(gè)區(qū)域作為開(kāi)發(fā)集,而另外2個(gè)區(qū)域作為測(cè)試集。
一旦你定義了開(kāi)發(fā)集和測(cè)試集,你的團(tuán)隊(duì)將專注于提高開(kāi)發(fā)集的表現(xiàn)性能。因此,開(kāi)發(fā)集應(yīng)該反映你最想提升性能的任務(wù):在四個(gè)地區(qū)做的最好,而不是二個(gè)。
開(kāi)發(fā)集和測(cè)試集具有不同的分布導(dǎo)致的第二個(gè)問(wèn)題:你的團(tuán)隊(duì)有可能在測(cè)試集上表現(xiàn)很好,而在測(cè)試集上表現(xiàn)很差。我曾經(jīng)在很多的挫折和白費(fèi)努力中看到過(guò)這個(gè)結(jié)果。應(yīng)該避免這樣的事情發(fā)生在你的身上。
例如,你的開(kāi)發(fā)團(tuán)隊(duì)開(kāi)發(fā)一個(gè)系統(tǒng)在開(kāi)發(fā)集上表現(xiàn)很好,而在測(cè)試集上表現(xiàn)很差。而你的開(kāi)發(fā)集和測(cè)試集都來(lái)自同一分布,則你應(yīng)該明確知道:你的算法在開(kāi)發(fā)集上過(guò)擬合了。通過(guò)獲得更多的開(kāi)發(fā)集數(shù)據(jù)可以避免過(guò)擬合的產(chǎn)生。
如果開(kāi)發(fā)集和測(cè)試集具有不同的分布,則你的選擇就不太清楚了。可能會(huì)有以下幾個(gè)錯(cuò)誤:
1. 你的算法已經(jīng)在開(kāi)發(fā)集上過(guò)擬合了
2. 測(cè)試集比開(kāi)發(fā)集更難識(shí)別。你的算法性能表現(xiàn)達(dá)到了你預(yù)期的期望,因此沒(méi)有可能做出進(jìn)一步顯著性的改進(jìn)了。
3. 測(cè)試集不一定比開(kāi)發(fā)集難,只是他們來(lái)自不同分布。因此在開(kāi)發(fā)集上表現(xiàn)很好的算法在測(cè)試集上并不能表現(xiàn)很好。在這種情況下,把大量工作用于提高算法在開(kāi)發(fā)集上的表現(xiàn)性能是無(wú)意義的。
機(jī)器學(xué)習(xí)應(yīng)該方面的工作已經(jīng)很困難了。開(kāi)發(fā)集和測(cè)試集的不匹配增加了額外的不確定性,關(guān)于是否改進(jìn)開(kāi)發(fā)集的分布性能或提高測(cè)試集的表現(xiàn)性能。這使得很難找出什么是起作用的和什么不起作用的,因此很難去優(yōu)先處理誰(shuí)。
如果你面對(duì)的是第三方基準(zhǔn)測(cè)試問(wèn)題,他們的開(kāi)發(fā)者有可能提供來(lái)自于不同分布的開(kāi)發(fā)集和測(cè)試集。在這種情形下,運(yùn)氣的好壞將會(huì)很大程度上影響你算法的表現(xiàn)性能。當(dāng)然,開(kāi)發(fā)能夠在一個(gè)分布上訓(xùn)練并推廣到另一個(gè)分布上仍然表現(xiàn)很好的學(xué)習(xí)算法是一個(gè)重要的研究方向。如果你的目標(biāo)是做特定機(jī)器學(xué)習(xí)應(yīng)用而不是學(xué)術(shù)研究,我建議選擇具有相同分布的開(kāi)發(fā)集和測(cè)試集。這會(huì)使你的團(tuán)隊(duì)更有效率。
7. 需要多大開(kāi)發(fā)集/測(cè)試集?
開(kāi)發(fā)集應(yīng)該足夠大,大到足以檢測(cè)你正在嘗試不同算法之間的差異。例如,如果分類器有90.0%的準(zhǔn)確率而分類器B有90.1%的準(zhǔn)確率,則有100個(gè)樣本的開(kāi)發(fā)集將不能區(qū)分0.1%的區(qū)別。與我看到的其他機(jī)器學(xué)習(xí)問(wèn)題相比,一個(gè)100個(gè)樣本的開(kāi)發(fā)集太小。開(kāi)發(fā)集通常樣本數(shù)量應(yīng)該在1000到10,000之間。在10000個(gè)樣本下,你將有可能檢測(cè)到0.1%的性能提升。
對(duì)于一些成熟和重要的應(yīng)用(例如,廣告、搜索引擎和商品推薦),我已經(jīng)看到一些團(tuán)隊(duì)為了提升0.01%的性能而不懈努力,因?yàn)檫@直接影響到公司的利益。在這種情況下,開(kāi)發(fā)集有可能遠(yuǎn)遠(yuǎn)超過(guò)了10000個(gè)樣本,為了能夠找到更小的改進(jìn)空間。
測(cè)試集的數(shù)量多少合適哪?應(yīng)該足夠大,大到能夠?qū)τ谀愕南到y(tǒng)性能全面評(píng)估,擁有足夠高的可靠性。一種流行的啟發(fā)式算法使用數(shù)據(jù)集的30%用作測(cè)試集。當(dāng)你擁有一個(gè)適中的數(shù)據(jù)量(100到10000之間)時(shí),這個(gè)測(cè)試集將能很好的工作。在大數(shù)據(jù)時(shí)代,現(xiàn)在我們面對(duì)的機(jī)器學(xué)習(xí)問(wèn)題有時(shí)候會(huì)超過(guò)10億樣本量,分配給開(kāi)發(fā)集/測(cè)試集的比例一直在減少,雖然開(kāi)發(fā)集/測(cè)試集樣本絕對(duì)數(shù)量在增長(zhǎng)。在分配開(kāi)發(fā)集和測(cè)試集數(shù)據(jù)時(shí),開(kāi)發(fā)集和測(cè)試集的數(shù)量沒(méi)必要超過(guò)其評(píng)估算法性能所需的數(shù)據(jù)量。
8. 給你的團(tuán)隊(duì)進(jìn)行算法優(yōu)化建立單一數(shù)值評(píng)估指標(biāo)
分類準(zhǔn)確率是單一數(shù)字評(píng)估指標(biāo)的示例:當(dāng)你的算法對(duì)開(kāi)發(fā)集(或測(cè)試集)進(jìn)行分類時(shí),會(huì)得到一個(gè)樣本分類準(zhǔn)確性的數(shù)字比例。根據(jù)這個(gè)指標(biāo),如果分類器A準(zhǔn)確率為97%,分類器B準(zhǔn)確率為90%,則分類器A的分類效果更好。
相比之下,查準(zhǔn)率和查全率不屬于單一數(shù)字評(píng)估指標(biāo)體系:它給出2個(gè)數(shù)字用于評(píng)估你的分類器性能。多數(shù)字評(píng)估指標(biāo)使得我們很難去比較算法的優(yōu)勢(shì)。假設(shè)你的算法性能指標(biāo)如下:
在這種情況下,我們無(wú)法看出那一個(gè)分類器性能更好,因此多數(shù)字評(píng)估指標(biāo)無(wú)法直觀指導(dǎo)你使用那一個(gè)更好的分類器。
在算法開(kāi)發(fā)期間,你的團(tuán)隊(duì)會(huì)在算法結(jié)構(gòu)、模型參數(shù)調(diào)優(yōu)和特征選擇等方面進(jìn)行多種方法的嘗試。單一數(shù)字評(píng)估指標(biāo)(比如精度)允許你根據(jù)算法的準(zhǔn)確率將你的模型進(jìn)行排序,以便于快速?zèng)Q定那一個(gè)算法的性能更好。
如果你比較關(guān)注查準(zhǔn)率和查全率這2個(gè)指標(biāo),建議你使用一種標(biāo)準(zhǔn)方法將這2個(gè)指標(biāo)組合為單一數(shù)字指標(biāo)。例如,你可以使用查準(zhǔn)率和查全率的平均值作為單一數(shù)字指標(biāo)。你也可以計(jì)算算法的“F1度量”,它是一種計(jì)算二者平均值的改進(jìn)方法,比簡(jiǎn)單計(jì)算平均值方法效果要好。
當(dāng)你正在選擇一個(gè)適合的分類算法時(shí),單一數(shù)字評(píng)價(jià)指標(biāo)可以快速幫助你做出選擇。它給出了一個(gè)清晰的算法優(yōu)先級(jí)排序,同時(shí)給出了明確的前進(jìn)方向。
作為最后一個(gè)例子,假設(shè)你獲得了四個(gè)主要市場(chǎng)((i) 美國(guó), (ii)中國(guó), (iii)印度,和(iv) 其他地區(qū))的貓分類器的準(zhǔn)確率,會(huì)得到四個(gè)指標(biāo)值。通過(guò)將這四個(gè)指標(biāo)值求平均值或加權(quán)平均值,最后會(huì)得到一個(gè)單一數(shù)字指標(biāo)。將多指標(biāo)值合并為單一指標(biāo)值最常用的方法之一是求多指標(biāo)值的平均值或加權(quán)平均值。
9. 優(yōu)化指標(biāo)和滿意指標(biāo)
這是將多指標(biāo)值合并為單一數(shù)字指標(biāo)的另一種方法。
假設(shè)你比較關(guān)注一個(gè)學(xué)習(xí)算法的準(zhǔn)確率和運(yùn)行時(shí)間。現(xiàn)在你需要在下面的三個(gè)分類器中做出選擇:
如果通過(guò)下面的計(jì)算公式將準(zhǔn)確率和運(yùn)行時(shí)間合并為單一指標(biāo),在此看起來(lái)有些不自然:
準(zhǔn)確率-0.5*運(yùn)行時(shí)間
你可以這樣做:首先,定義一個(gè)“可接受”的運(yùn)行時(shí)間范圍。假設(shè)我們說(shuō)算法在100ms內(nèi)的運(yùn)行時(shí)間是可接受的。則分類器在滿足可接受運(yùn)行時(shí)間內(nèi),取最大準(zhǔn)確率的算法。在此,運(yùn)行時(shí)間是一個(gè)“滿意指標(biāo)”—你的分類算法只需要在這個(gè)指標(biāo)上做的“足夠好”即可,也就是算法的運(yùn)行時(shí)間滿足最多100ms。準(zhǔn)確率是“優(yōu)化指標(biāo)”。
如果你正在權(quán)衡N個(gè)不同的指標(biāo),比如模型的二進(jìn)制文件大小(因?yàn)橛脩舨幌胂螺d在大的APP文件)、運(yùn)行時(shí)間和準(zhǔn)確率,你可以考慮將其中N-1個(gè)值作為“滿足度指標(biāo)”,也就是說(shuō)你只需要考慮他們滿足一個(gè)特定的值即可。定義最后一個(gè)值作為“優(yōu)化指標(biāo)”。例如,設(shè)置一個(gè)閾值作為二進(jìn)制文件和運(yùn)行時(shí)間的接受范圍,并且在這些限制下去優(yōu)化算法的準(zhǔn)確率。
作為最后一個(gè)例子,假設(shè)你正在構(gòu)建一個(gè)硬件系統(tǒng),該系統(tǒng)使用一個(gè)麥克風(fēng)監(jiān)聽(tīng)用戶說(shuō)的特別“喚醒詞”,從而喚醒系統(tǒng)工作。比如Amazon Echo監(jiān)聽(tīng)“Alexa”;蘋果Siri監(jiān)聽(tīng)“Hey Siri”;安卓監(jiān)聽(tīng)“Okay Google”;百度APP監(jiān)聽(tīng)“Hello Baidu”。你同時(shí)關(guān)注假正例的比例—指當(dāng)沒(méi)有人說(shuō)喚醒詞時(shí),系統(tǒng)被喚醒的頻率和假反例的比例—指當(dāng)用戶說(shuō)了喚醒詞時(shí),系統(tǒng)沒(méi)有被喚醒的頻率。使這個(gè)系統(tǒng)性能達(dá)到的一個(gè)合理目標(biāo)是減少負(fù)反值的比例(優(yōu)化指標(biāo)),在24時(shí)工作中沒(méi)有出現(xiàn)一個(gè)負(fù)正例(滿意度指標(biāo))。
一旦你的團(tuán)隊(duì)開(kāi)始對(duì)評(píng)估指標(biāo)進(jìn)行優(yōu)化,他們將能夠獲得較快的進(jìn)展。
10. 有一個(gè)開(kāi)發(fā)集和度量指標(biāo)來(lái)加速算法的迭代
人們很難事先知道什么方法能夠很好的解決新問(wèn)題。即使是經(jīng)驗(yàn)豐富的機(jī)器學(xué)習(xí)研究者在給出滿意答案之前也需要進(jìn)行多種方法的嘗試。在構(gòu)建機(jī)器學(xué)習(xí)系統(tǒng)時(shí),我通常會(huì)做以下的思考:
1. 首先想一些構(gòu)造這個(gè)系統(tǒng)的想法。
2. 用代碼實(shí)現(xiàn)這些想法。
3. 通過(guò)實(shí)驗(yàn)來(lái)驗(yàn)證我的想法如何(通常我前面的一些想法都沒(méi)有很好的表現(xiàn))。
基于以上的學(xué)習(xí),在回過(guò)頭來(lái)產(chǎn)生更多的想法,在進(jìn)行驗(yàn)證。以此類推進(jìn)行不斷的迭代。
這是一個(gè)不斷迭代的過(guò)程。你迭代的過(guò)程越快,你進(jìn)步的就會(huì)越快。這就是為什么擁有開(kāi)發(fā)集/測(cè)試集和一個(gè)度量指標(biāo)是如此的重要:每次當(dāng)你在開(kāi)發(fā)集上驗(yàn)證你的想法時(shí),評(píng)價(jià)指標(biāo)可以快速使你判斷自己是否在朝正確的方向前進(jìn)。
假設(shè)你沒(méi)有一個(gè)具體的開(kāi)發(fā)集和度量指標(biāo)。因此你的團(tuán)隊(duì)每次開(kāi)發(fā)新的貓分類器時(shí),你必將新的分類器移值進(jìn)你的APP中,并親身體驗(yàn)幾個(gè)小時(shí)從直觀上判斷新的分類器性能是否有所提升。這樣的開(kāi)發(fā)效率極其低下!同時(shí),如果你的團(tuán)隊(duì)將分類器的準(zhǔn)確率從95.0%提高到了95.1%,在你親身體驗(yàn)過(guò)程中有可能無(wú)法感受到這0.1%的提升。然而,系統(tǒng)整體的準(zhǔn)確率是由許多個(gè)0.1%構(gòu)成的。有一個(gè)開(kāi)發(fā)集和度量指標(biāo)可以快速使你驗(yàn)證那些成功的想法給你的系統(tǒng)帶來(lái)了小(或大)的提升,因此你可快速?zèng)Q定哪些想法還要繼續(xù)改進(jìn),那些想法可以拋棄。
11.何時(shí)更改開(kāi)發(fā)/測(cè)試集和評(píng)估指標(biāo)
當(dāng)開(kāi)始一個(gè)新項(xiàng)目時(shí),我會(huì)試圖迅速選好開(kāi)發(fā)/測(cè)試集 ,因?yàn)檫@可以給團(tuán)隊(duì)制定一個(gè)明確的目標(biāo)。
我通常會(huì)要求我的團(tuán)隊(duì)在不到一周之內(nèi)(極少多于一周時(shí)間)想出一個(gè)初始的開(kāi)發(fā)/測(cè)試集和評(píng)估指標(biāo),提出一個(gè)不太完美的方案并迅速行動(dòng)起來(lái)往往比過(guò)分考慮這些會(huì)更好。但是“一周”這個(gè)時(shí)間表并不適用于成熟的應(yīng)用。例如,反垃圾郵件就是一個(gè)成熟的深度學(xué)習(xí)應(yīng)用。我曾經(jīng)見(jiàn)過(guò)一些開(kāi)發(fā)已經(jīng)成熟的系統(tǒng)的團(tuán)隊(duì)花費(fèi)數(shù)月時(shí)間來(lái)獲得更好的開(kāi)發(fā)/測(cè)試集。
如果你后來(lái)發(fā)現(xiàn)你初始的開(kāi)發(fā)/測(cè)試集或評(píng)估指標(biāo)與你的目標(biāo)并不完全一致,那么馬上利用一切辦法進(jìn)行更改。例如,如果在你的開(kāi)發(fā)集和評(píng)估指標(biāo)上分類器A比分離器B表現(xiàn)好,但你的團(tuán)隊(duì)認(rèn)為在實(shí)際應(yīng)用中分類器B更適合你的產(chǎn)品,那么這就很有可能是一個(gè)你需要更改開(kāi)發(fā)/測(cè)試集或評(píng)估指標(biāo)的跡象。
有三個(gè)主要原因可能會(huì)造成開(kāi)發(fā)集/評(píng)估指標(biāo)不正確地把分類器A排得更高:
1. 你需要做得好的實(shí)際數(shù)據(jù)分布和開(kāi)發(fā)/測(cè)試集是不同的。
假設(shè)你的初始開(kāi)發(fā)/測(cè)試集主要是一些成年貓的照片,但是在你實(shí)際查看貓app后,發(fā)現(xiàn)用戶上傳的小貓的照片比預(yù)期多得多。所以,開(kāi)發(fā)/測(cè)試集的數(shù)據(jù)分布并不能代表你需要做得好的實(shí)際的數(shù)據(jù)分布。這種情況下,你需要更新開(kāi)發(fā)/測(cè)試集,使其更具代表性。
2. 你已經(jīng)過(guò)擬合了開(kāi)發(fā)集。
在開(kāi)發(fā)集上重復(fù)評(píng)估不同方法的過(guò)程可能導(dǎo)致你的算法逐漸對(duì)開(kāi)發(fā)集“過(guò)擬合”。當(dāng)你做完開(kāi)發(fā)后,你會(huì)在測(cè)試集上評(píng)估你的算法。如果你發(fā)現(xiàn)算法在開(kāi)發(fā)集上的表現(xiàn)遠(yuǎn)好于在測(cè)試集上的表現(xiàn),這可能是你已經(jīng)過(guò)擬合開(kāi)發(fā)集的跡象。這種情況下,你需要更新你的開(kāi)發(fā)集了。
如果你需要跟蹤團(tuán)隊(duì)的進(jìn)度,你也可以每周或每月用測(cè)試集定期評(píng)估你的系統(tǒng)。但不要用測(cè)試集來(lái)做出任何關(guān)于改進(jìn)算法的決定,包括是否回退到上一周的系統(tǒng)。如果這樣做了,你將開(kāi)始過(guò)度擬合測(cè)試集,并且不可能再依靠它來(lái)給出一個(gè)你的系統(tǒng)性能的完全無(wú)偏估計(jì)(你可能會(huì)在發(fā)表論文或做出重要商業(yè)決策用到這)。
3. 評(píng)估指標(biāo)正在衡量的并不是項(xiàng)目所需要優(yōu)化的東西。
假設(shè)對(duì)于你的貓app,你的評(píng)估指標(biāo)是分類準(zhǔn)確率。該指標(biāo)現(xiàn)在把分類器A排在分類器B前面。但是假如你嘗試了這兩種算法,發(fā)現(xiàn)分類器A會(huì)偶爾允許色情圖片通過(guò)。那么即使分類器A準(zhǔn)確率更高,偶發(fā)的色情圖片所帶來(lái)的壞影響也意味著這個(gè)分類器的表現(xiàn)是不被接受的。你需要做什么呢?
這里,評(píng)估指標(biāo)不能辨別出對(duì)產(chǎn)品而言算法B比算法A更好這一事實(shí)。所以,你不能再相信這個(gè)評(píng)估指標(biāo)能挑選出最佳算法。現(xiàn)在是改變?cè)u(píng)估指標(biāo)的時(shí)候了。例如,你可以改變?cè)u(píng)估指標(biāo),加重對(duì)色情圖片通過(guò)的懲罰。我強(qiáng)烈建議你選擇一個(gè)新的評(píng)估指標(biāo),用這個(gè)新的評(píng)估指標(biāo)來(lái)為你的團(tuán)隊(duì)明確定義一個(gè)新的目標(biāo),而不是在沒(méi)有可信任的評(píng)估指標(biāo)下一直進(jìn)行,然后在分類器中手動(dòng)選擇。
在項(xiàng)目中改變開(kāi)發(fā)/測(cè)試集或評(píng)估指標(biāo)是很常見(jiàn)的。擁有一個(gè)初始的開(kāi)發(fā)/測(cè)試集和評(píng)估指標(biāo)能幫助你快速迭代。如果你發(fā)現(xiàn)開(kāi)發(fā)/測(cè)試集和評(píng)估指標(biāo)使你的團(tuán)隊(duì)遠(yuǎn)離了正確方向,這不是什么大問(wèn)題!只需要改變它們,并確保你的團(tuán)隊(duì)知道新的方向就可以。
12.結(jié)語(yǔ):建立開(kāi)發(fā)集和測(cè)試集
· 你希望在未來(lái)獲得什么樣的數(shù)據(jù)、并且想在上面做得好?從能反映出這個(gè)的數(shù)據(jù)分布中選擇開(kāi)發(fā)集和測(cè)試集。這可能不同于你的訓(xùn)練數(shù)據(jù)分布。
· 如果可能的話,選擇來(lái)自同一分布的開(kāi)發(fā)集和測(cè)試集。
· 為你的團(tuán)隊(duì)選擇單一數(shù)字評(píng)估指標(biāo)進(jìn)行優(yōu)化。如果你關(guān)心多個(gè)目標(biāo),考慮把它們合并到一個(gè)公式中(例如平均多個(gè)錯(cuò)誤度量),或設(shè)定滿足指標(biāo)和優(yōu)化指標(biāo)。
· 機(jī)器學(xué)習(xí)是一個(gè)高度迭代的過(guò)程:在你發(fā)現(xiàn)滿意的方法之前,你可能需要嘗試很多的想法。
· 具有開(kāi)發(fā)/測(cè)試集和單一數(shù)字評(píng)估指標(biāo)可以幫助你快速評(píng)估算法,然后更快速的迭代。
· 當(dāng)開(kāi)始一個(gè)全新的應(yīng)用時(shí),嘗試快速建立開(kāi)發(fā)/測(cè)試集和評(píng)估指標(biāo),最好在一周之內(nèi)。當(dāng)然,在成熟的應(yīng)用程序上花費(fèi)更長(zhǎng)的時(shí)間也是可以的。
· 按照70%:30%的舊比例劃分訓(xùn)練/測(cè)試集不適用于你擁有大量數(shù)據(jù)的情況;開(kāi)發(fā)集和測(cè)試集可以占有遠(yuǎn)小于30%的數(shù)據(jù)量。
· 你的開(kāi)發(fā)集應(yīng)足夠大,大到能檢測(cè)出你的算法準(zhǔn)確性上的有意義的改變,但沒(méi)必要更大。你的測(cè)試集也應(yīng)足夠大,大到能給你系統(tǒng)的最后性能一個(gè)有把握的評(píng)估。
· 如果你的開(kāi)發(fā)集和評(píng)估指標(biāo)使你的團(tuán)隊(duì)遠(yuǎn)離了正確方向,快速改變它:(i)如果你過(guò)擬合了開(kāi)發(fā)集,那么就去獲得更多的開(kāi)發(fā)集數(shù)據(jù)。(ii)如果你所關(guān)心的實(shí)際分布和開(kāi)發(fā)/測(cè)試集的分布不同,那么就去獲得新的開(kāi)發(fā)/測(cè)試集數(shù)據(jù)。(iii)如果你的評(píng)估指標(biāo)不再能衡量對(duì)你來(lái)說(shuō)最重要的東西,那么就改變?cè)u(píng)估指標(biāo)。
13.快速構(gòu)建第一個(gè)系統(tǒng),然后迭代
你想建立一個(gè)新的反垃圾郵件系統(tǒng)。你的團(tuán)隊(duì)有以下幾個(gè)想法:
· 收集一個(gè)含有大量垃圾郵件的訓(xùn)練集。例如,設(shè)置一個(gè)“蜜罐”:給已知垃圾郵件發(fā)送者故意發(fā)送虛假的電子郵件地址,這樣就可以自動(dòng)收集他們發(fā)送到這些地址的垃圾郵件。
· 開(kāi)發(fā)理解電子郵件文本內(nèi)容的功能。
· 開(kāi)發(fā)理解電子郵件信封/標(biāo)題特性的功能,以顯示消息經(jīng)過(guò)的網(wǎng)絡(luò)服務(wù)器集。
· 其他。
盡管我在反垃圾郵件上做過(guò)大量工作,但我仍然很難選定其中的一個(gè)方向。如果你不是該應(yīng)用領(lǐng)域的專家,那將更難。
所以,開(kāi)始的時(shí)候不要試圖設(shè)計(jì)和構(gòu)建完美的系統(tǒng)。相反,應(yīng)該快速構(gòu)建和訓(xùn)練出一個(gè)基本系統(tǒng)——也許是在短短的幾天內(nèi)5。即使這個(gè)基本系統(tǒng)與你所能構(gòu)建的“最佳”系統(tǒng)相去甚遠(yuǎn),研究該基本系統(tǒng)的功能仍然很有價(jià)值:你將很快找到最值得你投入時(shí)間的方向的線索。接下來(lái)的幾章將告訴您如何去解讀這些線索。
5(此建議旨在幫助希望構(gòu)建AI應(yīng)用程序的讀者,而不是那些以發(fā)表學(xué)術(shù)論文為目標(biāo)的讀者。稍后我將會(huì)回到學(xué)術(shù)主題。)
14.偏誤分析:查看開(kāi)發(fā)集樣本來(lái)評(píng)估想法
當(dāng)你使用貓app時(shí),你注意到一些狗的圖片被錯(cuò)誤識(shí)別成了貓。一些狗長(zhǎng)的像貓!
一個(gè)團(tuán)隊(duì)成員建議和第三方軟件合作,使系統(tǒng)可以更好地處理狗樣本。這些改變需要花費(fèi)一個(gè)月的時(shí)間,并且團(tuán)隊(duì)成員熱衷于這一方案。你應(yīng)該要求他們這樣做嗎?
在投資這個(gè)任務(wù)一個(gè)之前,我建議你首先評(píng)估一下它實(shí)際上會(huì)提高多少系統(tǒng)的準(zhǔn)確率。然后你才能更加理性地決定這是否值得花費(fèi)這一個(gè)月的開(kāi)發(fā)時(shí)間,還是使用這段時(shí)間做些別的事情更好。
具體來(lái)說(shuō),你可以做以下事情:
· 獲取100個(gè)系統(tǒng)錯(cuò)誤分類的樣例。比如,系統(tǒng)出錯(cuò)的例子。
· 手動(dòng)查看這些樣本,計(jì)算其中有多少比例是狗的圖像。
查看錯(cuò)誤分類樣本的這一過(guò)程被稱為偏誤分析(error analysis)。在該案例中,如果你發(fā)現(xiàn)被錯(cuò)誤分類的圖像中只有5%是狗,那么無(wú)論你在狗的圖像上如何改進(jìn)你的算法,你都不會(huì)消除超過(guò)5%的錯(cuò)誤。換句話說(shuō),5%是上述建議能夠達(dá)到的“天花板”(也就是最大可能的改進(jìn)上限)。因此,如果整個(gè)系統(tǒng)當(dāng)前的準(zhǔn)確率為90%(10%的錯(cuò)誤率),這一改進(jìn)最多可能得到90.5%的準(zhǔn)確率(或者9.5%的錯(cuò)誤率,比原來(lái)10%的錯(cuò)誤率少5%)。
相反,如果你發(fā)現(xiàn)50%的錯(cuò)誤圖像都是狗,那么你應(yīng)該更相信第三方軟件的介入能獲得很大的效果。它能將準(zhǔn)確率從90%提升到95%(錯(cuò)誤率相對(duì)減少50%,從10%降到5%)。
這種偏誤分析的簡(jiǎn)單計(jì)算過(guò)程能夠給你一個(gè)快速的方法,來(lái)決定與第三方機(jī)構(gòu)合作解決“狗”問(wèn)題是否值得。它為決定是否應(yīng)該做出這筆投資提供了一個(gè)定量的基準(zhǔn)。
偏誤分析通常會(huì)幫你選出不同的方向中哪些更有前景。我看到許多工程師不愿意進(jìn)行偏誤分析。相比于考量一個(gè)想法是否值得花時(shí)間投入,直接進(jìn)行并實(shí)現(xiàn)通常會(huì)更讓人感到更刺激。這是一個(gè)常見(jiàn)的錯(cuò)誤:這可能導(dǎo)致你的團(tuán)隊(duì)花費(fèi)一個(gè)月時(shí)間只獲得很少的收益。
手動(dòng)檢查100個(gè)樣本不會(huì)花費(fèi)太長(zhǎng)時(shí)間。即使你每分鐘只看一張圖片,兩小時(shí)內(nèi)就可以完成。這兩個(gè)小時(shí)比你白白浪費(fèi)一個(gè)月時(shí)間劃算多了。
偏誤分析(Error Analysis)是指檢查開(kāi)發(fā)集中被算法錯(cuò)誤分類的樣本的過(guò)程,以便了解錯(cuò)誤產(chǎn)生的深層原因。它不僅可以幫助你重點(diǎn)發(fā)展項(xiàng)目,正如該例子所述,而且還能啟發(fā)一些新的方向,下面我們就會(huì)討論該內(nèi)容。接下來(lái)的幾個(gè)章節(jié)還將介紹一些偏誤分析的最佳實(shí)踐案例。
15.在偏誤分析過(guò)程中并行評(píng)估多個(gè)想法
你的團(tuán)隊(duì)有以下幾個(gè)想法來(lái)改進(jìn)貓檢測(cè)器:
· 修復(fù)算法將狗錯(cuò)認(rèn)為是貓的問(wèn)題。
· 修復(fù)算法將大型貓科類動(dòng)物(獅子、豹等)被錯(cuò)認(rèn)為是家貓(寵物)的問(wèn)題。
· 提高系統(tǒng)在模糊圖像上的表現(xiàn)。
· ……
你可以并行且有效地評(píng)估所有這些想法。我通常會(huì)創(chuàng)建一個(gè)電子表格,查看100個(gè)分類錯(cuò)誤的開(kāi)發(fā)集樣本并填寫在表格上,同時(shí)記下可以幫助我記住具體樣本的注釋。為了演示這個(gè)過(guò)程,讓我們來(lái)看一下你可能生成的一個(gè)由4個(gè)示例組成的小開(kāi)發(fā)集的電子表格:
表格中圖片3在大型貓科動(dòng)物和模糊圖片兩列都被勾選了。此外,由于一個(gè)例子可能與多個(gè)類別相關(guān)聯(lián),底部的百分比不一定達(dá)得到100%。
盡管你可能將這個(gè)過(guò)程首先描述為類別分類(狗、大型貓科動(dòng)物和模糊圖片),然后查看樣例并對(duì)它們進(jìn)行分類。實(shí)踐中,當(dāng)你在查看樣例時(shí),可能受到啟發(fā)而提出一些新的錯(cuò)誤類別。例如,也許查看過(guò)十幾張圖像后,你發(fā)現(xiàn)許多錯(cuò)誤的圖片都經(jīng)過(guò)Instagram 過(guò)濾器的預(yù)處理。你可以返回并在電子表格中添加“Instagram”列。手動(dòng)查看算法出錯(cuò)的樣例,并思考人是如何/是否能正確地分類這些樣例,這通常會(huì)啟發(fā)你想出新的類別和解決辦法。
最有用的錯(cuò)誤類別是你有改進(jìn)想法的錯(cuò)誤類別。例如,如果你有辦法“撤銷” Instagram 過(guò)濾器從而恢復(fù)原始圖像,那么添加Instagram類別是最有用的。但是你不必只局限于你已經(jīng)有想法去改進(jìn)的錯(cuò)誤類別;這個(gè)過(guò)程的目標(biāo)是建立你對(duì)最有希望關(guān)注的領(lǐng)域的直覺(jué)。
偏誤分析是一個(gè)迭代的過(guò)程。如果開(kāi)始的時(shí)候你在腦海里沒(méi)有任何分類,不要擔(dān)心!查看一些圖片之后,你就可能會(huì)提出一些關(guān)于錯(cuò)誤類別的想法。手動(dòng)分類一些圖片之后,你就可能會(huì)想出一些新的錯(cuò)誤類別,然后根據(jù)新的類別再返回重新檢查這些圖片。以此類推。
假如你完成了對(duì)100個(gè)錯(cuò)誤分類的開(kāi)發(fā)集樣本的偏誤分析,并得到以下結(jié)果:
現(xiàn)在你知道了,解決狗分類錯(cuò)誤的項(xiàng)目可以減少最多8%的錯(cuò)誤。致力于大型貓科動(dòng)物和模糊的圖片對(duì)降低錯(cuò)誤率幫助更大。所以,你可能會(huì)挑選后兩者中的一個(gè)來(lái)進(jìn)行處理。如果你的團(tuán)隊(duì)有足夠多的人可以同時(shí)展開(kāi)多個(gè)方向,你也可以讓一些工程師處理大型貓科動(dòng)物圖片,另外一些解決模糊圖像。
偏誤分析并不會(huì)有一個(gè)明確的數(shù)學(xué)公式來(lái)告訴你什么才是最高優(yōu)先級(jí)的任務(wù)。你還必須考慮你希望在不同錯(cuò)誤類別上取得多少進(jìn)展,以及處理每個(gè)錯(cuò)誤類別所需要的工作量。
16.清理貼錯(cuò)標(biāo)簽的開(kāi)發(fā)和測(cè)試集樣本
在偏誤分析中,你可能會(huì)注意到開(kāi)發(fā)集中的一些樣本被錯(cuò)誤標(biāo)記了。這里所說(shuō)的“錯(cuò)誤標(biāo)記”,是指即使在算法遇到它之前,圖片已經(jīng)被打標(biāo)人員貼上了錯(cuò)誤的標(biāo)簽。即:樣本 (x,y) 中的類別標(biāo)簽y的值不正確。例如,也許一些不是貓的圖片被錯(cuò)貼標(biāo)簽為包含貓,反之亦然。如果你懷疑錯(cuò)誤標(biāo)記的圖像占比很大,添加一個(gè)類別來(lái)記錄有錯(cuò)誤標(biāo)記的樣本的占比:
你應(yīng)該糾正開(kāi)發(fā)集中的這些標(biāo)簽嗎?記住,開(kāi)發(fā)集的目的是為了幫你快速評(píng)估算法,以便你可以判斷算法A或B哪個(gè)更好。如果被錯(cuò)誤標(biāo)注的開(kāi)發(fā)集的一小部分妨礙你做出這些判斷,那么花時(shí)間去修正錯(cuò)誤標(biāo)注的開(kāi)發(fā)集標(biāo)簽是值得的。
例如,假設(shè)你的分類器表現(xiàn)如下:
· 開(kāi)發(fā)集的整體準(zhǔn)確率……90%(10%整體錯(cuò)誤率)
· 樣本貼錯(cuò)標(biāo)簽導(dǎo)致的錯(cuò)誤……0.6%(開(kāi)發(fā)集錯(cuò)誤率中的6%)
· 其他原因?qū)е碌腻e(cuò)誤……9.4%(開(kāi)發(fā)集錯(cuò)誤率中的94%)
在這里,由于錯(cuò)誤標(biāo)注導(dǎo)致的0.6%的不準(zhǔn)確性,相對(duì)于你可以改進(jìn)的9.4%的錯(cuò)誤而言,可能沒(méi)有那么重要。手動(dòng)修復(fù)開(kāi)發(fā)集中錯(cuò)誤標(biāo)注的圖像并沒(méi)有什么壞處,但這樣做并不重要:不知道系統(tǒng)是否有10%還是9.4%的整體錯(cuò)誤率可能沒(méi)什么問(wèn)題。
假設(shè)你不斷改進(jìn)貓分類器并達(dá)到以下性能:
· 開(kāi)發(fā)集的整體準(zhǔn)確率……98.0%(2.0%整體錯(cuò)誤率)
· 樣本貼錯(cuò)標(biāo)簽導(dǎo)致的錯(cuò)誤……0.6%(開(kāi)發(fā)集錯(cuò)誤率中的30%)
· 其他原因?qū)е碌腻e(cuò)誤……1.4%(開(kāi)發(fā)集錯(cuò)誤率中的70%)
30%的錯(cuò)誤是由于錯(cuò)誤標(biāo)注的開(kāi)發(fā)集圖像造成的,這將會(huì)為您的準(zhǔn)確率估計(jì)增加顯著的錯(cuò)誤。現(xiàn)在去提高開(kāi)發(fā)集中標(biāo)簽的質(zhì)量是有價(jià)值的。處理錯(cuò)誤標(biāo)注的樣本將幫助您算出分類器的錯(cuò)誤是接近1.4%還是2%——這是一個(gè)相對(duì)顯著的差異。
開(kāi)始容忍一些錯(cuò)誤標(biāo)記的開(kāi)發(fā)集樣本并不罕見(jiàn),只是在系統(tǒng)改進(jìn)之后才改變主意,這樣錯(cuò)誤標(biāo)記的樣本相對(duì)于錯(cuò)誤集的比例就會(huì)增加。
最后一章解釋了如何通過(guò)算法的提升來(lái)改進(jìn)錯(cuò)誤類別,例如狗、大型貓科動(dòng)物和模糊圖片。在本章中你會(huì)了解到,你也可以通過(guò)改善數(shù)據(jù)標(biāo)簽在錯(cuò)誤標(biāo)記的類別上工作。
無(wú)論你采用什么方法來(lái)修正開(kāi)發(fā)集標(biāo)簽,記得也將其用于測(cè)試集標(biāo)簽,以便開(kāi)發(fā)集和測(cè)試集繼續(xù)服從統(tǒng)一分布。將開(kāi)發(fā)集和測(cè)試集固定在一起可以避免我們?cè)诘诹轮杏懻摰膯?wèn)題,即你的團(tuán)隊(duì)優(yōu)化了開(kāi)發(fā)集的性能,只是到后來(lái)才意識(shí)到他們?cè)诟鶕?jù)不同的測(cè)試集進(jìn)行不同的標(biāo)準(zhǔn)判斷。
如果你決定提升標(biāo)簽的質(zhì)量,那么請(qǐng)考慮仔細(xì)檢查系統(tǒng)錯(cuò)誤分類的樣本的標(biāo)簽,以及正確分類樣本的標(biāo)簽。在一個(gè)樣本中,原始標(biāo)簽和學(xué)習(xí)算法有可能都是錯(cuò)的。如果只是修正系統(tǒng)已經(jīng)錯(cuò)誤分類的樣本的標(biāo)簽,可能會(huì)在評(píng)估中引入誤差。如果你有1000個(gè)開(kāi)發(fā)集樣本,并且分類器準(zhǔn)確率為98%,那么檢查錯(cuò)誤分類的20個(gè)樣本比檢查正確分類的所有980個(gè)樣本要容易的多。因?yàn)樵趯?shí)踐中只檢查錯(cuò)誤分類的樣本比較容易,所以偏差會(huì)蔓延到一些開(kāi)發(fā)集中。如果你只對(duì)開(kāi)發(fā)產(chǎn)品和應(yīng)用感興趣,那么這種偏差是可以接受的,但如果你計(jì)劃在學(xué)術(shù)研究論文中使用該結(jié)果,或者需要對(duì)測(cè)試集的準(zhǔn)確性進(jìn)行完全無(wú)偏見(jiàn)的測(cè)量,這將會(huì)是一個(gè)問(wèn)題。
17.如果你有一個(gè)大的開(kāi)發(fā)集,將其分成兩個(gè)子集,只著眼于其中的一個(gè)
假設(shè)你有一個(gè)含有5000個(gè)樣本的大開(kāi)發(fā)集,其中有20%的錯(cuò)誤率。這樣,算法將對(duì)約1000個(gè)開(kāi)發(fā)圖片進(jìn)行錯(cuò)誤分類。手動(dòng)檢查1000張圖片會(huì)花費(fèi)很長(zhǎng)時(shí)間,所以我們可能會(huì)決定在偏誤分析中不使用所有圖片。
在這種情況下,我會(huì)明確地將開(kāi)發(fā)集分成兩個(gè)子集,只看其中一個(gè),另一個(gè)不看。你將會(huì)很快的過(guò)擬合你手動(dòng)查看的那部分。你可以使用未手動(dòng)查看的部分來(lái)調(diào)參。
繼續(xù)上面的例子,在該例子中算法將5000個(gè)開(kāi)發(fā)集樣本中的1000個(gè)進(jìn)行了錯(cuò)誤分類。假設(shè)我們想手動(dòng)檢查約100個(gè)錯(cuò)誤樣本(錯(cuò)誤樣本的10%)進(jìn)行偏誤分析。你應(yīng)該隨機(jī)選擇10%的開(kāi)發(fā)集,并將其放入我們口中的眼球開(kāi)發(fā)集(Eyeball dev set)中,以提醒我們自己,我們正在用眼睛看它。(對(duì)于語(yǔ)音識(shí)別項(xiàng)目,你可以在其中聽(tīng)音頻剪輯,或許可以將這個(gè)數(shù)據(jù)集稱為耳朵開(kāi)發(fā)集)。因此,眼球開(kāi)發(fā)集有500個(gè)樣本,其中我們預(yù)計(jì)算法會(huì)錯(cuò)誤分類約100個(gè)。
開(kāi)發(fā)集的第二個(gè)子集叫做黑盒開(kāi)發(fā)集(Blackbox dev set),它將擁有剩余的4500個(gè)樣本。你可以使用黑盒開(kāi)發(fā)集,通過(guò)測(cè)量它們的錯(cuò)誤率來(lái)自動(dòng)評(píng)估分類器。也可以使用它來(lái)選擇算法或調(diào)超參。但是,你應(yīng)該避免用眼睛去看它。我們使用術(shù)語(yǔ)“黑盒”是因?yàn)槲覀冎皇褂脭?shù)據(jù)集的子集來(lái)獲得分類器的“黑盒”評(píng)估。
為什么我們將開(kāi)發(fā)集明確分為眼球開(kāi)發(fā)集和黑盒開(kāi)發(fā)集呢?因?yàn)槟銜?huì)獲得眼球開(kāi)發(fā)集中樣本的直觀認(rèn)識(shí),你就會(huì)開(kāi)始更快的過(guò)擬合眼球開(kāi)發(fā)集。如果你發(fā)現(xiàn)眼球開(kāi)發(fā)集比黑盒開(kāi)發(fā)集性能提升的更快,你已經(jīng)過(guò)擬合眼球開(kāi)發(fā)集了。這種情況下,你可能需要丟棄它并找一個(gè)新的眼球開(kāi)發(fā)集,可以通過(guò)將更多黑盒開(kāi)發(fā)集中的樣本移到眼球開(kāi)發(fā)集中,也可以通過(guò)獲取新的標(biāo)注數(shù)據(jù)來(lái)獲得。
將開(kāi)發(fā)集明確地分為眼球和黑盒可以讓你知道手動(dòng)偏誤分析過(guò)程中什么時(shí)候會(huì)開(kāi)始導(dǎo)致數(shù)據(jù)的眼球部分過(guò)擬合。
18.眼球和黑盒開(kāi)發(fā)集應(yīng)該多大?
你的眼球開(kāi)發(fā)集應(yīng)該足夠大,大到可以讓你了解到算法的主要錯(cuò)誤類別。如果你正在從事一項(xiàng)人類表現(xiàn)很好的任務(wù)(如識(shí)別圖像中的貓),以下是一些粗略的指導(dǎo)方針:
· 一個(gè)使你的分類器犯錯(cuò)10次的眼球開(kāi)發(fā)集將被認(rèn)為是非常小的。只有10個(gè)錯(cuò)誤,很難準(zhǔn)確估計(jì)不同錯(cuò)誤類別的影響。但如果您的數(shù)據(jù)非常少,并且無(wú)法將更多的數(shù)據(jù)放入眼球開(kāi)發(fā)集,那么有總比沒(méi)有好,這將有助于項(xiàng)目的優(yōu)先順序。
· 如果分類器在眼球開(kāi)發(fā)集上樣本上犯了約20個(gè)錯(cuò)誤,你將會(huì)開(kāi)始大致了解主要的錯(cuò)誤來(lái)源。
· 如果有約50個(gè)錯(cuò)誤,你將會(huì)比較好的了解主要的錯(cuò)誤來(lái)源。
· 如果有約100個(gè)錯(cuò)誤,你將會(huì)很清楚主要的錯(cuò)誤來(lái)源。我見(jiàn)過(guò)有人手動(dòng)分析更多的錯(cuò)誤——有時(shí)候多達(dá)500個(gè)。只要你有足夠多的數(shù)據(jù),這是沒(méi)有壞處的。
假設(shè)你的分類器有5%的錯(cuò)誤率。為了確保在眼球開(kāi)發(fā)集中有約100個(gè)錯(cuò)誤標(biāo)記的樣本,眼球開(kāi)發(fā)集應(yīng)該有約2000個(gè)樣本(因?yàn)?.05 * 2000 = 100)。分類器的錯(cuò)誤率越低,為了獲得足夠多的錯(cuò)誤來(lái)分析,眼球開(kāi)發(fā)集就需要越大。
如果你正在做一個(gè)連人都做不好的任務(wù),那么檢查眼球開(kāi)發(fā)集將不會(huì)有什么幫助,因?yàn)楹茈y找出算法不能正確分類一個(gè)樣本的原因。這種情景下,你可能會(huì)忽略眼球開(kāi)發(fā)集。我們將在后續(xù)章節(jié)中討論這些問(wèn)題的指導(dǎo)方針。
黑盒開(kāi)發(fā)集該如何?我們之前說(shuō)過(guò),開(kāi)發(fā)集有約1000-10000個(gè)樣本是正常的。為了完善這個(gè)表述,盡管更多的數(shù)據(jù)幾乎沒(méi)什么壞處,一個(gè)有1000-10000個(gè)樣本的黑盒開(kāi)發(fā)集通常會(huì)為你提供足夠的數(shù)據(jù)去調(diào)超參和選擇模型。一個(gè)含有100個(gè)樣本的黑盒開(kāi)發(fā)集比較小,但仍然有用。
如果你有一個(gè)小的開(kāi)發(fā)集,那么你可能沒(méi)有足夠的數(shù)據(jù)將其分成足夠大的眼球和黑盒開(kāi)發(fā)集來(lái)達(dá)到目的。相反,你的整個(gè)開(kāi)發(fā)集可能不得不用作眼球開(kāi)發(fā)集——也就是說(shuō),你將手動(dòng)檢查所有的開(kāi)發(fā)集數(shù)據(jù)。
在眼球和黑盒開(kāi)發(fā)集之間,我認(rèn)為眼球開(kāi)發(fā)集更重要(假設(shè)你正在研究一個(gè)人類能夠很好解決的問(wèn)題,檢查這些樣本能幫你獲得洞察力)。如果你只有一個(gè)眼球開(kāi)發(fā)集,你可以在這個(gè)開(kāi)發(fā)集上進(jìn)行偏誤分析、模型選擇和調(diào)超參。只有一個(gè)眼球開(kāi)發(fā)集的缺點(diǎn)是過(guò)擬合開(kāi)發(fā)集的風(fēng)險(xiǎn)更大。
如果你有數(shù)據(jù)的充足訪問(wèn)權(quán)限,那么眼球開(kāi)發(fā)集的大小將主要取決于你有時(shí)間去手動(dòng)分析的樣本的數(shù)量。例如,我很少看到有人手動(dòng)分析超過(guò)1000個(gè)錯(cuò)誤。
19.結(jié)語(yǔ):基本偏誤分析
· 當(dāng)你開(kāi)始一個(gè)新項(xiàng)目時(shí),尤其是在一個(gè)你不是專家的領(lǐng)域,很難正確猜測(cè)出最有前景的方向。
· 所以,不要在開(kāi)始試圖設(shè)計(jì)和構(gòu)建一個(gè)完美的系統(tǒng)。相反,應(yīng)盡可能快(可能在短短幾天內(nèi))的構(gòu)建和訓(xùn)練一個(gè)基本系統(tǒng)。然后使用偏誤分析去幫助你識(shí)別最有前景的方向,并通過(guò)迭代改進(jìn)你的算法。
· 通過(guò)手動(dòng)檢查約100個(gè)算法錯(cuò)誤分類的開(kāi)發(fā)集樣本來(lái)執(zhí)行偏誤分析,并計(jì)算主要的錯(cuò)誤類別。用這些信息來(lái)確定優(yōu)先修復(fù)哪種類型的錯(cuò)誤。
· 考慮將開(kāi)發(fā)集分為手動(dòng)檢查的眼球開(kāi)發(fā)集和不手動(dòng)檢查的黑盒開(kāi)發(fā)集。如果在眼球開(kāi)發(fā)集上的性能比在黑盒開(kāi)發(fā)集上好很多,那么你已經(jīng)過(guò)擬合眼球開(kāi)發(fā)集了,并且應(yīng)該考慮為其添加更多的數(shù)據(jù)。
· 眼球開(kāi)發(fā)集應(yīng)該足夠大,以便于算法有足夠多的錯(cuò)誤分類樣本供你分析。對(duì)很多應(yīng)用來(lái)說(shuō),含有1000-10000個(gè)樣本的黑盒開(kāi)發(fā)集已經(jīng)足夠了。
· 如果你的開(kāi)發(fā)集沒(méi)有大到可以按照這種方式進(jìn)行拆分的程度,那么就使用眼球開(kāi)發(fā)集來(lái)用于手動(dòng)偏誤分析、模型選擇和調(diào)超參。
20. 偏差和方差:錯(cuò)誤的兩大來(lái)源
假設(shè)你的訓(xùn)練集、開(kāi)發(fā)集和測(cè)試集都來(lái)自相同的分布。那么你應(yīng)該試圖去獲取更多的訓(xùn)練數(shù)據(jù),因?yàn)檫@樣能只提高性能,對(duì)嗎?
盡管有更多的數(shù)據(jù)是沒(méi)有壞處的,但是也不總是如我們期望的那樣有幫助。獲取更多的數(shù)據(jù)可能是浪費(fèi)時(shí)間。所以,你需要決定何時(shí)該加數(shù)據(jù),何時(shí)不用這么麻煩。
機(jī)器學(xué)習(xí)中有兩個(gè)主要錯(cuò)誤來(lái)源:偏差和方差。理解它們將有助于你決定添加數(shù)據(jù)以及其他提高性能的策略是否是對(duì)時(shí)間的良好利用。
假設(shè)你希望構(gòu)建一個(gè)5%錯(cuò)誤率的貓識(shí)別器。目前,你的訓(xùn)練集錯(cuò)誤率為15%,并且你的開(kāi)發(fā)集錯(cuò)誤率為16%。在這種情況下,添加訓(xùn)練數(shù)據(jù)可能不會(huì)有太多幫助。你應(yīng)該著眼于其他改變。實(shí)際上,在你的訓(xùn)練集上添加更多的樣本只會(huì)讓你的算法難以在訓(xùn)練集上做的更好。(我們會(huì)在后面的章節(jié)中說(shuō)明原因。)
如果你在訓(xùn)練集上的錯(cuò)誤率是15%(85%的準(zhǔn)確率),但是你的目標(biāo)是5%錯(cuò)誤率(95%準(zhǔn)確率),那么第一個(gè)要解決的問(wèn)題是提高算法在訓(xùn)練集上的性能。你的開(kāi)發(fā)/測(cè)試集上的性能通常比在訓(xùn)練集上要差。所以,如果算法在見(jiàn)過(guò)的樣本上得到85%的準(zhǔn)確率,那么是不可能在沒(méi)見(jiàn)過(guò)的樣本上得到95%的準(zhǔn)確率的。
假設(shè)如上所述你的算法在開(kāi)發(fā)集上有16%的錯(cuò)誤率(84%的準(zhǔn)確率)。我們將這16%的錯(cuò)誤分為兩部分:
· 第一,算法在訓(xùn)練集上的錯(cuò)誤率。在該例中,它是15%。我們非正式地將此認(rèn)為是算法的偏差(bias)。
· 第二,算法在開(kāi)發(fā)(或測(cè)試)集上比訓(xùn)練集上差多少。在該例中,開(kāi)發(fā)集比訓(xùn)練集差1%。我們非正式地將此認(rèn)為是算法的方差(variance)6。
對(duì)學(xué)習(xí)算法的一些修改能解決錯(cuò)誤的第1個(gè)組成部分——偏差,并且提高算法在訓(xùn)練集上的性能;一些修改能解決錯(cuò)誤的第2個(gè)組成部分——方差,并幫助算法從訓(xùn)練集到開(kāi)發(fā)/測(cè)試集上更好的泛化7。為了選擇最有希望的改變,了解這兩組錯(cuò)誤中哪個(gè)更亟待解決是很有用的。
開(kāi)發(fā)關(guān)于偏差和方差的良好直覺(jué)將幫助你為算法選擇有效的改變。
備注:
6(統(tǒng)計(jì)領(lǐng)域?qū)ζ詈头讲钣懈降亩x,我們不用擔(dān)心這些。粗略地說(shuō),偏差是當(dāng)你有一個(gè)非常大的訓(xùn)練集時(shí),你的算法在訓(xùn)練集上的錯(cuò)誤率。方差是與此設(shè)置中的訓(xùn)練集相比,你在測(cè)試集上差多少。當(dāng)你的誤差衡量是均方差(mean squared error)時(shí),你可以寫下指定這兩個(gè)量的公式,并證明總誤差 = 偏差 + 方差(Total Error = Bias + Variance)。但是你的目的是如何在機(jī)器學(xué)習(xí)問(wèn)題上取得進(jìn)展,這里給出的偏差和方差的更非正式的定義就足夠了。)
7(這里還有一些通過(guò)對(duì)系統(tǒng)架構(gòu)做出大的改變的方法,能夠同時(shí)減少偏差和方差。但是這些方法往往難以識(shí)別和實(shí)施。)
21 關(guān)于偏差和方差的例子
以我們的貓咪分類任務(wù)為例。一個(gè)理想的分類器(比如人)可能會(huì)用幾乎完美的表現(xiàn)來(lái)完成這個(gè)任務(wù)。
假設(shè)你的算法可以達(dá)到以下標(biāo)準(zhǔn):
訓(xùn)練集誤差 = 1%
開(kāi)發(fā)集錯(cuò)誤 = 11%
這會(huì)帶來(lái)什么問(wèn)題呢?根據(jù)之前的章節(jié)中我們給出的定義,我們可以估計(jì)出偏差為1%,方差為10%(=11%-1%)。因此,這帶來(lái)了高方差。該分類器有著很低的訓(xùn)練誤差,但是它并不能一般化為開(kāi)發(fā)集。我們稱之為過(guò)度擬合。
現(xiàn)在再來(lái)看看這個(gè):
訓(xùn)練集誤差 = 15%
開(kāi)發(fā)集錯(cuò)誤 = 16%
我們可以估計(jì)出偏差為15%然后方差為1%。這個(gè)分類器對(duì)訓(xùn)練集的擬合很差,誤差為15%,但它在開(kāi)發(fā)集上的誤差和訓(xùn)練誤差相差無(wú)幾。 因此,該分類器具有高偏差低方差。 我們說(shuō)這個(gè)算法是欠擬合的。
我們?cè)賮?lái)看一個(gè)例子:
訓(xùn)練集誤差 = 15%
開(kāi)發(fā)集錯(cuò)誤 = 30%
我們可以估計(jì)出偏差和方差均為15%。該分類器具有高偏差和高方差:它在訓(xùn)練集上表現(xiàn)不佳,因此具有高偏差,并且其在開(kāi)發(fā)集上的性能更差,因此它也具有高方差。 過(guò)度擬合/欠擬合術(shù)語(yǔ)很難應(yīng)用于此,因?yàn)樵摲诸惼魍瑫r(shí)過(guò)度擬合和欠擬合。
我們最后再來(lái)看一個(gè)例子:
訓(xùn)練集誤差 = 0.5%
開(kāi)發(fā)集錯(cuò)誤 = 1%
這個(gè)分類器做得很不錯(cuò),不僅低偏差而且低方差。祝賀你以極佳的表現(xiàn)完成了這個(gè)任務(wù)。
22 與最佳錯(cuò)誤率做比較
在我們的貓咪識(shí)別的例子中,“理想的”錯(cuò)誤率——由“最佳”分類器所實(shí)現(xiàn)的——將近0%。一個(gè)人在看照片的時(shí)候幾乎總是可以分辨出來(lái)里面是不是有一只貓的;因此我們希望機(jī)器也可以做到這個(gè)地步。
其他的問(wèn)題則有點(diǎn)兒難度。舉個(gè)例子,假設(shè)你正在構(gòu)建一個(gè)語(yǔ)音識(shí)別系統(tǒng),發(fā)現(xiàn)14%的音頻片段具有極多的背景噪音或者是非常的難以理解,即使是人類也無(wú)法識(shí)別所說(shuō)的內(nèi)容。在這種情況下,即便是“最佳”語(yǔ)音識(shí)別系統(tǒng)也會(huì)有14%左右的錯(cuò)誤。
假設(shè)在剛才那個(gè)語(yǔ)音識(shí)別問(wèn)題上你的算法可以達(dá)到以下標(biāo)準(zhǔn):
訓(xùn)練集誤差 = 15%
開(kāi)發(fā)集錯(cuò)誤 = 30%
訓(xùn)練集的性能已經(jīng)接近14%的最佳錯(cuò)誤率。因此,在偏差或訓(xùn)練集性能方面沒(méi)有太大的改進(jìn)空間。但是,該算法并沒(méi)有很好地推廣到開(kāi)發(fā)集; 因此,由于變化導(dǎo)致的誤差存在很大的改進(jìn)空間。
這個(gè)例子類似于前一章的第三個(gè)例子,它的訓(xùn)練集誤差為15%,開(kāi)發(fā)集誤差為30%。 如果最佳錯(cuò)誤率為~0%,那么15%的訓(xùn)練誤差留下了很大的改進(jìn)空間。 這表明減少偏差的變化可能是富有成效的。 但如果最佳錯(cuò)誤率為14%,則相同的訓(xùn)練集性能告訴我們,分類器的偏差幾乎沒(méi)有改進(jìn)的余地。
對(duì)于最佳錯(cuò)誤率和0相差非常多的問(wèn)題,這里是算法錯(cuò)誤的更詳細(xì)分類。 繼續(xù)上面的語(yǔ)音識(shí)別例子,30%的總開(kāi)發(fā)集錯(cuò)誤可以分解如下(類似的分析可以應(yīng)用于測(cè)試集錯(cuò)誤):
最佳錯(cuò)誤率(“不可避免的偏差”):14%。假設(shè)我們決定,即使世界上最好的語(yǔ)音系統(tǒng),我們?nèi)匀粫?huì)有14%的錯(cuò)誤。我們可以將此視為機(jī)器學(xué)習(xí)算法偏差的“不可避免”部分。
可避免的偏差:1%。這是以訓(xùn)練集誤差和最佳誤差率之間的差值得來(lái)的。【注8】
方差:15%。訓(xùn)練集誤差和開(kāi)發(fā)集誤差的差值。
為了將其與我們之前的定義聯(lián)系起來(lái),偏差和可避免偏差的關(guān)系如下【注9】:
偏差 = 最佳錯(cuò)誤率(不可避免偏差)+可避免偏差
“可避免的偏差”反映了算法在訓(xùn)練集上的表現(xiàn)比“最佳分類器”差多少。
方差的概念與以前一樣。從理論上講,我們總是可以通過(guò)訓(xùn)練大量訓(xùn)練集將方差減少到接近零。因此,對(duì)于足夠大的數(shù)據(jù)集,所有方差都是“可避免的”,因此不存在“不可避免的方差”。
我們?cè)賮?lái)考慮一個(gè)例子,還是最佳錯(cuò)誤率為14%,然后我們滿足:
訓(xùn)練集誤差 = 15%
開(kāi)發(fā)集錯(cuò)誤 = 16%
在前一章中我們將其稱為高偏差分類器,現(xiàn)在我們可以說(shuō)它的可避免偏差為1%,方差約為1%。因此,該算法已經(jīng)做得很好,幾乎沒(méi)有改進(jìn)的余地。它只比最佳錯(cuò)誤率差2%。
我們從這些例子中看到,了解最佳錯(cuò)誤率有助于指導(dǎo)我們的后續(xù)步驟。在統(tǒng)計(jì)中,最佳錯(cuò)誤率也稱為貝葉斯錯(cuò)誤率或貝葉斯率。
那我們?cè)撛趺床拍苤雷罴彦e(cuò)誤率是多少呢?對(duì)于人類相當(dāng)擅長(zhǎng)的任務(wù),例如識(shí)別圖片或抄錄音頻片段,你可以要求人類提供標(biāo)簽,然后測(cè)量人工標(biāo)記相對(duì)于訓(xùn)練集的準(zhǔn)確性。這將給出最佳錯(cuò)誤率的估計(jì)。如果你正在解決甚至人類都難以解決的問(wèn)題(例如,預(yù)測(cè)該推薦什么電影或向用戶展示什么樣的廣告),則很難估計(jì)最佳錯(cuò)誤率。
在“與人類績(jī)效比較(第33至35章)”一節(jié)中,我將更詳細(xì)地討論將機(jī)器學(xué)習(xí)算法的性能與人類績(jī)效進(jìn)行比較的過(guò)程。
在最后幾章中,你學(xué)習(xí)了如何通過(guò)查看訓(xùn)練和開(kāi)發(fā)設(shè)置錯(cuò)誤率來(lái)估計(jì)可避免/不可避免的偏差和方差。下一章將討論如何使用此類分析中的見(jiàn)解來(lái)優(yōu)先考慮減少偏差的技術(shù)還是減少方差的技術(shù)。根據(jù)項(xiàng)目當(dāng)前的問(wèn)題是高(可避免)偏差還是高方差,你應(yīng)該應(yīng)用不同的技術(shù)。讓我們繼續(xù)!
【注8】如果此數(shù)字為負(fù)數(shù),則你在訓(xùn)練集上的表現(xiàn)優(yōu)于最佳錯(cuò)誤率。這意味著你在訓(xùn)練集上過(guò)度擬合,并且該算法已經(jīng)過(guò)度記憶訓(xùn)練集。你應(yīng)該關(guān)注讓方差減少的方法,而不是進(jìn)一步減少偏差。
【注9】選擇這些定義是為了傳達(dá)有關(guān)如何改進(jìn)學(xué)習(xí)算法的見(jiàn)解。這些定義與統(tǒng)計(jì)學(xué)家定義偏差和方差的方式不同。從技術(shù)上講,我在這里定義的“偏差”應(yīng)該被稱為“我們歸因于偏差的錯(cuò)誤”; 并且“可避免的偏差”應(yīng)該是“我們歸因于學(xué)習(xí)算法偏差超過(guò)了最佳錯(cuò)誤率的錯(cuò)誤”。
23 解決偏差和方差
解決偏差和方差問(wèn)題最簡(jiǎn)單的準(zhǔn)則如下:
如果你具有較高的可避免偏差,請(qǐng)?jiān)黾幽P偷拇笮?#xff08;例如,通過(guò)添加網(wǎng)絡(luò)層數(shù)/神經(jīng)元來(lái)增加神經(jīng)網(wǎng)絡(luò)的大小)。
如果你的方差很大,請(qǐng)為訓(xùn)練集增加數(shù)據(jù)。
如果你能夠無(wú)限制地增加神經(jīng)網(wǎng)絡(luò)大小并增加訓(xùn)練數(shù)據(jù),那很多機(jī)器學(xué)習(xí)的問(wèn)題都迎刃而解了。
但是實(shí)際上,增加模型的大小最終會(huì)導(dǎo)致計(jì)算問(wèn)題,因?yàn)橛?xùn)練非常大的模型很慢。你也可能無(wú)法獲得更多的訓(xùn)練數(shù)據(jù)。(即使在互聯(lián)網(wǎng)上,也只有有限張的貓片!)
不同的模型體系結(jié)構(gòu)——例如,不同的神經(jīng)網(wǎng)絡(luò)體系結(jié)構(gòu)——會(huì)針對(duì)你的問(wèn)題具有不同的偏差/方差。最近的許多深度學(xué)習(xí)研究已經(jīng)開(kāi)發(fā)出很多創(chuàng)新的模型架構(gòu)。因此,如果你使用神經(jīng)網(wǎng)絡(luò),學(xué)術(shù)文獻(xiàn)可以成為靈感的重要來(lái)源。github上還有很多很棒的開(kāi)源實(shí)現(xiàn)。但是,嘗試新架構(gòu)的結(jié)果比我們都簡(jiǎn)單準(zhǔn)則(增加模型大小和添加數(shù)據(jù))更難以預(yù)測(cè)。
增加模型大小通常會(huì)減少偏差,但也可能會(huì)增加方差和過(guò)度擬合的風(fēng)險(xiǎn)。但是,這種過(guò)度擬合問(wèn)題通常僅在你不使用正則化時(shí)出現(xiàn)。如果你有著精心設(shè)計(jì)的正則化方法,那么通常可以安全地增加模型的大小而不會(huì)增加過(guò)度擬合。
假設(shè)你正在應(yīng)用具有L2正則化或遺棄的深度學(xué)習(xí),其中正則化參數(shù)在開(kāi)發(fā)集上表現(xiàn)最佳。如果你增加模型大小,通常你的性能將保持不變或改善;它不太可能顯著惡化。避免使用更大模型的唯一原因是計(jì)算成本增加。
24 偏差與方差的權(quán)衡
你可能聽(tīng)說(shuō)過(guò)“偏差與方差權(quán)衡”。我們對(duì)大多數(shù)學(xué)習(xí)算法做出的改變,有一些可以減少偏差,但代價(jià)是增加方差,反之亦然。這在偏差和方差之間產(chǎn)生了“權(quán)衡”。
舉個(gè)例子,在神經(jīng)網(wǎng)絡(luò)中增加模型添加神經(jīng)元/層的大小,或這增加輸入的特征——通常會(huì)減少偏差,但可能會(huì)增加方差。對(duì)應(yīng)的,添加正則化通常會(huì)增加偏差但會(huì)減少方差。
在現(xiàn)代,我們經(jīng)常可以訪問(wèn)大量數(shù)據(jù),并且可以使用非常大的神經(jīng)網(wǎng)絡(luò)(深度學(xué)習(xí))。因此,我們做權(quán)衡的機(jī)會(huì)比較少,而且現(xiàn)在有更多的選擇來(lái)減少偏差而不會(huì)損害方差,反之亦然。
舉個(gè)例子,你通常可以增加神經(jīng)網(wǎng)絡(luò)大小并調(diào)整正則化方法以減少偏差而不會(huì)顯著增加方差。通過(guò)添加訓(xùn)練數(shù)據(jù),你通常還可以在不影響偏差的情況下減少方差。
如果選擇適合你任務(wù)的模型體系結(jié)構(gòu),則還可以同時(shí)減少偏差和方差。但是選擇這樣的架構(gòu)可能很困難。
在接下來(lái)的幾章中,我們將討論用于解決偏差和方差的其他特定技術(shù)。
25 降低可避免偏差的技術(shù)
如果你的學(xué)習(xí)算法可避免的偏差非常高,那么可以嘗試以下技術(shù):
增加模型大小(例如神經(jīng)元/層數(shù)):這種技術(shù)可以減少偏差,因?yàn)樗梢宰屇愀玫剡m應(yīng)訓(xùn)練集。如果你發(fā)現(xiàn)這會(huì)增加方差,那么就使用正則化,這通常會(huì)消除方差的增加。
根據(jù)錯(cuò)誤分析修改輸入特征:假設(shè)你的錯(cuò)誤分析激發(fā)你創(chuàng)建其他特征,幫助算法消除特定類別的錯(cuò)誤。 (我們將在下一章進(jìn)一步討論這個(gè)問(wèn)題。)這些新特征可能有助于偏見(jiàn)和差異。理論上,添加更多特征可能會(huì)增加差異;但如果你發(fā)現(xiàn)這種情況,那就使用正則化,這通常會(huì)消除方差的增加。
減少或消除正則化(L2正則化,L1正則化,丟失):這將減少可避免的偏差,但會(huì)增加方差。
修改模型體系結(jié)構(gòu)(例如神經(jīng)網(wǎng)絡(luò)體系結(jié)構(gòu)),使其更適合你的問(wèn)題:此技術(shù)可以影響偏差和方差。
一種無(wú)用的方法:
添加更多訓(xùn)練數(shù)據(jù):此技術(shù)有助于解決方差問(wèn)題,但通常對(duì)偏差沒(méi)有顯著影響。
26 訓(xùn)練集的誤差分析
你的算法必須在訓(xùn)練集上運(yùn)行良好,才能期望它在開(kāi)發(fā)/測(cè)試集上表現(xiàn)良好。
除了前面描述的用于解決高偏差的技術(shù)之外,我有時(shí)還會(huì)根據(jù)類似于Eyeball開(kāi)發(fā)套件的錯(cuò)誤分析的協(xié)議對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行誤差分析。 如果你的算法具有高偏差,即如果它不能很好地?cái)M合訓(xùn)練集,則這可能很有用。
舉個(gè)例子,假設(shè)你正在為應(yīng)用程序構(gòu)建語(yǔ)音識(shí)別系統(tǒng),并從志愿者那里收集了一組音頻剪輯。 如果你的系統(tǒng)在訓(xùn)練集上表現(xiàn)不佳,你可能會(huì)考慮了解一組約100個(gè)例子,它們會(huì)告訴你這些算法很難理解訓(xùn)練集錯(cuò)誤的主要類別。 與開(kāi)發(fā)集誤差分析類似,你可以統(tǒng)計(jì)不同類別的錯(cuò)誤:
?
在此示例中,你可能會(huì)發(fā)現(xiàn)你的算法在使用具有大量背景噪音的訓(xùn)練示例時(shí)會(huì)遇到特別的困難。因此,你可以專注于能夠更好地適應(yīng)具有背景噪聲的訓(xùn)練示例的技術(shù)。
在給定與學(xué)習(xí)算法相同的輸入音頻的情況下,你還可以仔細(xì)檢查一個(gè)人是否可以轉(zhuǎn)錄這些音頻片段。如果有太多的背景噪音,任何人都無(wú)法弄清楚所說(shuō)的內(nèi)容,那么期望任何算法正確識(shí)別這些話語(yǔ)可能是不合理的。我們將在后面的部分討論將算法與人類級(jí)別性能進(jìn)行比較的好處。
27 降低方差的技術(shù)
如果你的學(xué)習(xí)算法存在高方差,你可以嘗試以下技術(shù):
添加更多訓(xùn)練數(shù)據(jù):這是解決方差的最簡(jiǎn)單、最可靠的方法,只要你可以訪問(wèn)更多的數(shù)據(jù)以及足夠的計(jì)算能力來(lái)處理數(shù)據(jù)。
添加正則化(L2正則化,L1正則化,丟失):此技術(shù)可減少方差但增加偏差。
添加早期停止(即基于開(kāi)發(fā)設(shè)置誤差,提前停止梯度下降):此技術(shù)可減少方差但增加偏差。早期停止的行為與正則化方法非常相似,有些作者稱之為正則化技術(shù)。
減少輸入要素?cái)?shù)量/類型的特征選擇:此技術(shù)可能有助于解決方差問(wèn)題,但也可能會(huì)增加偏差。稍微減少特征的數(shù)量(比如從1000個(gè)特征到900個(gè))不太可能對(duì)偏差產(chǎn)生巨大影響。只要你沒(méi)有排除太多有用的特征,減少它(例如從1000個(gè)特征減少到100個(gè),減少10倍)就更有可能產(chǎn)生重大影響。在現(xiàn)代深度學(xué)習(xí)中,當(dāng)數(shù)據(jù)充足時(shí),關(guān)注重點(diǎn)就已經(jīng)不在特征選擇了,現(xiàn)在我們更有可能給所有特征都賦予算法,并讓算法基于數(shù)據(jù)選擇使用哪些特征。但是當(dāng)你的訓(xùn)練集很小時(shí),特征選擇可能非常有用。
減小模型大小(例如神經(jīng)元/層的數(shù)量):謹(jǐn)慎使用。這種技術(shù)可以減少方差,同時(shí)可能增加偏差。但我不推薦這種技術(shù)來(lái)解決方差。添加正則化通常會(huì)提供更好的分類性能。減小模型尺寸的優(yōu)勢(shì)在于降低了計(jì)算成本,從而加快了訓(xùn)練模型的速度。如果加速模型訓(xùn)練很有用,那么一定要考慮減小模型大小。但是,如果你的目標(biāo)是減少方差,并且你不關(guān)心計(jì)算成本,請(qǐng)考慮添加正則化。
以下是關(guān)于解決偏差的前一章重復(fù)的另外兩種策略:
根據(jù)錯(cuò)誤分析修改輸入特征:假設(shè)你的錯(cuò)誤分析激發(fā)你創(chuàng)建其他特征,幫助算法消除特定類別的錯(cuò)誤。這些新特征可能有助于解決偏差和方差的問(wèn)題。在理論上,增加更多特征可以增加方差;但如果你發(fā)現(xiàn)這種情況,那就使用正則化,這通常會(huì)消除方差的增加。
修改模型體系結(jié)構(gòu)(例如神經(jīng)網(wǎng)絡(luò)體系結(jié)構(gòu)),使其更適合你的問(wèn)題:此技術(shù)可以影響偏差和方差。
28 診斷偏差和方差:學(xué)習(xí)曲線
我們已經(jīng)看到一些方法來(lái)估計(jì)那些可歸因于可避免偏差與方差的錯(cuò)誤的數(shù)量,我們可以通過(guò)估計(jì)最佳錯(cuò)誤率并計(jì)算算法的訓(xùn)練集和開(kāi)發(fā)集錯(cuò)誤來(lái)實(shí)現(xiàn)這一目的。現(xiàn)在讓我們討論一種更具信息性的技術(shù):繪制學(xué)習(xí)曲線。
學(xué)習(xí)曲線將你的開(kāi)發(fā)集錯(cuò)誤與訓(xùn)練示例的數(shù)量進(jìn)行對(duì)比。要繪制它,你需要使用不同的訓(xùn)練集大小運(yùn)行算法。舉個(gè)例子,如果你有1,000個(gè)示例,則可以在100,200,300,...,1000示例上訓(xùn)練算法的單獨(dú)副本。 然后你可以繪制開(kāi)發(fā)集誤差如何隨訓(xùn)練集大小而變化。給大家展示一個(gè)例子:
?
隨著訓(xùn)練集數(shù)據(jù)的增多,開(kāi)發(fā)集誤差應(yīng)當(dāng)下降。
我們經(jīng)常會(huì)有一些“期望的錯(cuò)誤率”,我們希望我們的學(xué)習(xí)算法最終能夠?qū)崿F(xiàn)這個(gè)錯(cuò)誤率。例如:
如果我們希望人類的表現(xiàn),那么人為錯(cuò)誤率可能是“期望錯(cuò)誤率”。
如果我們的學(xué)習(xí)算法服務(wù)于某些產(chǎn)品(例如提供貓片),我們可能會(huì)基于直覺(jué)地知道需要什么級(jí)別的性能來(lái)為用戶提供良好的體驗(yàn)。
如果你長(zhǎng)期從事一項(xiàng)重要的應(yīng)用,那么你可能會(huì)基于直覺(jué)地知道下一季度/年度可以合理地取得多少進(jìn)展。
為你的學(xué)習(xí)曲線加上期望值之后圖像會(huì)變成這樣:
?
你可以通過(guò)視覺(jué)外推延伸紅色“dev error”曲線來(lái)猜測(cè)通過(guò)添加更多數(shù)據(jù)后能夠有多接近期望值。在上面的示例中,將訓(xùn)練集大小加倍可能會(huì)使你達(dá)到所需的性能。
但是,如果開(kāi)發(fā)錯(cuò)誤曲線已經(jīng)“平穩(wěn)”(即變平),那么你可以立即告訴自己,添加再多的數(shù)據(jù)也無(wú)法實(shí)現(xiàn)你的目標(biāo)了:
?
因此,考慮學(xué)習(xí)曲線可能會(huì)幫助你避免花費(fèi)數(shù)月時(shí)間收集兩倍的無(wú)用訓(xùn)練數(shù)據(jù)的情況。
這個(gè)過(guò)程的一個(gè)缺點(diǎn)是,如果你只看開(kāi)發(fā)誤差曲線,哪怕你有更多的數(shù)據(jù),也很難推斷和預(yù)測(cè)紅色曲線的確切位置。 還有一個(gè)附加圖可以幫你估計(jì)添加數(shù)據(jù)的影響:訓(xùn)練誤差。
29 繪制訓(xùn)練錯(cuò)誤圖像
隨著訓(xùn)練集大小的增加,你的開(kāi)發(fā)集(和測(cè)試集)誤差應(yīng)該會(huì)減少。但是,隨著訓(xùn)練集大小的增加,訓(xùn)練集誤差通常會(huì)增加。
讓我們用一個(gè)例子說(shuō)明這種效果。假設(shè)你的訓(xùn)練集只有兩個(gè)示例:一個(gè)貓圖像和一個(gè)非貓圖像。然后,學(xué)習(xí)算法很容易“記住”訓(xùn)練集中的兩個(gè)示例,并獲得0%的訓(xùn)練集錯(cuò)誤。即使其中一個(gè)或兩個(gè)訓(xùn)練樣例都被錯(cuò)誤標(biāo)記,算法仍然很容易記住兩個(gè)標(biāo)簽。
現(xiàn)在假設(shè)你的訓(xùn)練集有100個(gè)例子。可能一些例子甚至被貼錯(cuò)了標(biāo)簽,或者含糊不清——有些圖像非常模糊,所以即使是人類也無(wú)法判斷是否有貓。可能學(xué)習(xí)算法仍然可以“記住”大部分或全部訓(xùn)練集,但現(xiàn)在更難以獲得100%的準(zhǔn)確度。通過(guò)將訓(xùn)練集從2個(gè)增加到100個(gè),你會(huì)發(fā)現(xiàn)訓(xùn)練集的準(zhǔn)確度會(huì)略有下降。
最后,假設(shè)你的訓(xùn)練集有10,000個(gè)示例。在這種情況下,算法更難以完全適合所有10,000個(gè)示例,特別是如果有些模糊不清或標(biāo)注錯(cuò)誤。因此,你的學(xué)習(xí)算法在此訓(xùn)練集上會(huì)更糟糕。
讓我們?cè)谥暗臄?shù)據(jù)中添加一個(gè)訓(xùn)練誤差圖:
你可以看到藍(lán)色“訓(xùn)練誤差”曲線隨著訓(xùn)練集的大小而增加。此外,你的算法通常在訓(xùn)練集上比在開(kāi)發(fā)集上做得更好; 因此,紅色偏差誤差曲線通常嚴(yán)格地位于藍(lán)色訓(xùn)練誤差曲線之上。
我們接下來(lái)討論如何解釋這些圖。
30 解釋學(xué)習(xí)曲線:高偏差
假設(shè)你的開(kāi)發(fā)錯(cuò)誤曲線如下圖所示:
?
我們之前曾說(shuō)過(guò),如果你的開(kāi)發(fā)誤差曲線穩(wěn)定,你不可能僅通過(guò)添加數(shù)據(jù)來(lái)達(dá)到預(yù)期的性能。
但我們其實(shí)很難確切地知道紅色開(kāi)發(fā)誤差曲線的外推是什么樣的。 如果開(kāi)發(fā)集很小,你會(huì)更加不確定,因?yàn)榍€可能會(huì)受很多因素的影響。
假設(shè)我們將訓(xùn)練誤差曲線添加到該圖中并獲得以下圖像:
?
現(xiàn)在,你可以絕對(duì)確定添加更多數(shù)據(jù)絕對(duì)不是一個(gè)好辦法了。 為什么呢? 記住我們的兩個(gè)觀察結(jié)果:
隨著我們添加更多訓(xùn)練數(shù)據(jù),訓(xùn)練誤差只會(huì)變得更糟。因此,藍(lán)色訓(xùn)練誤差曲線只能保持相同或更高,因此它只能遠(yuǎn)離所需性能的(綠線)水平。
紅色偏差誤差曲線通常高于藍(lán)色訓(xùn)練誤差。因此,即使訓(xùn)練誤差高于期望的性能水平,添加更多數(shù)據(jù)也幾乎無(wú)法使紅色偏差誤差曲線下降到所需的性能水平。
在相同的圖上檢查開(kāi)發(fā)誤差曲線和訓(xùn)練誤差曲線使我們能夠更自信地推斷開(kāi)發(fā)誤差曲線。
為了便于討論,假設(shè)期望的性能是我們對(duì)最佳錯(cuò)誤率的估計(jì)。上圖是具有高可避免偏差的學(xué)習(xí)曲線的標(biāo)準(zhǔn)“教科書”示例:在訓(xùn)練集最大的時(shí)候——可能與我們所有的訓(xùn)練數(shù)據(jù)相對(duì)應(yīng)——訓(xùn)練誤差與期望值之間存在較大差距,表明可避免的偏差很大。此外,訓(xùn)練曲線和開(kāi)發(fā)曲線之間的差距很小,表明方差很小。
以前,我們僅在該圖的最右側(cè)點(diǎn)測(cè)量訓(xùn)練集和開(kāi)發(fā)集誤差,這對(duì)應(yīng)于使用所有可用的訓(xùn)練數(shù)據(jù)。繪制完整的學(xué)習(xí)曲線,可以更全面地了解算法在不同訓(xùn)練集大小上的表現(xiàn)。
轉(zhuǎn)載于:https://www.cnblogs.com/wynlfd/p/9752543.html
總結(jié)
- 上一篇: /Symbian/9.2/S60_3rd
- 下一篇: Shell编程--初识shell