深度學(xué)習(xí)的先入之見、局限性及其未來
我知道博客標(biāo)題中使用否定詞很奇怪,但是前幾天有一波討論正好相應(yīng)于我正在思考的一些問題。這一切開始于 Jeff Leek 發(fā)表的一篇有關(guān)說明在小樣本范圍內(nèi)使用深度學(xué)習(xí)的文章。要言之,他認(rèn)為當(dāng)樣本較小時(shí)(這在生物領(lǐng)域很常見),帶有少許參數(shù)的線性模型甚至比帶有少量層和隱藏單元的深度網(wǎng)絡(luò)性能更優(yōu)。他繼續(xù)展示了一個非常簡單的帶有十大信息特征的線性預(yù)測器,在使用大約 80 個樣本在 MNIST 數(shù)據(jù)集中分類 0 和 1 時(shí),性能比一個簡單的深度網(wǎng)絡(luò)更優(yōu)。這促使 Andrew beam 寫了一篇反駁文章(詳見:小心訓(xùn)練模型,數(shù)據(jù)少也可以玩轉(zhuǎn)深度學(xué)習(xí)),其中寫道一個適當(dāng)訓(xùn)練的深度網(wǎng)絡(luò)能夠完勝簡單的線性模型,甚至僅僅使用非常少的訓(xùn)練樣本。在爭論期間,越來越多的生物醫(yī)療信息研究者開始采用深度學(xué)習(xí)處理不同的問題。hype real 或者線性模型就是我們需要的全部嗎?正如往常一樣,答案是看情況。在本文中,我將介紹幾個機(jī)器學(xué)習(xí)的應(yīng)用案例,其中深度學(xué)習(xí)在應(yīng)用和處理先入之見方面并沒有太多實(shí)際意義,我認(rèn)為正是這些先入之見(preconception)阻礙了深度學(xué)習(xí)的應(yīng)用,尤其是對于入門者來說。
深度學(xué)習(xí)的先入之見
首先,讓我們解決一些先入之見,外行人已經(jīng)將其誤認(rèn)為半真理。有兩個大的先入之見以及一個比較技術(shù)的先入之見,這在某種程度上是對 Andrew Beam 關(guān)于「錯誤之見」的延伸。
深度學(xué)習(xí)可真正應(yīng)用于小數(shù)據(jù)樣本
深度學(xué)習(xí)的聲望建立在大量數(shù)據(jù)之上(比如***谷歌大腦工程向深度網(wǎng)絡(luò)饋送了大量的 YouTube 視頻),并且作為復(fù)雜算法運(yùn)行大量數(shù)據(jù)以來一直被公開化。不幸的是,大數(shù)據(jù)和深度學(xué)習(xí)的關(guān)系也有時(shí)對反:一個深度學(xué)習(xí)不能應(yīng)用于小數(shù)據(jù)樣本的神話。如果你的神經(jīng)網(wǎng)絡(luò)樣本數(shù)據(jù)很少,帶有較高的參數(shù)樣本比,表面上看很可能會出現(xiàn)過擬合。然而,如果只考慮給定問題的樣本大小和維度,不管是監(jiān)督學(xué)習(xí)還是無監(jiān)督學(xué)習(xí),這是憑空地建模數(shù)據(jù),無需語境。很可能是這種情況,你有與問題相關(guān)的數(shù)據(jù)資源,或者某個領(lǐng)域?qū)<铱梢蕴峁?nbsp;strong prior,或者數(shù)據(jù)的組織結(jié)構(gòu)很特殊。在所有這些情況中,深度學(xué)習(xí)有機(jī)會成為一種有效方法,例如,可以為更大的相關(guān)數(shù)據(jù)集編碼有用的表征,并將其應(yīng)用在你的問題之中。其經(jīng)典圖示在自然語言處理中非常普遍,其中你可以學(xué)習(xí)大型語料庫的詞嵌入,并將其作為更小更窄語料庫中的嵌入來完成有監(jiān)督學(xué)習(xí)任務(wù)。極端地說,你可以聯(lián)合一組神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)一個表征和一個有效的方式以在小樣本集中重復(fù)使用表征。這被稱作 one-shot learning,并被成功用在諸多高維數(shù)據(jù)領(lǐng)域,比如計(jì)算機(jī)視覺和藥物發(fā)現(xiàn)。
深度學(xué)習(xí)并不是一切的答案
第二個我聽到最多的先入之見是 hype。許多準(zhǔn)從業(yè)者希冀深度網(wǎng)絡(luò)可以帶給他們一個神秘的性能提升,僅僅因?yàn)樯窠?jīng)網(wǎng)絡(luò)在其他領(lǐng)域也行之有效。其他人從建模和操控圖像、音樂、語言的工作中獲得啟發(fā),并通過嘗試訓(xùn)練***的 GAN 架構(gòu)猛沖進(jìn)這個領(lǐng)域。hype 真實(shí)存在,且方式多樣。深度學(xué)習(xí)在機(jī)器學(xué)習(xí)中一枝獨(dú)秀,并成了數(shù)據(jù)建模的一件重要工具。深度學(xué)習(xí)的流行催生出了一些核心的框架比如 TensorFlow 和 PyTorch,它們出奇地好用,甚至在深度學(xué)習(xí)之外也是。超級巨星源自失敗者的故事啟發(fā)了研究者重拾以前被埋沒的方法,比如進(jìn)化策略和強(qiáng)化學(xué)習(xí)。但這無論如何不是***藥。除卻沒有免費(fèi)午餐的考量,深度學(xué)習(xí)模型可以非常細(xì)微,需要小心、有時(shí)非常昂貴的超參數(shù)搜索、調(diào)試和測試(后文將有詳述)。此外,在很多情況下深度學(xué)習(xí)并無太多實(shí)際價(jià)值,反而是更簡單的模型效率更高。
深度學(xué)習(xí)不僅僅是.fit()
來自機(jī)器學(xué)習(xí)其他領(lǐng)域的翻譯多多少少埋沒掉了深度學(xué)習(xí)的一個方面。很多教程和入門材料描述深度學(xué)習(xí)模型由層級互聯(lián)層(由節(jié)點(diǎn)構(gòu)成)構(gòu)成,其中***層是輸入層,***一層是輸出層。你可以使用隨機(jī)梯度下降訓(xùn)練它們。也許在簡短提及隨機(jī)梯度下降如何工作以及什么是反向傳播之后,大部分的解釋聚焦在了神經(jīng)網(wǎng)絡(luò)類型的豐富上。優(yōu)化方法本身需要很少的額外注意力,這很不幸,因?yàn)楹芸赡芟喈?dāng)一部分深度學(xué)習(xí)奏效的原因是由于這些特殊的方法,并指導(dǎo)如何優(yōu)化它們的參數(shù);以及如何分割數(shù)據(jù)以有效使用它們對于在合理的時(shí)間范圍內(nèi)獲得良好卷曲至關(guān)重要。為什么隨機(jī)梯度如此重要依然不得而知,但是一些線索正到處浮現(xiàn)。我最喜歡的一個是將該方法闡釋為貝葉斯推理執(zhí)行的一部分。本質(zhì)上講,每次當(dāng)你做某些形式的數(shù)運(yùn)算,你就在使用特定假設(shè)和 prior 執(zhí)行一些貝葉斯推理。
隨機(jī)梯度下降并不難,最近的工作表明該步驟實(shí)際上是一個馬爾可夫鏈,在特定假設(shè)下有一個靜態(tài)分布,可被看作是對 posterior 的變分近似。所以當(dāng)你停止你的 SGD 并采用***的參數(shù)時(shí),你基本上是在從這一近似分布中采樣。我發(fā)現(xiàn)這一想法很有啟發(fā)力,因?yàn)閮?yōu)化器的參數(shù)通過這種方式發(fā)揮了很大作用。比如,由于你可以增加 SGD 的學(xué)習(xí)參數(shù),馬爾可夫鏈會變的不穩(wěn)定直到找到大面積采樣的局部極小值;即,你增加了步驟的方差。另一方面,如果你減少學(xué)習(xí)參數(shù),馬爾可夫鏈會慢慢近似更窄的極小值,直到它在嚴(yán)密區(qū)域內(nèi)收斂;即,你增加了一個特定區(qū)域的方差。另一個參數(shù),SGD 中的批大小,也控制著算法收斂的區(qū)域類型。對于小批的更寬廣區(qū)域,以及更大批的更窄區(qū)域。
這一復(fù)雜性意味著深度網(wǎng)絡(luò)的優(yōu)化器成了***等級:它們是模型的核心部分,和層架構(gòu)同等重要。這種情況在機(jī)器學(xué)習(xí)的其他許多模型中并不常見。線性模型和支持向量機(jī)是凸優(yōu)化問題,這些問題實(shí)際上沒有太多差別,且只有一個真實(shí)答案。這就是為什么其他領(lǐng)域的人或者使用諸如 scikit-learn 等工具的人在沒有找到帶有.fit() 的非常簡單的 API 時(shí)深感困惑。
深度學(xué)習(xí)的局限性
因此,什么時(shí)候深度學(xué)習(xí)確實(shí)不適合一項(xiàng)任務(wù)?依我看,以下幾個主要場景中深度學(xué)習(xí)并不適用。
低預(yù)算或低承諾問題
深度學(xué)習(xí)模型非常靈活,有大量的架構(gòu)和節(jié)點(diǎn)類型、優(yōu)化器以及歸一化策略。依靠應(yīng)用,你的模型也許會有卷積層或者循環(huán)結(jié)構(gòu);它也許真的很深,或者僅有幾個隱藏層;它也許使用整流線性單元或者其他的激活函數(shù);它或許有 dropout,或許沒有,并且權(quán)重很可能被歸一化。以上只是一個部分列表,還有很多其他的類型的節(jié)點(diǎn)、鏈接甚至損失函數(shù)可以嘗試。有很多超參數(shù)可以微調(diào),很多架構(gòu)可以探索,盡管訓(xùn)練一個大型的神經(jīng)網(wǎng)絡(luò)非常耗時(shí)。谷歌最近鼓吹其 AutoML 流程可自動找到***架構(gòu),但是需要超過 800 塊 GPU 全力運(yùn)轉(zhuǎn)數(shù)周,這可不適合所有人去做。重點(diǎn)是訓(xùn)練深度網(wǎng)絡(luò)在計(jì)算和調(diào)試方面成本很高,這種費(fèi)用對于許多日常預(yù)測問題并沒有任何意義,甚至調(diào)整小型網(wǎng)絡(luò)速度也太慢。即使有足夠的預(yù)算和承諾,首先作為基準(zhǔn)也沒有理由不嘗試其他方法。你可能會驚喜地發(fā)現(xiàn),線性支持向量機(jī)才是你真正需要的全部。
向一個普通聽眾解釋和傳達(dá)模型參數(shù)/特征重要性
深度網(wǎng)絡(luò)之所以臭名昭著是因?yàn)樗且粋€黑箱,預(yù)測能力強(qiáng)大卻無法被解釋。即使最近有很多工具在一些領(lǐng)域表現(xiàn)顯著,它們并不會徹底轉(zhuǎn)向全部的應(yīng)用。這些工具在你想要確保網(wǎng)絡(luò)是否欺騙你時(shí)工作良好,這主要是通過存儲數(shù)據(jù)集或者聚焦特定的假特征實(shí)現(xiàn)的。但是向深度網(wǎng)絡(luò)的整體決策闡釋預(yù)特征的重要性依然很困難嗎?在這一領(lǐng)域,由于學(xué)習(xí)系數(shù)與回應(yīng)存在直接關(guān)系,沒有什么可以真正打敗線性模型。這在向一般聽眾傳遞這些闡釋時(shí)尤其關(guān)鍵。例如,內(nèi)科醫(yī)生需要整合所有類型的分散數(shù)據(jù)從而做出診斷。變量與結(jié)果之間的關(guān)系越簡單和直接,內(nèi)科醫(yī)生對其利用就越好,并且不會低估/高估其價(jià)值。進(jìn)而,在很多案例中模型的精確度并沒有理論闡釋那么重要。例如,一個策略決策者也許想要知道人口統(tǒng)計(jì)的變量對死亡率的影響,并且相比于預(yù)測精度,他很可能對兩者關(guān)系的直接近似值更感興趣。在這兩種案例中,相對于更簡單、更深入的方法,深度學(xué)習(xí)處于劣勢。
建立因果機(jī)制
模型闡釋的極端案例是試圖建立一個機(jī)制模型,即,一個可以真正捕捉數(shù)據(jù)背后的現(xiàn)象的模型。好的實(shí)例包括試圖猜測兩個分子是否在一個特定的細(xì)胞環(huán)境中交互?或者假設(shè)一個特定的市場策略如何對銷售產(chǎn)生實(shí)際影響。該領(lǐng)的專家認(rèn)為,老式的貝葉斯方法不可替代;它是我們進(jìn)行因果表征和推理的***方式。Vicarious 最近在這方面有一些杰出成果(https://www.vicarious.com/img/icml2017-schemas.pdf),證明了為什么這一更加原則性的方法可以在視頻游戲任務(wù)中比深度學(xué)習(xí)泛化地更好。
從「非結(jié)構(gòu)」特征中學(xué)習(xí)
這個有待討論。我發(fā)現(xiàn)深度學(xué)習(xí)擅長的一個領(lǐng)域是為一個特定任務(wù)找到數(shù)據(jù)的有用表征。一個比較好的示例是上述的的詞嵌入。自然語言有著豐富而復(fù)雜的結(jié)構(gòu),其可通過「語境-意識」網(wǎng)絡(luò)被近似:每個詞可表征為一個向量,它編碼了其被使用最多的語境。使用在自然語言處理任務(wù)的大型語料庫中學(xué)習(xí)的詞嵌入有時(shí)可使另一個語料庫中的特殊任務(wù)獲得提升。然而,如果有問題的語料庫是徹底非結(jié)構(gòu)的,那么深度學(xué)習(xí)將毫無用武之地。例如,你正在通過查看關(guān)鍵詞的非結(jié)構(gòu)列表進(jìn)行目標(biāo)分類。由于關(guān)鍵詞并不被用于任何特定結(jié)構(gòu),詞嵌入并不可能幫助太多。在這一情況中,數(shù)據(jù)是真正的詞包,表征對于任務(wù)也充足。一個反方論點(diǎn)也許是詞嵌入實(shí)際上并沒有那么昂貴,如果使用預(yù)訓(xùn)練的詞嵌入,你也許可以更好地捕捉到關(guān)鍵詞相似性。然而,我依然傾向于從詞包表征開始,并查看我是否能夠得到好的預(yù)測。畢竟,相比于對應(yīng)的詞嵌入槽,詞包的每一個維度更容易闡釋。
深度是未來
深度學(xué)習(xí)很熱,資金充足,且發(fā)展飛快。當(dāng)你在一個會議上讀到一篇深度學(xué)習(xí)論文時(shí),它可能是兩三次迭代后的結(jié)果。這給我的上述觀點(diǎn)提出了很大的注意:不久的將來,深度學(xué)習(xí)也許在一些場景中依然超級有用。闡釋深度學(xué)習(xí)的工具變得越來越好。最近的軟件(比如 Edward)融合了貝葉斯建模和深度網(wǎng)絡(luò)框架(詳見:深度概率編程語言 Edward:融合了貝葉斯、深度學(xué)習(xí)和概率編程),借助概率編程和自動變分推理,量化了神經(jīng)網(wǎng)絡(luò)參數(shù)和簡單貝葉斯推理的不確定性。長遠(yuǎn)看,存在一個簡化的建模詞匯表,揭示深度網(wǎng)絡(luò)可以具有的顯著屬性,從而減少需要測試的事物的參數(shù)空間。因此,繼續(xù)刷 arXiv 吧,沒準(zhǔn)一兩個月這篇文章已被迭代。
本文轉(zhuǎn)自機(jī)器之心,原文來自hyperparameter.space,作者Pablo Cordero。