對于深度學習而言,在有很多數據的情況下,再復雜的問題也不在話下,然而沒有這么多數據呢?本文作者 Tyler Folkman 針對這一問題,為大家介紹了幾個在有限的數據上使用深度學習的方法,讓深度學習即便在面臨數據稀缺時,也能大展身手。
眾所周知,深度學習是有史以來最棒的事情。它能夠在大量數據上以低成本解決復雜問題。唯一的問題是你既不在谷歌工作,也不在臉書工作,你的數據是稀缺的,那么你該怎么辦?你是能繼續使用是深度學習的能力,還是已無計可施?
下面就讓我介紹幾個在有限的數據上使用深度學習的方法,以及闡述為什么我認為這可能是未來研究中最令人興奮的領域之一。
一、先從簡單的開始
在我們探討在有限的數據上使用深度學習的方法之前,請先從神經網絡后退一步,建立一個簡單的基線。用一些傳統模型(如隨機森林)進行實驗通常不會花費很長時間,而這將有助于評估深度學習的所有潛在提升,并針對你的問題提供更多權衡深度學習方法和其他方法的視角。
二、獲取更多數據
這聽起來可能很荒謬,但是你真的考慮過自己能否收集更多的數據嗎?我經常向公司提出獲取更多數據的建議,但他們視我的建議如瘋人瘋語,這讓我很吃驚。是的,投入時間和金錢去收集更多的數據是可行的,而事實上,這通常也是你最好的選擇。例如,也許你正試圖對稀有鳥類進行分類,但數據非常有限。幾乎可以肯定地說,你可以僅僅通過標注更多的數據來比較輕易地解決這個問題。你不確定需要收集多少數據?對此,你可以在增加額外的數據時嘗試繪制學習曲線(相關教程鏈接),并同時查看模型性能的變化,從而確定所需的數據量。
三、微調
現在假設你已經有一個簡單的基線模型,且在獲取更多數據上要么不可行要么太昂貴。此時最可靠和正確的方法是利用預訓練模型,然后針對你的問題對模型進行微調。
微調的基本思想是取一個一定程度上跟模型所在域相似的非常大的數據集,訓練一個神經網絡,然后用你的小數據集對這個預先訓練好的神經網絡進行微調。你可以在 A Comprehensive guide to Fine-tuning Deep Learning Models in Keras 這篇文章閱讀更多內容:
文章鏈接
對于圖像分類問題,最常用的數據集是 ImageNet。這個數據集涵蓋目標多個類的數百萬張圖像,因此可以用于許多類型的圖像問題。它甚至包括動物,因此可能有助于稀有鳥類的分類。
若需要使用一些用于微調的代碼,請參閱 Pytorch 的教程。
四、數據增強
如果你無法獲得更多的數據,并且無法成功地對大型數據集進行微調,那么數據增強通常是你接下來的最佳選擇。它還可以與微調一起使用。
數據增強背后的思想很簡單:在不改變標簽值的情況下,以提供新數據的方式改變輸入。
例如,你有一張貓的圖片,旋轉圖片后仍然是一張貓的圖片,這便是一次不錯的數據增強。另一方面,如果你有一張道路的圖片,想要預測適當的方向盤轉度(自動駕駛汽車),若旋轉這張道路的圖片將會改變適當的方向盤轉度,除非你把方向盤轉度調整到適當位置,否則難以預測成功。
數據增強是圖像分類問題中最常見的方法,相關的技術可以在這個網站獲取。
你也可以經常思考一些創造性的方式來將數據增強應用到其他領域,例如 NLP(相關示例可參考),同時大家也在嘗試使用 GANs 來生成新數據。如果對 GAN 方法感興趣,可以閱讀《深度對抗數據增強》(Deep Adversarial Data Augmentation)這篇文章(文章鏈接)。
五、余弦損失
最近的一篇論文《不使用余弦損失進行預訓練的情況下在小數據集上進行深度學習》(Deep Learning on Small Datasets without Pre-Training using Cosine Loss)(論文鏈接)發現,在分類問題中將損失函數從分類交叉熵損失轉換為余弦損失時,小數據集的準確率提高了 30%,而余弦損失僅為“ 1 - 余弦相似度”。
從上圖中可以看出,基于每個類的樣本數量的性能是如何變化的,以及微調對于一些小型數據集(CUB)是多么有價值,而對于其他數據集(CIFAR-100)則沒有那么有價值。
六、深入
在一篇 NIPS 論文《小數據集的現代神經網絡泛化》(Modern Neural Networks Generalize on Small Data Sets)(論文鏈接)種,作者將深度神經網絡視為集合。具體來說,即「與其說每一層都呈現出不斷增加的特征層次,不如說最后一層提供了一種集成機制。」
從中得到的關于小數據的益處是確保你建立的深度網絡能利用這種集成效應。
七、自編碼器