在上一部影片
你看到了開發集和測試集必須來自相同的分布
但，該取多少資料呢？
關於開發/測試集
設置的準則在深度學習的年代已有所變
讓我們看看實務上最好的作法
你可能聽過機器學習的某個法則：
把你所有的資料
分成 70%, 30% 變成訓練和測試集
或者把訓練/開發/測試集設成
你可能會用 60% 做訓練、20% 開發、20% 測試
在機器學習的早期
這是相當合理的
特別是當時資料數量還很少
如果你總共有一百筆資料
這種 70/30 或 60/20/20 準則很合理
如果你有一千筆
或者有一萬筆資料
這種慣例也不會太奇怪
但在現今的年代
我們已經習慣用更多的資料
假設你有一百萬筆的資料
這樣分資料會更合理：
你把 98% 當成訓練集
1% 來開發，1% 來測試
我用 D 和 T 代表開發集 (dev) 和測試集 (test)
因為如果有一百萬筆資料
那百分之一
就是一萬筆資料，這用來開發/測試已經足夠了
因此，在現今深度學習的年代，資料時常超大
用其中遠小於 20 或 30% 的資料
來當作開發或測試，這也很合理
因為深度學習演算法需要很大量的資料，我發現
那些需要大量資料的問題
其資料有很大一部份都用在訓練上。
那麼，測試集呢？
還記得測試集的目的在於
當你的系統開發完畢
測試集可以評量最終的系統有多好
所以準則是，讓你的測試集夠大到足以
評估出讓人信服的成效
因此，除非你必須知道
非常準確的系統成效
否則你大概不需要百萬等級的測試集
或許對於你的應用程式，一萬筆資料
就能讓你有信心知道成效
抑或是十萬筆之類的，只要夠用就好
這可能會比
你整個資料的 30% 還少
看你有多少資料。
在某些應用
你可能不需要對最終系統的成效有很高的信心
也許你只需要訓練和開發集
我覺得沒有測試集應該也ok
實際上，有時碰到的情況是
當有人在講
"train-test splits" (分成訓練/測試)，可是他們真正在做的 是對測試集反覆測試
這樣並不叫測試集
其實這樣是 "train-dev split" (分成訓練/開發)，沒有測試集
如果你拿這個來調整系統
開發集也好、測試集也好
— 其實最好稱之為「開發集」。
雖然我想，以前做機器學習的人
不是所有人對名稱都很講究
會把這樣的情況稱之為開發集。
不過如果你只想要訓練些資料
拿些資料來調整系統
然後就想要推出你的產品
而並不在乎最終效果如何
那麼，這樣我覺得稱之「訓練/開發」
並提醒說沒有「測試」資料，這樣比較恰當。
這會很奇怪嗎？
我絕對不是建議不要用測試集。當我在做系統，
有單獨的測試集我會比較安心
在推出產品前，可以拿它得到比較公正的估計
不過，如果你的開發集很大
你覺得你不會太 overfit (過適) 你的開發集
或許只有訓練/開發集也不會不合理
雖然我通常不會建議這樣。
總結一下，在大數據的時代
我認為 70/30 這種舊的經驗
已經不適用了
趨勢是使用更多的資料來訓練；較少的資料當開發/測試
特別是你的資料集非常大的時候
準則現在是，讓開發資料多到足以達成目的即可：
能幫助你評估各種想法，挑選最好的。
而測試資料的目的是：對最終產出的分類器做評量
測試集的大小只要能達到這目的即可
而這可能會比 30% 還要來的少。
那麼，我希望這能給你一些指引、建議
在深度學習的年代來準備你的開發和測試集。
接下來：其實有時候
在解機器學習的過程中
你可能會想要改變你的衡量指標
或是更改開發和測試集
且讓我們談談什麼時候會想這樣做