為什么你需要改進訓練數據,如何改進?

1 評論 6298 瀏覽 8 收藏 29 分鐘

本文為雷鋒字幕組編譯的技術博客,原標題 Why you need to improve your training data, and how to do it,作者為 Pete Warden 。

Andrej Karpathy 在他的 Train AI 演講中展示了這張膠片,我非常喜歡,這張膠片完美地揭示了深度學習在研究與生產間的區別。

?圖片來自 Lisha Li

通常來說,學術論文的主要精力是放在開發新的、先進的模型上面,在數據集方面一般都是從公開的數據集取一部分使用。而相反,那些我所知道的想用深度學習技術做實際應用的開發者們,他們絕大部分的精力都花在了擔心他們的訓練數據上面。

有許多好的原因可以解釋,為什么那些研究員會將精力放在模型架構上,而對于那些想要在實際生產過程中運用機器學習的人來說,相關的指導材料就比較少。

為了解決這個問題,我在此次會議上的演講主題是「關于訓練數據上不可以思議的效果」,并且我想在這篇 blog 中進一步說明為什么優化訓練數據是如此重要,并給出一些實用的建議。

在我的工作中經常與許多研究員與生產團隊有緊密的合作,而我之所以如此相信優化數據的魔力,是因為我親眼目睹了它們在構建模型時,所發揮的作用,以及所帶來的巨大收益。

對于大多數應用來說,能否使用深度學習的最大障礙是——模型精度能否達到實際使用的要求。而據我所知,最快捷的提升精度的方式就是優化訓練集。并且如果在部署過程中,你還受限于,例如:時延或存儲大小等因素,那么你可能需要在一個滿足性能要求,經過折衷的較小模型架構上來提升模型精度。

語音控制

我不能分享我在所生產系統中觀察到的,但是我能從一個開源項目的例子中來證明這點。

去年我通過 Tensorflow 框架搭建了一個簡單的語音識別系統,但在實現的過程中發現,沒有現成的數據集,可以讓我來訓練模型。在大量志愿者的幫助下,我收集了 60000 個 1 秒鐘的語音片段,這里要感謝 Open Speech 網站中的 AIY 團隊。

通過這個數據集,最終訓練出來的模型是可用的,但是精度沒有達到我的預期。為了看看這是否是由于我所設計模型所導致的,我在 Kaggle 上用同樣的訓練集發起了一個競賽。在競賽中,許多競賽者設計的模型要比我的效果好,但即使是來自不同團隊不同方法,最終的精度也就只能達到 91%。

對我來說,這暗示著數據集中存在一些基本的錯誤,確實,有競賽者也向我指出了許多關于訓練集的錯誤,如:有些音頻標簽打錯了,有些音頻不完整。這促使我有了發布一個新數據集的動力,解決他們所指出的那些問題并且再補充更多的樣本。

我通過查看錯誤的度量標準,去理解什么樣的詞匯是模型難以識別的。結果顯示:「其他」種類(當語音辨識系統識別語音時該單詞卻不在模型所訓練到的詞匯中)的是最容易識別錯誤的。為了解決這個問題,我們獲取了更多不同的單詞以確保訓練數據的多樣性。

自從 Kaggle 競賽者報告了標簽錯誤這一問題,我就請人做了額外的驗證環節,請人去聽每個語音片段然后確保它與預期的標簽相符。另外由于 Kaggle 數據集還被發現了有很多幾乎沒有聲音,或者很短的聲音。

因此,我寫了能自動做一些音頻分析,并且剔除這些不太好的數據的小程序。最終,雖然刪除了很多不太好的語音數據,但還是將語音數據增加到了十萬,這多虧了志愿者與一些受雇人員的努力。

為了幫助其他人更好地使用數據集(不要重蹈我的覆轍?。┪覍⑦@一切相關的都寫在一篇 Arixiv 論文當中了,以及更新后的準確率。

最重要的結論是:在不改變模型和測試集數據的情況下,top-one(第一次預測類)的準確率從 85.4% 提高到 89.7%,整整提高了超過 4%。這是一個令人驚嘆的提升,這樣的提升對于將模型部署在安卓或樹莓派小應用的人來說,這是十分滿意的了。

另外,我也很有自信在使用的模型架構落后于現有先進水平的情況下,通過花費一定時間來調整模型獲得進一步的少量提高。

這是在實際應用過程中一次又一次獲得過好結果的過程,然而如果你想做一樣的嘗試,那么從哪開始對于你來說其實是比較困難的?

你可以從我剛才對語音數據的處理中得到一些啟發,但是我這里有一些更實用的方法。

首先,觀察你的數據

這個似乎是顯而易見的,但其實你首先需要做的是隨機觀察你的訓練數據。將其中一部分復制到你的本地機,并且花費幾個小時去預覽它們。如果你的數據是一些圖片,那么使用一些類似 MacOs 系統的查看器非??焖俚牟榭磾登埧s略圖。

對于音頻來說,可以播放它們的預覽,又或者對于文本來說,可以隨機的轉儲一些片段到終端設備。我沒有用足夠的時間在第一次語音中做這樣的工作,因此導致 Kaggle 參賽者發現非常多的問題。

我總是會感覺到這個觀察數據的過程有點傻,但是我從未后悔過。每次我這么做之后都會發現很多關于數據集的一些很關鍵的問題,像是類別不均衡問題,無法讀入的數據(例如 :PNG 格式的圖片被加上了 JPG 格式的后綴),錯誤的標簽亦或者令人奇怪的組合。

Tom White 在預先觀察數據的過程中,在 ImageNet 數據集中有一些奇特的發現,例如:將一個用于放大太陽光的古老設備標記為「太陽鏡」,一張有魅力的圖片被標記為垃圾車,一個穿著紅斗篷的女人被標記為「斗篷」。

Andrej 手工區分從 ImageNet 中的照片的工作,也教會了我很多對于數據集的理解,包括即使對于一個人來說區分狗的種類也是很困難的事。

你所采取的行動取決于你的發現,但其實你應該堅持在做其他的數據清洗工作之前,有這樣的對于數據預先觀察的過程,因為在這個過程中,你會獲取一些直覺信息,以幫助你在其他步驟里作出決策。

快速選擇模型

不要花太多時間在模型選擇上,如果你需要做圖像分類,可以看看 AutoML,TensorFlow 的 model repository,或者 Fast.AI 的 collection of examples,這些模型庫里一般可以找到一些解決類似于你產品的問題的模型。

最重要的是:盡快開始迭代你的模型,這樣你就可以盡早地讓真實用戶來測試你的模型。你總會有機會在后續的過程中來提高你的模型,也可能會得到更好的結果,但是首先你必須保證你的數據在一開始就是有效的。

深度學習依然遵從最基本的計算定律,輸入無效數據,那么就輸出無效的結果。因此,即使最好的模型也受限于訓練數據中的瑕疵。通過選擇一個模型并對其進行測試,你會找到訓練數據中存在的問題并對這些問題進行改進。

為了進一步提高你的迭代速度,可以從一個已經在大樣本數據上訓練過的模型開始,利用遷移學習在一個你所收集的可能小很多的數據集上,來對模型參數進行微調。相比直接用你的小樣本數據來對模型進行訓練,這樣通常可以更快地得到更好的結果,你也可以由此找到一些感覺需要怎樣對你收據收集的方式,做一些必要的調整。

這樣做最重要的效果是,你可以把你訓練得到的結果反饋到數據收集的過程中去,邊學習邊調整,而不是把數據采集作為一個獨立的在訓練之前的一個步驟。

創造之前先模擬

研究建模和產品建模之間最大的區別在于——前者通常在一開始就有一個非常明確的問題描述,而后者對于模型的許多要求一開始并不明確,而是存在于用戶的腦中,需要一步一步挖掘出來。

例如:我們希望 Jetpac 能提供好的照片給自動化的城市旅游指南。

開始的時候,我們讓打分的人來給照片貼標簽,如果他們覺得照片「好」,就給照片做標記。但是,我們最后得到了很多帶有微笑的人像的照片,因為打分者認為這些是「好」照片。我們把這些標記了的照片用到我們的產品模型中,看看測試用戶的反應。

可想而知,他們并不滿意最后的結果。為了解決這個問題,我們把標記照片時的問題改成了:「這張照片會吸引你去這個地方旅游嗎?」

這使得我們得到的標記照片質量提高很多,但是,我們還是得到了一些這樣的標記照片,一些東南亞尋找工作的人認為,在大酒店里有很多西裝革履拿著酒杯的會議照片非常吸引人。

這些被不正確標記的照片提醒我們,當下生活的泡沫時代,但是這是個實際的問題,因為我們的目標人群是美國人,他們會覺得會議照片非常的乏味又無趣。最終,我們 Jetpac 組的六個人手動標記了超過 200 萬的照片,因為我們比任何其他人更清楚打分的標準是什么。

這是一個比較極端的例子,但是它說明了數據標記過程很大程度上取決于你應用的要求。對于大部分產品應用的案例,開發人員需要花很長的時間,來搞清楚我們到底需要模型回答一個什么樣的問題,而搞清楚這個問題是非常關鍵的。

如果你的模型在回答一個錯誤的問題,那么在這個基礎上,你將永遠不能創造一個好的用戶體驗。

我認為唯一能夠確認你是否在問正確的問題的方法是模擬你的應用,但是不是用機器學習模型而是用人的反饋。這個方法有時被稱為「Wizard-of-Oz-ing」,因為幕后有人在操作。

在 Jetpac 這個案例上,我們請人手動從一些旅游指南的樣本中,選擇一些照片,并用測試用戶的反饋,來調整我們選擇照片的標準,而不是訓練一個模型來做這件事。

一旦我們的測試反饋都是肯定的,我們就把最后的照片選擇標準,作為標記的準則,來對訓練集里數百萬的照片進行打分做標記。這些照片之后訓練的模型,有能力對數以億計的照片,進行高精度的預測,但是這個模型的核心起源于我們手動標記確定出來的打分標準。

用同源數據做訓練

在 Jetpac 這個項目上,我們用于訓練模型的圖片(主要來源于 Facebook 和 Instagram)和我們最終使用模型的圖片是同源的。但是,一個普遍的問題在于——用于訓練的數據常常和最終要應用模型處理的數據,在一些很重要的特征上不一致。

例如:我常常遇到有些團隊在 ImageNet 上訓練他們的模型,但是最終他們的模型,卻是要用于解決無人機或者機器人圖片的問題。

這樣做也是有道理的,因為 ImageNet 上有很多人拍攝的照片,而這些照片和無人機或者機器人得到的照片有很多共性。ImageNet 上的照片很多是手機或者相機,使用中性鏡頭,在大概一人的高度,自然光或者人工打光下,并保證被標記的對象處于前景中心位置這些條件下拍攝的。

機器人和無人機使用攝像照相機,通常用視角鏡頭,從地面或者高空在光線較弱,也不會使用智能定位的情況下拍攝照片,所以這些照片中的對象常常是不完整的。這些圖片特性的差異最終會導致在 ImageNet 上訓練的模型,當應用于這些器械得到的圖片上時,精度是很低的。

還有一些更巧妙的方法,可以讓你的訓練數據偏離最終的應用顯示出來。

想象一下:你正在建造一個相機來識別野生動物,并利用世界各地的動物數據集進行訓練。如果你只用 Borneo 叢林中的數據來部署模型,那么分類標簽為企鵝的概率會非常低。但假如訓練集中加入南極的照片,那很有可能其他的動物會被誤認為企鵝,所以比起訓練集沒有這些南極照片的時候,模型的整體錯誤率可能會更高。

有時候可以通過先驗知識來校正模型的結果(比如:在叢林環境中大量降低企鵝的概率),但是更簡單而有效的方法是——使用可以反映真實的產品環境的訓練集。

所以,我認為最好的方法還是始終使用從實際應用中直接獲取的數據,這與我上面建議的「Wizard-of-Oz-ing」可以聯系起來。人工干預可以是對初始數據集進行標記,即使收集到的標簽數量非常少,它們也可以反映實際使用情況,并有望進行一些遷移學習的初步實驗。

聯系數據分析指標

當我在處理語音命令示例時,最頻繁出現的報告之一就是訓練過程中的混淆矩陣。

下面是控制臺中顯示的例子:

這可能看起來很嚇人,但實際上它只是一張表格,顯示了神經網絡出錯的細節。

這里有一個更漂亮一些的標簽版本:

該表中的每一行表示某個標簽下的語音,被預測為所有類別標簽的具體數量,每一列顯示了被預測為某個具體的標簽的原型的分布。例如:突出顯示的這行,表示這些音頻樣本實際上都屬于 Slience,從左到右可以看到每一個樣本都在 Slience 這一列中,表示預測的這些標簽都是正確的。

這說明此模型非常善于預測 Slience 類,沒有錯誤的否定任何一個 Slience 樣本。如果我們查看 Slience 這一整列,可以看到有多少其他樣本被預測為 Slience 標簽,我們可以看到有很多單詞片段被誤認為是 Slience 類,假陽性數量相當多。

事實證明這是有幫助的,因為它讓我更仔細地觀察那些被錯誤地歸類為 Slience 的片段,這其中很多錄音都出現了異常低音的情況。這幫助我通過刪除低音量的剪輯來提高數據的質量,如果沒有混亂矩陣,我不會知道應該這樣做。

幾乎任何一種總結都有助于改進實驗結果,但是我發現混淆矩陣是一個很好的折衷方案,它給出的信息比一個精確的數字要多,但不會因為細節太多而使我困惑。在訓練期間觀察數字變化也很有用,因為它可以告訴您模型正在努力學習的類別,這樣就可以給你提供需要清理和擴展的數據集區域。

物以類聚

我最喜歡的理解方式之一是讓網絡來解釋我的訓練數據——可視化聚類。

TensorBoard 非常支持這樣的探究方法,雖然它經常被用于查看詞嵌入向量,但我發現它幾乎適用于任何類似于嵌入的層。例如:圖像分類網絡,通常把最后的全連接層或 softmax 單元之前的倒數第二層,當作一個嵌入層 (像 Tensorflow for poets 的簡單遷移學習的示例一樣)。

這些并不是嚴格意義上的嵌入,因為在訓練過程中,沒有采取任何手段,來確保它們會在一個真實的嵌入層中,有理想的空間屬性。但是對它們的向量進行聚類,確實會產生有趣的結果。

有一個真實的事例是:我工作的其中一個團隊難以理解,為什么某些動物在圖像分類模型中有很高錯誤率。所以他們使用聚類可視化,來查看他們的訓練數據在不同類別下的分布情況,當他們看到「Jaguar」時,他們清楚地看到數據被分成兩個不同的組,彼此之間有一定的距離。

圖片來自?djblock99?and?Dave Adams

這是他們看到的圖。圖中每個照片都映射成了兩個數據集中的點,很明顯,許多捷豹品牌的汽車被錯誤地貼上了美洲虎的標簽。一旦他們知道這個方法,他們就能看到標記過程,這樣就可以意識到他們的研究方向混淆了用戶使用界面。

有了這些信息,他們就能夠改進標記人員的培訓過程并修復這個工具,即只要將所有的汽車圖像從 Jaguar 類別中刪除,就可以使模型中這個類別獲得更高的準確率。

聚類讓你對訓練集有了深入的了解,并且像直接查看數據一樣非常便利,但是網絡實際上,只是通過它自己的學習理解,將輸入數據分組來指導你進行探究。

作為人類,我們很擅長在視覺上發現異常,所以結合我們的直覺和計算機處理大量輸入的能力,可以為追蹤數據質量的問題,提供了一個非常好的可擴展解決方案。

關于使用 TensorBoard 進行此操作的完整教程超出了本文的范圍 (我很感激您還在閱讀本文),但是如果你真的想提高實驗結果,我強烈建議你熟悉這個工具。

經常收集數據

我從來沒有見過收集更多的數據,而不能提高模型的準確性的情況,事實證明有很多研究支持我這一看法。

這張圖來自于「重新審視數據的不合理有效性」,展示了當訓練數據集的規模增長到數億時,圖像分類的模型精度是如何不斷提高的。

Facebook 最近更深入地進行了這方面的研究,使用數十億張有標簽的 Instagram 圖片,刷新了 ImageNet 分類精度的記錄。這表明,即使很難獲得大型、高質量數據集,增加訓練集的大小仍然會提高模型結果。

這意味著,只要有任何更好的模型精度使用戶受益,就需要一個持續更新數據集的策略。如果可以,尋找一個創造性的方法去利用微弱的信號,以此訪問更大的數據集。對此,Facebook 采用 Instagram 標簽就是一個很好的案例。

另一種途徑是提高標記流水線的智能化,比如:利用模型的初始版本預測標簽,通過增強工具使貼標者做出更快的決定。這樣會有初始偏差復現的風險,但在實踐中,收益往往高于這種風險。

在這個問題上,投入大量資金去聘請更多的人,為新的訓練輸入做標記,通常是一個有價值的投資。盡管傳統上,這類沒有預算支出的項目組織,可能會有困難。如果你是一個非盈利者,讓你的支持者更容易通過一些開源工具提供數據,這是一種增加你數據規模且不會導致破產的好方法。

當然,對任何組織來說一個自然地生成更多標記數據的產品就是圣杯。我不會太在意這種觀念,但這不適合現實世界的多數案例,人們只想免除復雜的標記問題而盡快得到答案。

對于一家初創公司來說,這是一個好的投資熱點,因為它就像一個用于模型改善的永動機,但幾乎總是會有一些單位成本用于清理或增加你將收到的數據,因此經濟學往往最終將它看做一個比真正免費的商業眾包更便宜的版本。

通往風險區的高速公路

對于應用程序的用戶來說,模型誤差幾乎比損失函數捕獲有更大的影響。你需要提前考慮最差的可能結果,并試圖給模型設置一個反饋抑制來避免這些結果的發生。

這可能只是一個你永遠不想預測的類別的黑名單,因為錯誤的代價非常高,或者你可能有一個簡單的算法規則,來保證所做行為不會超出你所考慮到的一些邊界參數。例如:你可能會保留一個永遠不希望文本編輯器輸出的誓言表,即使是訓練集中也不行,因為它不適合你的產品。

不好的結果可能會被考慮到,但事先不總是如此明顯,所以從現實錯誤中汲取教訓是至關重要的。一旦你有一半的產品/市場是體面的,一個最簡單的方法是運用有缺陷的報告。

當人們使用你的系統應用,并從模型中得到一個不想要的結果,讓他們容易告訴你。如果可能的話,獲得模型的完整輸入,但如果是敏感數據,只要知道不良輸出是什么,這樣可幫助指導你的調查。

這些類別可以幫助你選擇收集更多數據的位置,和了解當前標簽質量屬于哪些級別。一旦你的模型有一個新的版本,除了正常的測試集外,利用先前產生不良結果的輸入,并對這部分輸入的測試結果進行單獨評估。

這種改進方法有點像回歸測試,并給你提供一種方法來跟蹤你改善用戶體驗的效果,因為單個模型精度指標,將永遠無法完全捕捉到人們所關心的所有信息。通過查看一小部分過去引發強烈反應的例子,你可以獲得一些獨立的證據,來表明你確實正在為用戶提供更好的服務。

如果因為過于敏感以至于你無法給模型獲得這些輸入數據,可采用自我測試或內部實驗的方式,來確定哪些輸入會產生這些錯誤,然后用回歸集來替換它們。

故事是什么,牽?;??

我希望我已成功說服你在數據上花費更多的時間,并且給了你一些如何投資改善它的觀點。我對這個有價值的領域沒有關注太多,僅在這里給了一些膚淺的建議,所以我感謝每一個與我分享他們策略的人,并且我希望我將會聽到更多關于你已取得成功的方法。

我認為將會有越來越多的專業工程師團隊,組織專注于數據集的優化改善,而不是留給 Ml 研究人員來推動進展,我期待看到整個領域因為這些而得到發展。

我總是驚嘆即使針對嚴重缺陷的訓練數據,模型一樣會運作良好,因此我迫不及待的想看到我們的數據集模型改進以后還能做些什么。

 

翻譯:孫宗堯、郭佳昌、石金紅、劉嬌、張韶華

整理:凡江

原文作者:Pete Warden

原文鏈接:https://petewarden.com/2018/05/28/why-you-need-to-improve-your-training-data-and-how-to-do-it/

來源:https://www.leiphone.com/news/201806/kpXvrKxbTPaGlesx.html

本文來源于人人都是產品經理合作媒體@雷鋒網,譯者@孫宗堯、郭佳昌、石金紅、劉嬌、張韶華

題圖來自Unsplash,基于CC0協議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發揮!