梯度下降法是萬能的模型訓練演算法嗎?

是不是對於所有的預測模型,比如神經網路、邏輯回歸、SVM或者其他自定義的模型,只要能求出定義的損失函數對參數的導數,就可以用梯度下降法訓練模型參數,如果具體的模型結構合理、學習率設置合理,便可以得到不錯的效果?


===

強行加廣告:發布非梯度優化python工具包 ZOOpt release 0.1 歡迎嘗試 https://github.com/eyounx/ZOOpt 示例包括非凸損失分類器學習、直接策略優化強化學習、L0範數稀疏回歸直接求解

===以下是原文

不是。優化的原理可以這麼理解:利用關於最優解的信息,不斷逼近最優解

梯度下降(或上升)方法有效的前提條件是,梯度方向指向最優解方向,因此沿著梯度方向前進即可靠近最優解,這時梯度就是關於最優解的非常有效的信息。在凸函數、quasi凸函數等比較簡單的問題上,確實能夠滿足這一前提,因此梯度可以work,當然也可能有比梯度更高效的關於最優解的信息。然而當優化目標有大量局部極值時,絕大多數解空間位置的梯度方向不再指向最優解,因此梯度方法無法逼近最優解,能找到局部極值就已經很不錯了。下面是兩個經典的例子,可以拿梯度下降來感受一下。

更壞的消息是,上面這兩個圖只是2維函數,通常這一類函數,其局部極值的數量隨著空間維度的增長指數增加,2維有100個局部極值,10維能有100億個局部極值

那麼有沒有能解決所有問題的優化方法呢?答案是沒有!前面有人說到No Free Lunch Theorem(沒有免費的午餐定理),可惜只貼了文章截圖而沒有解釋,我重講一遍。NFLT的證明大意是這樣的:

首先,我們考慮所有可能的問題。什麼是「所有可能」的問題,如果我們假定一個解的函數值可以有「優、良、中、差」,那麼你任意拿出一個解、並且任意選「優、良、中、差」之一的評價,「所有可能」的問題中就有那麼一個問題,在這個解上正好是你給出的評價;
其次,所有的問題等概率出現。也就是說,你任意拿出一個解,說這個解是優、良、中、差四個評價的問題一樣多,不會有其中一種評價更多一點;
然後,在等概率的所有問題上,計算一個演算法能找到的解的好壞。這時你會發現,如果演算法在一個問題上能找到優解,那麼就存在另外的問題這個演算法的結果是良、中、差。這麼一來,一個演算法在等概率的所有問題上的總體性能就成了常數,與演算法無關了,於是所有演算法也就跟隨機搜索一樣了

NFLT考慮的是離散空間優化的問題,在連續空間稍有不同,不過大體相當。NFLT更多的是被當作演算法設計的哲學指導思想,優化和學習演算法都應當考慮一個範圍的問題,而不是試圖設計放之四海而皆準的演算法。

那麼上面這麼多局部極值的問題到底能不能解,至少解得比隨機搜索要更好?在一定層度上可以。我們來考慮這麼一個函數,這函數在最優解處最小,這是當然,但在不是最優解處,這函數不能隨便變動,只能在一定範圍內變動,這個範圍與這個解離最優解的距離相關,距離越遠,變化的範圍可以越大。這一類函數就叫做 Local Lipschitz 函數[1]。下圖是一個示意圖,只要函數在這個範圍之內就可以,不管是否連續、是否有多個局部極值。

可見, Local Lipschitz 函數可以非常複雜,很多複雜的優化問題看起來都可以歸為這一類函數,例如前面的兩個函數圖像。而好消息是,無論有多少局部極值,Local Lipschitz 函數可以有效求解。這裡有效求解的意思是,任給逼近層度epsilon,能在多項式時間找到與最優解只差epsilon的解,即 f(x) - f_{min}leq epsilon,多項式則是關於空間維度、1/epsilon 以及Local Lipschitz範圍的斜率等。

那麼是怎麼求解的呢?求解的原理如同剛開始說的一樣,要找到關於最優解的信息。對於這麼複雜的函數,梯度是不能用了,那麼最優解的信息怎麼去找呢,一個總體的思路是解空間採樣,通過採樣一批解、並且計算出這一批解的函數值,能夠大體了解目標函數的走勢,再不斷精化。這就是一大類非梯度優化演算法。

針對 Local Lipschitz 函數,一種非梯度優化方法是[1]中的Optimistic Optimization,基於upper confidence bound的思想,通過切分搜索空間來不斷精化搜索。然而這一類方法在很多測試中收斂得相當慢。(插入硬廣)另一種方法是[2]中的基於模型的方法RACOS,[3]中進行了改進,代碼見github: eyounx/RACOS

貝葉斯優化也是一類可用於求解多個局部極值的非梯度方法,其求解的函數類型為「以高斯過程分布的函數」,不太好描述具體的函數應該長成什麼樣子,總體來說應該是比較平滑的函數。然而貝葉斯優化參數很多,到高維容易退化為隨機搜索,通常開足馬力可以跑一跑500維以下的問題。(又來硬廣)RACOS可以跑上萬維,如果加上隨機嵌入技術[4],可以跑更高維度的優化問題。

總的來說,關注梯度優化的人太多,而非梯度優化更適合解決複雜問題,值得更多關注。

參考文獻:

[1] R. Munos. From Bandits to Monte-Carlo Tree Search: The Optimistic Principle Applied to Optimization and Planning. Foundations and Trends in Machine Learning7(1):1– 130, 2014.

[2] Y. Yu, H. Qian, and Y.-Q. Hu. Derivative-free optimization via classification. In: Proceedings of the 30th AAAI Conference on Artificial Intelligence (AAAI"16), Phoenix, AZ, 2016, pp.2286-2292

[3] Y.-Q. Hu, H. Qian, and Y. Yu. Sequential classification-based optimization for direct policy search. In: Proceedings of the 31st AAAI Conference on Artificial Intelligence (AAAI』17), San Francisco, CA, 2017.

[4] H. Qian, Y.-Q. Hu and Y. Yu. Derivative-free optimization of high-dimensional non-convex functions by sequential random embeddings. In: Proceedings of the 25th International Joint Conference on Artificial Intelligence (IJCAI"16), New York, NY, 2016, pp.1946-1952.


一般而言,判斷「stationary points是不是局部最優解」是NP-Complete的:
Some NP-complete problems in quadratic and nonlinear programming

所以即使你為一個非凸的目標函數算出一個梯度為零的點,你也很難對它作出什麼確定性的判斷。
但另一方面,有研究表明,對於某些非凸的目標函數,隨機梯度下降(SGD)的解能大概率地接近局部最優甚至全局最優。如
Escaping From Saddle Points — Online Stochastic Gradient for Tensor Decomposition
Global Convergence of Stochastic Gradient Descent for Some Non-convex Matrix Problems


並不是。

一方面,梯度並不是在任何時候都可以計算的。實際中很多問題的目標函數並不是可導的,這時梯度下降並不適用,這種情況下一般需要利用問題的結構信息進行優化,比如說Proximal gradient方法。甚至有些問題中目標函數的具體形式都不知道,更別談求梯度,比如說Bayesian Optimization。

另一方面,即使問題可導,梯度下降有時並不是最佳選擇。梯度下降的性能跟問題的條件數相關,在條件數比較大時問題中梯度下降可能會非常慢。相對來說,以擬牛頓法為代表的二階方法沒有這個問題,雖然擬牛頓法在高維問題中會有計算量偏大的問題,但在很多場景還是比梯度下降有優勢。再比如,在梯度計算代價比較大時,SGD及其變種會遠比普通的梯度下降快。

當然,總體來說,在機器學習的各種教科書中梯度下降是最常見的優化方法。主要因為它非常簡單易懂,而且大多數情況下效率比較高,但同時也是因為機器學習中大多數問題的懲罰函數是比較smooth的。


並不是。
如果有梯度的信息,有限內存BFGS是更好的辦法!
而且所謂的學習率,如果不是凸問題就不能設置為常數,需要線搜索來確定學習率


可以算是萬能的,但對於特定的模型,不一定是最優的解法。
更好的解法比如針對SVM的SMO演算法、針對含隱變數的模型的EM演算法等等。


對優化問題,拋開對問題的先驗認知,對任意演算法pair &,都不能說演算法A比演算法B更好。
詳細的證明可以參看 No Free Lunch Theorems For Optimizations這篇論文。

關於這個定理有一個專門的網站: http://www.no-free-lunch.org/

這篇論文說,如果把一個演算法的性能在整個函數空間上平均,那麼任何演算法都等價於純粹的monte carlo隨機搜。即使是求目標函數最小值,也不能說hill descending要比hill climbing好。

比如我在Quora上一個問題里構建了一個簡單的分段線性函數,在這個線性函數中,全局最優與全局最差之間的距離小於用有限差分求梯度時的step,而全局最優與局部最優之間很遠。梯度下降大概率的收斂到局部最優,梯度上升大概率找到全局最差,然後在全局最差點上求梯度的那次function evaluation將找到全局最優。因而反而是用hill climbing能找到全局最優。

http://qr.ae/ROc8Is

當然上面這個例子未必恰當,只是想用來說明「沒有萬能的優化演算法」。


梯度下降法用在神經網路或者Logistic回歸還行,SVM還是用SMO吧。 能找到導數,說明問題還算比較簡單的,可以用梯度下降局部最優點,但是這個局部最優和全局最優差多遠,要看你有沒有額外的策略,比如隨機退火之類的。


然而並沒有
如果梯度下降都可以成為萬能演算法 那研究智能演算法的豈不是都要哭暈在廁所啦
樓主可以關注下cec網站,每年都有比賽,上面的演算法有經典有時髦,別說是梯度下降,就是前兩年的top方法都可能被今年的給爆出翔

雖說有nfl,但是如果如果有研究的話,有些演算法真的是超級強悍,根本沒得比。這些演算法有的是新的創意,有的只是各種技術的堆砌,但是總的來說,性能是超級強大的。

雖說都是老牌ai分支,但是智能演算法的研究成果向機器學習領域滲透的真的很慢,很多牛叉東東大家都不知道。比如15年的top,有個success history based adaptation DE with success parent selection and population size reduction ,汗 名字都這麼長,不過性能出奇牛逼 樓主可以看下

還有 現在有個landscape analysis,總機器學習演算法對目標函數分類,然後推薦相應的優化演算法,算是從更高維度對nfl的一次挑戰? 樓主也可以看看


手機打的 囧 勿怪


當參數之間的correlation很強且維度很高的時候,一階梯度下降法幾乎沒有什麼卵用。你大概只能說,在多數簡單的machine learning模型里,梯度下降是萬能的,但是對complex engineering模型,還是要乖乖解析模型結構,分析出更適合的優化演算法比較靠譜。


補充一點在數值分析里的結論…
(雖然討論的不是神經網路,但本質上還是求函數的極值點

梯度下降法的問題在於,當很接近極值點的時候,下一步搜索的方向和之前搜索的方向correlation太高,會表現出在原地轉圈的形狀,每一步的改進量越來越小

為了避免這一點才引出了共軛梯度法,要求新的搜索方向和之前每一步的搜索方向正交。


梯度下降法幾乎是最重要的方法了,因為幾乎所有的機器學習演算法建模的目的就是最小化一個Loss function,那麼沿著最大梯度方向下降就是最合理的方法了(雖然不能保證全局最優)。但是最後能否得到滿意的結果,很大程度上取決於數據的分部了(隨便構想一個超曲面就好)。而且梯度下降都不能保證收斂,所以最差也用一個stochastic gradient descent吧。


沒有萬能的優化演算法對所有的問題都高效。參見No Free Lunch Theorem.


拋開效率和性能不說,梯度下降至少需要能算出梯度才好下降,算不出(或不好算)梯度的目標函數們表示不希望被代表


梯度下降是最優化最基本的方法。機器學習把問題抽象為最優化問題。因此你覺得梯度下降成了機器學習的萬能方法。

然而,就像梯度下降的缺點一樣,你這個「覺得」很可能是個局部最優。


並不是啊,很多場景下GD方法並不能很「容易」的獲得較優解。

另外,很多場景下,並不能寫出梯度公式。


首先是假設函數合適,能夠將問題的解逼近凸優化然後梯度下降才有比較好的效果


不是
xGD演算法在對性能有一定要求的前提下,網路瓶頸是個問題,如果有更好的方法當然不會用它
而且如果模型存在局部不可導的情況下,部分分片發散,調整起來很頭疼的
我記得Jeff Dean有幾篇論文講了這個事情,題主不妨去翻翻看


這麼說,這東西能求導,且滿足一定的條件(利普希茨應該是,具體我有點記不清了),梯度下降一定能找到最優解。

事實上在梯度下降時會考慮很多的問題。比如步長怎麼選。這裡面有個wolfe條件比較常用。但是按照wolfe條件來選是不是一定能保證收斂?這個就很難說了。

SVM的求解是一個凸模型。那顯然梯度下降不是最好的選擇,我們對凸模型的優化方法實在是太多了。我沒關注過,但我估計肯定有人用ADMM這類的方法去求解SVM。

梯度下降只是代碼好寫,然後實際上也比較好用。但是談萬能,太過了。


這個叫優化不叫訓練


「天下沒有免費的午餐」,梯度下降法不可能對所有的優化問題都適用,需要具體問題具體對待


長得坑坑窪窪的函數會表示很無奈


我覺得大致看法是對的,
梯度下降法屬於數學裡的數值優化的凸優化方法吧。有好幾種方法,沒深入看過。


推薦閱讀:

人腦有海量的神經元(參數),那麼人腦有沒有「過擬合」行為?

TAG:應用數學 | 機器學習 | 凸優化 | 神經網路 |