0
雷鋒網(wǎng) AI 科技評論:對于深度學習而言,在有很多數(shù)據(jù)的情況下,再復(fù)雜的問題也不在話下,然而沒有這么多數(shù)據(jù)呢?本文作者 Tyler Folkman 針對這一問題,為大家介紹了幾個在有限的數(shù)據(jù)上使用深度學習的方法,讓深度學習即便在面臨數(shù)據(jù)稀缺時,也能大展身手。
眾所周知,深度學習是有史以來最棒的事情。它能夠在大量數(shù)據(jù)上以低成本解決復(fù)雜問題。唯一的問題是你既不在谷歌工作,也不在臉書工作,你的數(shù)據(jù)是稀缺的,那么你該怎么辦?你是能繼續(xù)使用是深度學習的能力,還是已無計可施?
下面就讓我介紹幾個在有限的數(shù)據(jù)上使用深度學習的方法,以及闡述為什么我認為這可能是未來研究中最令人興奮的領(lǐng)域之一。
在我們探討在有限的數(shù)據(jù)上使用深度學習的方法之前,請先從神經(jīng)網(wǎng)絡(luò)后退一步,建立一個簡單的基線。用一些傳統(tǒng)模型(如隨機森林)進行實驗通常不會花費很長時間,而這將有助于評估深度學習的所有潛在提升,并針對你的問題提供更多權(quán)衡深度學習方法和其他方法的視角。
這聽起來可能很荒謬,但是你真的考慮過自己能否收集更多的數(shù)據(jù)嗎?我經(jīng)常向公司提出獲取更多數(shù)據(jù)的建議,但他們視我的建議如瘋?cè)睡傉Z,這讓我很吃驚。是的,投入時間和金錢去收集更多的數(shù)據(jù)是可行的,而事實上,這通常也是你最好的選擇。例如,也許你正試圖對稀有鳥類進行分類,但數(shù)據(jù)非常有限。幾乎可以肯定地說,你可以僅僅通過標注更多的數(shù)據(jù)來比較輕易地解決這個問題。你不確定需要收集多少數(shù)據(jù)?對此,你可以在增加額外的數(shù)據(jù)時嘗試繪制學習曲線(相關(guān)教程鏈接:https://www.dataquest.io/blog/learning-curves-machine-learning/),并同時查看模型性能的變化,從而確定所需的數(shù)據(jù)量。
攝影作者 Drew Patrick Miller,來源 Unsplash(網(wǎng)站鏈接:https://unsplash.com/?utm_source=medium&utm_medium=referral)
現(xiàn)在假設(shè)你已經(jīng)有一個簡單的基線模型,且在獲取更多數(shù)據(jù)上要么不可行要么太昂貴。此時最可靠和正確的方法是利用預(yù)訓練模型,然后針對你的問題對模型進行微調(diào)。
微調(diào)的基本思想是取一個一定程度上跟模型所在域相似的非常大的數(shù)據(jù)集,訓練一個神經(jīng)網(wǎng)絡(luò),然后用你的小數(shù)據(jù)集對這個預(yù)先訓練好的神經(jīng)網(wǎng)絡(luò)進行微調(diào)。你可以在 A Comprehensive guide to Fine-tuning Deep Learning Models in Keras 這篇文章閱讀更多內(nèi)容:
對于圖像分類問題,最常用的數(shù)據(jù)集是 ImageNet。這個數(shù)據(jù)集涵蓋目標多個類的數(shù)百萬張圖像,因此可以用于許多類型的圖像問題。它甚至包括動物,因此可能有助于稀有鳥類的分類。
若需要使用一些用于微調(diào)的代碼,請參閱 Pytorch 的教程(教程鏈接:https://pytorch.org/tutorials/beginner/finetuning_torchvision_models_tutorial.html)。
如果你無法獲得更多的數(shù)據(jù),并且無法成功地對大型數(shù)據(jù)集進行微調(diào),那么數(shù)據(jù)增強通常是你接下來的最佳選擇。它還可以與微調(diào)一起使用。
數(shù)據(jù)增強背后的思想很簡單:在不改變標簽值的情況下,以提供新數(shù)據(jù)的方式改變輸入。
例如,你有一張貓的圖片,旋轉(zhuǎn)圖片后仍然是一張貓的圖片,這便是一次不錯的數(shù)據(jù)增強。另一方面,如果你有一張道路的圖片,想要預(yù)測適當?shù)姆较虮P轉(zhuǎn)度(自動駕駛汽車),若旋轉(zhuǎn)這張道路的圖片將會改變適當?shù)姆较虮P轉(zhuǎn)度,除非你把方向盤轉(zhuǎn)度調(diào)整到適當位置,否則難以預(yù)測成功。
數(shù)據(jù)增強是圖像分類問題中最常見的方法,相關(guān)的技術(shù)可以在這個網(wǎng)站獲?。?a target="_blank" rel=nofollow>https://nanonets.com/blog/data-augmentation-how-to-use-deep-learning-when-you-have-limited-data-part-2/。
你也可以經(jīng)常思考一些創(chuàng)造性的方式來將數(shù)據(jù)增強應(yīng)用到其他領(lǐng)域,例如 NLP(相關(guān)示例可參考:https://towardsdatascience.com/these-are-the-easiest-data-augmentation-techniques-in-natural-language-processing-you-can-think-of-88e393fd610),同時大家也在嘗試使用 GANs 來生成新數(shù)據(jù)。如果對 GAN 方法感興趣,可以閱讀《深度對抗數(shù)據(jù)增強》(Deep Adversarial Data Augmentation)這篇文章(文章鏈接:https://github.com/SchafferZhang/DADA)。
最近的一篇論文《不使用余弦損失進行預(yù)訓練的情況下在小數(shù)據(jù)集上進行深度學習》(Deep Learning on Small Datasets without Pre-Training using Cosine Loss)(論文鏈接:https://arxiv.org/pdf/1901.09054.pdf)發(fā)現(xiàn),在分類問題中將損失函數(shù)從分類交叉熵損失轉(zhuǎn)換為余弦損失時,小數(shù)據(jù)集的準確率提高了 30%,而余弦損失僅為“ 1 - 余弦相似度”。
從上圖中可以看出,基于每個類的樣本數(shù)量的性能是如何變化的,以及微調(diào)對于一些小型數(shù)據(jù)集(CUB)是多么有價值,而對于其他數(shù)據(jù)集(CIFAR-100)則沒有那么有價值。
在一篇 NIPS 論文《小數(shù)據(jù)集的現(xiàn)代神經(jīng)網(wǎng)絡(luò)泛化》(Modern Neural Networks Generalize on Small Data Sets)(論文鏈接:https://papers.nips.cc/paper/7620-modern-neural-networks-generalize-on-small-data-sets.pdf)種,作者將深度神經(jīng)網(wǎng)絡(luò)視為集合。具體來說,即「與其說每一層都呈現(xiàn)出不斷增加的特征層次,不如說最后一層提供了一種集成機制?!?/p>
從中得到的關(guān)于小數(shù)據(jù)的益處是確保你建立的深度網(wǎng)絡(luò)能利用這種集成效應(yīng)。
現(xiàn)在已有通過采用更多優(yōu)化的起始權(quán)重成功使用堆棧自編碼器對網(wǎng)絡(luò)進行預(yù)訓練的案例(該案例可參考論文「Using deep neural network with small dataset to predict material defects」:https://www.sciencedirect.com/science/article/pii/S0264127518308682)。這樣可以避免局部優(yōu)化和其他不良初始化的陷阱。不過,Andrej Karpathy 建議不要對無監(jiān)督預(yù)訓練過度興奮(相關(guān)文章可參考:http://karpathy.github.io/2019/04/25/recipe/)。
如果你需要復(fù)習自編碼器相關(guān)知識,可以看看斯坦福大學的深度學習教程(網(wǎng)址:http://ufldl.stanford.edu/tutorial/unsupervised/Autoencoders/)。自編碼器的基本思想是建立一個預(yù)測輸入的神經(jīng)網(wǎng)絡(luò)。
圖 4:攝影作者 Glen Noble,來源 Unsplash(網(wǎng)站鏈接:https://unsplash.com/?utm_source=medium&utm_medium=referral)
最后一點是嘗試找到結(jié)合特定領(lǐng)域知識的方法,以指導(dǎo)學習過程。例如,在論文《通過概率程序規(guī)劃歸納進行類人概念學習》(Human-level concept learning through probabilistic program induction,論文鏈接:https://science.sciencemag.org/content/350/6266/1332)中,作者構(gòu)建了一個能夠在學習過程中利用先驗知識從部分概念中構(gòu)造整體概念的模型,這樣的模型能夠?qū)崿F(xiàn)人類水平的性能,并超出了當時的深度學習方法。
你也可以使用域知識來限制對網(wǎng)絡(luò)的輸入,以降低維度或?qū)⒕W(wǎng)絡(luò)體系結(jié)構(gòu)調(diào)整的更小。
我將其作為最后的選擇,是因為結(jié)合先驗知識可能是一個挑戰(zhàn),通常也是最耗費時間的。
希望本文為你提供了一些關(guān)于如何在有限的數(shù)據(jù)上使用深度學習技術(shù)的思路。我個人認為,這是一個目前沒有得到足夠討論的問題,但它具有令人非常興奮的意義。
大量問題的數(shù)據(jù)非常有限,因為獲取更多的數(shù)據(jù)要么非常昂貴要么不可行,就比如說檢測罕見疾病或教育成果。找到方法來應(yīng)用深度學習等最好的技術(shù)來解決這些問題是非常令人興奮的!正如吳恩達(Andrew Ng)也曾提到:
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。