1.1 训练/开发/测试集-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
| 4.9 總結習題 (第一課) | 回到目錄 | 1.2 偏差/方差 |
訓練/開發/測試集 (Train/Dev/Test Sets)
大家可能已經了解了,那么本周,我們將繼續學習如何有效運作神經網絡,內容涉及超參數調優,如何構建數據,以及如何確保優化算法快速運行,從而使學習算法在合理時間內完成自我學習。
第一周,我們首先說說神經網絡機器學習中的問題,然后是隨機神經網絡,還會學習一些確保神經網絡正確運行的技巧,帶著這些問題,我們開始今天的課程。
在配置訓練、驗證和測試數據集的過程中做出正確決策會在很大程度上幫助大家創建高效的神經網絡。訓練神經網絡時,我們需要做出很多決策,例如:
創建新應用的過程中,我們不可能從一開始就準確預測出這些信息和其他超級參數。實際上,應用型機器學習是一個高度迭代的過程,通常在項目啟動時,我們會先有一個初步想法,比如構建一個含有特定層數,隱藏單元數量或數據集個數等等的神經網絡,然后編碼,并嘗試運行這些代碼,通過運行和測試得到該神經網絡或這些配置信息的運行結果,你可能會根據輸出結果重新完善自己的想法,改變策略,或者為了找到更好的神經網絡不斷迭代更新自己的方案。
現如今,深度學習已經在自然語言處理,計算機視覺,語音識別以及結構化數據應用等眾多領域取得巨大成功。結構化數據無所不包,從廣告到網絡搜索。其中網絡搜索不僅包括網絡搜索引擎,還包括購物網站,從所有根據搜索欄詞條傳輸結果的網站。再到計算機安全,物流,比如判斷司機去哪接送貨,范圍之廣,不勝枚舉。
我發現,可能有自然語言處理方面的人才想踏足計算機視覺領域,或者經驗豐富的語音識別專家想投身廣告行業,又或者,有的人想從電腦安全領域跳到物流行業,在我看來,從一個領域或者應用領域得來的直覺經驗,通常無法轉移到其他應用領域,最佳決策取決于你所擁有的數據量,計算機配置中輸入特征的數量,用GPU訓練還是CPU,GPU和CPU的具體配置以及其他諸多因素。
目前為止,我覺得,對于很多應用系統,即使是經驗豐富的深度學習行家也不太可能一開始就預設出最匹配的超級參數,所以說,應用深度學習是一個典型的迭代過程,需要多次循環往復,才能為應用程序找到一個稱心的神經網絡,因此循環該過程的效率是決定項目進展速度的一個關鍵因素,而創建高質量的訓練數據集,驗證集和測試集也有助于提高循環效率。
假設這是訓練數據,我用一個長方形表示,我們通常會將這些數據劃分成幾部分,一部分作為訓練集,一部分作為簡單交叉驗證集,有時也稱之為驗證集,方便起見,我就叫它驗證集(dev set),其實都是同一個概念,最后一部分則作為測試集。
接下來,我們開始對訓練執行算法,通過驗證集或簡單交叉驗證集選擇最好的模型,經過充分驗證,我們選定了最終模型,然后就可以在測試集上進行評估了,為了無偏評估算法的運行狀況。
在機器學習發展的小數據量時代,常見做法是將所有數據三七分,就是人們常說的70%驗證集,30%測試集,如果沒有明確設置驗證集,也可以按照60%訓練,20%驗證和20%測試集來劃分。這是前幾年機器學習領域普遍認可的最好的實踐方法。
如果只有100條,1000條或者1萬條數據,那么上述比例劃分是非常合理的。
但是在大數據時代,我們現在的數據量可能是百萬級別,那么驗證集和測試集占數據總量的比例會趨向于變得更小。因為驗證集的目的就是驗證不同的算法,檢驗哪種算法更有效,因此,驗證集要足夠大才能評估,比如2個甚至10個不同算法,并迅速判斷出哪種算法更有效。我們可能不需要拿出20%的數據作為驗證集。
比如我們有100萬條數據,那么取1萬條數據便足以進行評估,找出其中表現最好的1-2種算法。同樣地,根據最終選擇的分類器,測試集的主要目的是正確評估分類器的性能,所以,如果擁有百萬數據,我們只需要1000條數據,便足以評估單個分類器,并且準確評估該分類器的性能。假設我們有100萬條數據,其中1萬條作為驗證集,1萬條作為測試集,100萬里取1萬,比例是1%,即:訓練集占98%,驗證集和測試集各占1%。對于數據量過百萬的應用,訓練集可以占到99.5%,驗證和測試集各占0.25%,或者驗證集占0.4%,測試集占0.1%。
總結一下,在機器學習中,我們通常將樣本分成訓練集,驗證集和測試集三部分,數據集規模相對較小,適用傳統的劃分比例,數據集規模較大的,驗證集和測試集要小于數據總量的20%或10%。后面我會給出如何劃分驗證集和測試集的具體指導。
現代深度學習的另一個趨勢是越來越多的人在訓練和測試集分布不匹配的情況下進行訓練,假設你要構建一個用戶可以上傳大量圖片的應用程序,目的是找出并呈現所有貓咪圖片,可能你的用戶都是愛貓人士,訓練集可能是從網上下載的貓咪圖片,而驗證集和測試集是用戶在這個應用上上傳的貓的圖片,就是說,訓練集可能是從網絡上抓下來的圖片。而驗證集和測試集是用戶上傳的圖片。結果許多網頁上的貓咪圖片分辨率很高,很專業,后期制作精良,而用戶上傳的照片可能是用手機隨意拍攝的,像素低,比較模糊,這兩類數據有所不同,針對這種情況,根據經驗,我建議大家要確保驗證集和測試集的數據來自同一分布,關于這個問題我也會多講一些。因為你們要用驗證集來評估不同的模型,盡可能地優化性能。如果驗證集和測試集來自同一個分布就會很好。
但由于深度學習算法需要大量的訓練數據,為了獲取更大規模的訓練數據集,我們可以采用當前流行的各種創意策略,例如,網頁抓取,代價就是訓練集數據與驗證集和測試集數據有可能不是來自同一分布。但只要遵循這個經驗法則,你就會發現機器學習算法會變得更快。我會在后面的課程中更加詳細地解釋這條經驗法則。
最后一點,就算沒有測試集也不要緊,測試集的目的是對最終所選定的神經網絡系統做出無偏估計,如果不需要無偏估計,也可以不設置測試集。所以如果只有驗證集,沒有測試集,我們要做的就是,在訓練集上訓練,嘗試不同的模型框架,在驗證集上評估這些模型,然后迭代并選出適用的模型。因為驗證集中已經涵蓋測試集數據,其不再提供無偏性能評估。當然,如果你不需要無偏估計,那就再好不過了。
在機器學習中,如果只有一個訓練集和一個驗證集,而沒有獨立的測試集,遇到這種情況,訓練集還被人們稱為訓練集,而驗證集則被稱為測試集,不過在實際應用中,人們只是把測試集當成簡單交叉驗證集使用,并沒有完全實現該術語的功能,因為他們把驗證集數據過度擬合到了測試集中。如果某團隊跟你說他們只設置了一個訓練集和一個測試集,我會很謹慎,心想他們是不是真的有訓練驗證集,因為他們把驗證集數據過度擬合到了測試集中,讓這些團隊改變叫法,改稱其為“訓練驗證集”,而不是“訓練測試集”,可能不太容易。即便我認為“訓練驗證集“在專業用詞上更準確。實際上,如果你不需要無偏評估算法性能,那么這樣是可以的。
所以說,搭建訓練驗證集和測試集能夠加速神經網絡的集成,也可以更有效地衡量算法地偏差和方差,從而幫助我們更高效地選擇合適方法來優化算法。
課程PPT
| 4.9 總結習題 (第一課) | 回到目錄 | 1.2 偏差/方差 |
總結
以上是生活随笔為你收集整理的1.1 训练/开发/测试集-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 0.0 目录-深度学习第二课《改善神经网
- 下一篇: 1.2 偏差/方差-深度学习第二课《改善