機器學習-4

阿蘇爾發表於2018-04-16

本文來自於網易雲課堂

在不同的劃分上進行訓練和測試

深度學習演算法對訓練資料的胃口很大,當你收集到足夠多的資料集並構成訓練集時演算法效果最好。這導致很多團隊用盡一切辦法收集資料然後把他們堆到訓練集裡,讓訓練的資料量更大,即使有些資料都來自和開發集測試集不同的分佈。所以在深度學習時代,越來越多的團隊,都用來自和開發集和測試集分佈不同的資料來訓練。這裡有一些微妙的地方,一些最佳做法,來處理訓練集和測試集存在差異的情況。
假如你要開發一個識別貓的app,你的資料來源有兩個。一個是使用者上傳的圖片,這些圖片可能很業餘,甚至很模糊。另一個是通過爬蟲網路得到很多取景專業,高解析度,拍攝專業的圖片。前期你的使用者量很少,可能使用者的圖片很少,不到1萬張。而通過網路爬蟲,也許你從網際網路上下載了超過20萬張貓圖。你真正關心的演算法表現是你的最終系統處理來自應用程式的這個圖片分佈時效果好不好。

現在你進入了兩難的境地。一個是來自使用者的小的資料集,它是一種分佈,而另一個是大得多的資料集,來自另一個分佈,圖片的外觀和你真正想要處理的並不一樣。那麼你該怎麼做呢?

這裡有一種選擇,你可以將兩種資料組合在一起,這樣你就有了21萬張圖片,然後將這21萬張圖片隨機分配到訓練、開發和測試集中。這麼做有一些好處,你的訓練集、開發集和測試集都來自同一分佈,這樣更好管理。但壞處在於,而且壞處還不小,就是如果你觀察開發集,看看這2500個樣本,裡面很多都是網頁上的圖片,並不是你真正關心的圖片,你真正要處理的是來自手機的圖片。根據分佈,2500個樣本中真正來自於使用者的期望只有119。設立開發集的目標是瞄準你的目的,而採用這種方式很大程度都在優化網路圖片,這並不是你想要的。所以,這一個選項不推薦考慮。
這裡寫圖片描述
第二個選項還是205000張圖片,5000張來自於。但是開發集和測試集都是2500張使用者圖片。這樣將資料分成訓練集、開發集和測試集的好處在於現在你瞄準的目標就是你想要處理的目標。缺點在於分佈不一樣。但事實證明這樣劃分在長期能給你帶來更好的系統效能。

不同匹配資料劃分的偏差和方差

分析方差和偏差會讓你確定一個方向,但當資料分佈不同時,分析偏差和方差的方式可能不一樣。
這裡寫圖片描述
同樣以貓分類問題舉例子,對於同一分佈,訓練集誤差為1%而開發集誤差為10%,那麼你會說存在很大的方差問題。但是如果是不同分佈,這個結論就不能輕易的下了。特別是,也許演算法在開發集上做的不錯,可能是因為訓練集很容易識別,因為訓練集都是高解析度圖片,但開發集難識別的多。所以也許模型並沒有方差問題,這只不過反映了開發集包含更難準確分類的圖片。所以這個分析的問題在於,當你看訓練誤差,再看開發誤差,有兩件事變了。首先演算法只見過訓練集資料,沒見過開發集資料。第二,開發集資料來自不同的分佈,而且因為你同時改變了兩件事情,很難確認這增加的9%誤差,有多少是因為演算法沒看到開發集中的資料導致的,這是問題方差的部分。以及有多少是因為開發集資料就是不一樣導致的。為了弄清楚哪個因素影響更大,定義一組新的資料是有意義的,我們稱之為訓練-開發集,這是一個新的資料子集。這個資料集來自於訓練集,與訓練集同一分佈,但是不參與到訓練中。
這裡寫圖片描述
從上圖可以看到,第一種就是屬於方差問題,第二種屬於資料不匹配的問題。因為貝葉斯誤差基本為0,所以第三種是存在偏差問題了。而第四個例子不僅有偏差還有方差問題。
這裡寫圖片描述
你突然發現在開發集上和測試集上表現良好。如果你發現這種現象,這說明訓練集資料其實比你的開發集和測試集難識別的多,才導致了誤差 下降。
這裡寫圖片描述
這裡以後視鏡語音識別的例子介紹一下更普適的分析。事實證明,我們可以將這些誤差放到一張表中。水平軸上放入不同的資料集,
第一項可能是來自小型智慧音響的語音識別問題的資料。第二項是收集的和後視鏡(rear view)有關的語音資料。

定位資料不匹配

如果你的訓練集來自和開發測試集不同的分佈,如果誤差分析顯示你有一個資料不匹配的問題,該怎麼辦?這個問題沒有完全系統的解決方案,但我們可以嘗試一些東西。
這裡寫圖片描述

相關文章