【E課堂】一文讀懂深度學(xué)習(xí)
近日,在深度學(xué)習(xí)領(lǐng)域出現(xiàn)了一場熱烈的爭論。這一切都要從Jeff Leek在Simply Stats上發(fā)表了一篇題為 《數(shù)據(jù)量不夠大,別玩深度學(xué)習(xí)》 (Don't use deep learning your data isn't that big)的博文開始。作者Jeff Leek在這篇博文中指出,當(dāng)樣本數(shù)據(jù)集很小時(這種情況在生物信息領(lǐng)域很常見),即使有一些層和隱藏單元,具有較少參數(shù)的線性模型的表現(xiàn)是優(yōu)于深度網(wǎng)絡(luò)的。為了證明自己的論點(diǎn),Leek舉了一個基于MNIST數(shù)據(jù)庫進(jìn)行圖像識別的例子,分辨0或者1。他還表示,當(dāng)在一個使用僅僅80個樣本的MNIST數(shù)據(jù)集中進(jìn)行0和1的分類時,一個簡單的線性預(yù)測器(邏輯回歸)要比深度神經(jīng)網(wǎng)絡(luò)的預(yù)測準(zhǔn)確度更高。
本文引用地址:http://butianyuan.cn/article/201709/364740.htm這篇博文的發(fā)表引起了領(lǐng)域內(nèi)的爭論,哈佛大學(xué)藥學(xué)院的生物醫(yī)藥信息學(xué)專業(yè)博士后Andrew Beam寫了篇文章來反駁: 《就算數(shù)據(jù)不夠大,也能玩深度學(xué)習(xí)》 (You can probably use deep learning even if your data isn't that big)。Andrew Beam指出,即使數(shù)據(jù)集很小,一個適當(dāng)訓(xùn)練的深度網(wǎng)絡(luò)也能擊敗簡單的線性模型。如今,越來越多的生物信息學(xué)研究人員正在使用深度學(xué)習(xí)來解決各種各樣的問題,這樣的爭論愈演愈烈。這種炒作是真的嗎?還是說線性模型就足夠滿足我們的所有需求呢?結(jié)論一如既往——要視情況而定。在這篇文章中,作者探索了一些機(jī)器學(xué)習(xí)的使用實例,在這些實例中使用深度學(xué)習(xí)并不明智。并且解釋了一些對深度學(xué)習(xí)的誤解,作者認(rèn)為正是這些錯誤的認(rèn)識導(dǎo)致深度學(xué)習(xí)沒有得到有效地使用,這種情況對于新手來說尤其容易出現(xiàn)。
打破深度學(xué)習(xí)偏見
首先,我們來看看許多外行者容易產(chǎn)生的偏見,其實是一些半真半假的片面認(rèn)識。主要有兩點(diǎn),其中的一點(diǎn)更具技術(shù)性,我將詳細(xì)解釋。
深度學(xué)習(xí)在小樣本集上也可以取得很好的效果
深度學(xué)習(xí)是在大數(shù)據(jù)的背景下火起來的(第一個谷歌大腦項目向深度神經(jīng)網(wǎng)絡(luò)提供了大量的Youtube視頻),自從那以后,絕大部分的深度學(xué)習(xí)內(nèi)容都是基于大數(shù)據(jù)量中的復(fù)雜算法。
然而,這種大數(shù)據(jù)+深度學(xué)習(xí)的配對不知為何被人誤解為:深度學(xué)習(xí)不能應(yīng)用于小樣本。如果只有幾個樣例,將其輸入具有高參數(shù)樣本比例的神經(jīng)網(wǎng)絡(luò)似乎一定會走上過擬合的道路。然而,僅僅考慮給定問題的樣本容量和維度,無論有監(jiān)督還是無監(jiān)督,幾乎都是在真空中對數(shù)據(jù)進(jìn)行建模,沒有任何的上下文??赡艿臄?shù)據(jù)情況是:你擁有與問題相關(guān)的數(shù)據(jù)源,或者該領(lǐng)域的專家可以提供的強(qiáng)大的先驗知識,或者數(shù)據(jù)可以以非常特殊的方式進(jìn)行構(gòu)建(例如,以圖形或圖像編碼的形式)。所有的這些情況中,深度學(xué)習(xí)有機(jī)會成為一種可供選擇的方法——例如,你可以編碼較大的相關(guān)數(shù)據(jù)集的有效表示,并將該表示應(yīng)用到你的問題中。這種典型的示例常見于自然語言處理,你可以學(xué)習(xí)大型語料庫中的詞語嵌入,例如維基百科,然后將他們作為一個較小的、較窄的語料庫嵌入到一個有監(jiān)督任務(wù)中。極端情況下,你可以用一套神經(jīng)網(wǎng)絡(luò)進(jìn)行聯(lián)合學(xué)習(xí)特征表示,這是在小樣本集中重用該表示的一種有效方式。這種方法被稱作“一次性學(xué)習(xí)”(one-shot learning),并且已經(jīng)成功應(yīng)用到包括 計算機(jī)視覺 和 藥物研發(fā) 在內(nèi)的具有高維數(shù)據(jù)的領(lǐng)域。
藥物研發(fā)中的一次性學(xué)習(xí)網(wǎng)絡(luò),摘自 Altae-Tran et al. ACS Cent. Sci. 2017
深度學(xué)習(xí)不是一切的答案
我聽過最多的第二個偏見就是過度宣傳。許多尚未入門該領(lǐng)域的人,僅僅因為深度神經(jīng)網(wǎng)絡(luò)在其它領(lǐng)域的出色表現(xiàn),就期待它也能為他們帶來神話般的表現(xiàn)提升。其他人則從深度學(xué)習(xí)在圖像、音樂和語言(與人類關(guān)系密切的三種數(shù)據(jù)類型)處理領(lǐng)域的令人印象深刻的表現(xiàn)中受到啟發(fā),于是就頭腦發(fā)熱地鉆入該領(lǐng)域,迫不及待地嘗試訓(xùn)練最新的GAN結(jié)構(gòu)。當(dāng)然,這種大肆吹捧在很多方面是真實存在的。深度學(xué)習(xí)在機(jī)器學(xué)習(xí)中的地位不可小覷,也是數(shù)據(jù)建模方法庫的重要工具。它的普及帶動了諸如tensorflow和pytorch等許多重要框架的發(fā)展,它們即使是在深度學(xué)習(xí)之外也是十分有用的。失敗者崛起成為超級巨星的故事激勵了許多研究員重新審視以前的模糊算法,如進(jìn)化算法和增強(qiáng)學(xué)習(xí)。但任何情況下也不能認(rèn)為深度學(xué)習(xí)是萬能良藥。除了“天下沒有免費(fèi)的午餐”這點(diǎn)之外,深度學(xué)習(xí)模型是非常微妙的,并且需要仔細(xì)甚至非常耗時耗力的超參數(shù)搜索、調(diào)整,以及測試(文章后續(xù)有更多講解)。除此之外,在很多情況下,從實踐的角度來看,使用深度學(xué)習(xí)是沒有意義的,更簡單的模型反而能獲得更好的效果。
深度學(xué)習(xí)不僅僅是
深度學(xué)習(xí)模型從機(jī)器學(xué)習(xí)的其他領(lǐng)域傳來時,我認(rèn)為還有另外一個方面經(jīng)常被忽略。大多數(shù)深度學(xué)習(xí)的教程和介紹材料都將模型描述為通過層次方式進(jìn)行連接的節(jié)點(diǎn)層組成,其中第一層是輸入,最后一層是輸出,并且你可以用某種形式的隨機(jī)梯度下降(SGD)方法來訓(xùn)練網(wǎng)絡(luò)。有些材料會簡單介紹隨機(jī)梯度下降是如何工作的,以及什么是反向傳播,但大部分介紹主要關(guān)注的是豐富的神經(jīng)網(wǎng)絡(luò)類型(卷積神經(jīng)網(wǎng)絡(luò),循環(huán)神經(jīng)網(wǎng)絡(luò)等等)。而優(yōu)化方法本身卻很少受到關(guān)注,這是很不幸的,因為深度學(xué)習(xí)為什么能夠起到很大的作用,絕大部分原因就是這些特殊的優(yōu)化方法(具體論述可以參考Ferenc Huszár的 博客 以及博客中引用的 論文 )。了解如何優(yōu)化參數(shù),以及如何劃分?jǐn)?shù)據(jù),從而更有效地使用它們以便在合理時間內(nèi)使網(wǎng)絡(luò)獲得良好的收斂,是至關(guān)重要的。不過,為什么隨機(jī)梯度下降如此關(guān)鍵還是未知的,但是現(xiàn)在線索也正零星出現(xiàn)。我傾向于將該方法看成是貝葉斯推理的一部分。實質(zhì)上,在你進(jìn)行某種形式的數(shù)值優(yōu)化時,你都會用特定的假設(shè)和先驗來執(zhí)行一些貝葉斯推理。其實有一個被稱做 概率數(shù)值計算 (probabilistic numerics)的完整研究領(lǐng)域,就是從這個觀點(diǎn)開始的。隨機(jī)梯度下降也是如此, 最新的研究成果 表明,該過程實際上是一個馬爾科夫鏈,在特定假設(shè)下,可以看作是后向變分近似的穩(wěn)態(tài)分布。所以當(dāng)你停止隨機(jī)梯度下降,并采用最終的參數(shù)時,基本上是從這個近似分布中抽樣得到的。我認(rèn)為這個想法很有啟發(fā)性,因為這樣一來,優(yōu)化器的參數(shù)(這里是指學(xué)習(xí)率)就更有意義了。例如,當(dāng)你增加隨機(jī)梯度下降的學(xué)習(xí)參數(shù)時,馬爾可夫鏈就會變得不穩(wěn)定,直到它找到大面積采樣的局部最小值,這樣一來,就增加了程序的方差。另一方面,如果減少學(xué)習(xí)參數(shù),馬爾科夫鏈可以慢慢的近似到狹義極小值,直到它收斂,這樣就增加了某個特定區(qū)域的偏置。而另一個參數(shù),隨機(jī)梯度下降的批次大小,也可以控制算法收斂的區(qū)域是什么類型,小的批次收斂到較大區(qū)域,大的批次收斂到較小區(qū)域。
隨機(jī)梯度下降根據(jù)學(xué)習(xí)速率或批尺寸來選擇較大或狹義最小值
這樣的復(fù)雜性意味著深度網(wǎng)絡(luò)的優(yōu)化器非常重要:它們是模型的核心部分,與層架構(gòu)一樣重要。這一點(diǎn)在機(jī)器學(xué)習(xí)的許多其他模型中并不常見。線性模型(甚至是正則化的,像LASSO算法)以及支持向量機(jī)(SVM) 都是凸優(yōu)化問題,沒有太多細(xì)微差別,并且只有一個最優(yōu)解。這也就是為什么來自其它領(lǐng)域的研究人員在使用諸如scikit-learn這樣的工具時會感到困惑,因為他們發(fā)現(xiàn)找不到簡單地提供.fit()函數(shù)的API(盡管現(xiàn)在有些工具,例如skflow,試圖將簡單的網(wǎng)絡(luò)置入.fit()中,我認(rèn)為這有點(diǎn)誤導(dǎo),因為深度學(xué)習(xí)的全部重點(diǎn)就是其靈活性)。
什么時候不需要深度學(xué)習(xí)
在什么情況下深度學(xué)習(xí)不是最理想的呢?在我看來,以下情況中,深度學(xué)習(xí)更多是一種阻礙,而不是福音。
低預(yù)算或低投資問題
深度網(wǎng)絡(luò)是十分靈活的模型,有多種多樣的結(jié)構(gòu)和節(jié)點(diǎn)模型、優(yōu)化器以及正則化方法。根據(jù)應(yīng)用場景,你的模型或許要有卷積層(層尺寸多寬?有沒有池化操作?),或者循環(huán)結(jié)構(gòu)(有沒有門控單元?);網(wǎng)絡(luò)可能真的很深(hourglass,siamese,或其他結(jié)構(gòu)?)還是只是具有很少的幾個隱藏層(有多少單元?);它可能使用整流線性單元或其他激活函數(shù);它可能會或可能不會有隨機(jī)丟棄(在哪一層中?用什么比例?),并且權(quán)重應(yīng)該是正則化的(L1、L2,或者是某些更奇怪的正則化方法?)。這只是一部分列表,還有很多其他類型的節(jié)點(diǎn)、連接,甚至損失函數(shù)可以去嘗試。即便只是訓(xùn)練大型網(wǎng)絡(luò)的一個實例,調(diào)整許多超參數(shù)以及探索框架的過程也是非常耗時的。谷歌最近宣稱自己的AutoML方法可以自動找到最好的架構(gòu),令人印象深刻,但仍然需要超過800個GPU全天候運(yùn)行數(shù)周,這對于任何人來說幾乎都是遙不可及的。關(guān)鍵在于訓(xùn)練深度網(wǎng)絡(luò)時,在計算和調(diào)試部分都會花費(fèi)巨大的代價。這種消耗對于許多日常預(yù)測問題并沒有意義,并且調(diào)整深度網(wǎng)絡(luò)的投資回報率太低,即使是調(diào)整小型網(wǎng)絡(luò)。即使有足夠的預(yù)算和投資,也沒有理由不嘗試替代方法,哪怕作為基準(zhǔn)測試。你可能會驚喜地發(fā)現(xiàn),線性SVM就夠用了。
解釋和傳達(dá)模型參數(shù)或特征對一般受眾的重要性
深度網(wǎng)絡(luò)也是很有名的黑匣子,它具有高預(yù)測能力但可解釋性不足。盡管最近有很多工具,諸如顯著圖(saliency maps)和 激活差異 (activation difference),它們對某些領(lǐng)域而言是非常有用的,但它們不會完全被應(yīng)用到所有的應(yīng)用中。主要是,當(dāng)你想要確保網(wǎng)絡(luò)不會通過記住數(shù)據(jù)集或?qū)W⒂谔囟ǖ奶摷偬卣鱽砥垓_你時,這些工具就能很好地工作,但仍然難以從每個特征的重要性解讀出深度網(wǎng)絡(luò)的整體決策。在這個領(lǐng)域,沒有什么能夠真正地打敗線性模型,因為學(xué)習(xí)得到的系數(shù)與響應(yīng)有著直接的關(guān)系。當(dāng)將這些解釋傳達(dá)給一般受眾,并且他們需要基于此做出決策時,這就顯得尤為重要。例如,醫(yī)生需要結(jié)合各種不同的數(shù)據(jù)來確認(rèn)診斷結(jié)果。變量和結(jié)果之間的關(guān)系越簡單、越直接,醫(yī)生就能更好地利用,而不是低估或高估實際值。此外,有些情況下,模型(尤其是深度網(wǎng)絡(luò))的精度并不像可解釋性那樣重要。例如,政策制定者可能想知道一些人口統(tǒng)計變量對于死亡率的影響,并且相較于預(yù)測的準(zhǔn)確性來說,可能對這種關(guān)系的直接近似更有興趣。在這兩種情況下,與更簡單、更易滲透的方法相比,深度學(xué)習(xí)處于不利地位。
建立因果機(jī)制
模型可解釋性的極端情況是當(dāng)我們試圖建立一個機(jī)械模型,即實際捕捉數(shù)據(jù)背后現(xiàn)象的模型。一個好的例子包括試圖猜測兩個分子(例如藥物、蛋白質(zhì)、核酸等)是否在特定的細(xì)胞環(huán)境中相互產(chǎn)生影響,或者假設(shè)特定的營銷策略是否對銷售產(chǎn)生實際的影響。在這個領(lǐng)域,根據(jù)專家意見,沒有什么可以擊敗老式的貝葉斯方法,它們是我們表示并推斷因果關(guān)系的最好方式。Vicarious有一些很好的 最新研究成果 ,說明為什么這個更有原則性的方法在視頻游戲任務(wù)中比深度學(xué)習(xí)表現(xiàn)得更好。
學(xué)習(xí)“非結(jié)構(gòu)化”特征
這可能是具有爭議性的。我發(fā)現(xiàn)深度學(xué)習(xí)擅長的一個領(lǐng)域是為特定任務(wù)找到有用的數(shù)據(jù)表示。一個很好的例子就是上述的詞語嵌入。自然語言具有豐富而復(fù)雜的結(jié)構(gòu),與“上下文感知”(context-aware)網(wǎng)絡(luò)相近似:每個單詞都可以通過向量來表示,而這個向量可以編碼其經(jīng)常出現(xiàn)的文本。在NLP任務(wù)中使用在大型語料庫中學(xué)習(xí)的單詞嵌入,有時可以在另一個語料庫的特定任務(wù)中提升效果。然而,如果所討論的語料庫是完全非結(jié)構(gòu)化的,它可能不會起到任何作用。例如,假設(shè)你正在通過查看關(guān)鍵字的非結(jié)構(gòu)化列表來對對象進(jìn)行分類,由于關(guān)鍵字不是在任何特定結(jié)構(gòu)中都會使用的(比如在一個句子中),所以單詞嵌入不會對這些情況有太大幫助。在這種情況下,數(shù)據(jù)是一個真正的“詞袋”(bag of words),這種表示很有可能足以滿足任務(wù)所需。與此相反的是,如果你使用預(yù)訓(xùn)練的話,單詞嵌入并不是那么耗費(fèi)時力,而且可以更好地捕獲關(guān)鍵字的相似度。不過,我還是寧愿從“詞袋”表示開始,看看能否得到很好的預(yù)測結(jié)果。畢竟,這個“詞袋”的每個維度都比對應(yīng)的詞嵌入槽更容易解讀。
深度學(xué)習(xí)是未來
深度學(xué)習(xí)目前非?;鸨?,資金充足,并且發(fā)展異常迅速。當(dāng)你還在閱讀會議上發(fā)表的論文時,有可能已經(jīng)有兩、三種新版本可以超越它了。這給我上述列出的幾點(diǎn)提出了很大的挑戰(zhàn):深度學(xué)習(xí)在不久的將來可能在這些情景中是非常有用的。用于解釋圖像和離散序列的深度學(xué)習(xí)模型的工具越來越好。最近推出的軟件,如 Edward 將貝葉斯建模和深度網(wǎng)絡(luò)框架結(jié)合,能夠量化神經(jīng)網(wǎng)絡(luò)參數(shù)的不確定性,以及通過概率編程和自動變分推理進(jìn)行簡易貝葉斯推理。從長遠(yuǎn)來看,可能會有一個簡化的建模庫,能夠給出深度網(wǎng)絡(luò)具有的顯著屬性,從而減少需要嘗試的參數(shù)空間。所以要不斷更新你的arXiv閱讀內(nèi)容,這篇博文的內(nèi)容或許一兩個月內(nèi)也會過時。
Edward通過將概率規(guī)劃與tensorflow結(jié)合,將深度學(xué)習(xí)和貝葉斯的模型考慮在內(nèi)。摘自Tran et al. ICLR 2017
評論