什麼是梯度下降
梯度下降法(gradient descent)是一種常見的一階(first-order)優化方法,是求解無約束優化問題最簡單、最經典的方法之一。所謂的一階方法就是僅使用目標函式的一階導數,不利用其高階導數。
那什麼是無約束優化問題呢?舉個例子,在一元函式法f(x)的影象中,求無約束最優化問題,即不對定義域或值域做任何限制的情況下,求解函式f(x)的最小值。 沒有理解,沒事兒,本文最後會重新**這個問題。
梯度下降方法的重點是理解,導數(derivative)、偏導數(partial derivative)和方向導數(directional derivative)這三個概念。
回憶一下高數中微積分的經典:
我們定義一下導數:
dx:x的變化量趨於0時,則記作微元dx。
δy:δy=f(x0+δx)-f(x0),是函式的增量;
dy:dy=f』(x0)dx,是切線的增量;
其中,dy/dx中的d是微小增量的意思,即微小的增量y處以微小增量x,在函式中是微分的意思。也就是y=f(x)在x0處的斜率。
當δx→0時,dy與δy都是無窮小,dy是δy的主部,即δy=dy+o(δx).
導數反應的是函式y=f(x)在從x軸某一點處沿著x軸正方向上的變化率或變化趨勢。舉個例子,在x軸某一點處,如果f』(x)>0,說明f(x)的函式值在x點沿x軸正方向是趨於增加的;反之,如果f』(x)<0,說明f(x)的函式值在x點沿x軸正方向是趨於減小的。
再來看偏導數的定義:
導數與偏導數本質是一致的,都是當自變數的變化量趨於0時,函式值的變化量與自變數變化量比值的極限。直觀地說,偏導數也就是函式在某一點上沿座標軸正方向的的變化率。
偏導數 f'x(x0,y0) 表示固定面上一點對 x 軸的切線斜率;偏導數 f'y(x0,y0) 表示固定面上一點對 y 軸的切線斜率。
高階偏導數:如果二元函式 z=f(x,y) 的偏導數 f'x(x,y) 與 f'y(x,y) 仍然可導,那麼這兩個偏導函式的偏導數稱為 z=f(x,y) 的二階偏導數。二元函式的二階偏導數有四個:f"xx,f"xy,f"yx,f"yy。
x方向的偏導
設有二元函式 z=f(x,y) ,點(x0,y0)是其定義域d 內一點。把 y 固定在 y0而讓 x 在 x0 有增量 △x ,相應地函式 z=f(x,y) 有增量(稱為對 x 的偏增量)△z=f(x0+△x,y0)-f(x0,y0)。
如果 △z 與 △x 之比當 △x→0 時的極限存在,那麼此極限值稱為函式 z=f(x,y) 在 (x0,y0)處對 x 的偏導數,記作 f'x(x0,y0)或。函式 z=f(x,y) 在(x0,y0)處對 x 的偏導數,實際上就是把 y 固定在 y0看成常數後,一元函式z=f(x,y0)在 x0處的導數。
y方向的偏導同理。
接下來是方向導數的定義:
當我們討論函式沿任意方向的變化率時,也就引出了方向導數的定義,即:某一點在某一趨近方向上的導數值。
通俗的解釋是:
我們不僅要知道函式在座標軸正方向上的變化率(即偏導數),而且還要設法求得函式在其他特定方向上的變化率。而方向導數就是函式在其他特定方向上的變化率。
導數與梯度
梯度的定義如下:
梯度的提出只為回答乙個問題:
函式在變數空間的某一點處,沿著哪乙個方向有最大的變化率?
梯度定義如下:
函式在某一點的梯度是這樣乙個向量,它的方向與取得最大方向導數的方向一致,而它的模為方向導數的最大值。
這裡注意三點:
1)梯度是乙個向量,即有方向有大小;
2)梯度的方向是最大方向導數的方向;
3)梯度的值是最大方向導數的值。
導數與向量:
向量的定義是有方向(direction)有大小(magnitude)的量。
從前面的定義可以這樣看出,偏導數和方向導數表達的是函式在某一點沿某一方向的變化率,也是具有方向和大小的。因此從這個角度來理解,我們也可以把偏導數和方向導數看作是乙個向量,向量的方向就是變化率的方向,向量的模,就是變化率的大小。
從這個角度看,
梯度也就是函式在某一點最大的方向導數,函式沿梯度方向函式有最大的變化率。
最後我們回到梯度下降法:
既然在變數空間的某一點處,函式沿梯度方向具有最大的變化率,那麼在優化目標函式的時候,自然是沿著負梯度方向去減小函式值,以此達到我們的優化目標。
如何沿著負梯度方向減小函式值呢?既然梯度是偏導數的集合,如下:
同時梯度和偏導數都是向量,那麼參考向量運算法則,我們在每個變數軸上減小對應變數值即可,梯度下降法可以描述如下
以上是梯度下降法的一種理解方式,當然,也可以通過泰勒公式對目標函式進行展開推倒得到。
我們回到最開始的地方,為什麼會有梯度下降法? 梯度下降其實是求解無約束最優化問題的一種常用方法,那麼什麼是無約束最優化問題,以及還有哪些其他方法可以解決這一問題呢? 這些問題另起一篇文章解讀。
接下來,會做一些梯度下降的**測試。
理解梯度下降法
梯度下降法是求解無約束最優問題中常用到的一種學習方法,形式簡單,屬於一階收斂,在空間進行線性搜尋。在前面講到的邏輯斯蒂回歸模型中,就常用到梯度下降法來學習引數。首先給出問題定義 統計學習方法附錄a 假設f x 是rn 上具有一階連續偏導的函式,求解的目標問題如下 mi nx r nf x x 表示目...
梯度下降法(一)入門
梯度下降法 是乙個一階 最優化演算法 通常也稱為 最速下降法 我之前也沒有關注過這類演算法。最近,聽史丹福大學的機器學習課程時,碰到了用梯度下降演算法求解線性回歸問題,於是看了看這類演算法的思想。今天只寫了一些入門級的知識。我們知道,函式的曲線如下 程式設計實現 c code cpp view pl...
梯度下降法的數學原理
梯度下降法又稱最速下降法,是求解無約束最優化問題的一種最常用的方法,在對損失函式最小化時經常使用。梯度下降法是一種迭代演算法。選取適當的初值x 0 不斷迭代,更新x的值,進行目標函式的極小化,直到收斂。由於負梯度方向時使函式值下降最快的方向,在迭代的每一步,以負梯度方向更新x的值,從而達到減少函式值...