深度學習遇上稀缺數據就無計可施?這裡有幾個好辦法!

2020-12-08 雷鋒網

雷鋒網 AI 科技評論:對於深度學習而言,在有很多數據的情況下,再複雜的問題也不在話下,然而沒有這麼多數據呢?本文作者 Tyler Folkman 針對這一問題,為大家介紹了幾個在有限的數據上使用深度學習的方法,讓深度學習即便在面臨數據稀缺時,也能大展身手。

眾所周知,深度學習是有史以來最棒的事情。它能夠在大量數據上以低成本解決複雜問題。唯一的問題是你既不在谷歌工作,也不在臉書工作,你的數據是稀缺的,那麼你該怎麼辦?你是能繼續使用是深度學習的能力,還是已無計可施?

下面就讓我介紹幾個在有限的數據上使用深度學習的方法,以及闡述為什麼我認為這可能是未來研究中最令人興奮的領域之一。

一、先從簡單的開始

在我們探討在有限的數據上使用深度學習的方法之前,請先從神經網絡後退一步,建立一個簡單的基線。用一些傳統模型(如隨機森林)進行實驗通常不會花費很長時間,而這將有助於評估深度學習的所有潛在提升,並針對你的問題提供更多權衡深度學習方法和其他方法的視角。

二、獲取更多數據

這聽起來可能很荒謬,但是你真的考慮過自己能否收集更多的數據嗎?我經常向公司提出獲取更多數據的建議,但他們視我的建議如瘋人瘋語,這讓我很吃驚。是的,投入時間和金錢去收集更多的數據是可行的,而事實上,這通常也是你最好的選擇。例如,也許你正試圖對稀有鳥類進行分類,但數據非常有限。幾乎可以肯定地說,你可以僅僅通過標註更多的數據來比較輕易地解決這個問題。你不確定需要收集多少數據?對此,你可以在增加額外的數據時嘗試繪製學習曲線(相關教程連結:https://www.dataquest.io/blog/learning-curves-machine-learning/),並同時查看模型性能的變化,從而確定所需的數據量。

三、微調

攝影作者 Drew Patrick Miller,來源 Unsplash(網站連結:https://unsplash.com/?utm_source=medium&utm_medium=referral

現在假設你已經有一個簡單的基線模型,且在獲取更多數據上要麼不可行要麼太昂貴。此時最可靠和正確的方法是利用預訓練模型,然後針對你的問題對模型進行微調。

微調的基本思想是取一個一定程度上跟模型所在域相似的非常大的數據集,訓練一個神經網絡,然後用你的小數據集對這個預先訓練好的神經網絡進行微調。你可以在 A Comprehensive guide to Fine-tuning Deep Learning Models in Keras 這篇文章閱讀更多內容:

對於圖像分類問題,最常用的數據集是 ImageNet。這個數據集涵蓋目標多個類的數百萬張圖像,因此可以用於許多類型的圖像問題。它甚至包括動物,因此可能有助於稀有鳥類的分類。

若需要使用一些用於微調的代碼,請參閱 Pytorch 的教程(教程連結:https://pytorch.org/tutorials/beginner/finetuning_torchvision_models_tutorial.html)。

四、數據增強

如果你無法獲得更多的數據,並且無法成功地對大型數據集進行微調,那麼數據增強通常是你接下來的最佳選擇。它還可以與微調一起使用。

數據增強背後的思想很簡單:在不改變標籤值的情況下,以提供新數據的方式改變輸入。

例如,你有一張貓的圖片,旋轉圖片後仍然是一張貓的圖片,這便是一次不錯的數據增強。另一方面,如果你有一張道路的圖片,想要預測適當的方向盤轉度(自動駕駛汽車),若旋轉這張道路的圖片將會改變適當的方向盤轉度,除非你把方向盤轉度調整到適當位置,否則難以預測成功。

數據增強是圖像分類問題中最常見的方法,相關的技術可以在這個網站獲取:https://nanonets.com/blog/data-augmentation-how-to-use-deep-learning-when-you-have-limited-data-part-2/。

你也可以經常思考一些創造性的方式來將數據增強應用到其他領域,例如 NLP(相關示例可參考:https://towardsdatascience.com/these-are-the-easiest-data-augmentation-techniques-in-natural-language-processing-you-can-think-of-88e393fd610),同時大家也在嘗試使用 GANs 來生成新數據。如果對 GAN 方法感興趣,可以閱讀《深度對抗數據增強》(Deep Adversarial Data Augmentation)這篇文章(文章連結:https://github.com/SchafferZhang/DADA)。

五、餘弦損失

最近的一篇論文《不使用餘弦損失進行預訓練的情況下在小數據集上進行深度學習》(Deep Learning on Small Datasets without Pre-Training using Cosine Loss)(論文連結:https://arxiv.org/pdf/1901.09054.pdf)發現,在分類問題中將損失函數從分類交叉熵損失轉換為餘弦損失時,小數據集的準確率提高了 30%,而餘弦損失僅為「 1 - 餘弦相似度」。

從上圖中可以看出,基於每個類的樣本數量的性能是如何變化的,以及微調對於一些小型數據集(CUB)是多麼有價值,而對於其他數據集(CIFAR-100)則沒有那麼有價值。

六、深入

在一篇 NIPS 論文《小數據集的現代神經網絡泛化》(Modern Neural Networks Generalize on Small Data Sets)(論文連結:https://papers.nips.cc/paper/7620-modern-neural-networks-generalize-on-small-data-sets.pdf)種,作者將深度神經網絡視為集合。具體來說,即「與其說每一層都呈現出不斷增加的特徵層次,不如說最後一層提供了一種集成機制。」

從中得到的關於小數據的益處是確保你建立的深度網絡能利用這種集成效應。

七、自編碼器

現在已有通過採用更多優化的起始權重成功使用堆棧自編碼器對網絡進行預訓練的案例(該案例可參考論文「Using deep neural network with small dataset to predict material defects」:https://www.sciencedirect.com/science/article/pii/S0264127518308682)。這樣可以避免局部優化和其他不良初始化的陷阱。不過,Andrej Karpathy 建議不要對無監督預訓練過度興奮(相關文章可參考:http://karpathy.github.io/2019/04/25/recipe/)。

如果你需要複習自編碼器相關知識,可以看看史丹福大學的深度學習教程(網址:http://ufldl.stanford.edu/tutorial/unsupervised/Autoencoders/)。自編碼器的基本思想是建立一個預測輸入的神經網絡。

八、先驗知識

圖 4:攝影作者 Glen Noble,來源 Unsplash(網站連結:https://unsplash.com/?utm_source=medium&utm_medium=referral

最後一點是嘗試找到結合特定領域知識的方法,以指導學習過程。例如,在論文《通過概率程序規劃歸納進行類人概念學習》(Human-level concept learning through probabilistic program induction,論文連結:https://science.sciencemag.org/content/350/6266/1332)中,作者構建了一個能夠在學習過程中利用先驗知識從部分概念中構造整體概念的模型,這樣的模型能夠實現人類水平的性能,並超出了當時的深度學習方法。

你也可以使用域知識來限制對網絡的輸入,以降低維度或將網絡體系結構調整的更小。

我將其作為最後的選擇,是因為結合先驗知識可能是一個挑戰,通常也是最耗費時間的。

九、讓深度學習在小數據上也能變得很酷

希望本文為你提供了一些關於如何在有限的數據上使用深度學習技術的思路。我個人認為,這是一個目前沒有得到足夠討論的問題,但它具有令人非常興奮的意義。

大量問題的數據非常有限,因為獲取更多的數據要麼非常昂貴要麼不可行,就比如說檢測罕見疾病或教育成果。找到方法來應用深度學習等最好的技術來解決這些問題是非常令人興奮的!正如吳恩達(Andrew Ng)也曾提到:

雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 深度學習遇上物理學,更好地識別粒子和分析數據
    深度學習遇上物理學,更好地識別粒子和分析數據 工程師8 發表於 2018-05-11 12:01:00 當你向Facebook上傳了一張你朋友的照片後,這張照片就進入了一個複雜的幕後處理過程
  • CNCC 2019 | 劉群:基於深度學習的自然語言處理,邊界在哪裡?
    隨著這幾年來深度學習方法的引入,機器翻譯的水平又有了一個大幅提高,使得機器不再在符號層面做翻譯,而是將整個推理過程映射到一個高維空間中,並在高維空間中進行運算。不過,我們只能理解輸入輸出而不知道其在高維空間中具體如何進行運算的,並且機器自動學習了什麼東西,我們也說不太清楚。
  • 深度學習和拓撲數據分析的六大驚人之舉
    假如你有一個一千列和一百萬行的數據集。無論你從哪個角度看它——小型,中型或大型的數據——你不可能看到它的全貌。將它放大或縮小。使它能夠在一個屏幕裡顯示完全。由於人的本質,如果能夠看到事物的全局的話,我們就會有更好的理解。有沒有辦法把數據都放到一張圖裡,讓你可以像觀察地圖一樣觀察數據呢?
  • 中科視拓創始人山世光:AI人才稀缺,開發任務繁重,限制了深度學習落地
    其次,從計算角度講,深度學習的計算成本比較高,端側的計算能力需求較大。而且AI技術的生產效率現在還比較低。如何加快生產效率,需要大量懂深度學習的專業算法人才,而現在並沒有這麼多的人才儲備。現階段,AI人才奇缺。行業的碩士畢業生大概30-50萬年薪,博士是50-80萬年薪。對比人才數量的稀缺,開發任務卻十分繁重,如果每個任務都做要3-5個月才能完成,這是"災難性"的事情。
  • 數據科學家必須知道的 10 個深度學習架構
    近年來,深度學習的發展勢頭迅猛,要跟上深度學習的進步速度變得越來越困難了。幾乎每一天都有關於深度學習的創新,而大部分的深度學習創新都隱藏在那些發表於ArXiv和Spinger等研究論文中。簡單來說,ImageNet就是一項關於數據集的挑戰,而其中的數據集是從ILSVR(ImageNet大規模視覺識別)中獲得的。就像下文即將提到的架構,其中的每個架構之間都有細微的差別,而正是這些差別使它們區別於普通的模型,讓它們在解決問題的時候發揮出普通模型不具備的優勢。這些架構同樣屬於「深度模型」的範疇,因此它們的性能也很可能優於其相對應的「淺層模型」。
  • 微軟發布基於FPGA的深度學習平臺Brainwave
    打開APP 微軟發布基於FPGA的深度學習平臺Brainwave 發表於 2019-08-19 17:51:01 據微軟官方博客顯示
  • 關於深度學習你必須知道的幾個信息理論概念
    資訊理論可以看作是微積分、概率論和統計學這些深度學習基本組成部分的複雜融合。假設我們有一些數據,它的真實分布是P。但是我們不知道P,所以我們選擇一個新的分布Q來近似這個數據。由於Q只是一個近似值,它無法像P那樣準確地逼近數據,會造成一些信息的丟失。這個信息損失由KL散度給出。P和Q之間的KL散度告訴我們,當我們試圖用P和Q來近似數據時,我們損失了多少信息。
  • 一場突如其來的討論:到底什麼是深度學習?SVM其實也是深度學習嗎?
    單獨一個全連接層不是深度學習,但很多個全連接層堆在一起就是;K-means 算法不是深度學習,但把許多個 K-means 特徵提取器堆疊起來就是。甚至我自己在 2011 到 2012 年間,收集視頻數據的位置的成對的共同信息矩陣,然後把矩陣分解堆疊在上面,也是深度學習。一般的人類軟體工程師用語言寫出的程序不是深度學習,給這些程序加上參數、能自動學習幾個常量,也仍然不是深度學習。
  • 神經網絡和深度學習簡史(全)
    實際上,Werbos認為,這種研究進路對解決感知機問題是有意義的,但是,這個圈子大體已經失去解決那些問題的信念。Minsky的書最著名的觀點有幾個:(1)我們需要用MLPs[多層感知機,多層神經網絡的另一種說法)來代表簡單的非線性函數,比如XOR 映射;而且(2)世界上沒人發現可以將MLPs訓練得夠好,以至於可以學會這麼簡單的函數的方法。
  • 深度| 理解深度學習中的卷積
    有太多的公開課、教程在反覆傳頌卷積神經網絡的好,卻都沒有講什麼是「卷積」,似乎默認所有讀者都有相關基礎。這篇外文既友好又深入,所以翻譯了過來。文章高級部分通過流體力學量子力學等解釋卷積的做法在我看來有點激進,這些領域恐怕比卷積更深奧,所以只需簡略看看即可。以下是正文:卷積現在可能是深度學習中最重要的概念。正是靠著卷積和卷積神經網絡,深度學習才超越了幾乎其他所有的機器學習手段。
  • 清華機器學習科學家李建:如何用深度學習來解析時空大數據?
    如何用深度學習解決這個問題,傳統的學習方法是把很多數據源的不同數據挖掘出它們的特徵,需要不同的組合、創造力或者說特殊的方法對這些數據挖掘,然後做一些統計量把它們拼到一起放在機器模型裡。這個過程通常是要花很多很多的時間,精力和人員的。現在的想法就是利用深度學習自動的從不同的數據裡面挖掘特徵。因為深度學習有一個自動的特徵挖掘能力。
  • 用谷歌圖片搜索自製深度學習數據集 | 教程
    用谷歌圖片搜索自製深度學習數據集 | 教程 銅靈 編譯整理 就怕前腳剛立志搞個新研究,後腳就發現沒有合適的數據集可用。AI工程師從入門到放棄,可能就是這麼一會的功夫。 別找了,現在深度學習數據集也能自制了。
  • 深度學習與統計力學(I) :深度學習中的基礎理論問題
    系列預告深度學習統計力學(I) :深度學習中的基礎理論問題深度學習統計力學(IV) :深層網絡的信號傳播和初始化深度學習統計力學(VI) :通過概率模型進行「深度想像」1 介紹深層神經網絡具有多個隱含層[1],在許多領域都取得了顯著的成功,從機器視覺[2]、語音識別[3]、自然語言處理[4]、強化學習[5],到神經科學[6、7]、心理學[8、
  • 基於數據驅動的深度學習5G網絡解析
    近年來,研究者已經對此做了初步探索,主要呈現出兩種類型的深度學習網絡,一種基於數據驅動,另一種基於數據模型雙驅動。基於數據驅動的深度學習網絡將無線通信系統的多個功能塊看作一個未知的黑盒子,利用深度學習網絡取而代之,然後依賴大量訓練數據完成輸入到輸出的訓練。
  • 【PPT下載】深度學習入門指南!六步構建深度神經網絡
    2.數據,需要有自己的數據,包括自己的業務數據流,或者整個記錄你一段歷史的工作流程等這些數據是必不可缺的;3.算力,有了這兩項還是不夠的,還需要一個能夠繼續提供強力運算能力的GPU,幫助你從算法中得到數據,有了算法和數據,再加上一個計算能力的GPU,你的深度學習工程才能正常的開展。
  • 微軟發布深度學習平臺Brainwave,基於FPGA且速度超快
    安妮 編譯整理量子位 出品 | 公眾號 QbitAI在昨天Hot Chips 2017大會上,微軟發布了基於FPGA的低延遲深度學習加速平臺。據微軟官方博客顯示,當使用英特爾Stratix 10 FPGA時,Brainwave可在無批處理的情況下支持每秒39.5萬億次浮點運算。
  • 深度學習與自然語言處理的工作概述及未來發展
    本文首先回答關於深度學習的幾個常見問題,介紹深度學習研究的最新進展,特別是一些代表性工作,同時概述我們的深度學習與自然語言處理的工作,最後總結深度學習的未來發展趨勢。  關於深度學習的幾個常見問題  這裡嘗試回答三個關於深度學習的常見問題。深度學習為什麼很強大?深度學習是否是萬能的?深度學習與人的大腦有什麼關係?  深度學習為什麼很強大?
  • DeepTables:為結構化數據注入深度學習的洪荒之力
    近年來深度學習在CV、NLP等非結構化領域展現出超強的統治力,突破最高水平的算法層出不窮。深度學習在結構化和非結構化領域表現出來的巨大反差已成為熱門話題,自從以XGBoost、LightGBM為代表的高性能集成樹模型訓練框架的問世,深度學習在結構化領域就一直沒有超越配角的地位。到目前為止,Kaggle結構化數據競賽中,傳統機器學習算法依然是最主要的贏家。
  • 吳恩達深度學習筆記(13)-多樣本梯度下降和向量化處理多批次數據
    所以看來你需要一個for循環遍歷所有n個特徵當你應用深度學習算法,你會發現在代碼中顯式地使用for循環使你的算法很低效,同時在深度學習領域會有越來越大的數據集。所以能夠應用你的算法且沒有顯式的for循環會是重要的,並且會幫助你適用於更大的數據集。所以這裡有一些叫做向量化技術,它可以允許你的代碼擺脫這些顯式的for循環。
  • 主流的深度學習模型有哪些?
    作者:阿薩姆 | 普華永道 數據科學家量子位 已獲授權編輯發布轉載請聯繫原作者深度學習大熱以後各種模型層出不窮,很多朋友都在問到底什麼是DNN、CNN和RNN,這麼多個網絡到底有什麼不同,作用各是什麼?趁著回答《深度學習的主要分類是什麼呀?這些網絡cnn dbn dnm rnn是怎樣的關係?》