「機器學習_4」梯度下降(Gradient Descent)

     在求解機器學習算法的模型參數,即無約束優化問題時,梯度下降(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. 梯度下降與梯度上升

    在機器學習算法中,在最小化損失函數時,可以通過梯度下降法來一步步的迭代求解,得到最小化的損失函數,和模型參數值。反過來,如果我們需要求解損失函數的最大值,這時就需要用梯度上升法來迭代了。

    梯度下降法和梯度上升法是可以互相轉化的。比如我們需要求解損失函數f(θ)的最小值,這時我們需要用梯度下降法來迭代求解。但是實際上,我們可以反過來求解損失函數 -f(θ)的最大值,這時梯度上升法就派上用場了。

    

3. 梯度下降法算法詳解

3.1 梯度下降的直觀解釋

    首先來看看梯度下降的一個直觀的解釋。比如我們在一座大山上的某處位置,由於我們不知道怎麼下山,於是決定走一步算一步,也就是在每走到一個位置的時候,求解當前位置的梯度,沿着梯度的負方向,也就是當前最陡峭的位置向下走一步,然後繼續求解當前位置梯度,向這一步所在位置沿着最陡峭最易下山的位置走一步。這樣一步步的走下去,一直走到覺得我們已經到了山腳。當然這樣走下去,有可能我們不能走到山腳,而是到了某一個局部的山峯低處。

    從上面的解釋可以看出,梯度下降不一定能夠找到全局的最優解,有可能是一個局部最優解。當然,如果損失函數是凸函數,梯度下降法得到的解就一定是全局最優解。

3.2 梯度下降的相關概念

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

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

    2.特徵(feature)指的是樣本中輸入部分,比如2個單特徵的樣本(𝑥(0),𝑦(0)),(𝑥(1),𝑦(1)),則第一個樣本特徵爲𝑥(0),第一個樣本輸出爲𝑦(0)。

    3. 假設函數(hypothesis function):在監督學習中,爲了擬合輸入樣本,而使用的假設函數,記爲ℎ𝜃(𝑥)。比如對於單個特徵的m個樣本(𝑥(𝑖),𝑦(𝑖))(𝑖=1,2,...𝑚),可以採用擬合函數如下: ℎ𝜃(𝑥)=𝜃0+𝜃1𝑥。

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

             

     其中𝑥𝑖表示第i個樣本特徵,𝑦𝑖表示第i個樣本對應的輸出,ℎ𝜃(𝑥𝑖)爲假設函數。 

 

3.3 梯度下降的詳細算法

一共有4步:

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

2. 算法相關參數初始化:

   主要是初始化𝜃0,𝜃1...,𝜃𝑛,算法終止距離𝜀以及步長𝛼。在沒有任何先驗知識的時候,我喜歡將所有的𝜃初始化爲0, 將步長初始化爲1。在調優的時候再 優化

 3. 算法過程:

 

3.4 梯度下降的算法調優

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

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

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

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

                            

 這樣特徵的新期望爲0,新方差爲1,迭代速度可以大大加快。

 

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章