交叉驗證時要注意的幾點
無論哪種機器學習的演算法,檢測的最終標準都是其能否泛化。而檢測的方式,則是交叉驗證。交叉驗證是一個需要講究細節的環節,在交叉驗證,你用的是正確的版本嗎?中,我區別了兩種不同的交叉驗證的方式。而今天想談談交叉驗證設計上的其他問題。
假設你在做一個推薦萌貓照片的app,其核心的演算法是用深度神經網路從一堆照片中找出下面這樣的圖
在這種情況下,你該怎樣劃分你的測試集和訓練集了。對於不熟悉的讀者,訓練集是提供給機器用來尋找規律的數據,而訓練集則是用來檢測演算法給出的預測是否靠譜的。如果你劃分不當,就會出現這樣的問題。假設你的訓練數據全部是美國的貓,而測試數據則全部是印度的貓。那麼也許你訓練出的神經網路會只適合檢測米國的喵,而忽略其他國家的喵。從這個案例中我們總結道,在做交叉驗證的時候,測試集和驗證集的分布要是一致的。
然而分布一致是一個很模糊的標準。具體來說,你考慮了貓的品種,避免了訓練集中只有花狸貓,而測試集之中只是波斯貓,也就是說你保證了不同品種的貓在訓練集和測試集中分布一致。然而,你可能會沒有意識到下圖這樣的小貓,從而導致了你訓練的分類器不適合標出小貓,可偏偏小貓是最萌的最受喜歡的。之所以會出現這樣的問題,是因為你不是貓的專家,無法設想出對貓進行分類的多種維度。這也是說為什麼機器學習項目的成功必須要結合應用領域的專業知識的原因。機器學習演算法的研發,永遠需要人的參與,只有懂得相關領域的人,才能找出對數據進行分類的不同維度,從而避免出現訓練集與測試集分布不一的情況。
然而,了解一項應用的使用場景對設計交叉驗證的細節也是很關鍵的。還舉之前的那個應用。假設你的分類器給用戶推送了一張小黃圖,但是小黃圖上有一隻喵。這樣的推送是你不需要的。這時你應該做什麼?你首先要意識到會出現這樣的情況,然後要麼調整你訓練出的神經網路,讓其能識別出小黃圖,從而避免這樣尷尬的情況。要麼就需要再訓練一個識別小黃圖的神經網路,過濾最初用來作為篩選的數據。這個例子用來說明在設計交叉驗證時,你需要對需求有足夠的了解,對可能出現的情況有全面的設想,如果你在設計交叉驗證的時候,在測試集和訓練集中都引入了小黃圖+貓的類型,那麼這樣的問題就能在測試時識別出來。
在設置好了測試集和訓練集之後,你需要做的是找出一個指標,來幫助你快速的評價不同的方法/參數,以實現迅速的迭代。但問題是評價的標準往往有很多個,且往往不再一個維度。對於不同的應用領域和問題,這個用來評價的指標應該考慮多個因素。還用推薦萌貓的神經網路作為例子,你評價時不止要考慮分類的準確度,還要考慮這個神經網路的運行所需的時間和資源,畢竟你的APP每天都會給用戶推薦貓的照片,是一個持續的需求,再細想,如果你的APP 每天不止給用戶推薦一張貓的照片,而是推薦一組,那麼這一組照片中最好能夠不全是小貓或者某一組貓。如何將這些評價標準組合成一個一維的指標,是需要用戶去在摸透了實際需求後去考慮的。
對一個模型的評價,也會如同對測試數據的分布一樣存在多個維度。有的是眼前要解決的需求,有的是立足長遠的考量。還是萌貓照片推薦的問題,另一個評價的標準是模型的遷移能力,你的模型能否在不做大修改的前提下應用到推薦狗的照片。這是橫向的遷移,你的模型能否應用到只推薦某一種狗,比如只推薦雪橇犬或者牧羊犬的照片,這是縱向的遷移。只有在模型一開始的設計和選擇時就考慮到了這些未來的應用場景,才能在一開始不做出短視的選擇。
推薦閱讀:
※1.1 TensorFlow最基礎的了解
※為什麼計算機科學專業背景的人喜歡黑機器學習?
※MIT線性代數課程精細筆記[第三課]
※KDD 2017華人獲獎情況
※學習筆記TF016:CNN實現、數據集、TFRecord、載入圖像、模型、訓練、調試
TAG:机器学习 |