1. 程式人生 > >梯度下降算法(gradient descent)

梯度下降算法(gradient descent)

調整 none 算法 方向導數 分享圖片 後繼 常用 也有 計算

簡述

梯度下降法又被稱為最速下降法(Steepest descend method),其理論基礎是梯度的概念。梯度與方向導數的關系為:梯度的方向與取得最大方向導數值的方向一致,而梯度的模就是函數在該點的方向導數的最大值

現在假設我們要求函數的最值,采用梯度下降法,如圖所示:

技術分享圖片

技術分享圖片

梯度下降的相關概念

    在詳細了解梯度下降的算法之前,我們先看看相關的一些概念。

    1. 步長(Learning rate):步長決定了在梯度下降叠代的過程中,每一步沿梯度負方向前進的長度。用上面下山的例子,步長就是在當前這一步所在位置沿著最陡峭最易下山的位置走的那一步的長度。

    2.特征(feature):指的是樣本中輸入部分,比如樣本(x0

,y0),(x1,y1),則樣本特征為x,樣本輸出為y。

    3. 假設函數(hypothesis function):在監督學習中,為了擬合輸入樣本,而使用的假設函數,記為hθ(x)。比如對於樣本(xi,yi)(i=1,2,...n),可以采用擬合函數如下: hθ(x) = θ01x。

    4. 損失函數(loss function):為了評估模型擬合的好壞,通常用損失函數來度量擬合的程度。損失函數極小化,意味著擬合程度最好,對應的模型參數即為最優參數。在線性回歸中,損失函數通常為樣本輸出和假設函數的差取平方。比如對於樣本(xi,yi)(i=1,2,...n),采用線性回歸,損失函數為:

技術分享圖片

其中xi表示樣本特征x的第i個元素,yi表示樣本輸出y的第i個元素,hθ(xi)為假設函數。

梯度下降的詳細算法

    梯度下降法的算法可以有代數法和矩陣法(也稱向量法)兩種表示,如果對矩陣分析不熟悉,則代數法更加容易理解。不過矩陣法更加的簡潔,且由於使用了矩陣,實現邏輯更加的一目了然。這裏先介紹代數法,後介紹矩陣法。

梯度下降法的代數方式描述

 1. 先決條件: 確認優化模型的假設函數和損失函數。

同樣是線性回歸,對應於上面的假設函數,損失函數為:

技術分享圖片

2. 算法相關參數初始化:主要是初始化θ01...,θn,算法終止距離ε以及步長α。在沒有任何先驗知識的時候,我喜歡將所有的θ初始化為0, 將步長初始化為1。在調優的時候再 優化。

3. 算法過程:

1)確定當前位置的損失函數的梯度,對於θi,其梯度表達式如下:

技術分享圖片

2)用步長乘以損失函數的梯度,得到當前位置下降的距離,即技術分享圖片

3)確定是否所有的θi,梯度下降的距離都小於ε,如果小於ε則算法終止,當前所有的θi(i=0,1,...n)即為最終結果。否則進入步驟4.

4)更新所有的θ,對於θi,其更新表達式如下。更新完畢後繼續轉入步驟1.

技術分享圖片

梯度下降法的矩陣方式描述

    這一部分主要講解梯度下降法的矩陣方式表述,相對於代數法,要求有一定的矩陣分析的基礎知識,尤其是矩陣求導的知識。

1. 先決條件:需要確認優化模型的假設函數和損失函數。

損失函數的表達式為:技術分享圖片,其中YY是樣本的輸出向量,維度為mx1.

2. 算法相關參數初始化: θ向量可以初始化為默認值,或者調優後的值。算法終止距離ε,步長α。

3. 算法過程:

1)確定當前位置的損失函數的梯度,對於θ向量,其梯度表達式如下:技術分享圖片

2)用步長乘以損失函數的梯度,得到當前位置下降的距離

3)確定θ向量裏面的每個值,梯度下降的距離都小於ε,如果小於ε則算法終止,當前θ向量即為最終結果。否則進入步驟4.

4)更新θ向量,其更新表達式如下。更新完畢後繼續轉入步驟1.

技術分享圖片

梯度下降的算法調優

在使用梯度下降時,需要進行調優。哪些地方需要調優呢?

1. 算法的步長選擇。在前面的算法描述中,我提到取步長為1,但是實際上取值取決於數據樣本,可以多取一些值,從大到小,分別運行算法,看看叠代效果,如果損失函數在變小,說明取值有效,否則要增大步長。前面說了。步長太大,會導致叠代過快,甚至有可能錯過最優解。步長太小,叠代速度太慢,很長時間算法都不能結束。所以算法的步長需要多次運行後才能得到一個較為優的值。

2. 算法參數的初始值選擇。 初始值不同,獲得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;當然如果損失函數是凸函數則一定是最優解。由於有局部最優解的風險,需要多次用不同初始值運行算法,關鍵損失函數的最小值,選擇損失函數最小化的初值。

3.歸一化。由於樣本不同特征的取值範圍不一樣,可能導致叠代很慢,為了減少特征取值的影響,可以對特征數據歸一化,也就是對於每個特征x,求出它的期望x和標準差std(x),然後轉化為:

技術分享圖片

這樣特征的新期望為0,新方差為1,叠代次數可以大大加快。

梯度下降法大家族(BGD,SGD,MBGD)

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

批量梯度下降法,是梯度下降法最常用的形式,具體做法也就是在更新參數時使用所有的樣本來進行更新

技術分享圖片

由於我們有m個樣本,這裏求梯度的時候就用了所有m個樣本的梯度數據。

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

隨機梯度下降法,其實和批量梯度下降法原理類似,區別在與求梯度時沒有用所有的m個樣本的數據,而是僅僅選取一個樣本j來求梯度。對應的更新公式是:

技術分享圖片

隨機梯度下降法,和批量梯度下降法是兩個極端,一個采用所有數據來梯度下降,一個用一個樣本來梯度下降。自然各自的優缺點都非常突出。對於訓練速度來說,隨機梯度下降法由於每次僅僅采用一個樣本來叠代,訓練速度很快,而批量梯度下降法在樣本量很大的時候,訓練速度不能讓人滿意。對於準確度來說,隨機梯度下降法用於僅僅用一個樣本決定梯度方向,導致解很有可能不是最優。對於收斂速度來說,由於隨機梯度下降法一次叠代一個樣本,導致叠代方向變化很大,不能很快的收斂到局部最優解。

那麽,有沒有一個中庸的辦法能夠結合兩種方法的優點呢?有!這就是小批量梯度下降法。

小批量梯度下降法(Mini-batch Gradient Descent)

小批量梯度下降法是批量梯度下降法和隨機梯度下降法的折衷,也就是對於m個樣本,我們采用x個樣子來叠代,1<x<m。一般可以取x=10,當然根據樣本的數據,可以調整這個x的值。對應的更新公式是:

技術分享圖片

梯度下降法和其他無約束優化算法的比較

在機器學習中的無約束優化算法,除了梯度下降以外,還有前面提到的最小二乘法,此外還有牛頓法和擬牛頓法。

梯度下降法和最小二乘法相比,梯度下降法需要選擇步長,而最小二乘法不需要。梯度下降法是叠代求解,最小二乘法是計算解析解。如果樣本量不算很大,且存在解析解,最小二乘法比起梯度下降法要有優勢,計算速度很快。但是如果樣本量很大,用最小二乘法由於需要求一個超級大的逆矩陣,這時就很難或者很慢才能求解解析解了,使用叠代的梯度下降法比較有優勢。

梯度下降法和牛頓法/擬牛頓法相比,兩者都是叠代求解,不過梯度下降法是梯度求解,而牛頓法/擬牛頓法是用二階的海森矩陣的逆矩陣或偽逆矩陣求解。相對而言,使用牛頓法/擬牛頓法收斂更快。但是每次叠代的時間比梯度下降法長。


參考文獻:

https://www.cnblogs.com/pinard/p/5970503.html

梯度下降算法(gradient descent)