梯度下降法,牛頓法等優化方法

梯度下降法
梯度下降是迭代法的一種,可以用於求解最小二乘問題(線性和非線性都可以)。在求解機器學習算法的模型參數,即無約束優化問題時,梯度下降(Gradient Descent)是最常採用的方法之一,另一種常用的方法是最小二乘法。在求解損失函數的最小值時,可以通過梯度下降法來一步步的迭代求解,得到最小化的損失函數和模型參數值。反過來,如果我們需要求解損失函數的最大值,這時就需要用梯度上升法來迭代了。在機器學習中,基於基本的梯度下降法發展了兩種梯度下降方法,分別爲隨機梯度下降法和批量梯度下降法。

先通俗的解釋一下梯度下降,比如你在山頂上,現在你遇到了急事,想在最短的時間內下山,假設每條路你都可以走,那麼你該選擇哪一條路徑呢?當然,此刻你腦子裏一閃而過的是選擇最抖的那條路,雖然他很難走,但是他最短嘛,所以人生有時也是這樣,前方的道路並不擁擠,只是你選擇不同。其實這就是梯度下降的基本思想了。



如果損失函數是凸函數,那麼我們有把握通過梯度下降來尋求最優解,但大多數情況下都是非凸的,這個時候我們可能會陷入局部最優解,針對這種情況,我們可以常識從不同初始點搜索最優值或者模擬退火等方法,在這先不細說。

舉一個小小的例子幫助大家理解一下

首先我們要表示梯度,大家都知道斜率的概念,斜率越大,梯度越大,這可以通過導數表示,以線性迴歸爲例

假設下面的h(x)是要擬合的函數,J(theta)爲損失函數,theta是參數,要迭代求解的值,theta求解出來了那最終要擬合的函數h(theta)就出來了。其中m是訓練集的樣本個數,n是自變量的個數


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

首先,損失函數J(theta)對theta求導,得到每個theta對應梯度:


由於我們的目標是最小化損失函數,所以我們基於負梯度方向更新theta

(此時更新步長取得1,更新步長長短可依據實際情況確定)

損失函數是凸函數,所以我們這樣更新肯定可以得到最優解,但是這樣每一次更新都需要所有的樣本參與訓練,當樣本量較大時,迭代速度會非常慢,所以聰明的學者們又引入了隨機梯度下降這一概念

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

隨機梯度下降的‘隨機’二字體現在樣本抽樣上,因爲我們考慮到樣本量非常大導致效率非常低問題,所以我們可以隨機抽取一些樣本來計算梯度更新theta,得到最優解,但這樣伴隨的噪音也較多,實際上是犧牲一定精度來提升效率問題。

總結

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

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


牛頓法   

 

   牛頓法是一種在實數域和複數域上近似求解方程的方法。方法使用函數(x)的泰勒級數的前面幾項來尋找方程f(x) = 0的根。牛頓法最大的特點就在於它的收斂速度很快。

  具體步驟:

 我們主要討論在一維的情況下,對於一個需要求解的優化函數f(x),對函數f(x)進行泰勒展開爲二階


即可以得到牛頓法的更新公式:


 其實就是選擇一個接近函數f(x)零點的x0,計算相應的f(x0)和切線斜率f '(x0)(這裏f '表示函數f的導數。然後我們計算穿過點(x0, f(x0)) 並且斜率爲f'(x0)的直線和x軸的交點的x座標

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

 

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



擬牛頓法

擬牛頓法(Quasi-Newton Methods)是求解非線性優化問題最有效的方法之一,擬牛頓法和最速下降法(Steepest Descent Methods)一樣只要求每一步迭代時知道目標函數的梯度。通過測量梯度的變化,構造一個目標函數的模型使之足以產生超線性收斂性。這類方法大大優於最速下降法,尤其對於困難的問題。另外,因爲擬牛頓法不需要二階導數的信息,所以有時比牛頓法(Newton's Method)更爲有效

擬牛頓法的基本思想如下。首先構造目標函數在當前迭代
  
的二次模型:
 
這裏
  
是一個對稱正定矩陣,於是我們取這個二次模型的最優解作爲搜索方向,並且得到新的迭代點
  
,其中我們要求步長
  
滿足Wolfe條件。這樣的迭代與牛頓法類似,區別就在於用近似的Hesse矩陣
  
代替真實的Hesse矩陣。所以擬牛頓法最關鍵的地方就是每一步迭代中矩陣
  
的更新。現在假設得到一個新的迭代
  
,並得到一個新的二次模型:
我們儘可能地利用上一步的信息來選取
  
。具體地,我們要求
  
,從而得到




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