深度學習的難點
深度學習的核心問題就是一個非常難的優化問題。所以在神經網路引入後的幾十年間,深度神經網路的優化問題的困難性是阻礙它們成為主流的一個重要因素。並導致了它們在20世紀90年代到21世紀初期間的衰落。不過現在已經基本解決了這個問題。在本篇博文中,我會探討優化神經網路的“困難性”,以及理論上是怎麼解釋這個問題的。簡而言之:神經網路變得越深,優化問題就會變得越難。
最簡單的神經網路是單節點感知器,其優化問題是凸問題。凸優化問題的好處是所有的區域性最小值也是全域性最小值。存在各種各樣的優化演算法來解決凸優化問題,並且每隔幾年就會發現更好的用於凸優化的多項式時間的演算法。使用凸優化演算法可以輕鬆地優化單個神經元的權重(參見下圖)。下面讓我們看看擴充套件一個單神經元后會發生什麼。
圖1 左圖:一個凸函式。右圖:一個非凸函式。凸函式比非凸函式更容易找到函式曲面的底部(來源:Reza Zadeh)
下一步自然就是在保持單層神經網路的情況下新增更多的神經元。對於單層n節點感知器的神經網路,如果存在邊權重可以使得神經網路能正確地對訓練集進行分類,那麼這樣的邊權重是可以通過線性規劃在多項式時間O(n)內找到。線性規劃也是凸優化的一種特殊情況。這時一個問題應運而生:我們可以對更深的多層神經網路做出這種類似的保證麼?不幸的是,不能。
為了可證明地解決兩層或多層的一般神經網路的優化問題,需要的演算法將會遇到某些電腦科學中最大的未解問題。因此我們對機器學習研究人員嘗試找到可證明地解決深度神經網路優化問題的演算法不抱有太大的希望。因為這個優化問題是NP-hard問題,這意味著如果在多項式時間內可證明地解決這個問題,那麼也可以解決那些幾十年來尚未被解決的成千上萬的問題。事實上,J. Stephen Judd在1988年就發現下面這個問題是NP-hard問題:
給定一個一般的神經網路和一組訓練樣本,是否存在一組網路邊權重使得神經網路能為所有的訓練樣本產生正確的輸出?
Judd的研究還表明:即使要求一個神經網路只為三分之二的訓練樣本產生正確的輸出仍然是一個NP-hard問題。這意味著即使在最壞的情況下,近似訓練一個神經網路在本質上還是困難的。1993年Blum和Rivest發現的事實更糟:即使一個只有兩層和三個節點的簡單神經網路的訓練優化問題仍然是NP-hard問題。
理論上,深度學習與機器學習中的很多相對簡單的模型(例如支援向量機和邏輯迴歸模型)的區別在於,這些簡單模型可以數學證明地在多項式時間內完成模型優化。對於這些相對簡單的模型,我們可以保證即使用執行時間比多項式時間更長的優化演算法也都不能找到更好的模型。但是現有的深度神經網路的優化演算法並不能提供這樣的保證。在你訓練完一個深度神經網路模型之後,你並不知道這個網路模型是否是在你的當前配置下能找到的最優的一個模型。所以你會存有疑慮,如果繼續訓練模型的話是否可以得到一個更好的模型。
幸運的是我們在實踐中可以非常高效地接近這些最優結果:通過執行經典的梯度下降優化方法就可以得到足夠好的區域性最小值,從而可以使我們在許多常見問題上取得巨大進步,例如影象識別、語音識別和機器翻譯。我們簡單地忽略最優結果,並在時間允許的情況下儘可能多地進行梯度下降迭代。
似乎傳統的優化理論結果是殘酷的,但我們可以通過工程方法和數學技巧來儘量規避這些問題,例如啟發式方法、增加更多的機器和使用新的硬體(如GPU)。一些研究工作正在積極地探索為什麼理論結果很殘酷,但這些經典的優化演算法卻工作得這麼好。
深度學習能成功的因素遠遠不只克服優化問題。神經網路的架構、訓練資料的數量、損失函式和正則化等都對於能在機器學習任務中獲得高質量的結果起著關鍵作用。在後續的博文中,我將會討論涵蓋這些方面的最新的理論成果,來解釋為什麼神經網路在各種任務上工作得如此好。
Reza Zadeh
Reza Zadeh是史丹佛大學的兼職教授、Matroid創始人和執行長。他的工作主要關注於機器學習、分散式計算和離散應用數學。他曾在Miscrosoft和Databricks的技術顧問委員會任職。
相關文章
- 深度學習很難?一文讀懂深度學習!深度學習
- 學JS的難點JS
- 深度解析原型中的各個難點原型
- 深度學習(一)深度學習學習資料深度學習
- 深度學習中的框架特點及介紹深度學習框架
- 零基礎學習Java的難點有哪些?Java
- 深度學習(Deep Learning)優缺點深度學習
- 機器學習vs深度學習及其知識點機器學習深度學習
- 深度學習+深度強化學習+遷移學習【研修】深度學習強化學習遷移學習
- 深度學習及深度強化學習研修深度學習強化學習
- 點雲深度學習:多一維看世界深度學習
- 深度學習學習框架深度學習框架
- ICLR 2019 | 用淺度學習訓練深度網路:避開端到端深度學習難題ICLR深度學習
- 深度學習深度學習
- ####深度學習深度學習
- 深度 學習
- 學習Python難不難?Python
- 聯邦學習:深度學習之後,AI 安防的第二落腳點聯邦學習深度學習AI
- 深度學習及深度強化學習應用深度學習強化學習
- 深度學習中tensorflow框架的學習深度學習框架
- 拯救深度學習:標註資料不足下的深度學習方法深度學習
- 深度學習的工作原理深度學習
- 深度學習中的Dropout深度學習
- 深度學習的Attention模型深度學習模型
- 掌握這五點建議,Linux學習不再難Linux
- 讀懂深度學習,走進“深度學習+”階段深度學習
- 深度學習——學習目錄——學習中……深度學習
- MySQL深度學習MySql深度學習
- 深度學習模型深度學習模型
- 深度學習《StarGAN》深度學習
- 深度學習《patchGAN》深度學習
- 深度學習《CycleGAN》深度學習
- 深度學習-LSTM深度學習
- 深度學習概念深度學習
- 深度學習引言深度學習
- 機器學習及深度學習的知識點及面試題總結機器學習深度學習面試題
- 學習Java開發難不難?好學嗎?Java
- 【深度學習】大牛的《深度學習》筆記,Deep Learning速成教程深度學習筆記