梯度降低算法

  在求解機器學習算法的模型參數,即無約束優化問題時,梯度降低(Gradient Descent)是最常採用的方法之一,另外一種經常使用的方法是最小二乘法。這裏就對梯度降低法作一個完整的總結。算法

  1、梯度機器學習

  在微積分裏面,對多元函數的參數求∂偏導數,把求得的各個參數的偏導數以向量的形式寫出來,就是梯度。好比函數f(x,y), 分別對x,y求偏導數,求得的梯度向量就是(∂f/∂x, ∂f/∂y)T,簡稱grad f(x,y)或者▽f(x,y)。對於在點(x0,y0)的具體梯度向量就是(∂f/∂x0, ∂f/∂y0)T.或者▽f(x0,y0),若是是3個參數的向量梯度,就是(∂f/∂x, ∂f/∂y,∂f/∂z)T,以此類推。函數

  那麼這個梯度向量求出來有什麼意義呢?他的意義從幾何意義上講,就是函數變化增長最快的地方。具體來講,對於函數f(x,y),在點(x0,y0),沿着梯度向量的方向就是(∂f/∂x0, ∂f/∂y0)T的方向是f(x,y)增長最快的地方。或者說,沿着梯度向量的方向,更加容易找到函數的最大值。反過來講,沿着梯度向量相反的方向,也就是 -(∂f/∂x0, ∂f/∂y0)T的方向,梯度減小最快,也就是更加容易找到函數的最小值。學習

  2、梯度降低與梯度上升優化

  在機器學習算法中,在最小化損失函數時,能夠經過梯度降低法來一步步的迭代求解,獲得最小化的損失函數,和模型參數值。反過來,若是咱們須要求解損失函數的最大值,這時就須要用梯度上升法來迭代了。atom

  梯度降低法和梯度上升法是能夠互相轉化的。好比咱們須要求解損失函數f(θ)的最小值,這時咱們須要用梯度降低法來迭代求解。可是實際上,咱們能夠反過來求解損失函數 -f(θ)的最大值,這時梯度上升法就派上用場了。spa

  3、梯度降低算法xml

  梯度降低算法能夠看作是一個下山的過程,咱們不知道如何下山,因而決定走一步算一步,沒走一步都計算一下當前位置的梯度,而後沿着梯度的負方向,邁出下一步。就這樣一步一步的走下去,直至走到山腳下,可是還可能會走到一個局部的山峯低谷。blog

  從上面能夠看出梯度降低算法不必定會獲得全局最優解,還可能會獲得局部最優解。當損失函數是凸函數時,梯度降低算法必定會獲得全局最優解。it

  3.1梯度降低算法的一些相關概念

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

  (2)特徵(feature):指的是樣本中輸入部分,好比2個單特徵的樣本x(0),y(0),x(1),y(1)(x(0),y(0)),(x(1),y(1)),則第一個樣本特徵爲x(0)x(0),第一個樣本輸出爲y(0)y(0)。

  (3)假設函數(hypothesis function):在監督學習中,爲了擬合輸入樣本,而使用的假設函數,記爲hθ(x)hθ(x)。好比對於單個特徵的m個樣本x(i),y(i)(i=1,2,...m)(x(i),y(i))(i=1,2,...m),能夠採用擬合函數以下: hθ(x)=θ0+θ1xhθ(x)=θ0+θ1x。

  (4) 損失函數(loss function):爲了評估模型擬合的好壞,一般用損失函數來度量擬合的程度。損失函數極小化,意味着擬合程度最好,對應的模型參數即爲最優參數。在線性迴歸中,損失函數一般爲樣本輸出和假設函數的差取平方。好比對於m個樣本xi,yi(i=1,2,...m)(xi,yi)(i=1,2,...m),採用線性迴歸,損失函數爲:

  J(θ0,θ1)=i=1m(hθ(xi)yi)2J(θ0,θ1)=∑i=1m(hθ(xi)−yi)2

  其中xixi表示第i個樣本特徵,yiyi表示第i個樣本對應的輸出,hθ(xi)hθ(xi)爲假設函數。

  4 不一樣的梯度降低算法 

4.1 批量梯度降低法(Batch Gradient Descent)

    批量梯度降低法,是梯度降低法最經常使用的形式,具體作法也就是在更新參數時使用全部的樣原本進行更新,這個方法對應於前面3.3.1的線性迴歸的梯度降低算法,也就是說3.3.1的梯度降低算法就是批量梯度降低法。  

    θi=θiαj=0m(hθ(x(j)0,x(j)1,...x(j)n)yj)x(j)iθi=θi−α∑j=0m(hθ(x0(j),x1(j),...xn(j))−yj)xi(j)

    因爲咱們有m個樣本,這裏求梯度的時候就用了全部m個樣本的梯度數據。

4.2 隨機梯度降低法(Stochastic Gradient Descent)

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

    θi=θiα(hθ(x(j)0,x(j)1,...x(j)n)yj)x(j)iθi=θi−α(hθ(x0(j),x1(j),...xn(j))−yj)xi(j)

    隨機梯度降低法,和4.1的批量梯度降低法是兩個極端,一個採用全部數據來梯度降低,一個用一個樣原本梯度降低。天然各自的優缺點都很是突出。對於訓練速度來講,隨機梯度降低法因爲每次僅僅採用一個樣原本迭代,訓練速度很快,而批量梯度降低法在樣本量很大的時候,訓練速度不能讓人滿意。對於準確度來講,隨機梯度降低法用於僅僅用一個樣本決定梯度方向,致使解頗有可能不是最優。對於收斂速度來講,因爲隨機梯度降低法一次迭代一個樣本,致使迭代方向變化很大,不能很快的收斂到局部最優解。

    那麼,有沒有一箇中庸的辦法可以結合兩種方法的優勢呢?有!這就是4.3的小批量梯度降低法。

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

  小批量梯度降低法是批量梯度降低法和隨機梯度降低法的折衷,也就是對於m個樣本,咱們採用x個樣子來迭代,1<x<m。通常能夠取x=10,固然根據樣本的數據,能夠調整這個x的值。對應的更新公式是:

    θi=θiαj=tt+x1(hθ(x(j)0,x(j)1,...x(j)n)yj)x(j)i

相關文章
相關標籤/搜索