深度學習演算法對於 訓練資料極度飢渴 當您可以找到足夠的 標籤練資料放在訓練集 它們通常會作用得很好 這已經造成在許多團隊有時候 採用不管您可以找到什麼樣的資料 只為了將更多資料擠進訓練集 即使一些資料,甚至於很多資料 不同於您的開發跟測試集的分佈 所以在深度學習時代 越來越多的團隊現在訓練用的資料 來自於跟您的開發跟測試集 不同的分佈 有一些細節 跟一些最佳做法來 處理您的訓練跟測試 來自於不同的分佈 讓我們來看看 假設您正建立一個行動應用,使用者上傳 從他們的手機拍攝的照片 您想要辨識這些片 您的使用者從行動應用 上傳的照片是不是貓的照片 所以您會得到兩種資料來源 一種是您真正關心的資料 來源是手機應用程式 像是右邊這種 往往比較不是專業的拍照 比較不好的取景, 甚至模糊, 因為它是由業餘使用者拍攝 另外一種您可取得的資料是 您可以爬網路下載 很多,以這個例子而言 您可以下載很多 專業的取景,高解析度 專業的貓攝影 假設說您的行動應用 還沒有很多的使用者 或許您拿到 10,000 張照片 從行動應用上傳而來 但用爬網路的方式 您可以下載大量的貓照片 或許您有 200,000 張貓照片 從網路下載來 而您真正關心的是 在您的最終系統 在手機應用的照片分佈 可以作用得很好,是吧 因為最終,您的使用者會 上傳像右邊這樣的照片 而您需要您的分類器在 這樣的照片作用得很好 但您現在有一點矛盾 因為您有相對較小的 資料集,只有 10,000 個例子 從這樣的分佈取出 而您有更大的資料集 從另一種分佈取出 比起您想要的 有不同的樣貌的照片 您不想只用這 10,000 張照片 因為這會導致 給您相對小的訓練集 使用這些 200,000 影像應該有幫助 但矛盾的是這些 200,000 影像 並不真正是從您要的分佈來的 您要怎麼做? 這裡有一種選擇 您可以將這些資料集放一起 總共有 210,000 個影像 而您可以拿這 210,000 影像 隨機洗牌成為 訓練,開發跟測試集 為了方便解釋起見 您決定您的開發 跟測試集會是各 2,500 所以您的訓練集會是 205,000 個例子 用這樣的設定有一些 好處跟壞處 好處是現在您的訓練,開發跟測試集 來自於同一個分佈 所以比較容易管理 但壞處是 這是一個大壞處 如果您看您的開發集的這 2,500例子 很多來自於網頁分佈的影像 而不是您真正關心的 從行動應用來的影像分佈 實際上您所有的資料 210,000 中的 200,000 我將 200,000 縮寫成 200K 我將 210,000 縮寫成 210k 是從網頁來的 所以這 2,500 個例子 我期望約 2,381 個例子從網頁來的 這是期望值,真正的值會 根據隨機洗牌時運算產生 但平均而言, 只有約 119 個例子會從行動應用上載 記得設定您的開發集 是為了告訴您的團隊 哪邊是您們的目標 而注意您們目標的方式是 您們花了大部分的時間在最佳化於 網頁分佈的影像, 這不是您真正要的 所以我建議反對使用第一種選項 因為這是設定您的開發集來 告訴您的團隊最佳化於 不同分佈的資料, 而不是您真正關心的 所以與其使用這種方式 我會建議您採用另一種選項如下 訓練集,假設依然是 205,000 影像 我會在訓練集使用所有 來自於網頁的 200,00 影像 而如果您要的話, 您可以把 5,000 從行動應用上載的影像加入 而對於開發跟測試集 我想我的資料集畫的比例不太好 您的開發跟測試集 會全部都是從行動應用來的 所以訓練集會包含 200,000 從網頁來的影像 5,000 從行動應用來的 開發集會是 2,500 從行動應用來的影像 測試集也會是 2,500 從行動應用來的影像 用這樣的方式來拆您的資料 變成訓練,開發跟測試的好處是 您現在的目標會 是您真正要的 您告訴您的團隊,我的開發集的資料 來自於行動應用的上載 那是您真正關心的影像分佈 讓我們來建立一個機器學系系統,真的在 行動應用的影像分佈 作用得很好 壞處是,當然是 現在您的訓練 分佈不同於您的 開發跟測試分佈 然而實際上這樣的分拆資料 成為訓練,開發 跟測試長期而言 會給您較佳的表現 我們會在以後談論一些特定的技巧 來應付您的 訓練集跟開發,測試集 來自於不同的分佈 讓我們看另一個例子 假設您正建立一個全新的產品 一種汽車後視鏡的 語音啟動應用 這是真正在中國的產品 它正朝著其他國家輸出, 但您可以建立一個後視鏡 取代原本的這個小東西, 而您可以跟後視鏡對話 基本上可以說, 後視鏡,請幫我 導航到最近的加油站, 而它會依照辦理 這是一個真正的產品,假設您也試著 在您的國家做這樣的產品 您要如何獲取資料來 訓練語音辨識系統 對於這種產品 或許您已經在語音辨識 工作很長一段時間 您有很多的資料 來自於其他語音辨識應用 只是沒有來自於 後視鏡語音啟動應用 您可以這樣來分拆您的 訓練跟開發,測試集 對於訓練,您可以拿 所有您的語音資料 您從其他語音問題累積的資料,像是 您多年以來從不同的 語音辨識資料商購買的 今日您真的可以從供應商 買到 x,y 成對資料 而 x 是語音檔而 y 是語音對照的文字 或者您可以用智慧揚聲器, 智慧語音啟動揚聲器 您可以從那裏 獲得一些資料 或許您可以從語音啟動鍵盤 來獲取一些資料 方便討論起見,或許您有 500,000 聲音從所有這些來源 而對於您的開發跟測試集, 或許您有較少的資料集 實際上從語音啟動後視鏡得到的 因為會有使用者詢問 對於導航查詢 或者試著尋找不同地點的方向等等 這種資料集或許有很多的 像是街道,地址等等 請幫我導航到這個街道位址,或者 請幫我導航到加油站 所以這種資料分佈會 非常不同於在左邊的資料 但這資料是您真正關心的, 因為您要您的 產品在這種資料作用得很好, 所以您這樣設定您的開發跟測試集 所以您在這個例子 設定了您的訓練集為 在左邊的 500,000 語音,而 您的開發跟測試集,我用 D 跟 T 縮寫 這些可能會是每種 10,000 語音 是從真正的語音啟動後視鏡取得的 或者,如果您覺得您不需要將所有 20,000 個例子 從語音啟動後視鏡取得的放進開發跟 測試集中,或許您可以拿一半放在訓練集 這樣訓練集會有 510,000 語音 包含了 這裡的 500k 跟 10,000 從後視鏡取得 而開發跟測試集會有 5,000 個語音 所以對於這 20,000 語音,或許 10k 到訓練集 5k 到開發集,而 5,000 個到測試集 所以這會是一種合理的方式來分拆您的資料成為 訓練,開發跟測試 而這會給您大很多的訓練集, 超過 500,000 個語音, 比起您只用從語音啟動後視鏡 得到的資料來當訓練集 在這段影片中,您看到一些例子,允許讓您在 訓練集資料使用跟 開發,測試來自於不同的分佈 讓您可以有更多的訓練資料 在這些例子,會讓您的訓練算法表現更佳 一個問題或許您會問,您是否總會用到所有您有的資料? 這答案很微妙,並不總是這樣 我們在下段影片看一些反例