【相信我你沒真明白系列】詳解牛頓法與梯度下降法

2021-02-08 小紙屑


有監督學習,一般最終轉化為如下優化問題:

其中,J為目標函數,也叫做損失函數,W為要學習的權重,是一個多維向量。


目標函數J(W)可以按泰勒展開,如果只取泰勒展開的二階項,則J(W)可以近似表達為W的二次函數,即:

其中g為梯度向量,H為Hessian矩陣,如果將g和H展開其形式如下:


這個優化問題求解一般有梯度下降法和牛頓法兩種。

梯度下降法

1、梯度

首先要理解什麼叫梯度,

給定J(W),其梯度是如下式構成的一個向量:

向量是有方向的,所以梯度也是有方向的,梯度指向的是J(W)增長最快的方向,那增長最快的方向怎麼理解呢?假如W增加微小固定長度的△W,即W_new=W+△W,則J(W_new)有可能變大,也有可能變小,因為△W雖然長度固定,但方向任意。那有沒有一個方向,使得J(W_new)的變化最大,答案是梯度方向g和梯度負方向-g,梯度方向是增大最快,梯度負方向是減小最快。這就是梯度的意義,指向J(W)增長最快的方向。

2、梯度下降

所以梯度下降法是在梯度的負方向上,前進一小步:

其中,l_r是學習率。


這裡有人常常誤解,l_r代表的就是在梯度負方向上前進的距離,這種說話其實忽略了梯度g並不是單位長度,所以真實步長是:

一般l_r為微小常量,常取0.01,0.001,0.0001等值,所以梯度越大,真實步長越大,梯度越小,真實步長越小,有時候這不利於收斂,因為梯度大,代表變化大,步長大有可能越過最優點,梯度小,則有可能位於局部最優點或者鞍部,較小的步長,很難逃逸出去,所以才有了RMSProp等改進方案。

3、梯度下降的效果分析

如果將J(W)在Wt附近按二階泰勒展開,

梯度下降

代入上述泰勒展開,

進而可以得出,前進l_r的步長後,J(W)的變化為:

△J等式右邊第一項是函數傾斜引起的減少量,第二項是函數曲率對△J的修正。


可以看出,如果第二項過大,梯度下降的經過步長l_r後,事實上是往山頂走,並非往J(W)的山底走。


如果,

則學習率l_r理論上可以任意大,然而當l_r較大時,二階泰勒展開的準確性也就不高了,因此可以用啟發式尋找合適的學習率l_r。


如果,

則理論的最優解為:

將g單位化,即

則,

我們知道H是Hessian矩陣,那麼對於單位向量e,

代表J(W)在點W0點,e方向的曲率。當e方向與H的最大特徵值λ_max的特徵向量方向一致時,曲率最大,為λ_max。所以如果單位梯度d與H的最大特徵值λ_max的特徵向量方向一致時,最優學習率為1/λ_max。如果泰勒展開的二階近似足夠精確,則H的特徵值決定了學習率的尺度。

牛頓法

我們知道,J(W)的二階泰勒展開為下式:

求極值點,則可以得到:

此式就是牛頓法的迭代公式。


類比梯度下降,一般把上式等式右邊第二項

叫做牛頓方向,記為:

假設學習率為l_r,則,最終的迭代公式為:

牛頓法優點是收斂速度快,特別的對於一個正定的二次函數,牛頓法只需一步即可找到最小值。


但牛頓法也存在一定的缺點。


1)據牛頓方向的計算公式可知,牛頓方向由Hessian矩陣的逆和梯度g確定,所以如果梯度g為0,則||d||=0,權重W就無法更新,梯度為0的點是極值點,不止是局部最小值、全局最小值,還包含鞍點、局部最大值、全局最大值,所以牛頓法容易陷於極值點。


2)梯度下降一般指向J(W)下降最快的方向,而牛頓法的牛頓方向一般是指向最近的極值點,哪怕這個極值點是鞍點或者局部最大值。


3)梯度下降一般比較容易收斂到一個較小的最優解,而牛頓法在每次迭代時序列可能不會收斂到一個最優解,它甚至不能保證函數值會按照這個序列遞減(這由第二點牛頓方向可知)。


以上三點缺點可以以如下一維函數為例:

下圖中的黃色曲線即是上述函數,其在A點的二階泰勒展開如圖中的藍色曲線,可以看到在A點附近,二階近似精準度還是相當高的。

牛頓迭代公式就是求解藍色曲線極值點,即下圖中的B(x=8.79),這一步迭代,f(x)下降了,下圖紅色曲線是黃色曲線在x=8.79時的二階泰勒展開,其極值點是C點(x=8.94),f(x)沒有下降,反而上升了,x更接近f(x)的拐點。

上述例子,完整的展示了牛頓的上述三個缺點。


4)除了上述三個缺點外,牛頓法最致命的缺點是每一步迭代需要求解Hessian逆矩陣,計算量大,甚至有時Hessian矩陣不可逆,從而導致這種方法失效。


對於缺點1,缺點2和缺點3,有以下兩點:

1)對於固定的輸入,深度學習的參數數量動則十萬百萬,非常高維,存在所有維度的局部極值點的可能性非常小,總有那麼一部分方向指向山腳方向,從而可以助其逃脫出其他維度的局部極值。


2)深度學習訓練一般是一個mini batch一個mini batch的訓練,輸入是變化的,即使對於上一個batch輸入產生的J(W)陷於局部極值點,下一個batch的輸入產生的J(W)也不一定陷於局部極值點,因為不同輸入產生的J(W)是不同的,這也有助於局部極值點的逃脫。


對於缺點4,一般採用擬牛頓法這種改進方案,通過近似計算每一步的Hessian矩陣逆矩陣,從而減少逆矩陣的直接求解,減少計算量。

總結

1)梯度下降是一階優化算法,牛頓法是二階優化算法。

2)梯度下降與牛頓法均與目標函數J(W)的二階泰勒展開相關。

3)牛頓法只是在一定條件下收斂速度快,但其具有容易陷入極值點,Hessian矩陣計算量大的缺點。




相關焦點

  • 從梯度下降到擬牛頓法:詳解訓練神經網絡的五大學習算法
    梯度下降梯度下降,又稱為最速下降法是一種非常簡單和直觀的訓練算法。該算法從梯度向量中獲取優化信息,因此其為一階算法(通過一階偏導求最優權重)。如果我們指定 f(wi)= fi、f(wi)= gi,那麼該優化方法由點 w0 開始迭代,在滿足終止條件之前,就在訓練方向 di=-gi 上將 wi 移向 wi+1。因此,梯度下降法就是如下方程式進行迭代。
  • 牛頓法
    L-BFGS算法,它減少BFGS算法迭代過程中所需的內存開銷針對凸優化問題有兩種求解方法,一種是梯度下降法牛頓法也是尋找導數為0的點,同樣是一種迭代法。核心思想是在某點處用二次函數來近似目標函數,得到導數為0的方程,求解該方程,得到下一個迭代點。我們在文章無窮小、梯度向量和泰勒展開介紹了一元函數的泰勒展開,這一節需要用到多元函數的泰勒展開,因此先從這裡開始介紹。
  • 最優化算法之牛頓法、高斯-牛頓法、LM算法
    上一篇文章中主要講解了最優化算法中的梯度下降法,類似的算法還有牛頓法、高斯-牛頓法以及LM算法等,都屬於多輪迭代中一步一步逼近最優解的算法,本文首先從數學的角度解釋這些算法的原理與聯繫
  • 機器學習中的梯度下降法
    本文中我講介紹一些機器學習領域中常用的且非常掌握的最優化算法,看完本篇文章後你將會明白:什麼是梯度下降法?  如何將梯度下降法運用到線性回歸模型中? 如何利用梯度下降法處理大規模的數據?梯度下降法的一些技巧  讓我們開始吧!梯度下降法是一個用於尋找最小化成本函數的參數值的最優化算法。
  • 【周末AI課堂】理解梯度下降(一)(代碼篇)| 機器學習你會遇到的「坑」
    為了更好幫助大家理解優化算法,我們先用一維的Loss function,在代碼的演示過程中,我將不會展示坐標下降,不僅因為一維的坐標下降和基於梯度的更新都是在同一個方向上進行搜索,更重要的是,此代碼篇希望大家通過這一節可以掌握GIF圖的繪製和可視化優化算法,它會在我們的後續的課程中被廣泛使用。
  • 梯度下降法有什麼用?
    為了讓文章內容更加通俗易懂,我儘量避免使用那些枯燥乏味的數學公式推導。我最近在學習「梯度下降法」的時候,腦海中浮現出一個問題:在人工智慧領域,梯度下降法有什麼用?1.梯度下降法簡介梯度下降法,是一種基於搜索的最優化方法,它其實不是一個機器學習算法,但是在機器學習領域,許多算法都是以梯度下降法為基礎的,它的主要作用是尋找目標函數的最優解。
  • 梯度下降法
    、隨機梯度下降法和小批量梯度下降法梯度下降法(Gradient Descent)是求解最優化問題最常用算法之一。本文我們就對梯度下降法做一個詳細的介紹,分別從算法推導、算法變種、算法實現和算法局限四個部分講解,這過程中我們會實例化每種算法實現的細節,我們也會看到梯度下降不同變種的區別和聯繫。
  • 最清晰的講解各種梯度下降法原理與Dropout
    二、全量梯度下降法(Batch gradient descent)全量梯度下降法每次學習都使用整個訓練集,因此每次更新都會朝著正確的方向進行,最後能夠保證收斂於極值點,凸函數收斂於全局極值點,非凸函數可能會收斂於局部極值點,缺陷就是學習時間太長,消耗大量內存。
  • 梯度下降算法詳解
    神經網絡中的後向傳播算法其實就是在進行梯度下降,GDBT(梯度提升樹)每增加一個弱學習器(CART回歸樹),近似於進行一次梯度下降,因為每一棵回歸樹的目的都是去擬合此時損失函數的負梯度,這也可以說明為什麼GDBT往往沒XGBoost的效率高,因為它沒辦法擬合真正的負梯度,而Xgboost 的每增加的一個弱學習器是使得損失函數下降最快的解析解。
  • 梯度與梯度下降法
    derivative),然後我們看看梯度下降法(Gradient Descent),了解為什麼在優化問題中使用梯度下降法來優化目標函數。梯度下降梯度下降算法(Gradient Descent)是神經網絡模型訓練最常用的優化算法。梯度下降算法背後的原理:目標函數J(θ)J(θ)關於參數θθ的梯度將是目標函數上升最快的方向。
  • 機器學習——梯度下降、梯度下降的線性回歸算法
    想像一下你正站立在山的這一點上,站立在你想像的公園這座紅色山上,在梯度下降算法中,我們要做的就是旋轉360度,看看我們的周圍,並問自己要在某個方向上,用小碎步儘快下山。這些小碎步需要朝什麼方向?如果我們站在山坡上的這一點,你看一下周圍,你會發現最佳的下山方向,你再看看周圍,然後再一次想想,我應該從什麼方向邁著小碎步下山?
  • [算法系列]最優化問題綜述
    3 求解算法3.1 無約束優化算法3.1.1 梯度下降法梯度下降法是最早最簡單,也是最為常用的最優化方法。梯度下降法實現簡單,當目標函數是凸函數時,梯度下降法的解是全局解。一般情況下,其解不保證是全局最優解,梯度下降法的速度也未必是最快的。梯度下降法的優化思想是用當前位置負梯度方向作為搜索方向,因為該方向為當前位置的最快下降方向,所以也被稱為是」最速下降法「。
  • 十分鐘掌握牛頓法凸優化
    之前,我發過一篇文章,通俗地解釋了梯度下降算法的數學原理和推導過程
  • 機器學習梯度下降法,最通俗易懂的解釋.
    來源:簡書,作者:六尺帳篷連結:https://www.jianshu.com/p/c7e642877b0e本文從一個下山場景開始,提出梯度下降算法的基本思想,接著從數學上解釋梯度下降算法原理,最後實現一個簡單的梯度下降算法實例!梯度下降的場景假設梯度下降法的基本思想可以類比為一個下山的過程。
  • 機器學習梯度下降法,最通俗易懂的解釋
    作者:六尺帳篷連結:https://www.jianshu.com/p/c7e642877b0e來源:簡書本文從一個下山場景開始,提出梯度下降算法的基本思想,接著從數學上解釋梯度下降算法原理,最後實現一個簡單的梯度下降算法實例!梯度下降的場景假設梯度下降法的基本思想可以類比為一個下山的過程。
  • 詳解梯度下降算法 正確訓練模型利刃!
    如何確保它正常工作確保梯度下降正常運行的一種好方法是將梯度下降運行時的成本函數繪製成圖。x軸上的迭代次數和y軸上的成本函數值使你可以在每次迭代梯度下降後查看成本函數的值。這可以讓你輕鬆找出適合的學習率。而你只需嘗試不同的值並將它們一起繪製。
  • 梯度下降法的三種形式BGD、SGD以及MBGD
    在應用機器學習算法時,我們通常採用梯度下降法來對採用的算法進行訓練。
  • 最優化問題 | 梯度下降法與MATLAB程序實現
    梯度下降法又稱為最速下降法,是求解無約束優化問題最簡單和最古老的方法之一。大概意思就是:在腦海中想像一下,你站在一座山上,怎麼找到最快下山的方法,這時你當然會朝著最陡峭的方向前進,到達一個點後,再次朝著陡峭的方向下山,從而循環這些步驟,到達山腳。
  • 詳解並行邏輯回歸
    下降方向是通過對目標函數在當前的W下求一階倒數(梯度,Gradient)和求二階導數(海森矩陣,Hessian Matrix)得到。常見的算法有梯度下降法、牛頓法、擬牛頓法。(1) 梯度下降法(Gradient Descent)梯度下降法直接採用目標函數在當前W的梯度的反方向作為下降方向:
  • Python機器學習算法入門之梯度下降法實現線性回歸
    梯度下降法求誤差函數最優解        有了最小二乘法以後,我們已經可以對數據點進行擬合。但由於最小二乘法需要計算X的逆矩陣,計算量很大,因此特徵個數多時計算會很慢,只適用於特徵個數小於100000時使用;當特徵數量大於100000時適合使用梯度下降法。最小二乘法與梯度下降法的區別見最小二乘法和梯度下降法有哪些區別?。