【機器學習】梯度下降法


一、簡介

梯度下降法(gradient decent)是一個最優化算法,通常也稱為最速下降法。常用於機器學習和人工智能當中用來遞歸性地逼近最小偏差模型

梯度下降法是求解無約束最優化問題的一種最常用的方法,它是一種迭代算法,每一步需要求解目標函數的梯度向量。

問題抽象

[公式] 是 [公式] 上具有一階連續偏導數的函數,要求解的無約束問題是: [公式] , 其中 [公式]表示目標函數 [公式] 的極小值點

關鍵概念

  • 迭代:選取適當初始值 [公式] ,不斷迭代更新 [公式] 的 值,直至收斂
  • 梯度下降:負梯度方向是使函數值下降最快的方向,我們在迭代的每一步都以負梯度方向更新 [公式]的值
  • 收斂:給定一個精度 [公式] ,在迭代的每一輪根據梯度函數 [公式] 計算梯度 [公式] , [公式] 時認為收斂
  • 學習率:也叫做步長,表示在每一步迭代中沿着負梯度方向前進的距離

二、原理

梯度下降法,顧名思義,從高處尋找最佳通往低處的方向,然后下去,直到找到最低點。我們可以看到,J(θ0,θ1)是以θ0,θ1為自變量的函數,它們的關系如圖1中所示。圖中,起始點的黑色十字從紅色的高坡上,一步一步選擇最佳的方向通往深藍色的低谷,這其實就是梯度下降法的作用。

                                                                       圖1

      微妙的是圖1中的低谷有很多個,選擇不同的起始點,最終達到的低谷也會有所不同。如圖2所示,黑色十字跑向了另外一個低谷。此時有些人就會問:為什么會產生這種現象?其實,原因很簡單,梯度下降法在每次下降的時候都要選擇最佳方向,而這個最佳方向是針對局部來考慮的,不同的起始點局部特征都是不同的,選擇的最佳方向當然也是不同,導致最后尋找到的極小值並不是全局極小值,而是局部極小值。由此可以看出,梯度下降法只能尋找局部極小值。一般凸函數求極小值時可以使用梯度下降法(當目標函數是凸函數時,梯度下降法是全局的最優解,一般情況下梯度下降法的解不一定是全局最優解)。

    

                                                                    圖2

      梯度下降法的公式為:

                                                                   (1)

 

      公式(1)中“:=”符號代表賦值,並不是代表“等於”,J(θ0,θ1)是需要求極小值的函數。

 

直觀理解

以下圖為例,開始時我們處於黑色圓點的初始值(記為 [公式] ),我們需要盡快找到函數的最小值點,最快的方法就是沿着坡度最陡的方向往下走

算法細節

由於 [公式] 具有一階連續導函數,若第 [公式] 次迭代值為 [公式] ,則可將 [公式] 在 [公式] 附近進行一階泰勒展開:[公式]

其中 [公式] 在 [公式] 的梯度。
接着我們求出第 [公式] 次的迭代值 [公式] :[公式]

其中 [公式] 是搜索方向,取負梯度方向 [公式] , [公式] 是步長,需滿足:[公式]

算法實現

  • 輸入:目標函數 [公式] ,梯度函數 [公式] ,計算精度 [公式]
  • 輸出: [公式] 的極小值點 [公式]
  • 步驟:
  1. 取初始值 [公式] ,置 [公式] 為 [公式]
  2. 計算 [公式]
  3. 計算梯度 [公式] ,當 [公式] 時停止迭代,令 [公式] ;否則,令 [公式] ,求 [公式] ,使 [公式]
  4. 令 [公式] ,計算 [公式] ,當 [公式] 或 [公式] 時停止迭代,令 [公式]
  5. 否則,令 [公式] ,回到步驟3

算法調優

    • 學習率:學習率太小時收斂過慢,但太大時又會偏離最優解
    • 初始值:當損失函數是凸函數時,梯度下降法得到的解是全局最優解;當損失函數是非凸函數時,得到的解可能是局部最優解,需要隨機選取初始值並在多個局部最優解之間比較
    • 歸一化:如果不歸一化,會收斂得比較慢,典型的情況就是出現“之”字型的收斂路徑

三、使用方式:以線性回歸為例

設線性回歸的假設函數為:

                                                                           (2)

 設代價函數為:

                                               (3)

 目標:尋找J(θ0,θ1)的最小值。

 措施:使用梯度下降法

 原理:根據公式(1),可以知道求參數θ,下一步的θ是由上一步的θ減去α乘以J(θ0,θ1)在上一點的斜率值產生的,如圖3所示,然后不斷迭代,當θ值不變時,J(θ0,θ1)達到極小值。

               

 

                                                                圖3

 步驟: 不斷執行以下公式(4),直到公式(1)收斂,即達到極小值。

              (4)

             注意:公式(4)中各行不能調換順序,否則並不是梯度下降法

             比如公式(5)這種形式,θ0剛更新完,馬上就用於下一步的θ1的更新計算,脫離了梯度下降法的意圖。

                                                                       (5)

 

四、如何提高梯度下降法的效率

主要有兩種方法:

1、特征值x的縮放

     why? ——  很多人也許會問:為什么要縮放特征值?縮放特征值x就能提高效率?

     用圖4來講解,J(θ)是假設函數hθ(x)=θ0+θ1x1+θ2x2的代價函數,圖中J(θ)關於θ1、θ2的等高線圖中帶箭頭的紅線是迭代的分步,左邊是x1、x2數量級相差較大的時候,紅線彎來彎去,迭代效率很低,右邊則是x1、x2數量級相差較小的時候,帶箭頭的紅線很快到達了等高線圖的最低點,取得極小值,效率很高。所謂的縮放特征值x,就是讓所有的x值在數量級上相差不大,達到提高迭代效率的目的。

                

 

                                                                          圖4 

縮放特征值的方法大致有以下三種:

  • 除以最大值   (以x1為例,將x1所有樣本的值除以max{x1},此時-1≤x1≤1)
  • 均值歸一化   (x1:=(x1-μ)/(max{x1}-min{x1}),其中μ為x1的平均值,此時-0.5≤x1≤0.5)  
  • 均值方差歸一化

     

2、選擇適當的α

       公式(1)中α起着很重要的作用,如果選的太小,則會出現圖5左邊這種情況,迭代慢;如果選的太大,則會出現圖4右邊這種情況,過大的α使迭代不收斂。

       

 

                                                                                                        圖5

α的選擇是需要通過計算一個個試,一般會這樣取值(僅限參考):......,0.001,0.003,0.01,0.03,0.1,.........(以此類推)

 

參考:https://www.cnblogs.com/steed/p/7429804.html

           https://zhuanlan.zhihu.com/p/104546744


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM