深度學習簡明介紹

本文翻譯自 A Brief Overview of Deep Learning。如果對神經網絡感興趣,閱讀 如何簡單形象又有趣地講解神經網絡是什麼? 這個問題下面的答案會很有幫助,強烈推薦。

(這是來自 Ilya Sutskever 的關於深度學習(Deep learning)以及實踐建議的約稿。感謝 Ilya 爲本文付出的努力。)

最近 Deep Learning 真的很流行,各種大大小小的公司都投入其中並獲利,發展如火如荼,並且取得了一些成就,比如:large deep neural networks (DNN)在下面的領域建樹頗豐:

  • 語音識別
  • 視覺對象識別
  • 一些語言相關的任務,比如機器翻譯以及語言模型

於是問題來了:

  • 深度學習到底神在哪裏?(後面,我們將使用 large deep neural networks - LDNN,我們平常談到深度學習時主要說的就是這個)
  • 爲什麼 LDNN 現在才火起來,它和之前的神經網絡有什麼不同?

總得來說,如果我們想要訓練一個 LDNN,坊間傳言是很難的,需要多年經驗積累的 “黑魔法”。當然具備一定的經驗是有幫助的,但是其中必需的技能還是出乎很多人意料得有限,中間也只需要注意少量的坑而已。而且,我們已經有很多最先進的開源的神經網絡實現(比如:Caffe,cuda-covnet,Torch,Theano),這讓我們學習如何實現一個神經網絡並使其工作變得很簡單。

深度學習爲什麼有用?

我們都知道:工欲善其事,必先利其器。爲了解決困難的問題,我們需要強大的模型,否則就沒有可能解決面臨的問題,而和我們使用的算法是否足夠好沒有關係。另外一個必要條件是這個模型是可以被訓練的,否則模型的作用就受到很大限制,無法應對潛在的變化。

幸運的是,LDNN 足夠強大而且可被訓練。

LDNNs 爲什麼強大?

當我提到 LDNNs 時,其實我說的是 10-20 層神經網絡(這是其可被今天的算法訓練的基礎)。接下來我就來從下面幾個方面揭示 LDNNs 可以如此強大的原因:

  • 常規統計模型學習的是簡單模式和聚合,而 LDNNs 學習的是計算方法,包含一定數量步驟的大規模並行計算。
    業界普遍認爲任何算法都可以被轉化爲相應深度的迴路計算(算法執行的每一步爲一層————例子)而且這裏的深度越深,將算法轉化爲迴路計算的成本越高。神經網絡也是迴路,更深的神經網絡可以實現更復雜的算法————這就是爲什麼深度是能力的代名詞。
    • 注意:這裏可以比較容易看到一個神經網絡中的神經元可以通過簡單設置計算其輸入的關聯性以及非關聯性。
  • 出乎我們意料的是,神經網絡要比基於布爾判斷的流程控制( boolean circuits )更有效率。 這裏我所說的更有效率,是指一個較淺的神經網絡就可以解決需要非常多層 boolean circuits 才能處理的問題。舉個讓人難以置信的例子吧,關於一個 2 層的深度神經網絡和可以對 N 個 N-bit 數字進行排序的相應規模的計算單元。由於我剛開始聽到這個結論時也被驚到了,所以,我實現了一個簡單的神經網絡並訓練它對 10 個 6-bit 的數字進行排序,過程出乎意料的簡單。如果使用 boolean circuits 的話就不可能如此簡單。
    • 這裏神經網絡效率高的原因在於神經元執行了分流操作,這對於一個小型的布爾迴路是不可能做到的。
    • 總得來說,人體神經元是比較慢的,然而人卻可以在不到 1 秒的時間內完成很多複雜的任務。科學研究表明,人體神經元傳導電信號的頻率不會超過 100次/秒。這意味着如果人可以在 0.1 秒內解決一個問題,那麼我們的神經元可以傳導不超過 10 次的信號,那我們好像可以據此推導出:一個擁有 10 層的神經網絡可以在 0.1 秒內做任何一個人在同樣時間內可以做的事情。
    • 遺憾的是,上面推導出來的結論不是科學的結論。可以想象原因在於人體神經元要比神經網絡中的人造神經元強大多了,雖然在一些情況下人造神經元會比人體神經元更強大(比如數值運算)。無論如何,上面的推論都是一個合理的假設。
  • 有意思的是人可以在 0.1 秒之內解決很多複雜的認知問題,比如:人可以非常快速地識別面前的物體、通過面貌認出人、以及理解別人說的話。事實上,哪怕整個世界上只有一個人有這樣處理複雜任務的能力,也可以作爲 LDNNs 可以做相同事情的有力證據————只要這個神經網絡的連接關係被合理地設置。
  • 但是神經網絡不是需要做得很大規模嗎? 也許吧,我們當然知道它們的規模不需要被做得及其大————就像我們的大腦就不是很大,而且人體神經元傳遞信號時會出現噪聲時(舉個例子),這意味着完成僅需一個人造神經元就能處理的任務需要很多人體神經元參與才能完成。這樣完成處理所需時間超過 0.1 秒任務的 LDNNs 中需要的人造神經元的數量會減少很多。

上面的討論表明了(我個人覺得很有有力地表明瞭)對於一個非常廣泛的問題來說,是存在一個能否解決它的被合理連接的 LDNNs 的。關鍵的是,完成這個任務所需的計算單元的數量是很有限的————一般情況下由於需求有限,我們可以使用已有的硬件訓練神經網絡來獲得處理該類問題的最好性能。這是我覺得最後一個很重要需要再闡述一下的點:

  • 我們知道大多數機器學習算法是穩定的。也就是說,只要有足夠的數據就能解決問題。這就帶來了一個問題:穩定性一般情況下要求及其大的數據量。舉個例子,nearest neighbor algorithm 算法能通過保存對所有預期輸入的處理結果來解決任何問題。這對矢量支持機(support vector machine)也是成立的————對於很難的問題而言,我們需要對每個訓練 case 進行矢量支持。這點對於僅有一層的神經網絡也是成立的。如果我們對每個可能的訓練 case 都有一個人造神經元來處理,這個神經元之對該訓練 case 作出反應,那麼我們就可以學習以及表現每一個從輸入到輸出的可能的處理邏輯。這樣任何問題都可以在資源無限的情況下被解決,當然這對於我們有限的物理資源來說是不可接受的。
  • 這裏我們討論的觀點也是將 LDNNs 區別於之前方法的關鍵。我們有理由確信一個合理規模的 LDNNs 可以在解決各種需要我們處理的廣泛問題的時候取得很好效果的。如果一個問題可以被人腦在 1 秒內解決,那我們就可以使用一個規模不大的神經網絡高性能地解決這個問題。
  • 但是我必須承認事先預測一個問題是否可以被一個深度神經網絡解決是不可能的,儘管我們通常知道什麼時候能確定一個類似的問題是否可以被一個規模可控的 LDNN 處理。

這就是深度學習,給定一個問題,比如視覺對象識別,我們需要做的就是訓練一個具有 50 層的 convolutional neural network。一個如此規模的神經網絡是可以通過合理配置來達到人腦在視覺對象識別上的效率的。接下來我們就需要知道怎樣做,然後做出來,解決問題。

學習

什麼是學習呢?學習的過程就是找到神經網絡權重的設置,使其能從訓練數據中獲得最好的結果。換句話說,就是我們將標籤化的數據作爲參數 推送 給神經網絡,使其完成這個學習的過程。

深度學習的成功基於一個幸運的事實:良好調校並且審慎初始化的 隨機梯度下降stochastic gradient descent(SGD))方法可以針對實際問題對LDNNs 進行訓練。這不是個簡單的事實,因爲一個神經網絡的訓練錯誤是其權重的方程,並且該方程高度 非凸 (Non-convex),當對其進行 非凸優化 之時,經驗告訴我們肯定竹籃打水一場空。只有 凸函數 是好結果,非凸函數 是壞結果。而且,一般情況下,SGD 針對我們關心的問題對LDNNs 進行訓練非常擅長。訓練神經網絡的問題在於 NP-hard,而且實際上存在一個數據集族使得包含 3 個隱藏單元的神經網絡的學習變得 NP-hard,然而 SGD 可以在實踐中解決這個問題,這也是深度學習的支柱。

我們可以相當確信地說成功地訓練一個神經網絡的基礎在於數據之間的關聯性,這使得學習過程能自我優化並處理數據之間更復雜的關聯性。我曾經做過一個實驗來證明這一點:我之前發現訓練神經網絡去解決 奇偶校驗問題 (parity problem)很困難,我能成功地訓練神經網絡來對 25bit,29bit 的整數進行奇偶校驗,但是對於 31bit 的整數卻從沒有成功過(順便說一下,我不是說對於 30bit 以上的整數進行奇偶校驗的學習是不可能的,我只是說我沒有成功做到)。現在,我們知道奇偶校驗是高度不穩定的,因爲這個問題沒有線性關聯性:輸入的每個線性函數和輸出完全沒有關係,這對於神經網絡來說是個問題,因爲神經網絡基本上會被初始化爲線性的(所以可能我不應該使用很大的初始權重?我會在本文後面討論權重初始化)。所以我的假設(很多其他科學家也認同這樣的假設)是認爲神經網絡從注意到大部分輸入和輸出之間明顯的關聯性開始學習的過程————無論簡單還是困難,然後這個網絡從一個關聯性跳到一個更復雜的關聯性,類似於機會主義登山者(opportunistic mountain climber)

概括

雖然談論神經網絡優化的內在具體需求很困難(除非就說最簡單的情況,所有問題都只有一個極點值而且沒有樂趣可言),我們還是可以從大的方面談談概況。

Valiant 在他 1984 年發表的論文 “A Theory of the Learnable” 中證明了粗略地講,如果存在有限數量的函數,比如 N 個,那麼在擁有超過log(N) 個訓練 case 乘以一個很小的常數因子的情況下每個訓練錯誤將接近於每個測試錯誤。很明顯在這種情況下,過度擬合(overfitting) 基本上是不可能的(過度擬合產生於當訓練錯誤和測試錯誤之間有較大差距時,有人告訴我這個結果在 Vapnik’s book 中以一個練習的形式出現過)。這個定理很容易證明,不過這不是本文的重點。

這個結果對於任何神經網絡的實現中具有重要的意義。假設我有一個具有 N 個參數的神經網絡,每個參數是一個 32bit 浮點數,那麼這個神經網絡就被特化爲 32N bit,這意味着我們將擁有不多於 2 的 32N 次方的不同神經網絡,而且可能遠少於這個數。這種情況下,當我們擁有多於 32N 個訓練 case 的時候我們將不會過度擬合很多。這點很好,意味着理論上計算參數是可以的,而且如果我們很確信每個權重只需要 4 bits(假設情況) 的時候,那麼除此之外就是噪聲了,我們也就可以相當確信訓練 cases 的數量將會是 4N 而不是 32N 的常數因子。

總結

如果我們想解決一個困難的問題我們可能需要一個含有很多參數的 LDMM。然後我們需要一個大規模高質量標籤化的訓練集來保證這個神經網絡擁有足夠的信息定義所有網絡的連接性,獲得這個訓練集後,我們需要對其使用 SGD 直到這個神經網絡解決了問題,如果這個網絡足夠大規模並且足夠深,那通常是可以解決問題的。

實踐建議

翻譯原文的目的在於瞭解深度學習的概況,原文中的實踐建議給出了很多條 best practice,由於目前缺少實踐經驗就不翻譯了。


原文鏈接: http://xhrwang.me/2015/01/16/a-brief-overview-of-deep-learning.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章