在求解神經網絡算法的模型參數,梯度下降(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的方向,梯度減少最快,也就是更加容易找到函數的最小值。
對於F點來說,F點的梯度為綠色向量的方向,那么它的反方向即為下降最快的地方
對於B點來說,B點的梯度為負,所以梯度的反方向為右下方,也是函數下降最快的地方
可見,他們都朝着使函數到達最小值的方向努力。
2、✌ 梯度下降和梯度上升
一般我們要求取損失函數最小值時就要利用梯度下降,對應求取最大值就應該用梯度上升,兩種方法都是將參數進行迭代更新。
下面進行介紹梯度下降的原理。
3、✌ 梯度下降的圖示
首先我們看這張圖,z軸為損失函數,x、y軸分別為兩個參數,現在問題就是我們要求取損失函數達到最小對應參數的取值,可能會想,窮舉每個參數,這個方法顯然不行,參數取值不限,不可能取到所有值,或者對損失函數求導,求極值,這種方法按理來說可能沒有問題,但是因為我們每次遇到的損失函數不同,把這種方法封裝成一個函數較難,函數類型不同,求導不同,無法做到通解,那么應該怎么做呢?
把它看成一個碗,當我們向碗里放一個小球時,按自然現象來說,小球肯定會向下滾,那么小球滾的路徑有什么特別之處呢?當讓是坡度大的地方,越陡的地方越容易下來而且越快,那不就和我們的梯度對應上了嗎,小球每次沿着梯度的反方向滾動總會有一個時刻達到最低點。
梯度下降就是這個原理,可是又有了新的問題,我們看一張圖。
按照上面的理論,小球肯定會滾到一個最低點,那么這個點一定是最低點嗎?肯定不是,根據上面的圖可以看出,如果小球一旦陷入某一個凹陷的區域,就會終止,並沒有達到最低點,那么就說我們獲得的是局部最優,而不是全局最優,這里有一個補充,如果我們的損失函數為凸函數,那么我們一定會得到全局最優解。
學過高數可能知道,取得極小值的位置,並不一定是最小值,它只是局部的最小值,那么應該怎么做呢,由此產生了很多優化的算法,利用各種數學的推導衍生新的公式,這里不予說明,本文只為講解梯度下降原理,有興趣可自行查找相關文獻。
4、✌ 梯度下降的相關概念
這個就是梯度下降的核心公式,用這個公式來進行更新w的取值,這里問什么用減號呢?話不多說看圖。
當我們的點是b點時,梯度為正(導數值),那么我們想要取到最小值,肯定是要左移,那么就需要減去該值*學習率
如果是a點,梯度為負(導數值為負),那么就需要右移,導數值為負就應該加上它
- 損失函數:學過線性回歸可能知道,我們評估它的好壞利用的就是MSE(均方誤差),利用它進行度量模型擬合的程度。
顯然這個函數越小越好,那么我們就是要求取最優的w1和w2取值使我們的損失函數達到最小值,這就用到了梯度下降。
2. 學習率:就是上面公式中的a,有的地方也叫做步長,我感覺很矛盾,這個地方我感覺有些問題,我個人認為就是一個起調節作用的數,因為w和它對應的導數有可能數量級不同,這時就需要將導數乘一個小點的數調節一下
5、✌ 梯度下降的計算過程
其中涉及到多維矩陣運算以及特別多的符號,對於初學者很難理解,這里我們簡化一下,用一個簡易版的來代替,不過原理是一樣的,就是將低維推廣到多維。
話不多說(因為編輯文檔公式不好寫,所有我在草紙上演示了下過程),來看圖!!!
6、✌ 算法過程:
-
確定當前參數所在位置的梯度(導數)$$dJ/dw$$
-
用學習率乘以梯度,得到參數更新的距離,即a*dJ/dw
-
確定迭代次數和閾值,分為兩種情況
3.1 第一種達到迭代次數,計算結束
3.2 第二種參數更新值小於閾值,說白了就是a*dJ/dw趨於0,說明近乎達到了最優位置
7、✌ 算法優化:
有沒有什么地方可以優化呢?
-
學習率的選擇:
很容易知道,如果學習率過小的化,會導致參數更新率較小,變化小,導致迭代次數增加,增加模型訓練時間,如果學習率過大的化,會導致參數變化太大,迭代過快,導致跳過最優解的位置
看張圖就明白了
-
參數的初始值:
初始值的不同也會影響模型的效果,因為梯度下降有時會得到局部最優解,而如果位置選擇得當的化會避免這種狀況 -
數據的歸一化,消除量綱影響 :
歸一化后不同特征的取值范圍會划分到同一范圍,會減少一定的計算量
樣本減去均值除以標准差,這樣處理后的數據會符合高斯分布