Andrew Ng
目錄
- 為什么需要機(jī)器學(xué)習(xí)策略
- 如何使用這本書來(lái)幫助你的團(tuán)隊(duì)
- 預(yù)備知識(shí)和符號(hào)約定
- 規(guī)模促進(jìn)了機(jī)器學(xué)習(xí)的發(fā)展
- 你的開發(fā)集和測(cè)試集
- 你的開發(fā)集和測(cè)試機(jī)應(yīng)該來(lái)自同一分布
- 開發(fā)集和測(cè)試集多大合適
- 為你的團(tuán)隊(duì)進(jìn)行算法優(yōu)化建立一個(gè)單一數(shù)字的評(píng)估指標(biāo)
- 優(yōu)化指標(biāo)和滿足指標(biāo)
- 有一個(gè)開發(fā)集和評(píng)估指標(biāo)來(lái)加速迭代
- When to change dev/test sets and metrics 何時(shí)更改開發(fā)/測(cè)試集和評(píng)估指標(biāo)
- Takeaways: Setting up development and test sets 小結(jié):建立開發(fā)集和測(cè)試集
- Build your first system quickly, then iterate
- Error analysis: Look at dev set examples to evaluate ideas 錯(cuò)誤分析:查看開發(fā)集樣本來(lái)評(píng)估idea
- Evaluate multiple ideas in parallel during error analysis 錯(cuò)誤分析時(shí)并行評(píng)估多個(gè)想法
- If you have a large dev set, split it into two subsets, only one of which you look at
- How big should the Eyeball and Blackbox dev sets be?
- Takeaways: Basic error analysis
- Bias and Variance: The two big sources of error
- Examples of Bias and Variance
- Comparing to the optimal error rate
- Addressing Bias and Variance
- Bias vs. Variance tradeoff
- Techniques for reducing avoidable bias
- Techniques for reducing Variance
- Error analysis on the training set
- Diagnosing bias and variance: Learning curves
- Plotting training error
- Interpreting learning curves: High bias
- Interpreting learning curves: Other cases
- Plotting learning curves
- Why we compare to human-level performance
- How to define human-level performance
- Surpassing human-level performance
- Why train and test on different distributions
- Whether to use all your data
- Whether to include inconsistent data
- Weighting data
- Generalizing from the training set to the dev set
- Addressing Bias and Variance
- Addressing data mismatch
- Artificial data synthesis
- The Optimization Verification test
- General form of Optimization Verification test
- Reinforcement learning example
- The rise of end-to-end learning
- More end-to-end learning examples
- Pros and cons of end-to-end learning
- Learned sub-components
- Directly learning rich outputs
- Error Analysis by Parts
- Beyond supervised learning: What’s next?
- Building a superhero team - Get your teammates to read this
- Big picture
- Credits
- 為什么需要機(jī)器學(xué)習(xí)策略
機(jī)器學(xué)習(xí)是很多重要應(yīng)用的基礎(chǔ)欧漱,例如網(wǎng)頁(yè)搜索储矩,反垃圾郵件丰涉,語(yǔ)音識(shí)別等颜价。如果你或你的團(tuán)隊(duì)正在開發(fā)一個(gè)有關(guān)機(jī)器學(xué)習(xí)的應(yīng)用,并且你想要獲得快速地進(jìn)步晒来。這本書將會(huì)幫助到你钞诡。示例:建立一個(gè)識(shí)別含有貓的圖片的創(chuàng)業(yè)公司,也就是說你建立了一個(gè)創(chuàng)業(yè)公司湃崩,為貓愛好者提供無(wú)盡的貓的圖片荧降。你打算使用一個(gè)神經(jīng)網(wǎng)絡(luò)建立一個(gè)計(jì)算機(jī)視覺系統(tǒng)來(lái)檢測(cè)圖片中的貓。
但悲催的是攒读,你的學(xué)習(xí)算法的準(zhǔn)確率目前并不夠好朵诫。所以你面臨巨大的壓力來(lái)改善你的算法。你該做些什么呢薄扁?你的團(tuán)隊(duì)有很多idea剪返,比如:
- 獲取更多數(shù)據(jù):收集更多關(guān)于貓的圖片
- 收集更多樣化的訓(xùn)練集。例如:貓?jiān)诓煌恢玫膱D片邓梅;不同著色的貓随夸;不同相機(jī)(設(shè)置)拍攝的圖片
- 通過運(yùn)行更多的梯度下降迭代次數(shù),來(lái)增長(zhǎng)訓(xùn)練算法的時(shí)間
- 嘗試更大的網(wǎng)絡(luò)震放,具有更多的層,更多的隱藏單元及參數(shù)
- 嘗試更小的網(wǎng)絡(luò)
- 嘗試添加正則化(例如L2正則化)
- 改變神經(jīng)網(wǎng)絡(luò)的架構(gòu)(激活函數(shù)驼修,隱藏單元的數(shù)量等)
……
在這些可能的方案中殿遂,如果你選擇的好,那么你將建立一個(gè)領(lǐng)先的關(guān)于貓的圖片的平臺(tái)乙各,并帶領(lǐng)你的公司走向成功墨礁;如果你的選擇很糟糕,那么你可能白白浪費(fèi)幾個(gè)月的時(shí)間耳峦。你會(huì)選擇怎么進(jìn)行恩静?這本書將會(huì)告訴你怎么去做。大部分機(jī)器學(xué)習(xí)問題都會(huì)留下一些線索,這些線索會(huì)告訴你什么是有用的嘗試驶乾,什么是沒用的邑飒。學(xué)會(huì)閱讀理解這些線索能夠節(jié)省你數(shù)月或上年的開發(fā)時(shí)間
2. 如何使用這本書來(lái)幫助你的團(tuán)隊(duì)
在讀完這本書后,你將對(duì)如何制定機(jī)器學(xué)習(xí)項(xiàng)目中的技術(shù)方向有一個(gè)深入的了解级乐。
但是你的隊(duì)友可能并不理解你為什么建議某一個(gè)特定的方向疙咸。或許你希望你的團(tuán)隊(duì)定義一個(gè)單一數(shù)字的評(píng)估指標(biāo)风科,但他們卻并不信服撒轮。你如何說服他們?
這就是為什么我把章節(jié)設(shè)置的這么短:這樣你可以打印出來(lái)并給你的隊(duì)友看僅僅你想要讓他們知道的那1~2頁(yè)贼穆。面對(duì)幾個(gè)不同的選擇题山,在優(yōu)先次序上的一些改變可能會(huì)對(duì)你團(tuán)隊(duì)生產(chǎn)力產(chǎn)生巨大的影響。通過幫助您的團(tuán)隊(duì)做出這樣一些改變故痊,我希望你能夠變成你們團(tuán)隊(duì)的超級(jí)英雄顶瞳!
5.你的開發(fā)集和測(cè)試集
讓我們回到之前關(guān)于貓的圖片的例子:你制作了一個(gè)移動(dòng)APP,用戶可以上傳很多不同事物的圖片到你的app上崖蜜,你想要自動(dòng)發(fā)現(xiàn)關(guān)于貓的圖片浊仆。你的團(tuán)隊(duì)從不同的網(wǎng)站下載大量貓(正樣本,positive examples)和非貓(負(fù)樣本豫领,negative example)的圖片抡柿,從而獲得了一個(gè)很大的數(shù)據(jù)集。他們將這些數(shù)據(jù)按 70%:30%分為訓(xùn)練集和測(cè)試集等恐。利用這些數(shù)據(jù)洲劣,他們構(gòu)建了一個(gè)貓的檢測(cè)算法,它在訓(xùn)練集和測(cè)試集上表現(xiàn)都很好课蔬。但是當(dāng)你把這個(gè)分類器部署倒移動(dòng)APP上時(shí)囱稽,你發(fā)現(xiàn)它的表現(xiàn)非常糟糕!
發(fā)生了什么二跋?
你發(fā)現(xiàn)用戶上傳的圖片和你從網(wǎng)站下載的作為訓(xùn)練集的圖片有些不同:用戶使用手機(jī)拍攝的圖片分辨率更低战惊,模糊,且照明效果較差扎即。由于你的訓(xùn)練集和測(cè)試機(jī)數(shù)據(jù)都來(lái)自于網(wǎng)站圖片吞获,你的算法沒有在你所關(guān)心的智能手機(jī)圖片的實(shí)際分布上一般化得很好。大數(shù)據(jù)時(shí)代之前谚鄙,在機(jī)器學(xué)習(xí)中人們常使用隨機(jī)的70%:30%分割訓(xùn)練集和測(cè)試集各拷。這種做法能夠work,但是在越來(lái)越多的應(yīng)用(在這些應(yīng)用中闷营,訓(xùn)練集的分布(在我們的例子中的網(wǎng)站圖像)不同于你最終關(guān)心的分布(手機(jī)拍攝的圖像))中是個(gè)壞主意烤黍。
我們通常定義:
- 訓(xùn)練集(Training set)——你運(yùn)行你的算法在這上面。
- 開發(fā)集(Dev/development set)——這部分?jǐn)?shù)據(jù)用來(lái)調(diào)參,選擇特征速蕊,以及對(duì)學(xué)習(xí)算法做出其他決定嫂丙。有時(shí)也被稱為留出交叉驗(yàn)證機(jī)(hold-out cross validation set)
- 測(cè)試集(Test set)——這部分?jǐn)?shù)據(jù)用來(lái)評(píng)估算法的性能,但不要依靠這部分?jǐn)?shù)據(jù)對(duì)使用的學(xué)習(xí)和參數(shù)做出任何決定互例。
一旦你定義一個(gè)開發(fā)集(Dev/development set)和測(cè)試集(Test set)奢入,你的團(tuán)隊(duì)將嘗試各種idea(例如不同的學(xué)習(xí)算法參數(shù)),看哪一種最好媳叨。開發(fā)集和測(cè)試集能夠使你的團(tuán)隊(duì)快速看到你的算法做得有多好腥光。換句話說,開發(fā)集和測(cè)試集的目的是指導(dǎo)你的團(tuán)隊(duì)對(duì)機(jī)器學(xué)習(xí)系統(tǒng)做出最重要的改變糊秆。
所以你應(yīng)該做到:
選擇開發(fā)集和測(cè)試集武福,以反映你期望在未來(lái)獲得的數(shù)據(jù),并希望在上面做得很好痘番。換句話說捉片,你的測(cè)試集不應(yīng)該只是可用數(shù)據(jù)的30%這么簡(jiǎn)單,特別是當(dāng)你期望得到的數(shù)據(jù)(移動(dòng)app的圖像)和你的訓(xùn)練數(shù)據(jù)(網(wǎng)頁(yè)圖像)在性質(zhì)上不太一樣時(shí)汞舱。如果你尚未發(fā)布你的app伍纫,也就意味著還沒有任何用戶,因此可能無(wú)法獲得你未來(lái)想要做得很好的數(shù)據(jù)昂芜。但是你仍然可以嘗試去接近這一點(diǎn)莹规。例如,請(qǐng)你的朋友拍一些手機(jī)照片并發(fā)給你泌神。一旦你的app啟動(dòng)后良漱,你可以使用用戶的實(shí)際數(shù)據(jù)更新你的開發(fā)/測(cè)試集。如果你真的沒有任何方法獲取接近你期望的數(shù)據(jù)欢际,也許你可以使用網(wǎng)站圖片作為開始母市。但是你應(yīng)該清醒地意識(shí)到這種做法可能導(dǎo)致你的系統(tǒng)不能泛化的很好。有時(shí)可能我們需要決定投資多少去獲取好的開發(fā)集和測(cè)試集损趋。切記不要假定你的訓(xùn)練集分布和測(cè)試集分布必須是一樣的患久。嘗試去挑選能反映你最終想要表現(xiàn)很好的數(shù)據(jù)作為測(cè)試樣本,而不是你遇到的任何數(shù)據(jù)浑槽。
6.你的開發(fā)集和測(cè)試機(jī)應(yīng)該來(lái)自同一分布
根據(jù)你的市場(chǎng)蒋失,您將你的貓app的圖片數(shù)據(jù)分為四個(gè)區(qū)域:美國(guó)、中國(guó)括荡、印度和其他地區(qū)。要生成一個(gè)開發(fā)集和一個(gè)測(cè)試集溉旋,我們隨機(jī)地分配兩個(gè)地區(qū)的數(shù)據(jù)到開發(fā)集畸冲,另外兩個(gè)到測(cè)試集,對(duì)嗎?比如來(lái)自美國(guó)和印度的數(shù)據(jù)在開發(fā)集邑闲,中國(guó)和其他地區(qū)的在測(cè)試集算行。一旦你這樣定義了開發(fā)集和測(cè)試集,你的團(tuán)隊(duì)將專注于提高開發(fā)集的表現(xiàn)性能苫耸。因此州邢,開發(fā)集應(yīng)該反映你真正想要提高性能的任務(wù):在四個(gè)地區(qū)做得都好,而不只是兩個(gè)褪子。
開發(fā)集和測(cè)試集數(shù)據(jù)的分布不同導(dǎo)致的第二個(gè)問題是:你的團(tuán)隊(duì)可能會(huì)做出一些工作量淌,在開發(fā)集上表現(xiàn)很好,在測(cè)試集卻表現(xiàn)很差嫌褪。我曾經(jīng)在很多挫折和白費(fèi)的努力中看到過這一結(jié)果呀枢。要避免這種情況發(fā)生在你身上。例如笼痛,假設(shè)你的團(tuán)隊(duì)開發(fā)的系統(tǒng)在開發(fā)集上表現(xiàn)很好裙秋,在測(cè)試集上卻很糟糕。如果你的開發(fā)集和測(cè)試集來(lái)自同一分布缨伊,那么你會(huì)有一個(gè)非常明確的診斷:你的算法在開發(fā)集上過擬合了摘刑。顯而易見的方法是去獲得更多的開發(fā)集數(shù)據(jù)。
但如果你的開發(fā)集和測(cè)試集來(lái)自不同的分布刻坊,那么你的選擇就不太清楚了枷恕。可能會(huì)出現(xiàn)以下幾種錯(cuò)誤:
- 你的算法在開發(fā)集上過擬合了紧唱。
- 測(cè)試集比開發(fā)集更難以識(shí)別活尊。所以你的算法可能做的和預(yù)期的效果一樣好了,因此也就沒有可能做出進(jìn)一步的顯著改進(jìn)了漏益。
- 測(cè)試集不一定是比開發(fā)集更難蛹锰,只是它們來(lái)自不同的分布。所以在開發(fā)集上表現(xiàn)很好的算法并不能在測(cè)試集上表現(xiàn)良好绰疤。這種情況下铜犬,你之前做的很多提高開發(fā)集表現(xiàn)性能的努力都白費(fèi)了。
機(jī)器學(xué)習(xí)應(yīng)用方面的工作已經(jīng)很困難了轻庆。具有不匹配的開發(fā)集和測(cè)試集引入了額外的關(guān)于是否改進(jìn)開發(fā)集分布或提高測(cè)試集表現(xiàn)性能的不確定性癣猾。這使得更難找出什么work和什么不work,因此更難以確定不錯(cuò)選擇之間的優(yōu)先級(jí)余爆。如果你面對(duì)的是第三方基準(zhǔn)測(cè)試(benchmark)的問題纷宇,它們的創(chuàng)造者可能已經(jīng)指定了開發(fā)集和測(cè)試集來(lái)自不同的分布。這種情況下蛾方,運(yùn)氣像捶,而非技能上陕,將會(huì)對(duì)你的性能產(chǎn)生更大的影響。當(dāng)然拓春,開發(fā)那些能夠在一個(gè)分布上訓(xùn)練并能很好地推廣(generalize)到另一個(gè)分布的學(xué)習(xí)算法是一個(gè)很重要的研究方向释簿。但如果你的目標(biāo)是開發(fā)能夠在特定機(jī)器學(xué)習(xí)應(yīng)用中得到不錯(cuò)效果的系統(tǒng)的話,我建議你選擇開發(fā)集和測(cè)試集服從同一分布硼莽。這將使您的團(tuán)隊(duì)更有效率庶溶。
7. 開發(fā)集和測(cè)試集多大合適?
開發(fā)集應(yīng)該足夠大懂鸵,大到能檢測(cè)出你嘗試的不同算法之間的差異偏螺。例如,如果一個(gè)分類器A具有90.0%的準(zhǔn)去率而分類器B具有90.1%的準(zhǔn)確率矾瑰,則只具有100個(gè)示例的開發(fā)集不能夠檢測(cè)出這0.1%的差異砖茸。與我看到的其他機(jī)器學(xué)習(xí)問題相比,100個(gè)樣本的開發(fā)集很小殴穴。常見的開發(fā)集樣本規(guī)模一般在1000到10000之間凉夯。在10000個(gè)樣本的情況下,你將有更大的可能性檢測(cè)到0.1%的性能提升采幌。對(duì)于一些成熟和重要的應(yīng)用程序(例如廣告劲够,網(wǎng)頁(yè)搜索和產(chǎn)品推薦等),我也會(huì)看到一些團(tuán)隊(duì)在為甚至0.01%的性能提升而努力奮斗休傍,因?yàn)樗鼘?duì)公司的利潤(rùn)有直接影響征绎。在這種情況下,開發(fā)集的數(shù)據(jù)量可以遠(yuǎn)大于10000磨取,以便檢測(cè)更小的改進(jìn)人柿。
那關(guān)于測(cè)試集的數(shù)據(jù)規(guī)模呢?它應(yīng)該足夠大忙厌,大到能對(duì)你的系統(tǒng)整體性能評(píng)估擁有一個(gè)很高的自信度凫岖。一個(gè)流行的啟發(fā)式方法(heuristic)是將30%的數(shù)據(jù)用于測(cè)試。在你擁有一個(gè)中等數(shù)據(jù)量(100到10000個(gè)樣本)的情況下逢净,它work的很好哥放。但是在大數(shù)據(jù)時(shí)代(現(xiàn)在我們面對(duì)的機(jī)器學(xué)習(xí)問題可能會(huì)有超過數(shù)10億的樣本),分配給開發(fā)/測(cè)試集的數(shù)據(jù)比例一直在減小爹土,但是開發(fā)/測(cè)試集樣本的絕對(duì)數(shù)量是在增長(zhǎng)甥雕。在給開發(fā)/測(cè)試集分配數(shù)據(jù)時(shí),沒必要過多地超出其評(píng)估算法性能所需要的數(shù)據(jù)量胀茵。
8. 為你的團(tuán)隊(duì)進(jìn)行算法優(yōu)化建立一個(gè)單一數(shù)字的評(píng)估指標(biāo)
分類準(zhǔn)確率是單一數(shù)字評(píng)估指標(biāo)的示例:你在開發(fā)集(或測(cè)試集)上運(yùn)行運(yùn)行一個(gè)分類器社露,然后得到一個(gè)正確分類的樣本比例這樣一個(gè)數(shù)字。根據(jù)給指標(biāo),如果分類器A獲得97%的準(zhǔn)確率莫鸭,分類器B獲得90%的準(zhǔn)確率俯萌,則我們認(rèn)為分類器A更好立肘。相比之下,查準(zhǔn)率(Precision)和查全率(Recall)就不是一個(gè)單一數(shù)字的評(píng)估指標(biāo):它給出了兩個(gè)數(shù)字來(lái)評(píng)估你的分類器性能喇喉。具有多個(gè)數(shù)字 的評(píng)估指標(biāo)使得比較算法更為困難。假設(shè)你的算法表現(xiàn)如下:
這里,兩個(gè)分類器都沒有顯而易見地比另一個(gè)更優(yōu)越挨务,所以它不能馬上引導(dǎo)你選擇其中一個(gè)。
在開發(fā)期間玉组,你的團(tuán)隊(duì)會(huì)嘗試各種關(guān)于算法體系結(jié)構(gòu)谎柄,模型參數(shù),特征選擇等方面的許多idea惯雳。使用單一數(shù)字的評(píng)估指標(biāo)(single-number evaluation metric)(如精度)朝巫,你可以根據(jù)其在這個(gè)指標(biāo)上的效果快速對(duì)所有模型進(jìn)行排序,從而快速?zèng)Q定哪一個(gè)work的最好石景。如果你真的同時(shí)關(guān)心查準(zhǔn)率(Precision)和查全率(Recall)劈猿,我建議你使用一種方法將它們組合為單一的數(shù)字。例如潮孽,可以取Precision和Recall的平均值揪荣,最終得到單個(gè)數(shù)字⊥罚或者仗颈,你可以計(jì)算“F1度量(F1 score)”,它是一種基于其平均值的改善的方法椎例,比簡(jiǎn)單地取平均值效果要好挨决。
當(dāng)你面臨在一大堆分類器中做出選擇時(shí),使用單一數(shù)字的評(píng)估指標(biāo)可以加快你做出決策订歪。它可以給出所有嘗試的idea的明確的優(yōu)先排名脖祈,從而給出一個(gè)清晰的前進(jìn)方向。作為最后一個(gè)例子陌粹,假如你分別得到了你的貓分類器在四個(gè)主要市場(chǎng)(美國(guó)撒犀,中國(guó),印度和其他地區(qū))的準(zhǔn)確率掏秩。這里提供了四個(gè)指標(biāo)或舞。通過對(duì)這四個(gè)數(shù)據(jù)進(jìn)行平均或加權(quán)平均,你將得到單個(gè)數(shù)字度量蒙幻。取平均值或加權(quán)平均值是將多個(gè)指標(biāo)合并為一個(gè)的最常見的方法之一映凳。
9. 優(yōu)化指標(biāo)和滿足指標(biāo)
這是組合多個(gè)評(píng)估指標(biāo)的另一種方法。
假設(shè)你同時(shí)關(guān)心算法的準(zhǔn)確率和運(yùn)行時(shí)間邮破。你需要在下面三個(gè)分類器中進(jìn)行選擇:
這里如果將準(zhǔn)確率和運(yùn)行時(shí)間組合為單個(gè)評(píng)估指標(biāo)會(huì)看起來(lái)不太自然(例如:Accuracy?0.5?RunningTime)诈豌。
這里你可以這樣處理:首先仆救,定義一個(gè)“可接受”的運(yùn)行時(shí)間。例如我們說任何運(yùn)行時(shí)間在100ms以內(nèi)的算法都是可接受的矫渔。這里彤蔽,運(yùn)行時(shí)間就是一個(gè)“滿足的度量(satisficing metric)”——你的算法只需要在這個(gè)指標(biāo)上表現(xiàn)地“足夠好(good enough)”就行,在這個(gè)意義上它應(yīng)該滿足最多100ms庙洼。準(zhǔn)確率是一個(gè)“優(yōu)化度量(optimizing metric)”顿痪。
如果你正在權(quán)衡N個(gè)不同的標(biāo)準(zhǔn),例如模型的二進(jìn)制文件大杏凸弧(這對(duì)于移動(dòng)app很重要蚁袭,因?yàn)橛脩舨幌胍螺d很大的程序),運(yùn)行時(shí)間和準(zhǔn)確率等石咬。你可以考慮設(shè)置其中N-1個(gè)標(biāo)準(zhǔn)為“滿意(satisficing)”指標(biāo)揩悄,也就是說你只需要他們滿足特定的值即可。然后將最后一個(gè)定義為“優(yōu)化(optimizing)”指標(biāo)鬼悠。例如删性,為二進(jìn)制文件大小和運(yùn)行時(shí)間設(shè)定可接受的閾值,并嘗試在這些約束條件下不斷優(yōu)化準(zhǔn)確率焕窝。
作為最后一個(gè)例子镇匀,假定你正在構(gòu)建一個(gè)硬件設(shè)備,該設(shè)備使用麥克風(fēng)監(jiān)聽用戶說出的某個(gè)特定的“喚醒語(yǔ)(wakeword)”袜啃,從而喚醒系統(tǒng)汗侵。例如:Amazon Echo監(jiān)聽“Alexa”;蘋果Siri監(jiān)聽“Hey Siri”群发;Android監(jiān)聽“Okay Google”晰韵;或百度app監(jiān)聽“你好百度”。你同時(shí)關(guān)心假正例的比率(the false positive rate, 即當(dāng)沒有人說喚醒語(yǔ)時(shí)系統(tǒng)喚醒的頻率)和假反例的比率(the false negative rate, 即當(dāng)有人說出喚醒語(yǔ)時(shí)系統(tǒng)沒有喚醒的頻率)熟妓。對(duì)這個(gè)系統(tǒng)表現(xiàn)性能的一個(gè)合理的目標(biāo)是最小化假反例的比率(優(yōu)化指標(biāo)雪猪,optimizing metric),同時(shí)滿足每24小時(shí)操作出現(xiàn)不超過一個(gè)假正例即可(滿足指標(biāo),satisficing metric)起愈。一旦你的團(tuán)隊(duì)對(duì)評(píng)估指標(biāo)進(jìn)行優(yōu)化只恨,他們將能夠更快地取得進(jìn)步。
10. 有一個(gè)開發(fā)集和評(píng)估指標(biāo)來(lái)加速迭代
對(duì)于一個(gè)新問題抬虽,很難事先知道什么方法是最合適的官觅。即使經(jīng)驗(yàn)豐富的機(jī)器學(xué)習(xí)研究者在發(fā)現(xiàn)滿意的方法之前也會(huì)嘗試各種各樣的idea。在構(gòu)建機(jī)器學(xué)習(xí)系統(tǒng)時(shí)阐污,我經(jīng)常會(huì):
- 首先想出一些構(gòu)建系統(tǒng)的想法(idea)
- 在代碼(code)中實(shí)現(xiàn)這些idea
- 進(jìn)行實(shí)驗(yàn)(experiment)休涤,通過實(shí)驗(yàn)判斷我的想法 work的怎么樣。(通常我的前幾個(gè)想法都不是很work!)基于這些知識(shí)功氨,再生成更多的idea序苏,并不斷迭代。
這是一個(gè)不斷迭代的過程捷凄。你循環(huán)得越快忱详,你的進(jìn)展也就越快。這就是 開發(fā)/測(cè)試集 和評(píng)估指標(biāo)非常重要的原因:每次你嘗試一個(gè)新的想法時(shí)跺涤,在開發(fā)集上測(cè)試其表現(xiàn)性能踱阿,這將使你快速判斷你是否在朝著正確的方向前進(jìn)。相反钦铁,如果你沒有特定的開發(fā)集和評(píng)估指標(biāo)。那么每次你的團(tuán)隊(duì)開發(fā)出一個(gè)新的貓分類器時(shí)才漆,你必須把它移植到你的應(yīng)用程序牛曹,并親身體驗(yàn)幾個(gè)小時(shí)來(lái)感受一下這個(gè)新的分類器性能是否有提升。這將是極其極其慢的醇滥!并且黎比,如果你的團(tuán)隊(duì)將分類器的準(zhǔn)確率從95.0%提升到95.1%,你可能無(wú)法通過親身體驗(yàn)來(lái)感受到這0.1%的改進(jìn)鸳玩。而通過這些0.1%的不斷改進(jìn)阅虫,你的系統(tǒng)將取得很大的進(jìn)步。有一個(gè)開發(fā)集和評(píng)估指標(biāo)不跟,你可以很快地檢測(cè)出哪些想法給你的系統(tǒng)帶來(lái)了型堑邸(或大)的改進(jìn),然后你就清楚地知道了哪些想法可以進(jìn)一步改善窝革,而哪些需要被舍棄购城。
11. 何時(shí)更改開發(fā)/測(cè)試集和評(píng)估指標(biāo)
當(dāng)開始一個(gè)新項(xiàng)目時(shí),我一般會(huì)試圖快速選擇一個(gè)開發(fā)/測(cè)試集 虐译,因?yàn)檫@可以給團(tuán)隊(duì)制定一個(gè)明確的目標(biāo)瘪板。我通常會(huì)要求我的團(tuán)隊(duì)在不到一周之內(nèi)想出一個(gè)初始的開發(fā)/測(cè)試集和評(píng)估指標(biāo)。提出一個(gè)不太完美的方案并迅速行動(dòng)起來(lái)往往比過分考慮這些會(huì)更好漆诽。但是“一周”這個(gè)時(shí)間表并不適用于成熟的應(yīng)用侮攀。例如,反垃圾郵件是一個(gè)成熟的深度學(xué)習(xí)應(yīng)用厢拭。我曾經(jīng)見過那些開發(fā)已經(jīng)成熟的系統(tǒng)的團(tuán)隊(duì)可能會(huì)花費(fèi)數(shù)月時(shí)間來(lái)獲得更好的開發(fā)/測(cè)試集兰英。
如果你后來(lái)發(fā)現(xiàn)你初始的開發(fā)/測(cè)試集或評(píng)估指標(biāo)與你的目標(biāo)并不完全一致,那么通過一切手段快速更改它們供鸠。例如箭昵,如果在你的開發(fā)集和評(píng)估指標(biāo)上分類器A比分離器B表現(xiàn)好,但你的團(tuán)隊(duì)認(rèn)為實(shí)際應(yīng)用中分類器B更適合您的產(chǎn)品回季,這可能是一個(gè)你需要更改開發(fā)/測(cè)試集或評(píng)估指標(biāo)的跡象家制。有三個(gè)主要原因可能會(huì)造成開發(fā)集/評(píng)估指標(biāo)不正確地把分類器A排得更高:
你需要做得好的實(shí)際數(shù)據(jù)分布和開發(fā)/測(cè)試集是不同的正林。
假設(shè)你的初始開發(fā)/測(cè)試集主要是一些成年貓的照片。你查看貓app的后臺(tái)颤殴,發(fā)現(xiàn)用戶上傳了比預(yù)期多很多的幼貓的照片觅廓。所以,開發(fā)/測(cè)試集的數(shù)據(jù)分布并不能代表你需要做好的實(shí)際的數(shù)據(jù)分布涵但。這種情況下杈绸,更新你的開發(fā)/測(cè)試集,使其更具代表性矮瘟。你已經(jīng)過擬合了開發(fā)集瞳脓。
在開發(fā)集上重復(fù)地評(píng)估不同方法的過程可能導(dǎo)致你的算法逐漸對(duì)開發(fā)集“過擬合(overfit)”。當(dāng)你做完開發(fā)后澈侠,你將在測(cè)試集上評(píng)估你的算法劫侧。如果你發(fā)現(xiàn)算法在開發(fā)集上的表現(xiàn)遠(yuǎn)好于在測(cè)試集上的表現(xiàn),這可能是你已經(jīng)過擬合開發(fā)集的跡象哨啃。這種情況下烧栋,你需要更新你的開發(fā)集了。
如果你需要跟蹤團(tuán)隊(duì)的進(jìn)度拳球,你也可以用測(cè)試集定期評(píng)估你的系統(tǒng)——每月或每周一次审姓。但不要使用測(cè)試集來(lái)做出關(guān)于改進(jìn)算法的任何決定,包括是否回退到上一周的系統(tǒng)祝峻。如果這樣做了魔吐,你將開始過度擬合測(cè)試集,并且不可能再依靠它來(lái)給出系統(tǒng)性能的完全無(wú)偏估計(jì)(unbiased estimate)(你可能會(huì)在發(fā)表論文或做出重要商業(yè)決策是使用這個(gè)估計(jì))莱找。評(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ì)偶爾允許色情圖片通過谚赎。那么即使分類器A準(zhǔn)確率更高淫僻,色情圖片所帶來(lái)的壞影響也意味著其表現(xiàn)是不被接受的。你需要做什么呢壶唤?
這里雳灵,評(píng)估指標(biāo)不能辨別出對(duì)產(chǎn)品而言算法B比算法A更好這一事實(shí)。所以闸盔,你不能再相信該指標(biāo)能挑選出最佳算法∶跽蓿現(xiàn)在時(shí)改變?cè)u(píng)估指標(biāo)的時(shí)候了。例如,你可以改變?cè)u(píng)估指標(biāo)躲撰,嚴(yán)重懲罰色情圖片分類錯(cuò)誤针贬。我強(qiáng)烈建議你選擇一個(gè)新的評(píng)估指標(biāo),以此來(lái)為你的團(tuán)隊(duì)明確定義一個(gè)新的目標(biāo)拢蛋,而非在不信任的評(píng)估指標(biāo)下一直前行桦他,并恢復(fù)到手工選擇分類器。
在項(xiàng)目中改變開發(fā)/測(cè)試集和評(píng)估指標(biāo)是很常見的谆棱。擁有一個(gè)初始的開發(fā)/測(cè)試集和評(píng)估指標(biāo)能幫助你快速迭代快压。如果你發(fā)現(xiàn) 開發(fā)/測(cè)試集和評(píng)估指標(biāo) 不再使你的團(tuán)隊(duì)在正確方向上前進(jìn),這不是什么大問題垃瞧!只需要改變它們蔫劣,并確保你的團(tuán)隊(duì)知道新的方向。
12. 小結(jié):建立開發(fā)集和測(cè)試集
- 從分布中選擇開發(fā)集和測(cè)試集个从,以反映你期望在未來(lái)獲得的數(shù)據(jù)脉幢,并希望在上面做得很好。這可能和你的訓(xùn)練數(shù)據(jù)分布不同信姓。
- 如果可能的話,選擇來(lái)自同一分布的開發(fā)集和測(cè)試集绸罗。
- 為你的團(tuán)隊(duì)選擇單一數(shù)字的評(píng)估指標(biāo)進(jìn)行優(yōu)化意推。如果你關(guān)心多個(gè)目標(biāo),請(qǐng)考慮把它們合并到一個(gè)公式中(例如平均多個(gè)錯(cuò)誤指標(biāo))珊蟀,或設(shè)定滿足指標(biāo)和優(yōu)化指標(biāo)菊值。
- 機(jī)器學(xué)習(xí)是一個(gè)高度迭代的過程:在發(fā)現(xiàn)你滿意的方法之前你可能需要嘗試很多的idea。
- 具有開發(fā)/測(cè)試集和單一數(shù)字評(píng)估指標(biāo)可以幫助你快速評(píng)估算法育灸,因此迭代地更快腻窒。
- 當(dāng)開始一個(gè)全新的應(yīng)用時(shí),嘗試快速建立開發(fā)/測(cè)試集和評(píng)估指標(biāo)磅崭,最好在一周之內(nèi)儿子。當(dāng)然,在成熟的應(yīng)用程序上花費(fèi)更長(zhǎng)的時(shí)間也是ok的砸喻。
- 依據(jù)70%:30%的比例劃分訓(xùn)練/測(cè)試集這一經(jīng)驗(yàn)性的方法不太適用于你擁有大量數(shù)據(jù)的情況柔逼;開發(fā)/測(cè)試集可以占有遠(yuǎn)小于30%的數(shù)據(jù)量。
- 你的開發(fā)集數(shù)據(jù)量應(yīng)足夠大割岛,大到能檢測(cè)出你的算法準(zhǔn)確性上的有意義的改變愉适,但沒必要更大。你的測(cè)試集應(yīng)該足夠大癣漆,大到能對(duì)你的系統(tǒng)整體性能評(píng)估擁有一個(gè)很高的自信度维咸。
- 如果你的開發(fā)集和評(píng)估指標(biāo)不再使你的團(tuán)隊(duì)在正確方向上前進(jìn),快速改變它:(i)如果你過擬合了開發(fā)集,去獲得更多的開發(fā)集數(shù)據(jù)癌蓖。(ii)如果你所關(guān)心的實(shí)際分布和 開發(fā)/測(cè)試集 的分布不同瞬哼,那么得到新的開發(fā)/測(cè)試集 數(shù)據(jù)。(iii)如果你的評(píng)估指標(biāo)不再能衡量對(duì)你來(lái)說最重要的東西费坊,請(qǐng)改變?cè)u(píng)估指標(biāo)倒槐。