2020-5-15 吳恩達-改善深層NN-w1 深度學習的實用層面(1.1 訓練/開發(驗證)/測試集)

1.視頻網站:mooc慕課https://mooc.study.163.com/university/deeplearning_ai#/c
2.詳細筆記網站(中文):http://www.ai-start.com/dl2017/
3.github課件+作業+答案:https://github.com/stormstone/deeplearning.ai

1.1 訓練/開發(驗證)/測試集 Train/dev/test sets

本節將介紹在配置訓練、驗證和測試數據集的過程中,做出正確決策會在很大程度上幫助大家創建高效的NN。

在訓練NN時候,需要做出很多決策,即超參的選擇,例如

  • NN的層數,layers
  • 每層的隱藏單元數,hidden units
  • 學習率,learning rate
  • 各層採用哪種激活函數,activation functions

創建新應用的過程中,我們不可能從一開始就準確預測出這些信息和其他超參。實際上ML應用是一個高度迭代的過程,這在前面的學習中已經介紹過。
在這裏插入圖片描述

DL已經在自然語言處理NLP,計算機視覺,語音識別以及結構化數據應用等衆多領域取得巨大成功。結構化數據無所不包,從廣告到網絡搜索。其中網絡搜索不僅包括網絡搜索引擎,還包括購物網站;從所有根據搜索欄詞條傳輸結果的網站,再到計算機安全,物流,比如判斷司機去哪接送貨,範圍之廣,不勝枚舉。

可能有NLP方面的人才想踏足計算機視覺領域,或者經驗豐富的語音識別專家想投身廣告行業,又或者有的人想從電腦安全領域跳到物流行業。但是從一個領域或者應用領域得來的直覺經驗,通常無法轉移到其他應用領域

最佳決策取決於

  • 你所擁有的數據量
  • 計算機配置中輸入特徵的數量
  • 用GPU訓練還是CPU,GPU和CPU的具體配置
  • 其他諸多因素

對於很多應用系統,即使是經驗豐富的DL行家也不太可能一開始就預設出最匹配的超參。所以說,DL應用是一個典型的迭代過程,需要多次循環往復,才能爲應用程序找到一個稱心的NN。

循環該過程的效率是決定項目進展速度的一個關鍵因素,而創建高質量的訓練數據集,驗證集和測試集也有助於提高循環效率。

在這裏插入圖片描述

如上圖,通常我們把數據集分爲3個部分

  • 訓練集,training set
  • 交叉驗證集,hold-out cross validation set。或者稱爲驗證集,development set。在本文中統一稱爲dev set。
  • 測試集,test set

我們在訓練集上執行算法,通過驗證集或簡單交叉驗證集選擇最好的模型。經過充分驗證,我們選定了最終模型,最後在測試集上進行評估,無偏評估算法的運行狀況。

數據集比例

在ML發展的小數據量時代,如果沒有明確設置驗證集,常見做法是將所有數據三七分,就是人們常說的70%驗證集,30%測試集。也可以按照60%訓練,20%驗證和20%測試集來劃分。

在大數據時代,我們的數據量可能是百萬級別,那麼驗證集和測試集佔數據總量的比例會趨向於變得更小。因爲驗證集的目的就是驗證不同的算法,檢驗哪種算法更有效,因此,驗證集要足夠大才能評估,比如2個甚至10個不同算法,並迅速判斷出哪種算法更有效。我們可能不需要拿出20%的數據作爲驗證集。

比如我們有100萬條數據,那麼取1萬條數據便足以進行評估,找出其中表現最好的1-2種算法。

同樣地,根據最終選擇的分類器,測試集的主要目的是正確評估分類器的性能。所以,如果擁有百萬數據,我們只需要1萬條數據,便足以評估單個分類器,並且準確評估該分類器的性能。

所以,假設我們有100萬條數據,其中

  • 1萬條作爲驗證集,1%
  • 1萬條作爲測試集,1%
  • 訓練集佔98%

對於數據量過百萬的應用

  • 訓練集可以佔到99.5%
  • 驗證和測試集各佔0.25%,或者驗證集佔0.4%,測試集佔0.1%。

訓練集數據與驗證集和測試集數據不是來自同一分佈

DL的另一個趨勢是越來越多的人在訓練和測試集分佈不匹配的情況下進行訓練。

例如:假設你要構建一個用戶可以上傳大量圖片的應用程序,目的是找出並呈現所有貓咪圖片,訓練集train sets可能是從網上下載的貓咪圖片,而驗證集dev sets和測試集test sets是用戶在這個應用上上傳的貓的圖片。

結果網頁上的貓咪圖片分辨率很高,很專業,後期製作精良,而用戶上傳的照片可能是用手機隨意拍攝的,像素低,比較模糊,這兩類數據有所不同。

經驗法則:針對這種情況,建議大家要確保驗證集和測試集的數據來自同一分佈。因爲你們要用驗證集來評估不同的模型,儘可能地優化性能。如果驗證集和測試集來自同一個分佈就會很好。

由於DL算法需要大量的訓練數據,爲了獲取更大規模的訓練數據集,我們可以採用網頁抓取。代價就是訓練集數據與驗證集和測試集數據有可能不是來自同一分佈。但只要遵循這個經驗法則,你就會發現DL算法會變得更快。

沒有測試集的情況

最後一點,就算沒有測試集也不要緊,測試集的目的是對最終所選定的神經網絡系統做出無偏估計,如果不需要無偏估計,也可以不設置測試集。

所以如果只有驗證集,沒有測試集,我們要做的就是,在訓練集上訓練,嘗試不同的模型框架,在驗證集上評估這些模型,然後迭代並選出適用的模型。因爲驗證集中已經涵蓋測試集數據,其不再提供無偏性能評估。

在DL中,如果只有一個訓練集和一個驗證集,而沒有獨立的測試集,遇到這種情況,訓練集還被人們稱爲訓練集,而驗證集則被稱爲測試集。不過在實際應用中,人們只是把測試集當成簡單交叉驗證集使用,並沒有完全實現該術語的功能,因爲他們把驗證集數據過度擬合到了測試集中。

總結

搭建訓練,驗證集和測試集能夠加速NN的集成,也可以更有效地衡量算法地偏差和方差,從而幫助我們更高效地選擇合適方法來優化算法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章