深度學習如何優化神經網路結構?
本文作者 Reza Zadeh 是斯坦福大學副教授及 Matroid 公司創始人兼 CEO。他的研究工作主要涉及機器學習、分散式計算和離散應用數學。他同時也是微軟和 Databricks 的技術顧問委員會的成員。對於這篇文章,他總結說:「神經網路越深,往往就越難優化。」
優化是非常困難的一類問題,而這正是深度學習的核心。優化問題是如此困難,以至於在神經網路引入幾十年後,深度神經網路的優化問題仍阻礙著它們的推廣,並導致了其 20 世紀 90 年代到 21 世紀初的衰落。自那以後,我們解決了這個問題。在這篇文章中,我會探討優化神經網路的「困難度(hardness)」,並發掘其背後的理論。簡而言之:網路越深,優化問題就越難。
最簡單的神經網路是單節點感知器,其優化問題是凸優化的。凸優化問題的好處是其所有的局部最小值也是全局最小值。現在有各種各樣的優化演算法來處理凸優化問題,且每隔幾年就有更好用於凸優化理論的多項式時間演算法(polynomial-time algorithms)出現。運用凸優化很容易得到單個神經元的優化權重(見下圖)。從單個神經元開始,讓我們看看會發生什麼。
圖 1。左:凸函數。右:非凸函數。沿著函數表面,凸函數比非凸函數更容易找到表面的最小值。(來源: Reza Zadeh)
下一步是保持單層網路下添加多個神經元。對於單層、n 節點的感知機神經網路,如果存在一組邊權重使得網路可以正確地分類給定的訓練集,則這樣的權重可以通過線性規劃用 n 的多項式時間找到,這也是凸優化的特殊例子。所以下個問題是:對於更深的多層神經網路,我們是否可以類似地使用這種多項式時間方法?不幸的是,我們無法保證。
能夠有效解決兩層或多層的廣義神經網路的優化問題並不容易,這些演算法將會涉及計算機科學中的一些最棘手的開放性問題。因此,要想機器學習研究人員找到可靠的深度網路最佳優化演算法可能性十分渺茫。因為該問題是 NP-hard(非確定性多項式困難 non-deterministic polynomial hard)的,也就意味著如果可以在多項式時間的計算複雜度中解決它,也將解決數十年來懸而未決的幾千個開放性問題。事實上,1988 年 J.Stephen Judd 闡述的以下問題就是 NP-hard:
給定一個廣義神經網路和一組訓練集樣本,是否存在一組網路邊權重(edge weight),使網路能夠為所有的訓練樣本產生正確的輸出結果?
Judd 還表明,即使只需要神經網路正確輸出三分之二的訓練樣本,但還是 NP-hard 的,這意味著即使在最壞的情況下,訓練一個不精確的神經網路在本質上也是困難的。1993 年,Blum 和 Rivest 證明了更壞的消息:即使訓練一個只有兩層和三個節點的簡單神經網路也是 NP-hard!
理論上,對比深度學習與機器學習中的許多更簡單的模型(例如支持向量機和邏輯回歸),這些模型可以在數學上保證優化能在多項式時間中執行。對於這些更簡單的模型,我們能夠保證優化演算法在多項式時間內就會找到最佳模型。但是,對於深度神經網路的優化演算法,並沒有這樣的保證。根據你的設置來看,你不知道你訓練的深度神經網路是否是你可以找到的最好的模型。所以你也並不知道如果繼續訓練是否能得到更好的模型。
幸運的是,實踐中我們可以非常有效地解決這些「困難」結果:運用典型梯度下降(gradient descent)優化方法可以給出足夠好的局部最小值,讓我們在許多問題上取得了巨大進步,例如圖像識別、語音識別和機器翻譯。我們只是忽略困難的部分,在時間允許下儘可能多地運用梯度下降迭代。
似乎最優化問題的傳統理論結果是很笨拙的,我們很大程度上可以通過工程和數學技巧、啟發式方法、增加更多的機器或使用新的硬體(如 GPU)來解決它們。有意思的是,仍有很多人研究為什麼典型的優化演算法如此有用,當然除了那些困難的部分。
深度學習流行的原因遠遠不止是解決了優化問題。深度學習在許多機器學習任務中獲得領先,它的網路的架構、訓練的數據量、損失函數和正則化都起著關鍵作用。
原文鏈接:The hard thing about deep learning
rnn中運用Hessian-Free演算法的變形有些效果,樓主可以搜搜。
順便頂一下Darkscope大神better way to initialize the parameters of the neural network.
網路結構屬於超參,目前主流的方法是grid search或者靠經驗來篩選。以此方法,有不少開源包可以用。08年左右有人從理論和實驗山都證明了隨機效果也不差,後來我記得nips有篇文章也是把超參用梯度方法來優化。前幾個月做了一方面這些工作,不過文章還沒投出去,暫時先不說
dropout+maxout+pretraining
Hinton大神提出的基於RBM的pretraining演算法。可以搜他的論文,2006年的。
difficult, still open area.
可以考慮網格法
推薦閱讀:
※如何理解卷積神經網路中的權值共享?
※ICML 2016上哪些論文值得關注?
※如何比較Keras, TensorLayer, TFLearn ?
※寫一個像Keras的深度學習框架需要學習哪些知識?
※對於一個可以窮舉的問題,比如五子棋,深度學習得到的模型和窮舉的演算法有啥異同?
TAG:學習 | 神經網路 | 深度學習DeepLearning |