Neural-Networks

為什麼二階 SGD 收斂方法在深度學習中不受歡迎?

  • February 24, 2019

似乎,特別是對於深度學習,有一些非常簡單的方法可以優化 SGD 收斂性,比如 ADAM - 很好的概述:http ://ruder.io/optimizing-gradient-descent/

他們只追踪單個方向——丟棄關於剩餘方向的信息,他們不嘗試估計與近極值的距離——這是梯度演化所建議的( $ \rightarrow 0 $ 極值),並且可以幫助選擇步長的關鍵。

這兩個錯失的機會都可以被二階方法利用——嘗試同時在多個方向(不是全部,只是幾個)對拋物線進行局部建模,例如在某些方向上接近鞍座吸引,在其他方向上排斥。這裡有一些:

但是一階方法仍然占主導地位(?),我聽說二階方法不適用於深度學習(?)

主要有 3 個挑戰(還有嗎?):反轉 Hessian、梯度隨機性和處理。如果在一些有希望的方向(我想使用)將參數化局部建模為拋物線,則所有這些都應該解決:根據計算的梯度更新此參數化,並基於此參數化執行適當的步驟。這樣,極值可以在更新的參數中 - 沒有 Hessian 反演,參數化的緩慢演變允許從梯度累積統計趨勢,我們可以對鞍附近的兩個曲率進行建模:相應地吸引或排斥,強度取決於建模的距離。

我們應該採用二階方法進行深度學習嗎?

為什麼讓它們比簡單的一階方法更成功如此困難——我們能否識別這些挑戰……解決它們?

由於實現二階方法的方法有很多,哪一種看起來最有前途?

更新:SGD 收斂方法概述,包括二階:https ://www.dropbox.com/s/54v8cwqyp7uvddk/SGD.pdf

更新:有批評巨大的二階方法,但我們可以在成本範圍的另一端工作:從成功的一階方法中做出微小的步驟,比如單向的廉價在線拋物線模型,例如動量方法,用於更明智地選擇步長- 對於一階方法的二階增強,是否有有趣的方法? 在此處輸入圖像描述

我們應該採用二階方法進行深度學習嗎?

TL;DR:不,尤其是現在創新步伐放緩,我們看到新的架構創新越來越少,而更多的方法可以在更大的數據集上訓練基本上只是現有架構的副本(參見 OpenAI 的 GPT-2 )。

首先,甚至沒有達到二階,值得一提的是,在深度學習中,您甚至沒有充分利用(小批量)梯度下降(即,您不執行線搜索),因為優化在線搜索的步驟將非常昂貴。

、二階方法是:

  • 方式更複雜,即在沒有錯誤的情況下更難實現。深度學習系統正日益成為龐大數據處理管道的一小部分。只有在收益很大程度上抵消了風險的情況下,在復雜系統中引入進一步的複雜性和脆弱性才是明智的。我將在下面爭辯說他們沒有。
  • 越來越難以針對異構硬件上的分佈式計算進行優化,這變得越來越普遍。看看為了讓 K-FAC 在分佈式(非異構)系統上工作需要做多少工作,性能仍然不比最好的一階方法好:https ://arxiv.org/pdf/1811.12019.pdf 。相反,如果只是切換到分佈式計算使我的一階方法與二階方法一樣快或更快,我看不出使用更複雜的優化算法的理由。
  • 在迭代成本(而不是數量)內存佔用方面更昂貴,因此它們引入了相當大的開銷。當前的架構 (GPU) 受內存限制多於計算限制。正如這裡很好解釋的那樣,迭代成本和內存佔用的增加越陡,問題的維數越高。深度學習中的優化可以說是最高維的優化問題之一,因此不清楚二階方法在計算時間(不是迭代次數,這不是我們真正關心的)方面是否具有明顯優勢首先-訂購方法。
  • 深度學習優化的另一個問題是鞍點。越來越清楚的是,“壞”局部最小值在深度學習中不是問題,但鞍點是。牛頓法確實有被鞍點吸引的傾向。如果我沒記錯的話,諸如 K-FAC 之類的 Hessian 近似方法沒有這個問題,但我認為證明取決於架構的類型,這使得這些方法的使用變得脆弱。
  • 他們沒有解決使從業者大部分​​時間浪費的問題。死單元或飽和單元不是通過 K-FAC 解決的,而是通過更好的初始化方案來解決的,所以這是我們應該關注的,例如 Fixup:https ://arxiv.org/abs/1901.09321
  • 二階方法的另一個問題是,對於大多數常見的損失函數,很容易使用小批量來獲得一個收斂到實際梯度的估計器。建立一個基於採樣的估計器來近似於 Hessian 的倒數要復雜得多。換句話說,二階方法引入了很多複雜性和額外的內存佔用,但隨機二階方法引入了更多的複雜性。與隨機一階方法相比,該算法僅比確定性一階方法稍微複雜一些。
  • 最後,它們有很多活動部件,很難以最佳方式進行調整。你的同一篇論文留下了很多細節需要說明。我們是否需要更多額外的超參數,還是需要穩健的優化方法?請記住,在深度學習中,正如 Shai Shalev-Shwartz 很好地解釋的那樣,當出現問題時,很難理解如何修復它https://www.youtube.com/watch?v=1nvf_DBnsxo和更多超參數在這方面沒有幫助。

引用自:https://stats.stackexchange.com/questions/394083

comments powered by Disqus