優化方法總結(梯度下降法、牛頓法、擬牛頓法等)

梯度下降法

梯度下降法是最簡單,也是最常用的最優化方法。梯度下降法實現簡單,當目標函數是凸函數時,梯度下降法的解是全局解/一般情況下,其解不保證是全局最優解,梯度下降法的速度也未必是最快的。梯度下降法的優化思想是用當前位置負梯度方向作爲搜索方向,因爲該方向爲當前位置的最快下降方法,所以也被稱爲是“最速下降法”。最速下降法越接近目標值,步長越小,前進越慢。梯度下降法的搜索迭代示意圖如下圖所示:
è¿éåå¾çæè¿°

 梯度下降法的缺點:

(1)靠近極小值時收斂速度減慢,如下圖所示;

(2)直線搜索時可能會產生一些問題;

(3)可能會“之字形”地下降

è¿éåå¾çæè¿°

 從上圖可以看出,梯度下降法在接近最優解的區域收斂速度明顯變慢,利用梯度下降法求解需要很多次的迭代。

在機器學習中,基於基本的梯度下降法發展了倆種梯度下降方法,分別爲隨機梯度下降法和批量梯度下降法。

比如對一個線性迴歸模型,假設下面的h(x)是要擬合的函數,J(theta)爲損失函數,theta是參數,要迭代求解的值,theta求解出來的那最終要擬合的函數h(theta)就出來了。其中m是訓練集的樣本個數,n是特徵的個數。

 

 1)批量梯度下降法(Batch Gradient Descent, BGD)

(1)將J(theta)對theta求偏到,得到每個theta對應的梯度:

(2)由於是要最小化風險函數,所以按每個參數theta的梯度負方向,來更新每個theta:

 

 (3)從上面公式可以注意到,它得到的是一個全局最優解,但是每迭代一步,都要用到訓練集所有的數據,如果m很大,那麼可想而知這種方法的迭代速度會相當慢。所以,這就引入了另外一種方法——隨機梯度下降。

對於 批量梯度下降法,樣本個數m,x爲n維向量,一次迭代需要把m個樣本全部帶入計算,迭代一次計算量爲m*n^2.

2)隨機梯度下降(Stochastic Gradient Descent,SGD)

(1)上面的風險函數可以寫成如下這種形式,損失函數對應的是訓練集中每個樣本的粒度,而上面批量梯度下降對應的是所有的訓練樣本:

(2)每個樣本的損失函數,對theta求偏導得到對應梯度,來更新theta:

 (3)隨機梯度下降是通過每個樣本來迭代更新一次,如果樣本很大的情況(例如幾十萬),那麼可能只用其中幾萬條或者幾千條的樣本,就已經將theta迭代到最優解了,對比上面的批量梯度下降,迭代一次需要用到十幾萬訓練樣本,一次迭代不可能最優,如果迭代10次的話就需要遍歷訓練樣本10次。但是SGD伴隨的一個問題是噪音較BGD要多,使得SGD並不是每次迭代都向着最優化方向。

隨機梯度下降每次迭代只使用一個樣本,迭代一次計算量n2,當樣本個數m很大的時候,隨機梯度下降迭代一次的速度要遠高於批量梯度下降方法。倆者的關係可以這樣理解:隨機梯度下降方法以損失很小的一部分精確度和增加一定數量的迭代次數爲代價,換取了總體的優化效率的提升。增加的迭代次數遠遠小於樣本的數量。

對批量梯度下降法和隨機梯度下降法的總結:

批量梯度下降——最小化所有訓練樣本的損失函數,使得最終求解的是全局的最優解,即求解的參數是使得風險函數最小,但是對於大規模樣本問題效率底下。

隨機梯度下降——最小化每條樣本的損失函數,雖然不是每次迭代得到的損失函數都向着全局最優化方向,但是大的整體的方向是向全局最優解的,最終的結果往往是在全局最優解附近,適用於大規模訓練樣本情況。

上面我們學習了梯度下降法,下面我們來反過來學習下梯度下降法爲什麼是下降最快的方法。

假設L(Wt)wei第t次迭代的損失函數值

 其中d爲腳步方向,也就是一個單位長度的向量。\lambda是步長,爲步福。公式進行泰勒展開,只取一階導數,後面的省略。則。要儘可能大,所以要儘可能小,其中,倆個向量內積運算最小。則倆個方向相反。所以d是的方向的單位向量。

牛頓法

上面的梯度下降法,我們知道了是一次求導,走的是每次下降最快的方向,看的也是當前一步下降最快的方向,但是這樣找的只是局部最優點,並不是全局最優點。

延續上面的公式:

 

牛頓法保留到泰勒展開的二次導。牛頓法最大的特點就在於它的收斂速度很快。

 其中w_{t}爲第t次迭代的值,w_{t+1}爲下一次更新的值,也就是要求的未知數。

w_{t+1}求導,並令其等於0,得

假設L''(w{_t})的逆矩陣存在,則

 

具體步驟:

首先,選擇一個接近函數f(x)零點的x{_{0}} ,計算相應的法f(x_{0})和切線斜率f'(x_{0})(這裏f'表示函數f的導數)。然後我們計算穿過點(x0,f(x0))並且斜率爲f'(x0)的直線和x軸的交點的x座標,也就是求如下方程的解:

 我們將新求得的點的 x 座標命名爲x1,通常x1會比x0更接近方程f(x)=0的解。因此我們現在可以利用x1開始下一輪迭代。迭代公式可化簡爲如下所示:

 已經證明,如果f'是連續的,並且待求的零點x是孤立的,那麼在零點x周圍存在一個區域。只是初始化x0位於這個領近區域內,那麼牛頓法必定收斂。並且如果f'(x)不爲0,那麼牛頓法將具有平方收斂的性能。粗略的說,這意味着每次迭代一次,牛頓法結果的有效數字將增加一倍。下圖爲一個牛頓法執行過程的例子。

   由於牛頓法是基於當前位置的切線來確定下一次的位置,所以牛頓法又被很形象地稱爲是“切線法”。牛頓法的搜索路徑(二維情況)如下圖所示:

牛頓法搜索動態實例圖:

è¿éåå¾çæè¿°

 關於牛頓法和梯度下降法的效率對比:

  從本質上去看,牛頓法是二階收斂,梯度下降是一階收斂,所以牛頓法就更快。如果更通俗地說的話,比如你想找一條最短的路徑走到一個盆地的最底部,梯度下降法每次只從你當前所處位置選一個坡度最大的方向走一步,牛頓法在選擇方向時,不僅會考慮坡度是否夠大,還會考慮你走了一步之後,坡度是否會變得更大。所以,可以說牛頓法比梯度下降法看得更遠一點,能更快地走到最底部。(牛頓法目光更加長遠,所以少走彎路;相對而言,梯度下降法只考慮了局部的最優,沒有全局思想。)

根據wiki上的解釋,從幾何上說,牛頓法就是用一個二次曲面去擬合你當前所處位置的局部曲面,而梯度下降法是用一個平面去擬合當前的局部曲面,通常情況下,二次曲面的擬合會比平面更好,所以牛頓法選擇的下降路徑會更符合真實的最優下降路徑。

è¿éåå¾çæè¿°

注:紅色的牛頓法的迭代路徑,綠色的是梯度下降法的迭代路徑。

牛頓法的優缺點總結:

   優點:二階收斂,收斂速度快;

   缺點:牛頓法是一種迭代算法,每一步都需要求解目標函數的hession矩陣的逆矩陣,計算比較複雜。

擬牛頓法

擬牛頓法是求解非線性優化問題最有效的方法之一,於20世紀50年代由美國Argonne國家實驗室的物理學家W.C.Davidon所提出來。Davidon設計的這種算法在當時看來是非線性優化領域最具創造性的發明之一。不久R. Fletcher和M. J. D. Powell證實了這種新的算法遠比其他方法快速和可靠,使得非線性優化這門學科在一夜之間突飛猛進。

擬牛頓法的本質思想是改善牛頓法每次需要求解複雜的Hessian矩陣的逆矩陣的缺陷,它使用正定矩陣來近似Hessian矩陣的逆,從而簡化了運算的複雜度。擬牛頓法和最速下降法一樣只要求每一步迭代時知道目標函數的梯度。通過測量梯度的變化,構造一個目標函數的模型使之足以產生超線性收斂性。這類方法大大優於最速下降法,尤其對於困難的問題。另外,因爲擬牛頓法不需要二階導數的信息,所以有時比牛頓法更爲有效。如今,優化軟件中包含了大量的擬牛頓算法用來解決無約束,約束,和大規模的優化問題。

啓發式優化方法

啓發式方法指人在解決問題時所採取的一種根據經驗規則進行發現的方法。其特點是在解決問題時,利用過去的經驗,選擇已經行之有效的方法,而不是系統地、以確定的步驟去尋求答案。啓發式優化方法種類繁多,包括經典的模擬退火方法、遺傳算法、蟻羣算法以及粒子羣算法等等。

  還有一種特殊的優化算法被稱之多目標優化算法,它主要針對同時優化多個目標(兩個及兩個以上)的優化問題,這方面比較經典的算法有NSGAII算法、MOEA/D算法以及人工免疫算法等。

解決約束優化問題——拉格朗日乘數法

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