看本篇部落格之前,首先得先去了解一下什麼是梯度。
梯度下降演算法的思想,它將按如下操作達到最低點:
1)明確自己現在所處的位置。
2)找到相對於該位置而言下降最快的方向。
3)沿著第二步找到的方向走一小步,到達乙個新的位置,此時的位置肯定比原來低。
4)回到第一步。
5)終止於最低點。
從數學角度來看,多元函式的梯度方向是函式增長最快的方向,那麼梯度的反方向就是函式減少最快的方向。
以二元函式為例:
$$z = f(x,y)$$
現在確定乙個點 $(x_,y_)$,這個點是水平面上的,即在 $xoy$ 平面上,
考慮在這個點上,往平面的哪個方向走相同的
一小段距離,
對應的函式值 $z$ 會是最小。
或者:以 $(x_,y_)$ 為圓心,畫乙個小半圓,圓上哪個點對應的 $z$ 值會最小?
了解了梯度,可知在梯度反方向走一小段距離對應的函式值將會最小。這就相當於貪心演算法,我每次都走的是區域性最小,那走到
最後必然也是區域性最小的。當然這樣做無法保證全域性最優,在不同的位置進行梯度下降,找到的「最小值」都可能會不同。
$$l = -(\frac,\frac)$$
我們代入具體的值,即將 $x = x_,y = y_$ 代入就會得到乙個具體的向量,這個向量以原點為起始點,它的模代表該點在
該方向上的變化率。將這個具體的向量表示成如下形式:
$$l_ = -(\frac},\frac})$$
設 $\alpha$ 是移動的距離和向量 $l_$ 模長的乙個比例,用它來控制點 $(x_,y_)$ 在 $l_$ 上移動
的距離,即移動的距離為
$$d = \alpha \cdot |l_|, \alpha > 0$$
那麼此時 $(x_,y_)$ 的座標會變成這樣:
$$x_ = x_ - \alpha \cdot \frac} \\
y_ = y_ - \alpha \cdot \frac}$$
這很容易理解,我們移動射線上的 $d$ 距離,將它進行分解,相當於各個分量也移動相同比例的距離。
那迭代到什麼時候停止呢?
可以設定乙個精度,當迭代到某乙個點時,如果求出的梯度向量的模小於這個精度,就停止迭代,這個模代表的是函式值在該方向的變化率。
當變化率很小的時候,即坡度很平了,就認為達到區域性最小。
由泰勒公式推導梯度下降法
梯度下降法的背後,其實還是離不開多元函式的一階泰勒展開以及函式的線性近似的思想。乙個函式的泰勒展開式為:
$$f(x) = f(x_) + \nabla f(x_)^\delta x + \frac\delta x^g(x_)\delta x + \cdots$$
現在我們只考慮展開到一階的情形:
$$f(x) = f(x_) + \nabla f(x_)^(x - x_)$$
因為泰勒公式反映的是函式在展開點處的區域性性質,所以這個一階的泰勒近似是在 $x_$ 的小鄰域內近似效果較好,因此迭代的步伐不能
邁得過大,太大的話,$x_$ 處近似的精度就失效了。
現在我們用這個一階的泰勒展開式來代替函式在 $x_$ 區域性區域內的函式,那下乙個點該怎麼選才能使函式值下降最大呢?
當確定 $x_$ 後,$f(x_)$ 就是已知的,那麼函式值取決於第二項的兩個向量點積:
$$\nabla f(x_)^(x - x_) = |\nabla f(x_)||x - x_|\cos \theta = \lambda \cdot |\nabla f(x_)| \cdot \cos \theta$$
其中 $\lambda > 0$ 是向量 $x - x_$ 的模,$\theta$ 是兩向量之間的夾角。
那麼對於相同模長 $\lambda$,該怎麼選擇方向(就是選擇 $\theta$),才會使函式值最小呢?
很明顯就是當向量 $x - x_$ 和 $\nabla f(x_)$ 方向相反時,相同模長 $\lambda$ 對應的函式值最小,即:
$$x - x_ = - \lambda \cdot \frac)})|}$$
所以:$$x = x_ - \lambda \cdot \frac)})|}$$
注意:上面這個推導過程是建立在鄰域內的,這樣泰勒的一階展開近似才成立,如果 $\lambda$ 取太大,近似就不成立了。
梯度下降法的缺點
梯度下降法和隨機梯度下降法
批量梯度下降法 batch gradient descent 在更新引數時使用所有的樣本來進行更新 隨機梯度下降法 stochastic gradient descent 求梯度時沒有用所有的m個樣本的資料,而是僅僅選取乙個樣本j來求梯度。小批量梯度下降法 mini batch gradient d...
梯度下降法
梯度下降法 是乙個一階 最優化演算法 通常也稱為 最速下降法 我之前也沒有關注過這類演算法。最近,聽史丹福大學的機器學習課程時,碰到了用梯度下降演算法求解線性回歸問題,於是看了看這類演算法的思想。今天只寫了一些入門級的知識。我們知道,函式的曲線如下 程式設計實現 c code cpp view pl...
梯度下降法
回歸 regression 梯度下降 gradient descent 發表於332 天前 技術,科研 被圍觀 1152 次 前言 這個系列主要想能夠用數學去描述機器學習,想要學好機器學習,首先得去理解其中的數學意義,不一定要到能夠輕鬆自如的推導中間的公式,不過至少得認識這些 式子吧,不然看一些相關...