[DeeplearningAI筆記]ML strategy_2_2訓練和開發/測試資料集不匹配問題
阿新 • • 發佈:2019-02-12
機器學習策略-不匹配的訓練和開發/測試資料
2.4在不同分佈上訓練和測試資料
- 在深度學習時代,越來越多的團隊使用和開發集/測試集不同分佈的資料來訓練模型.下面解釋一些方法來處理訓練集和測試集存在差異的情況.
Example1
- 假設你要開發一個識別貓的機器學習系統,其中 需要識別的是使用者手機上傳的貓的圖片 這些圖片往往清晰度低,取景不專業,識別度低.由於使用者量少的緣故,這些圖片量很少,只有大約1W張.但是從網上可以下載大量清晰度高,取景專業,辨識度高的貓的圖片,大約20W張. 1W張的使用者圖片是我們真正關心的資料,但是這對於訓練模型是遠遠不夠的.所以我們將20W網上下載的高清圖片作為訓練集,但這和想要實際處理的資料並不一樣
Solution1
- 將20W張高清圖片與1W張使用者手機上傳的模糊圖片混合,隨機分配到訓練,開發和測試集中.假設你已經確定開發集和測試集中各包含2500個樣本,訓練集包括205000個樣本.
- 這種方式很大的壞處在於:對於 開發集 的2500個樣本,大部分來自於網上下載的高清圖片.這並不是你真正關心的資料分佈.由數學期望我們計算出大約有
200K210K=2381 張圖片來自高清資料集,有10K210K=119 張圖片來自於使用者上傳圖片即真正應該關心的資料. - 所以這種方式的結果是系統的大部分工作是優化網上下載的高清圖片.這並不是我們需要的分佈.
- 這種方式不推薦使用
Solution2
- 為了避免Solution1中帶來的問題,我們將使用網上的高清圖片200K張圖片和5K張來自使用者手機的上傳圖片作為 訓練集
- 這種方式的好處在於:開發集和測試集中的圖片來與使用者上傳的手機圖片 這才是你係統真正關心的重點.
Example2
- 假設你要開發一個智慧語音汽車後視鏡,你現在有很多語音資料,但是這些都不是來自智慧語音後視鏡的.下面解釋如何來分配訓練集,開發集和測試集.
- 訓練集
- 500K段語音資料:
- 購買的帶標籤的語音資料
- 智慧音箱,語音啟用音箱資料
- 語音啟用鍵盤資料
- 10K段語音啟用後視鏡資料
- 開發集/測試集語音資料:
- 各來自實際語音啟用後視鏡的資料5K段語音資料.
2.5 不匹配分佈的偏差和方差
- 對於訓練集和開發/測試集來自不同的分佈的情況而言,我們計算偏差和方差的方法不同.
Notics
- 演算法只見過訓練集資料,沒見過開發集資料
- 開發集資料來自不同的分佈
- 需要辨清開發集上的誤差有多少是因為演算法沒看到開發集中的資料導致的<方差>,多少是因為開發集資料分佈本身就不一樣<資料不匹配>
Solution
- 定義一個新的資料train-dev set 從訓練集中抽取資料,和訓練集資料來自同一個資料分佈,但是不用於訓練資料.
分別將分類器在訓練集/訓練-開發集/開發集上執行,獲取其準確率資訊
- 假如在訓練集上誤差為1%,在訓練-開發集上誤差為9%,在開發集上誤差為10%
- 分類器在訓練集和訓練開發集上誤差差距較大,這表明演算法沒有識別沒有看到過的資料,這表明分類器本身方差較大
分類器在訓練-開發集和開發集上誤差差距不大,表明演算法誤差的差距不是主要由於資料 分佈不一樣 導致的
假如在訓練集上誤差為1%,在訓練-開發集上誤差為1.5%,在開發集上誤差為10%
- 分類器在訓練集和訓練開發集上誤差差距較小,這表明分類器本身方差不大
- 分類器在訓練-開發集和開發集上誤差差距很大,表明演算法誤差的差距主要由於 資料不匹配 導致的
2.6 定位資料不匹配
- 如果你的訓練集和開發/測試集來自不同的資料分佈,並且誤差分析的結果表明你有一個數據不匹配的問題,這個問題沒有標準的解決方案,但是我們可以嘗試一些可以做的事情.
Suggestion
- 做誤差分析,並且瞭解訓練集和開發/測試集的具體差異.
- 人為加工訓練集(人工合成數據),使其和開發/測試集更加相近,或者收集更多的類似於開發/測試集的資料.
- 對於作者舉例的語音識別智慧後視鏡的例子,我們可以先準備大量清晰的音訊(不帶馬路噪音的資料),然後手機汽車噪音的音訊,將兩者合成後成為人工合成的資料.
- 但是應該注意,任意重複噪音,容易造成模型對該段噪音的過擬合.最好是不要重複噪音資料,而是收集等長的噪音資料.學習演算法有可能取得更好的效能.
- 當使用人工資料合成時,一定謹記有可能人工合成的資料只是從所有可能性的空間選取了很小一部分去模擬資料.