2.4 使用来自不同分布的数据,进行训练和测试-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
| 2.3 快速搭建你的第一個系統,并進行迭代 | 回到目錄 | 2.5 不匹配數據劃分的偏差和誤差 |
使用來自不同分布的數據,進行訓練和測試 (Training and Testing on Different Distributions)
深度學習算法對訓練數據的胃口很大,當你收集到足夠多帶標簽的數據構成訓練集時,算法效果最好,這導致很多團隊用盡一切辦法收集數據,然后把它們堆到訓練集里,讓訓練的數據量更大,即使有些數據,甚至是大部分數據都來自和開發集、測試集不同的分布。在深度學習時代,越來越多的團隊都用來自和開發集、測試集分布不同的數據來訓練,這里有一些微妙的地方,一些最佳做法來處理訓練集和測試集存在差異的情況,我們來看看。
假設你在開發一個手機應用,用戶會上傳他們用手機拍攝的照片,你想識別用戶從應用中上傳的圖片是不是貓。現在你有兩個數據來源,一個是你真正關心的數據分布,來自應用上傳的數據,比如右邊的應用,這些照片一般更業余,取景不太好,有些甚至很模糊,因為它們都是業余用戶拍的。另一個數據來源就是你可以用爬蟲程序挖掘網頁直接下載,就這個樣本而言,可以下載很多取景專業、高分辨率、拍攝專業的貓圖片。如果你的應用用戶數還不多,也許你只收集到10,000張用戶上傳的照片,但通過爬蟲挖掘網頁,你可以下載到海量貓圖,也許你從互聯網上下載了超過20萬張貓圖。而你真正關心的算法表現是你的最終系統處理來自應用程序的這個圖片分布時效果好不好,因為最后你的用戶會上傳類似右邊這些圖片,你的分類器必須在這個任務中表現良好?,F在你就陷入困境了,因為你有一個相對小的數據集,只有10,000個樣本來自那個分布,而你還有一個大得多的數據集來自另一個分布,圖片的外觀和你真正想要處理的并不一樣。但你又不想直接用這10,000張圖片,因為這樣你的訓練集就太小了,使用這20萬張圖片似乎有幫助。但是,困境在于,這20萬張圖片并不完全來自你想要的分布,那么你可以怎么做呢?
這里有一種選擇,你可以做的一件事是將兩組數據合并在一起,這樣你就有21萬張照片,你可以把這21萬張照片隨機分配到訓練、開發和測試集中。為了說明觀點,我們假設你已經確定開發集和測試集各包含2500個樣本,所以你的訓練集有205000個樣本。現在這么設立你的數據集有一些好處,也有壞處。好處在于,你的訓練集、開發集和測試集都來自同一分布,這樣更好管理。但壞處在于,這壞處還不小,就是如果你觀察開發集,看看這2500個樣本其中很多圖片都來自網頁下載的圖片,那并不是你真正關心的數據分布,你真正要處理的是來自手機的圖片。
所以結果你的數據總量,這200,000個樣本,我就用 200k200k200k 縮寫表示,我把那些是從網頁下載的數據總量寫成 210k210k210k ,所以對于這2500個樣本,數學期望值是: 2500?200k210k=23812500*\frac{200k}{210k}=23812500?210k200k?=2381 ,有2381張圖來自網頁下載,這是期望值,確切數目會變化,取決于具體的隨機分配操作。但平均而言,只有119張圖來自手機上傳。要記住,設立開發集的目的是告訴你的團隊去瞄準的目標,而你瞄準目標的方式,你的大部分精力都用在優化來自網頁下載的圖片,這其實不是你想要的。所以我真的不建議使用第一個選項,因為這樣設立開發集就是告訴你的團隊,針對不同于你實際關心的數據分布去優化,所以不要這么做。
我建議你走另外一條路,就是這樣,訓練集,比如說還是205,000張圖片,我們的訓練集是來自網頁下載的200,000張圖片,然后如果需要的話,再加上5000張來自手機上傳的圖片。然后對于開發集和測試集,這數據集的大小是按比例畫的,你的開發集和測試集都是手機圖。而訓練集包含了來自網頁的20萬張圖片,還有5000張來自應用的圖片,開發集就是2500張來自應用的圖片,測試集也是2500張來自應用的圖片。這樣將數據分成訓練集、開發集和測試集的好處在于,現在你瞄準的目標就是你想要處理的目標,你告訴你的團隊,我的開發集包含的數據全部來自手機上傳,這是你真正關心的圖片分布。我們試試搭建一個學習系統,讓系統在處理手機上傳圖片分布時效果良好。缺點在于,當然了,現在你的訓練集分布和你的開發集、測試集分布并不一樣。但事實證明,這樣把數據分成訓練、開發和測試集,在長期能給你帶來更好的系統性能。我們以后會討論一些特殊的技巧,可以處理 訓練集的分布和開發集和測試集分布不一樣的情況。
我們來看另一個樣本,假設你正在開發一個全新的產品,一個語音激活汽車后視鏡,這在中國是個真實存在的產品,它正在進入其他國家。但這就是造一個后視鏡,把這個小東西換掉,現在你就可以和后視鏡對話了,然后只需要說:“親愛的后視鏡,請幫我找找到最近的加油站的導航方向”,然后后視鏡就會處理這個請求。所以這實際上是一個真正的產品,假設現在你要為你自己的國家研制這個產品,那么你怎么收集數據去訓練這個產品語言識別模塊呢?
嗯,也許你已經在語音識別領域上工作了很久,所以你有很多來自其他語音識別應用的數據,它們并不是來自語音激活后視鏡的數據?,F在我講講如何分配訓練集、開發集和測試集。對于你的訓練集,你可以將你擁有的所有語音數據,從其他語音識別問題收集來的數據,比如這些年你從各種語音識別數據供應商買來的數據,今天你可以直接買到成 x,yx,yx,y 對的數據,其中 xxx 是音頻剪輯, yyy 是聽寫記錄?;蛘咭苍S你研究過智能音箱,語音激活音箱,所以你有一些數據,也許你做過語音激活鍵盤的開發之類的。
舉例來說,也許你從這些來源收集了500,000段錄音,對于你的開發集和測試集也許數據集小得多,比如實際上來自語音激活后視鏡的數據。因為用戶要查詢導航信息或試圖找到通往各個地方的路線,這個數據集可能會有很多街道地址,對吧?“請幫我導航到這個街道地址”,或者說:“請幫助我導航到這個加油站”,所以這個數據的分布和左邊大不一樣,但這真的是你關心的數據,因為這些數據是你的產品必須處理好的,所以你就應該把它設成你的開發和測試集。
在這個樣本中,你應該這樣設立你的訓練集,左邊有500,000段語音,然后你的開發集和測試集,我把它簡寫成 DDD 和 TTT ,可能每個集包含10,000段語音,是從實際的語音激活后視鏡收集的?;蛘邠Q種方式,如果你覺得不需要將20,000段來自語音激活后視鏡的錄音全部放進開發和測試集,也許你可以拿一半,把它放在訓練集里,那么訓練集可能是51萬段語音,包括來自那里的50萬段語音,還有來自后視鏡的1萬段語音,然后開發集和測試集也許各自有5000段語音。所以有2萬段語音,也許1萬段語音放入了訓練集,5000放入開發集,5000放入測試集。所以這是另一種將你的數據分成訓練、開發和測試的方式。這樣你的訓練集大得多,大概有50萬段語音,比只用語音激活后視鏡數據作為訓練集要大得多。
所以在這個視頻中,你們見到幾組樣本,讓你的訓練集數據來自和開發集、測試集不同的分布,這樣你就可以有更多的訓練數據。在這些樣本中,這將改善你的學習算法。
現在你可能會問,是不是應該把收集到的數據都用掉?答案很微妙,不一定都是肯定的答案,我們在下段視頻看看一個反例。
課程板書
| 2.3 快速搭建你的第一個系統,并進行迭代 | 回到目錄 | 2.5 不匹配數據劃分的偏差和誤差 |
總結
以上是生活随笔為你收集整理的2.4 使用来自不同分布的数据,进行训练和测试-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.3 快速搭建你的第一个系统,并进行迭
- 下一篇: 2.5 数据不匹配时,偏差和方差的分析-