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