摘要

SGD(Stochastic Gradient Descent, 梯度下降法)是求解最優解問題時常用的優化器, 其核心思想是, 每次迭代時沿著負梯度(梯度的反方向)前進, 經過多次迭代後到達一個較小函數值的參數點處. 為什麼是沿著負梯度方向而不是其他的方向進行前進呢? 本文從梯度的數學定義出發來回答這個問題. 本文組織如下:

  1. 闡述方嚮導數的定義;
  2. 闡述方嚮導數與梯度的關係;
  3. 為何負梯度是函數值減小的最快方向;
  4. 總結.

校對: @王鐵柱


方嚮導數

熟悉微積分的同學都知道, 導數是描述函數隨自變數變化快慢的數學定義. 如果此時的函數為多元函數, 該如何描述函數的變化快慢? 設 f(x_{1}, ..., x_{n}) 是定義在 R^{n} 中的多元函數, 其自變數為 x = (x_{1}, ..., x_{n}), 在其定義域 D 上, 函數 f 可以沿任意方向進行運動變化, 而且沿著不同方向通常有不同的變化率, 因此, 在描述多元函數變化快慢時, 我們不僅要描述其變化的大小, 還要描述其變化的方向. 在數學上, 我們有如下定義:

設點 p_{0} in D 是函數 f 定義域中的一點, p in D 是一個動點, 向量 vec{l} 是一個非零向量, 其方向與向量 vec{p_{0}p} 始終保持一致, 用於描述 vec{p_{0}p} 的方向. 如果以下極限

lim_{left| vec{p_{0}p} 
ight| 
ightarrow 0}{frac{f(p)-f(p_{0})}{left| vec{p_{0}p} 
ight|}} 	ag1

存在, 我們便稱其為函數 f 在點 p_{0} 沿著方向 vec{l} 的方嚮導數, 記為 frac{partial{f}}{partial{l}} Biggllvert_{p_{0}} , 它描述的便是函數 fp_{0} 沿著 vec{l} 變化的快慢. 可能有的同學已經發現了, 這個定義與導數的定義類似, 都是函數的變化量與自變數變化量的比值的極限, 只是在多元函數情況下, 我們還需要指出函數變化時所沿襲的方向. 有了方嚮導數, 我們就可以來看看函數沿著什麼方向變化最快最慢了.

方嚮導數與梯度的關係

方嚮導數和我們關心的梯度有什麼關係呢? 我們先來回顧梯度的定義: 函數 f(x_{1},...,x_{n}) 在點 x=(x_{1},...,x_{n}) 的梯度為


abla{f} =(frac{partial{f}}{partial{x_{0}}}, ..., frac{partial{f}}{partial{x_{n}}}) 	ag2

梯度本身是一個向量, 其每個分量分別描述了函數 f 沿坐標系的每個數軸的變化率. 而由泰勒展開我們可以得到如下展開式

f(p)-f(p_{0}) = mathbf{
abla f}^	op (p-p_{0}) + o(left| vec{p_{0}p} 
ight|) 	ag3

其中,  mathbf{
abla f} 是函數 f 在點 p_{0} 處的梯度. 由泰勒展開式(3)我們可以得到函數 f 在點 p_{0}, p 之間的函數變化量與梯度 mathbf{
abla f} 之間的關係, 我們可由此構造出其方嚮導數與梯度之間的關係式. 對泰勒展開式(3)兩邊同時除以 left| vec{p_{0}p} 
ight| 並取極限, 可得

egin{align} lim_{left| vec{p_{0}p} 
ight| 
ightarrow 0}{frac{f(p)-f(p_{0})}{left| vec{p_{0}p} 
ight|}} & = lim_{left| vec{p_{0}p} 
ight| 
ightarrow 0} Biggl[  frac{ mathbf{
abla f}^	op (p-p_{0})}{left| vec{p_{0}p} 
ight|} + frac{o(left| vec{p_{0}p} 
ight|)}{left| vec{p_{0}p} 
ight|}  Biggl] \ & = lim_{left| vec{p_{0}p} 
ight| 
ightarrow 0} mathbf{
abla f}^	op cdot frac{(p-p_{0})}{left| vec{p_{0}p} 
ight|} 	ag4 end{align}

其中, mathbf{
abla f}^	op 為函數f在點 p_0 處的梯度, 令 p-p_{0} = vec{p_{0}p} , 由(4)可得

frac{partial{f}}{partial{l}} Biggllvert_{p_{0}} = mathbf{
abla f}^	op cdot frac{vec{p_{0}p}}{left| vec{p_{0}p} 
ight|} 	ag5

為何負梯度是函數值減小的最快方向

由(5)我們可以看出, 函數在點 p_{0} 處的沿方向 vec{l} 的方嚮導數, 等於函數在該點處的梯度對方向 vec{l} 上的單位向量的投影. 為了使這個結論更加清晰, 我們對(5)做進一步解析. 我們令 frac{vec{p_{0}p}}{left| vec{p_{0}p} 
ight|} = (cos(	heta_{1}), ..., cos(	heta_{n})) , 這被稱為方向餘弦, 可以用此單位向量來進行方向的描述, 顯然有 sum_{i=1}^{n}cos(	heta_{i})^{2} = 1. 則(5)可進一步表示成如下

frac{partial{f}}{partial{l}} Biggllvert_{p_{0}}  = frac{partial{f}}{partial{x_1}} cdot cos(	heta_{1}) + ... + frac{partial{f}}{partial{x_n}} cdot cos(	heta_{n}) 	ag6

由向量內積公式, 可得

frac{partial{f}}{partial{l}} Biggllvert_{p_{0}}  = left| mathbf{
abla{f}} 
ight| cdot cos(<mathbf{
abla{f}}, vec{l}>) 	ag7

由Schwarz公式和(7), 可得

Biggllvert frac{partial{f}}{partial{l}} Biggllvert_{p_{0}} Biggl
vert = mathbf{
abla{f}^	op} cdot  frac{vec{p_{0}p}}{left| vec{p_{0}p} 
ight|} = left| mathbf{
abla{f}} 
ight| cdot cos(<mathbf{
abla{f}}, vec{l}>) leq left| mathbf{<br />
abla{f}^	op}<br />
ight| cdot Biggllvert frac{vec{p_{0}p}}{left| vec{p_{0}p}<br />
ight|}Biggl<br />
vert = left| mathbf{<br />
abla{f}^	op}<br />
ight| 	ag8

所以, 函數在點 p_0 處的最大方嚮導數是該點處的梯度, 即沿著梯度方向前進, 函數增長速率是最大的, 其速率為

igl| mathbf{
abla{f}} igr| =  sqrt{sum_{i=1}^{n}Bigg( frac{partial{f}}{partial{x_i}} Bigg)^2} 	ag9

而當方嚮導數正好與梯度反向時, 即 <mathbf{
abla{f}}, vec{l}>=pi , 則函數增加速率最小, 其速率為

egin{align} Biggl| frac{partial{f}}{partial{l}} Biggllvert_{p_{0}} Biggr| & = left| mathbf{
abla{f}} 
ight| cdot cos(<mathbf{
abla{f}}, vec{l}>) \ & =  left| mathbf{<br />
abla{f}}<br />
ight| cdot (-1) \ & = -  sqrt{sum_{i=1}^{n}Bigg( frac{partial{f}}{partial{x_i}} Bigg)^2} 	ag{10} end{align}

綜上, 我們可以得出負梯度是函數值減小的最快方向, 其大小為(10)所示.

值得注意的是, 那些與梯度(負梯度)垂直的方嚮導數, 即 <mathbf{
abla{f}}, vec{l}> = frac{pi}{2} , 函數沿著此類方嚮導數前進時不會發生變化, 而沿著此類方嚮導數前進便會形成等高線, 這也是為什麼描述梯度的圖像中, 梯度(負梯度)是與函數等高線垂直的.

梯度與等高線垂直圖

總結

SGD使用負梯度作為目標函數更新時的方向, 可在某一點處達到函數值下降最快的目的. 使用負梯度作為優化信息的演算法有一個大類, 但基本的思想都是圍繞著更加合理地利用負梯度信息進行展開.


引用

[1] "方嚮導數, 梯度". 復旦大學, 2019. math.fudan.edu.cn/gdsx/

[2] Wikipedia contributors, "Gradient,"Wikipedia, The Free Encyclopedia,en.wikipedia.org/w/inde(accessed February 25, 2019)


推薦閱讀:
相关文章