一、簡介
梯度下降法(gradient decent)是一個最優化算法,通常也稱為最速下降法。常用於機器學習和人工智能當中用來遞歸性地逼近最小偏差模型。
梯度下降法是求解無約束最優化問題的一種最常用的方法,它是一種迭代算法,每一步需要求解目標函數的梯度向量。
問題抽象
是
上具有一階連續偏導數的函數,要求解的無約束問題是:
, 其中
表示目標函數
的極小值點
關鍵概念
- 迭代:選取適當初始值
,不斷迭代更新
的 值,直至收斂
- 梯度下降:負梯度方向是使函數值下降最快的方向,我們在迭代的每一步都以負梯度方向更新
的值
- 收斂:給定一個精度
,在迭代的每一輪根據梯度函數
計算梯度
,
時認為收斂
- 學習率:也叫做步長,表示在每一步迭代中沿着負梯度方向前進的距離
二、原理
梯度下降法,顧名思義,從高處尋找最佳通往低處的方向,然后下去,直到找到最低點。我們可以看到,J(θ0,θ1)是以θ0,θ1為自變量的函數,它們的關系如圖1中所示。圖中,起始點的黑色十字從紅色的高坡上,一步一步選擇最佳的方向通往深藍色的低谷,這其實就是梯度下降法的作用。
圖1
微妙的是圖1中的低谷有很多個,選擇不同的起始點,最終達到的低谷也會有所不同。如圖2所示,黑色十字跑向了另外一個低谷。此時有些人就會問:為什么會產生這種現象?其實,原因很簡單,梯度下降法在每次下降的時候都要選擇最佳方向,而這個最佳方向是針對局部來考慮的,不同的起始點局部特征都是不同的,選擇的最佳方向當然也是不同,導致最后尋找到的極小值並不是全局極小值,而是局部極小值。由此可以看出,梯度下降法只能尋找局部極小值。一般凸函數求極小值時可以使用梯度下降法(當目標函數是凸函數時,梯度下降法是全局的最優解,一般情況下梯度下降法的解不一定是全局最優解)。
圖2
梯度下降法的公式為:
(1)
公式(1)中“:=”符號代表賦值,並不是代表“等於”,J(θ0,θ1)是需要求極小值的函數。
直觀理解
以下圖為例,開始時我們處於黑色圓點的初始值(記為 ),我們需要盡快找到函數的最小值點,最快的方法就是沿着坡度最陡的方向往下走
算法細節
由於 具有一階連續導函數,若第
次迭代值為
,則可將
在
附近進行一階泰勒展開:
其中 在
的梯度。
接着我們求出第 次的迭代值
:
其中 是搜索方向,取負梯度方向
,
是步長,需滿足:
算法實現
- 輸入:目標函數
,梯度函數
,計算精度
- 輸出:
的極小值點
- 步驟:
- 取初始值
,置
為
- 計算
- 計算梯度
,當
時停止迭代,令
;否則,令
,求
,使
- 令
,計算
,當
或
時停止迭代,令
- 否則,令
,回到步驟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