前些時間接觸了機器學習,發現梯度下降法是機器學習裡比較基礎又比較重要的乙個求最小值的演算法。梯度下降演算法過程如下:
1)隨機初始值
2)迭代
在這裡,簡單談一下自己對梯度下降法的理解。
首先,要明確梯度是乙個向量,是乙個n元函式f關於n個變數的偏導數,比如三元函式f的梯度為(fx,fy,fz),二元函式f的梯度為(fx,fy),一元函式f的梯度為fx。然後要明白梯度的方向是函式f增長最快的方向,梯度的反方向是f降低最快的方向。
我們以一元函式為例,介紹一下梯度下降法。
設f(x) = (x-1)2+1/2,
上圖給出了函式f的影象和初始值x0,我們希望求得函式f的最小值,因為沿負梯度方向移動一小步後,f值降低,故只需x0沿著負梯度方向移動一小步即可。
而f在點x0的導數大於0,從而f在點x0的梯度方向為正,即梯度方向為f』(x0),故由梯度下降法可知,下乙個迭代值
上述證實了我們對分析的驗證。
同樣,如果處置選在了最小值的左邊,即如圖所示:
由於f』(x0)<0,所以梯度方向為負,負梯度方向為正,故需將x0沿負梯度方向移動一小步,即向右移動一小步,這樣使得f值更小一些。或用梯度下降法迭代公式
對於二元函式,我們也可以通過例項驗證梯度下降法的合理性:
在每次得到乙個點(xk,yk)時,我們需要計算(fx(xk),fy(yk)),這個方向表示梯度f增長最快的方向,-(fx(xk),fy(yk))表示梯度下降最快的方向,故只需將(xk,yk)沿著-(fx(xk),fy(yk))這個方向移動一小步,就可以減少f的值,直至收斂到最小值,如上圖所示。
談幾點梯度下降法需要注意的地方,也是自己對梯度下降法的理解:
1)梯度下降不一定可以收斂到最小值。
梯度下降法是收斂到區域性最小值,不一定可以收斂到全域性最小值。
比如:
我們初始值選擇了如圖的x0,由於f在點x0的導數大於0,梯度方向向右,負梯度方向向左,從而x0向左移動,逐漸收斂到了區域性最小值,而不能收斂到全域性最小值。
2)學習率的大小要適中。
學習率太小,每次移動步長太小,收斂太慢,這個比較容易理解。
學習率太大,每次移動步長大,可能導致不收斂,這裡用乙個圖來表示一下:
由於距離最小值點越遠,導數越大,從而導致步長越來越大,不會收斂。
3)不一定選擇負梯度方向,只要是值下降的方向即可。
在每一次迭代選擇方向時,我們只要選擇與梯度方向夾角小於90度的向量的反方向就可,不一定要選擇負梯度方向。但由於,滿足這樣條件的向量不太容易求出,我們就選擇了與梯度方向0度的向量的反方向(負梯度方向),而且這個方向函式值減少的更快,更快的收斂,故是個不錯的選擇。
4)求最大值的梯度上公升法。
f的梯度方向是f的值增長最快的方向。我們每次沿負梯度方向移動一小步可以逐步收斂到區域性最大值,因此我們每次沿梯度方向也可以得到函式f的區域性最大值。迭代公式為:,這裡
原文:
梯度下降法和隨機梯度下降法
批量梯度下降法 batch gradient descent 在更新引數時使用所有的樣本來進行更新 隨機梯度下降法 stochastic gradient descent 求梯度時沒有用所有的m個樣本的資料,而是僅僅選取乙個樣本j來求梯度。小批量梯度下降法 mini batch gradient d...
梯度下降法
梯度下降法 是乙個一階 最優化演算法 通常也稱為 最速下降法 我之前也沒有關注過這類演算法。最近,聽史丹福大學的機器學習課程時,碰到了用梯度下降演算法求解線性回歸問題,於是看了看這類演算法的思想。今天只寫了一些入門級的知識。我們知道,函式的曲線如下 程式設計實現 c code cpp view pl...
梯度下降法
回歸 regression 梯度下降 gradient descent 發表於332 天前 技術,科研 被圍觀 1152 次 前言 這個系列主要想能夠用數學去描述機器學習,想要學好機器學習,首先得去理解其中的數學意義,不一定要到能夠輕鬆自如的推導中間的公式,不過至少得認識這些 式子吧,不然看一些相關...