tft每日頭條

 > 圖文

 > 梯度下降算法可以解決啥問題

梯度下降算法可以解決啥問題

圖文 更新时间:2024-09-06 08:20:03

梯度下降算法可以解決啥問題(理解梯度下降一)1

梯度下降算法可以解決啥問題(理解梯度下降一)2

數學準備

  • 雅可比矩陣(Jacobian):向量對向量的偏導數所構成的矩陣,考慮函數從空間映射到另一個空間(

梯度下降算法可以解決啥問題(理解梯度下降一)3

  • ),則雅可比矩陣形成一個m行n列的矩陣,矩陣元标記為

梯度下降算法可以解決啥問題(理解梯度下降一)4

  • 海森矩陣(Hessian):一階導數的雅可比矩陣,因為二階偏導的連續性,可以交換偏導的先後順序,所以海森矩陣也是實對稱矩陣。
  • 方向導數(direction derivative):某個标量對特定方向d(單位向量)上的導數,度量了該标量沿着該方向的變化率,是一個向量。
  • 梯度(Gradient):變化率最大的方向導數。
  • 鞍點(saddle point):Hessian正定,對應局部極小值,Hessian負定,對應局部最大值,Hessian不定,對應鞍點(注意,這是充分非必要條件)直觀來看,鞍點就是一個方向上是極大值,另一方向卻是極小值。
  • 厄米矩陣(Hermitian):對稱矩陣的複數域擴展,實對稱矩陣是厄密矩陣的特例。厄米矩陣可以被對角化。
  • 特征值:矩陣做對角化變換前後,特征向量被縮放的比例。特征向量和特征值是矩陣的固有屬性。

梯度下降算法可以解決啥問題(理解梯度下降一)2

在開始深度學習之前,我們要對深度學習和統計學習的重要工具——優化算法——做一個全面深刻的剖析,首先我們要問:機器學習為什麼要使用優化算法呢?舉個例子,普通最小二乘的最佳參數表達為:

梯度下降算法可以解決啥問題(理解梯度下降一)6

雖然我們可以獲得解析表達,但是當數據量變得非常龐大的時候,連計算矩陣的逆都會變得非常慢。同時在很多情況下,我們無法獲得參數的解析表達,就需要采用疊代的方式逼近最佳的參數值。

疊代的方式有很多種,比如坐标下降法(coordinate descent),它的想法很簡單,将變量分組然後針對每一組變量的坐标方向最小化Loss,循環往複每一組變量,直到到達不再更新Loss的坐标點。但即便這樣,坐标下降法仍然疊代的非常緩慢,很大一部分原因在于它的搜索方向是固定的,隻能沿着坐标的方向,而這樣的方向并不能保證是最快的。同時,坐标下降需要假設變量之間的影響非常微弱,一個變量的最優不會影響到另一個變量的更新,但這一條件往往很難滿足。

梯度下降算法可以解決啥問題(理解梯度下降一)7

圖為坐标下降應用到兩個參數構成的Loss,我們可以發現,參數隻在兩個垂直的方向上進行更新,這是因為我們看到的contour就處在兩個參數構成的直角坐标系中,分别對應着坐标的方向。

相較于坐标下降,基于梯度是所有方向導數中變化最快的,梯度下降(gradient descent)也被叫做最速下降,對機器學習有些許了解的同學會很容易寫出梯度下降的公式:

梯度下降算法可以解決啥問題(理解梯度下降一)8

首先,Loss function一般都是标量,它的雅可比矩陣就是一個列向量,其梯度指明了下降的方向,說明沿Loss梯度方向更新參數會得到最大程度的改變,學習率是一個标量,與梯度相乘,指明了下降的幅度。

梯度下降算法可以解決啥問題(理解梯度下降一)9

圖為梯度下降在兩參數構成的Loss,可以發現,參數會沿着垂直于contour的方向進行更新,垂直于contour的方向正是梯度的方向。

Hessian中包含了Loss function的曲率信息,因為Hessian可以理解為梯度的雅可比,一個函數的導數衡量的是函數的變化率,所以Hessian衡量的就是梯度的變化率。同時Hessian矩陣由于是厄米矩陣,可以被對角化,它的特征值和特征向量可以分别定義為:

梯度下降算法可以解決啥問題(理解梯度下降一)10

如果特征向量被正交歸一化,那麼特征向量d就是基,那麼特征值就是該方向上的二階導數,兩邊同時乘以特征向量的轉置,就可以得到:

梯度下降算法可以解決啥問題(理解梯度下降一)11

比如對于鞍點,某個特征向量所對應的特征值就是負的,就意味着是這個方向上的極大值點,而另一特征向量所對應的特征值就是正的,意味着同時也是另一方向上的極小值點。從數學上來說,鞍點的來源是極大值極小值都要通過導數為零得到,但不同的方向導數定義在了不同的維度上。

梯度下降算法可以解決啥問題(理解梯度下降一)12

如圖,AB方向和CD方向,二階導數的正負并不一緻,産生了X這樣一個鞍點。

其餘的方向的二階導數就可以通過特征向量來計算,因為特征向量可以構成一組基(完備正交),所有向量都可以用這組基進行線性表示,任意方向f可以被表示為:

梯度下降算法可以解決啥問題(理解梯度下降一)13

所以,任意方向的二階導數都可以得到:

梯度下降算法可以解決啥問題(理解梯度下降一)14

Hessian能夠告訴我們非常重要的一點,随着參數點的不斷更新,梯度會如何變化。舉個例子,在很多教材上都會講學習率的設定,學習率如果過大,就會在很大的Loss附近震蕩,如果太小,需要疊代的次數又太多。

梯度下降算法可以解決啥問題(理解梯度下降一)15

如圖,不同的學習率會對梯度下降的性能造成影響。

那麼,多大的學習率才合适呢?具體到這個例子上,這明顯是一個凸函數(特指向下凸),代表着梯度會變得越來越小,也就是說固定好學習率的前提下,随着參數點的下降,我們下降的會越來越慢,我們将Loss function做泰勒展開:

梯度下降算法可以解決啥問題(理解梯度下降一)16

假設從

梯度下降算法可以解決啥問題(理解梯度下降一)17

梯度下降算法可以解決啥問題(理解梯度下降一)18

,我們執行了一次梯度下降,那麼就有關系:

梯度下降算法可以解決啥問題(理解梯度下降一)19

将梯度

梯度下降算法可以解決啥問題(理解梯度下降一)20

表示為g,其帶入泰勒展開式,可以得到:

梯度下降算法可以解決啥問題(理解梯度下降一)21

如果我們将後面兩項寫作一項:

梯度下降算法可以解決啥問題(理解梯度下降一)22

如果中括号裡面的項大于零,那麼Loss 總會減小,比如Hessian的特征值均為負,其實對應着極大值點,那麼無論學習率多小,Loss總會下降很大。但是,如果Hessian特征值均為正,而且非常大,就意味着極小值附近的曲率非常大,那麼執行梯度下降反而會導緻Loss的上升。如果我們希望Loss能下降最多,其實就是希望中括号項越大越好,在Hessian特征值為正的情況下,在我們将看作變量,令其一階導數為零,這樣就求到了極大值(因為在Hessian特征值為正的前提下,二階導數小于零):

梯度下降算法可以解決啥問題(理解梯度下降一)23

就可以得到:

梯度下降算法可以解決啥問題(理解梯度下降一)24

就給出了我們的最優步長。同時,我們可以将Loss function做泰勒展開,展開到二階:

梯度下降算法可以解決啥問題(理解梯度下降一)25

考慮到一階導數為零的點對應着極值點,我們對上式求一階導數,并令其為零可得:

梯度下降算法可以解決啥問題(理解梯度下降一)26

這樣就得到了牛頓法(Newton method)的更新公式。牛頓法已經默認使用了一階導數為零的信息,理想情況下,它隻需要從初始參數點疊代一次就可以找到極小值點。同時,它利用了Hessian中的曲率信息,一般而言也要比梯度更快,在下降方向上并不是梯度的方向,從數學上可以看出Hessian乘以梯度,本質上會得到Hessian特征向量的線性疊加,如果梯度恰好作為了Hessian的特征向量,那麼牛頓法和梯度下降的下降方向才會一緻。

梯度下降算法可以解決啥問題(理解梯度下降一)27

如圖,紅線表示梯度下降的路徑,綠線表示牛頓法的路徑。

梯度下降算法可以解決啥問題(理解梯度下降一)28

讀芯君開扒

課堂TIPS

這裡着重強調:優化算法的快慢和計算代價是兩回事情。優化至局部最小值所需要的疊代次數越少,就可以說優化地越快。梯度下降比坐标下降快,牛頓法比梯度下降更快,但我們可以非常容易的看到,在每次疊代時,梯度下降需要計算全部樣本的梯度,牛頓法甚至需要計算全部樣本的Hessian,雖然疊代次數減少了,但每次的計算代價卻增加了。

梯度下降算法可以解決啥問題(理解梯度下降一)28

作者:唐僧不用海飛絲

如需轉載,請後台留言,遵守轉載規範

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved