為什麼梯度反方向是函數值局部下降最快的方向?

剛接觸梯度下降這個概念的時候,是在學習機器學習演算法的時候,很多訓練演算法用的就是梯度下降,然後資料和老師們也說朝著梯度的反方向變動,函數值下降最快,但是究其原因的時候,很多人都表達不清楚。所以我整理出自己的理解,從方嚮導數這個角度把這個結論證明出來,讓我們知其然也知其所以然~

下面我一開始不提梯度的概念,完全根據自己的理解進行下文的梳理,一步一步推出梯度的來歷:

  • 導數

導數的幾何意義可能很多人都比較熟悉: 當函數定義域和取值都在實數域中的時候,導數可以表示函數曲線上的切線斜率。 除了切線的斜率,導數還表示函數在該點的變化率

將上面的公式轉化為下面圖像為:

(來自維基百科)

直白的來說,導數代表了在自變數變化趨於無窮小的時候,函數值的變化與自變數變化的比值代表了導數,幾何意義有該點的切線。物理意義有該時刻的(瞬時)變化率...

注意在一元函數中,只有一個自變數變動,也就是說只存在一個方向的變化率,這也就是為什麼一元函數沒有偏導數的原因。

  • 偏導數

既然談到偏導數,那就至少涉及到兩個自變數,以兩個自變數為例,z=f(x,y) . 從導數到偏導數,也就是從曲線來到了曲面. 曲線上的一點,其切線只有一條。但是曲面的一點,切線有無數條。

而我們所說的偏導數就是指的是多元函數沿坐標軸的變化率.

f_{x} (x,y)指的是函數在y方向不變,函數值沿著x軸方向的變化率

f_{y} (x,y)指的是函數在x方向不變,函數值沿著y軸方向的變化率

對應的圖像形象表達如下:

那麼偏導數對應的幾何意義是是什麼呢?

  • 偏導數f_{x} (x_{0},y_{0} )就是曲面被平面y=y_{0}所截得的曲面在點M_{0}處的切線M_{0}T_{x}對x軸的斜率
  • 偏導數f_{y} (x_{0},y_{0} )就是曲面被平面x=x_{0}所截得的曲面在點M_{0}處的切線M_{0}T_{y}對y軸的斜率

可能到這裡,讀者就已經發現偏導數的局限性了,原來我們學到的偏導數指的是多元函數沿坐標軸的變化率,但是我們往往很多時候要考慮多元函數沿任意方向的變化率,那麼就引出了方嚮導數.

  • 方嚮導數

終於引出我們的重頭戲了,方嚮導數,下面我們慢慢來走進它

假設你站在山坡上,相知道山坡的坡度(傾斜度)

山坡圖如下:

假設山坡表示為z=f(x,y),你應該已經會做主要倆個方向的斜率.

y方向的斜率可以對y偏微分得到.

同樣的,x方向的斜率也可以對x偏微分得到

那麼我們可以使用這倆個偏微分來求出任何方向的斜率(類似於一個平面的所有向量可以用倆個基向量來表示一樣)

現在我們有這個需求,想求出u方向的斜率怎麼辦.假設z=f(x,y)為一個曲面,p(x_{0} ,y_{0} )f定義域中一個點,單位向量u =costheta i+sintheta j的斜率,其中theta 是此向量與x軸正向夾角.單位向量u可以表示對任何方嚮導數的方向.如下圖:

那麼我們來考慮如何求出u 方向的斜率,可以類比於前面導數定義,得出如下:

f(x,y)為一個二元函數,u =costheta i+sintheta j為一個單位向量,如果下列的極限值存在

lim_{t rightarrow 0}{frac{f(x_{0}+tcostheta ,y_{0}+tsintheta )-f(x_{0},y_{0})}{t} } 此方嚮導數記為D_{u}f

則稱這個極限值是f沿著u方向的方嚮導數,那麼隨著theta 的不同,我們可以求出任意方向的方嚮導數.這也表明了方嚮導數的用處,是為了給我們考慮函數對任意方向的變化率.

在求方嚮導數的時候,除了用上面的定義法求之外,我們還可以用偏微分來簡化我們的計算.

表達式是D_{u}f(x,y)=f_{x}(x,y)costheta +f_{y}(x,y)sintheta (至於為什麼成立,很多資料有,不是這裡討論的重點)

那麼一個平面上無數個方向,函數沿哪個方向變化率最大呢?

目前我不管梯度的事,我先把表達式寫出來:

D_{u}f(x,y)=f_{x}(x,y)costheta +f_{y}(x,y)sintheta

A=(f_{x}(x,y) ,f_{y}(x,y)),I=(costheta ,sintheta )

那麼我們可以得到:

D_{u}f(x,y)=Abullet I=left| A right| *left| I right| cosalpha (alpha 為向量A與向量I之間的夾角)

那麼此時如果D_{u}f(x,y)要取得最大值,也就是當alpha 為0度的時候,也就是向量I(這個方向是一直在變,在尋找一個函數變化最快的方向)與向量A(這個方向當點固定下來的時候,它就是固定的)平行的時候,方嚮導數最大.方嚮導數最大,也就是單位步伐,函數值朝這個反向變化最快.

好了,現在我們已經找到函數值下降最快的方向了,這個方向就是和A向量相同的方向.那麼此時我把A向量命名為梯度(當一個點確定後,梯度方向是確定的),也就是說明了為什麼梯度方向是函數變化率最大的方向了!!!(因為本來就是把這個函數變化最大的方向命名為梯度)

我的理解是,本來梯度就不是橫空出世的,當我們有了這個需求(要求一個方向,此方向函數值變化最大),得到了一個方向,然後這個方向有了意義,我們給了它一個名稱,叫做梯度(純個人理解~希望對大家理解有幫助)歡迎知友提出問題交流~

推薦閱讀:

Caffe入門與實踐-簡介
1.7 重談多層神經網路與BP演算法實現
關於神經網路輸入標準化
用Python實現BP神經網路(附代碼)
什麼是 DQN (強化學習)

TAG:机器学习 | 梯度下降 | 神经网络 |