
梯度下降算法的公式非常簡單,”沿着梯度的反方向(坡度最陡)“是我們日常經驗得到的,其本質的原因到底是什麼呢?為什麼局部下降最快的方向就是梯度的負方向呢?也許很多朋友還不太清楚。沒關系,接下來我将以通俗的語言來詳細解釋梯度下降算法公式的數學推導過程。
下山問題
假設我們位于黃山的某個山腰處,山勢連綿不絕,不知道怎麼下山。于是決定走一步算一步,也就是每次沿着目前位置最陡峭最易下山的方向前進一小步,然後繼續沿下一個位置最陡方向前進一小步。這樣一步一步走下去,一直走到覺得我們已經到了山腳。這裡的下山最陡的方向就是梯度的負方向。
首先了解什麼是梯度?通俗來說,梯度就是表示某一函數在該點處的方向導數沿着該方向取得最大值,即函數在目前位置的導數。
上式中,θ是自變量,f(θ)是關于θ的函數,θ表示梯度。
如果函數f(θ)是凸函數,那麼就可以使用梯度下降算法進行優化。梯度下降算法的公式我們已經很熟悉了:
其中,θo是自變量參數,即下山位置坐标,η是學習因子,即下山每次前進的一小步(步進長度),θ是更新後的θo,即下山移動一小步之後的位置。
一階泰勒展開式
這裡需要一點數學基礎,對泰勒展開式有些了解。簡單地來說,一階泰勒展開式利用的就是函數的局部線性近似這個概念。我們以一階泰勒展開式為例:、
凸函數f(θ)的某一小段[θo,θ]由上圖黑色曲線表示,可以利用線性近似的思想求出f(θ)的值,如上圖紅色直線。該直線的斜率等于f(θ)在θo處的導數。則根據直線方程,很容易得到f(θ)的近似表達式為:
這就是一階泰勒展開式的推導過程,主要利用的數學思想就是曲線函數的線性拟合近似。
梯度下降數學原理
知道了一階泰勒展開式之後,接下來就是重點了!我們來看一下梯度下降算法是如何推導的。
先寫出一階泰勒展開式的表達式:
上面這個不等式非常重要!v和∇f(θo)都是向量,∇f(θo)是目前位置的梯度方向,v表示下一步前進的機關向量,是需要我們求解的,有了它,就能根據vθ−θo=ηv确定θ值了。
||A||和||B||均為标量,在||A||和||B||确定的情況下,隻要cos(α)=−1,即A和B完全反向,就能讓A和B的向量乘積最小(負最大值)。
顧名思義,當v與∇f(θo)互為反向,即v為目前梯度方向的負方向的時候,能讓v⋅∇f(θo)最大程度地小,也就保證了v的方向是局部下降最快的方向。
知道v是∇f(θo)的反方向後,可直接得到:
之是以要除以∇f(θo)的模||∇f(θo)||,是因為v是機關向量。
求出最優解v之後,帶入到θ−θo=ηv中,得:
總結
我們通過一階泰勒展開式,利用線性近似和向量相乘最小化的思想搞懂了梯度下降算法的數學原理。也許你之前很熟悉梯度下降算法,但也許對它的推導過程并不清楚。看了本文,你是否有所收獲呢?