為什麼深度學習在機器學習中如此火爆?深度學習還會迎來冬天嗎?

第二代終結者:收斂速度與泛化問題

神經網絡從“飛龍在天”到“亢龍有悔”,也只花了幾年時間,就又遇到了“第二代終結者”。有趣的是,第二代終結者的出現本身又是為了解決第一代終結者問題而導致的。

異或問題本質上是線性不可分問題。為了解決這個問題,在網絡裡引入非線性,以及將這些非線性函數組合的參數化學習方法(BP算法等)。但是這樣複雜的高維非線性模型,在計算上遇到了很多挑戰,基本上都是和鏈式求導的梯度算法相關的。

首先就是“慢”。訓練一個規模不算很大的神經網絡花上幾天時間是很正常的,在中國就更艱苦了。1998年在讀研究生時我得到的第一臺計算機是一臺“486”,在那上面運行MATLAB的神經網絡程序,隱藏層節點都不敢超過20個。為什麼這麼慢呢?全連接的前饋網絡,參數空間維數大幅增加,導致了維度災難(The Curse of Dimensionality),參數組合的數量呈指數增長,而預測的精度與空間維數的增加反向相關,在20世紀90年代有限的算力支持下,規模稍大的問題就解決不了了。

“萬能近似定理”雖然說明了我們可以逼近任意函數,但是並不保證有一個訓練算法能夠學習到這個函數。雖然後來我們知道,同樣的神經元數量,多隱層會比單隱層收斂得更快(雖然單隱層和多隱層在表達力上對於連續函數沒區別),但是那時候由於不能解決“梯度消失”的問題(後面還會講到),很少人會用多隱層。所以,神經網絡內在的結構性是不好的。那時候也有很多“打補丁”的方法,比如,通過進化神經網絡來尋找最優節點結構,或者自適應步長迭代,等等,但事後看,都是些治標不治本的方法。

維度災難的另一個後果是泛化問題。比如訓練一個手寫數字識別器,稍微變化一下圖像可能就識別不了了。這個問題的原因是誤差求導是在一個高維空間裡,目標函數是一個多“峰值”和“谷底”的非線性函數,這就導致了梯度下降迭代終點(“吸引子”)往往不一定是希望找到的結果(全局最優解)。甚至,有些迭代終點根本不是任何目標模式,稱為“偽模式”或者“偽狀態”。

Hinton在2015年的一個教程裡也總結了基於BP的前饋網絡的問題。

(1)數據:帶標籤的數據集很小,只有現在(2015)的千分之一。

(2)算力:計算性能很低,只有現在(2015)的百萬分之一。

(3)算法:權重的初始化方式和非線性模型錯誤。

後來,數據問題和算力問題被時間解決了,而算法問題早在2006年前後就被解決了(即深度學習革命)。

回到1995年,那時大家並沒有Hinton在20年後的這些洞見,但是也能意識到神經網絡的這些問題很難解決。再一次,“極高的期待導致極度的懷疑

”,未能兌現的承諾導致了資金的快速撤離和學術熱情的大幅下降。幾乎所有的神經網絡公司都關門了——至少有300家AI公司,包括Minsky的Thinking Machines(1994)也關門了。

這時候恰好出現了基於統計機器學習的其他競爭方法,導致大家逐漸拋棄了神經網絡而轉向統計機器學習,如支持向量機(SVM)、條件隨機場(CRF)、邏輯迴歸(LR迴歸)等。其實這些方法也都和神經網絡有千絲萬縷的聯繫,可以證明與某些特定的網絡等價,但是相對簡單、快速,加上出現了一些成熟的工具,到20世紀90年代後期在美國就成為主流了。

這裡只對SVM做一下分析。1963年SVM剛出現的時候,和單層感知器一樣,都只能處理線性分類問題。兩者後來能處理非線性問題,本質都是對原始的數據進行了一個空間變換,使其可以被線性分類,這樣就又可以用線性分類器了,只是兩者對如何做空間變換途徑不同:

  • 對於神經網絡,是用隱藏層的矩陣運算,使得數據的原始座標空間從線性不可分轉換成了線性可分;
  • 對於SVM,是利用“核函數”來完成這個轉換的。1995年,由Vladimir Vapnik(LeCun在貝爾實驗室的同事)等人以Support Vector Network的名義發佈了改進後的SVM,很快就在多方面體現出了相較於神經網絡的優勢:無需調參,速度快,全局最優解,比較好地解決了上述BP算法的問題,很快就在算法競爭中勝出。因此,雖然第二次神經網絡進入低谷沒有一個標誌性事件,但是一般認為Vapnik發表“Support Vector Network”這篇文章的1995年可以算轉折點。SVM到底算不算神經網絡的一種呢?其實線性的SVM和線性的感知器是等價的。兩者都是從線性模型到深度學習之間過渡,即:
  • 線性模型;
  • 線性SVM ⇔ 單層感知器;
  • 非線性核SVM ⇔ 多層感知器;
  • 深度學習。

只是,SVM以犧牲了一點表達力靈活性(通常核函數不是任意的)為代價,換來了實踐上的諸多方便。而神經網絡在之後的17年裡,逐漸從“主流”學術界消失了,直到跌到了“鄙視鏈”的最下面。據說Hinton從20世紀90年代到2006年大部分投稿都被會議拒掉,因為數學(相比統計機器學習)看起來不夠“fancy”(新潮)。

20世紀90年代中期到2010年左右在整體上被認為是第二個AI冬天,神經網絡無疑是其中最冷的一個分支。值得一提的是,這段時間內互聯網興起,連帶導致機器學習方法和語義網方法的興起,算是這個寒冬裡兩個小的局部春天。不過在這個神經網絡“潛龍勿用”的第二個蟄伏期,有些學者依然頑強堅持著,轉機又在慢慢醞釀。

為什麼深度學習能戰勝“第二代終結者”,取得這麼好的成績呢?我想從算法細節、算法哲學、工程成本三個角度談一些個人看法。

1.從算法細節的角度分析

前面我們提到鏈式求導帶來一系列問題。單隱層全連接造成收斂速度不夠快,但是由於“梯度消失”(或對偶的“梯度爆炸”)問題,難以實現多隱層誤差反向傳播。而且,網絡還有泛化能力不好、容易過擬合等問題。

它的解決方法其實並不複雜。首先,用分段線性函數ReLU: f(x)=max(0,x)取代sigmoid激活函數——這個函數甚至不是嚴格可微的。線性保證了它的導數不會趨近於零,分段線性則保證了我們可以分段逼近一個函數,儘管從理論上這個逼近不平滑,但是工程上夠用。

實踐表明,ReLU函數在訓練多層神經網絡時,更容易收斂,並且預測性能更好。這不是從理論推導出來的結果,而是有了實踐之後,反過來總結出來的。我們發現單側抑制一些神經元(ReLU的實際作用)會導致“表徵稀疏”,而這反而是好事,既讓表示更具有魯棒性,又提高了計算效率。

這種丟棄信息反而提高效果的工程實踐在深度學習的其他一些細節也有體現。比如,“丟棄”算法(dropout)通過每次訓練讓部分神經元“裝死”來避免過擬合,卷積神經網絡中引入“池化”(pooling)丟棄一些輸入信息反而會指數級減小泛化誤差。

以上種種工程技巧,基本原理並不複雜,一旦捅破窗戶紙,不免給人“原來如此簡單”的感覺。與當初戰勝“第一代終結者”也頗有類似之處,就是並非依賴一個高深莫測的新理論,而是依賴一些樸素的“常識”,去從工程上想辦法。

那為什麼這些看似簡單的方法,要過十幾年才被接受呢?大概是因為學術界的遺忘週期是15年吧!三代博士過後大家基本就不記得從前了。正所謂“人心中的成見是一座大山”,直到連成見都被遺忘了,才會有新的開始。

2.從算法哲學的角度來分析

總的來說,神經網絡的演進一直沿著“模塊化+層次化”的方向,不斷把多個承擔相對簡單任務的模塊組合起來。BP網絡是感知器的層次化,深度學習網絡則是多個BP網絡的層次化——當然後來也出現了多種非BP網絡的深度層次化。Hinton最近提出的“膠囊”(capsule)網絡就是要進一步模塊化。層次化並不僅僅是網絡的拓撲疊加,更重要的是學習算法的升級,例如,僅僅簡單地加深層次會導致BP網絡的梯度消失問題。

從本質上說,深度學習網絡可以比經典的BP網絡處理更復雜的任務,在於它的模塊性,使得它可以對複雜問題“分而治之”(Divide and Conquer)。無論是多層前饋網絡,還是循環神經網絡,都體現了這種模塊性。因為我們處理的問題(圖像、語音、文字)往往都有天然的模塊性,學習網絡的模塊性若匹配了問題本身內在的模塊性,就能取得較好的效果。

這可以看成一種連接主義的“動態規劃”,把原來全連接網絡的訓練這種單一決策過程,變成了多階段決策過程。例如,在多層卷積網絡對圖像的處理中,會出現不同的層次依次“抽取”出了從基礎特徵到高層次模式的現象,每一層基於上一層的輸入,就相當於很多子任務可以被重用了。所以這種方法也被稱為表示學習(representation learning)方法。

這樣的好處是多方面的,既極大提高了學習收斂的速度(解決了維度災難),又可避免那些“不合理”的局部最優解(因為它們在模塊性匹配的過程中被自然淘汰了)。

從這個角度去理解,深度神經網絡是“優雅”的,在於它簡潔而美。一個“好”的模型,通常是“優雅”的。這很難說是什麼科學道理,但是就和物理學一樣,一個計算機科學的算法,如果它是技術主幹道上的一個有深遠價值的東西,往往它是“美”的,簡潔的,沒有太多補丁。一個糟糕的算法,就好像托勒密的“本輪”,一個補丁套一個補丁,或者像在發明抗生素之前治療肺結核的方法,神秘而不可解釋。如之前給BP網絡和Hopfield網絡打各種補丁的方法,前置各種ad-hoc不變形特徵提取器,用進化算法訓練網絡結構,用局部定位消除虛假吸引子,等等,數學上都高深莫測,但是效果並不好。現在回頭看,那些模型都很“醜”。

深度學習把學習分層,不是個數學問題,而是個知識重用問題,每一層自然分解出不同等級的特徵,從底層特徵到高層特徵。這樣一下子就把原來打幾千種補丁的必要性都消滅了。這個架構是優雅的,也同時解決了收斂速度問題和泛化問題,因為它觸及了問題的本質。一個優雅的方法,基本的原理往往是特別好懂的,不用看公式就能懂。

這裡多說一句,深度學習模型現在大火的同時,也出現了很多對它的“本輪”補丁,如一些幾百層的神經網絡模型。搞得這麼複雜的模型,通常在技術演進上是旁支。

3.從工程成本角度分析

深度學習的成功,工具系統的可用性是很關鍵的因素。工具大大降低了運用這些方法的門檻。深度學習被採用,並不一定是因為它效果最好——許多場合可能就和傳統方法的最好水平差不多。但是,發揮傳統方法的最好水平需要一位有多年經驗的“老中醫”,而深度學習工具可以讓一個剛出道的學生就達到相近或稍差的表現,在語音和圖像場景上更可以超出傳統方法。這從管理學和經濟學上都帶來了巨大的好處。

例如2006年Netflix推薦算法大賽,冠軍團隊利用集成算法,整合了107種算法,最後提高了10個百分點。而2016年,有人用Keras寫了一段不到20行的深度神經網絡程序就得到了類似的結果。又如基於深度學習的依存文法解析器senna和傳統的Stanford parser相比,效果接近,略差一點,但是從建模複雜性上,senna就遠遠比Stanford parser簡單了,senna只用了一個零頭的代碼量就達到了接近的效果。

以前需要“老中醫”來做特徵工程,現在交給深度學習來進行表示學習(representation learning),通過深度神經網絡中的逐層加工,逐漸將低層的特徵表示轉化為高層的特徵表示。

同樣,以前也需要“老中醫”來對核函數(kernel)、卷積模板(mask)等強烈依賴經驗的計算單元進行選擇或者構造,這限制了可能的學習種類。深度學習網絡相當於可以從數據中學習kernel或者mask,大大提高了靈活性,降低了對經驗的依賴。

又如,在深度學習中廣泛採用預訓練模型(如最近很火的BERT)。這個想法的本質是知識重用。可複用的預訓練模型作為“工作母機”,可以被後續的工程再去針對特定的任務修正和調優。

綜上所述,大量深度學習工具的出現,大大降低了神經網絡的入門門檻,大大增加了神經網絡工程師的供給總量,大大降低了領域專家介入成本,從而有利於控制工程總成本。

不過,現實的問題求解並不是單一工序。任何一個實際問題的解決,都需要工程上的細緻的問題分解,並不總是存在“端到端”的方法,多種工具的組合運用是工程不可或缺的。隨著深度學習的普及,最近幾年畢業的學生,很多甚至不知道深度學習之外的方法了,連傳統機器學習都丟掉了,更不用說規則方法了,這對實際解決問題將是有害的。

會有第三代終結者嗎?

深度學習如今進入了本輪高潮的第7個年頭,正如日中天,在前所未有的海量資金投入時,討論是不是會有什麼因素導致本輪高潮的結束似乎是杞人憂天。有人認為,這一次的神經網絡復興將是最後一次,因為神經網絡將不可能再次進入低谷。不過,“一切偉大的世界歷史事變……可以說都出現兩次”。“極高的期待導致極度的懷疑”這件事已經發生兩次了,如今正處在第三次“極高的期待”中,很多名人又開始擔心人工智能威脅人類了。為了這一領域的健康發展,我們也應該審視深度學習是不是有其自身的邊界,並提前想一想對這些邊界的應對。

如之前的分析,第二代終結者問題(鏈式求導的副作用)恰恰是為了解決第一代終結者問題(非線性分類)而帶來的新問題。那終結第三次神經網絡高潮(深度學習)的會不會也是為了解決第二代終結者問題而導致的新問題呢?

暴力美學問題。當我們加深網絡層次並引入模塊性的時候,會帶來什麼副作用呢?現在深度學習反而變得越來越貴,層數越來越多,預訓練模型也越來越昂貴,深度學習在很多場景下反而變成了“暴力美學”,成為拼數據、拼GPU的燒錢遊戲。但是,其實去非巨頭的企業走走就會知道,大多數的領域落地問題,還不能承擔這種成本,尤其是很多機構組織的問題解決,必須從低成本小問題開始。“暴力美學”式的深度學習,就只能停留在“頭部問題”(即存在大量數據和大量算力的問題)上,而難以解決大多數垂直領域問題。

煉丹問題。深度學習的結果越來越難以解釋和定向優化,整個系統是個“煉丹”的黑箱。當然,這個問題不是深度學習獨有的,是整個“連接主義”方法共同的問題。只是深度學習把這種“煉丹”推到了一個全新的高度,調參的效果往往不可理解,沒法解釋。但是非常多的應用問題,如醫療和自動駕駛,的確是需要可解釋性和定向優化的,這就限制了應用的效果。

遞歸性序列問題。黑箱問題本身可能還不是致命的,但是它又帶來了另一個問題:一些在人看起來很清晰的問題,基於海量的訓練數據機器還是學習不好。這類問題通常是一種“遞歸性生成規則”,最簡單的如數字的構成規則,基於這些規則可能生成無窮無盡的序列。基於純語料對齊技術訓練,就很難得到不出錯的中英文數字翻譯。類似的遞歸性序列不僅在語言中大量存在,在表格、篇章等結構中也廣泛存在。深度學習到底能不能在工程上解決這類語法歸納(grammar induction)問題,還是個待實踐的問題。

知識融合問題。這個問題也是近來學術界關注的熱點。如何把先驗知識或者“知識圖譜”(即數據本身的結構性)融合進深度神經網絡?各類的向量化方法被提出,語義並不依賴於把符號直接映射到模型世界的個體上,而取決於個體的統計特性。但是除了詞向量,其他更復雜的知識結構(例如屬性、二元關係和表達式)在工程上依然鮮有成功。在自然語言處理中,外源知識恐怕是難以避免的,目前的向量化方法,似乎還不足以獨立完成這個 任務。

深度學習的這些問題(潛在的“第三代終結者”問題),也同樣是難以僅僅用拓撲的改良來解決的,例如增加神經網絡層數或者再提升數據的量級。可能需要我們進一步提出更先進的網絡結構,或者融合其他的AI工具,而不僅是“打補丁”(和二十多年前一樣)。讀者可能也會得出自己的“終結者問題”。思考這些問題,並不意味著我們否定深度學習,而是有助於我們進一步拓寬思路。也許,如之前的兩次復興一樣,答案並不複雜,需要的僅僅是從常識出發,去發現工程的技巧。

以上內容摘自《深度學習導論》的中文版序

為什麼深度學習在機器學習中如此火爆?深度學習還會迎來冬天嗎?

神經網絡(包括深度學習)是最好的第一種算法和最後一種算法。當你對一個問題一無所知,請用神經網絡。當一個問題已經被明確可解,神經網絡總是可以幫你達到已知的最優結果。在兩者之間,神經網絡和其他算法一樣優秀或者糟糕。神經網絡模型在實踐有效後通常都會經歷簡化,甚至部分“白箱”化。這在工程上是幾乎一定會發生的。總之,它是一個“最不壞的選擇”。

我們可以做到的是實事求是,一切從實踐出發,一切從工程出發,去理解約束,理解落地細節,抓住本質。我們也會經歷知其然、知其所以然,到知未然的認識深化過程。對神經網絡這樣一種頗為複雜的工具,比較和實踐都是不可或缺的。

Charniak的這本書就是可以幫助您達到這一點的優秀參考書。它是一本實事求是的教材,它也是一本以工程為導向的指南,以Python和Tensorflow為實踐工具,可以帶你以清晰的邏輯進入實戰,去領略基礎的深度學習算法如CNN、RNN、LSTM、GAN等。這本書只是一個開始,正如本文前面所述,神經網絡是一個有深厚歷史淵源的學科,在未來還有很多其他的進階話題等著對此有興趣的讀者去探索。


分享到:


相關文章: