**梯度下降**係機械學習常用嘅一階疊代最佳化演算法、用嚟搵到可微函數局部最細值（local minimum）。呢個惗法所用到嘅係函數嘅斜率，或者係更高維度（有多個自變數）函數嘅梯度（gradient）或者近似梯度（approximate gradient）、啲表示個函數上升方向（對於斜率）或者最急上升方向（對於梯度）嘅。梯度下降即係喺當前點，喺斜率或者梯度個相反方向上重複執行𨂾步，因為呢個係最急嘅下降方向。相反，沿斜率或者梯度方向𨂾步會最急噉逐步達到呢個函數個局部最大值，噉樣就係**梯度上升**（gradient ascent）或者話係爬山演算法。

梯度下降通常歸因於Cauchy，佢喺1847年首次提出咗呢個觀點。 Hadamard喺1907年獨立噉提出咗一種類似嘅方法。  Haskell Curry於1944年首先研究咗嗰種方法對於非線性最佳化問題嘅收斂性；跟住，呢個方法嘅相關研究日益深入，方法本身亦都喺跟尾嘅幾十年中得到使用。  呢種方法，又經常叫做**最急/最坽下降法**（steepest descent）**。**

描述
--

一系列水平集上嘅梯度下降嘅插圖
梯度下降係基於噉樣嘅觀察，若果個多變量函數{\displaystyle F(\mathbf {x} )}喺一粒點{\displaystyle \mathbf {a} }嘅附近有定義同可微 ，係噉從{\displaystyle \mathbf {a} }去{\displaystyle F}喺{\displaystyle \mathbf {a} }嘅負梯度{\displaystyle -\nabla F(\mathbf {a} )}方向上 {\displaystyle F(\mathbf {x} )}下降最快。因此，若果對於一個夠細嘅{\displaystyle \gamma \in \mathbb {R} \_{+}}有下式：

{\displaystyle \mathbf {a} \_{n+1}=\mathbf {a} \_{n}-\gamma \nabla F(\mathbf {a} \_{n})}
即有{\displaystyle F(\mathbf {a\_{n}} )\geq F(\mathbf {a\_{n+1}} )} 。即係話，要從{\displaystyle \mathbf {a} }度劘走{\displaystyle \gamma \nabla F(\mathbf {a} )}，因為要逆梯度噉落到個局部最細值。考慮埋呢個觀察結果，從斷估值{\displaystyle \mathbf {x} \_{0}}開始搵{\displaystyle F}局部最細，並考慮序迾{\displaystyle \mathbf {x} \_{0},\mathbf {x} \_{1},\mathbf {x} \_{2},\ldots }係噉即有

{\displaystyle \mathbf {x} \_{n+1}=\mathbf {x} \_{n}-\gamma \_{n}\nabla F(\mathbf {x} \_{n}),\ n\geq 0.}
由於有一個單調序迾

{\displaystyle F(\mathbf {x} \_{0})\geq F(\mathbf {x} \_{1})\geq F(\mathbf {x} \_{2})\geq \cdots ,}
所以希望序迾{\displaystyle (\mathbf {x} \_{n})}收斂得到所需要嘅嗰個局部最細值。注意𨂾長個值{\displaystyle \gamma }允許喺每次疊代得到更改。借由喺函數{\displaystyle F}上嘅某啲假設 （譬如話，{\displaystyle F}凸函數同{\displaystyle \nabla F} Lipschitz式連續 ），與及特定揀出嘅{\displaystyle \gamma } （譬如話，透過滿足Wolfe條件嘅線搜索，又或者透過Barzilai–Borwein方法 ，如下所示），

{\displaystyle \gamma \_{n}={\frac {\left|\left(\mathbf {x} \_{n}-\mathbf {x} \_{n-1}\right)^{T}\left[\nabla F(\mathbf {x} \_{n})-\nabla F(\mathbf {x} \_{n-1})\right]\right|}{\left\|\nabla F(\mathbf {x} \_{n})-\nabla F(\mathbf {x} \_{n-1})\right\|^{2}}}}
函數就有保證收斂得到一個局部最細值。個函數{\displaystyle F}若果係凸嘅話，噉所有啲局部最細值又即係全局最細值，係噉喺呢種情況下，梯度下降可以收斂得到個全局解。

右邊幅附圖說明到呢個過程。嗰度假定{\displaystyle F}係喺平面上定義嘅，而且佢個圖形係成碗狀。藍色曲線係啲等高線，即線上啲{\displaystyle F}值係一樣嘅。紅色箭頭從一粒點出發表示呢粒點度嘅負梯度方向。注意，一粒點度嘅（負）梯度，正交於條經過佢嘅等高線。顯然，梯度下降會逐步指向隻碗嘅㞘底，喺嗰度函數{\displaystyle F}個值係最細嘅。

### 例碼

以下係用 Python 寫嘅一段梯度下降碼：

```
next\_x = 6  # We start the search at x=6
gamma = 0.01  # Step size multiplier
precision = 0.00001  # Desired precision of result
max\_iters = 10000  # Maximum number of iterations

# Derivative function
def df(x):
    return 4 \* x \*\* 3 - 9 \* x \*\* 2

for \_ in range(max\_iters):
    current\_x = next\_x
    next\_x = current\_x - gamma \* df(current\_x) # 睇吓個斜率係點。

    step = next\_x - current\_x
    if abs(step) <= precision:
        break

print("Minimum at ", next\_x)

# The output for the above will be something like
# "Minimum at 2.2499646074278457"

```

### 直觀類比

霧喺山上
以下個假設情景可以說明得到個梯度下降法後便嘅基本直觀解釋。一個人捱逼到喺山度並嘗試緊落山（即嘗試搵個全局最細值），但霧好大、能見度低之極。因此，落山條路係唔睇得到，係噉佢必須使用啲本地信息嚟搵到個最細值。噉樣即可以使用梯度下降嘅方法，包括睇返當前位置個坡嘅急度，然之後向最坽嘅下降方向（即落坡）前進。若果佢係嘗試要搵到山頂（即最高處）嘅，噉佢要朝最急嘅上升方向（即上坡）前進。用梯度下降嘅話，佢最終會搵到落山嘅路，或者可能韞喺某隻坑度（譬如話，局部最低點或者鞍點），譬如山底湖。但係，仲要假設埋透過簡單嘅觀察並唔立即睇得出山嶺嘅坽度，而係需要一種複雜嘅儀器嚟度量，而呢個人噉時碰啱擁有呢種儀器。用台儀器度山需要相當長嘅時間，因此若果佢想喺日落之前落得到山，佢應盡量減少使用呢台儀器。困難嘅點即係要減少使儀器但又避免行偏道，所以要好好噉揀返個頻率、佢量度個坡嘅坽度嘅。

呢種類比方法入便，人代表個演算法，而落山路徑代表參數設置嘅順序、個演算法要探索到嘅。山嶺嘅急度代表誤差表面個斜率（slope）喺粒點度。用嚟度量急度嘅儀器係微分（透過獲取呢粒點嘅平方誤差函數（squared error function）個導數可以計算得到誤差表面個斜率）。佢揀行進方向就對返呢粒點嘅誤差表面嘅梯度，佢喺進行另一次度量之前經過嘅時間就係𨂾長。

### 函數例

梯度下降喺啲病態函數（pathological functions）方面會面臨到問題，譬如呢度顯示到嘅Rosenbrock函數。

{\displaystyle f(x\_{1},x\_{2})=(1-x\_{1})^{2}+100(x\_{2}-x\_{1}^{2})^{2}.}
Rosenbrock函數有一個迫窄嘅彎谷，其中包含有嗰個最細值。山谷嘅㞘底好平坦。由於條谷彎曲又平，個最佳化過程係以細𨂾長向個最細值之字噉行。

梯度下降算法在起作用。 （1：輪廓）梯度下降算法在起作用。 （2：表面）

梯度下降法嘅之字步性質喺下低個例當中都好明顯，個應用到個方法嘅函數係：

{\displaystyle F(x,y)=\sin \left({\frac {1}{2}}x^{2}-{\frac {1}{4}}y^{2}+3\right)\cos \left(2x+1-e^{y}\right).}
### 揀𨂾長同下降方向

由於使用𨂾長{\displaystyle \gamma }太細會減慢收斂，{\displaystyle \gamma }太大會導致分散（divergence），點樣搵到啱嘅{\displaystyle \gamma }係一個重要嘅實際問題。Philip Wolfe仲主張使用「clever choices of the [descent] direction」喺實踐當中。雖然使用偏離最急下降方向嘅方向好似違反咗直覺，但個惗法係透過保持更長嘅距離就可以補償返個細斜率。

數學上說明，使用一個方向{\displaystyle \mathbf {p} \_{n}}同𨂾長{\displaystyle \gamma \_{n}}並考慮更加一般嘅更新：

{\displaystyle \mathbf {a} \_{n+1}=\mathbf {a} \_{n}-\gamma \_{n}\,\mathbf {p} \_{n}} 。
搵啱嘅設置畀{\displaystyle \mathbf {p} \_{n}}同{\displaystyle \gamma \_{n}}需要一啲思考。首先，希望係個更新方向係指向落坡嘅。數學上，令{\displaystyle \theta \_{n}}表示{\displaystyle \nabla F(\mathbf {a\_{n}} )}同{\displaystyle \mathbf {p} \_{n}}之間嘅角度，呢個要求{\displaystyle \cos \theta \_{n}>0}。詳細講即需要關於最佳化嘅目標函數嘅更多信息。喺相當弱嘅假設下{\displaystyle F}係連續可微得嘅，可以證明得到： 


|  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- |
| {\displaystyle F(\mathbf {a} \_{n+1})\leq F(\mathbf {a} \_{n})-\gamma \_{n}\|\nabla F(\mathbf {a} \_{n})\|\_{2}\|\mathbf {p} \_{n}\|\_{2}\left[\cos \theta \_{n}-\max \_{t\in [0,1]}{\frac {\|\nabla F(\mathbf {a} \_{n}-t\gamma \_{n}\mathbf {p} \_{n})-\nabla F(\mathbf {a} \_{n})\|\_{2}}{\|\nabla F(\mathbf {a} \_{n})\|\_{2}}}\right]} | 

|  |  |  |
| --- | --- | --- |
|   |   |   |
|   |

 | **(1)** |

呢條不等式意指，函數{\displaystyle F}嘅減少程度可以確定得到，即睇返方括號兩䊆嘢大細。方括號度嘅第一項度量嘅係角度，係下降方向戥負梯度之間嘅角度。第二項度量嘅係速度，即梯度沿下降方向變化嘅速度。

原則上，不等式（1）可以喺{\displaystyle \mathbf {p} \_{n}}同{\displaystyle \gamma \_{n}}最佳化，嚟揀𨂾長同方向。問題係，評估方括號度第二項需要評估埋{\displaystyle \nabla F(\mathbf {a} \_{n}-t\gamma \_{n}\mathbf {p} \_{n})}，而且額外嘅梯度評估通常好耗資源而且唔受歡迎 。一啲方法嚟解決呢個問題嘅有：

* 透過設置{\displaystyle \mathbf {p} \_{n}=\nabla F(\mathbf {a\_{n}} )}放棄clever嘅下降方向嘅優勢 ，然之後使用線搜索搵到啱嘅𨂾長{\displaystyle \gamma \_{n}}，譬如滿足Wolfe條件嘅嗰啲。
* 假如話{\displaystyle F}係兩次可微分得嘅，使用佢個Hessian矩陣{\displaystyle \nabla ^{2}F}估計{\displaystyle \|\nabla F(\mathbf {a} \_{n}-t\gamma \_{n}\mathbf {p} \_{n})-\nabla F(\mathbf {a} \_{n})\|\_{2}\approx \|t\gamma \_{n}\nabla ^{2}F(\mathbf {a} \_{n})\mathbf {p} \_{n}\|}，然之後透過最佳化不等式（1）揀返{\displaystyle \mathbf {p} \_{n}}同{\displaystyle \gamma \_{n}}。
* 假如話{\displaystyle \nabla F}係Lipschitz ，使用佢個Lipschitz常數{\displaystyle L}綁定{\displaystyle \|\nabla F(\mathbf {a} \_{n}-t\gamma \_{n}\mathbf {p} \_{n})-\nabla F(\mathbf {a} \_{n})\|\_{2}\leq Lt\gamma \_{n}\|\mathbf {p} \_{n}\|}，然之後透過最佳化不等式（1）揀返{\displaystyle \mathbf {p} \_{n}}同{\displaystyle \gamma \_{n}}。
* 幫{\displaystyle F} 建立一個自定義模型{\displaystyle \max \_{t\in [0,1]}{\frac {\|\nabla F(\mathbf {a} \_{n}-t\gamma \_{n}\mathbf {p} \_{n})-\nabla F(\mathbf {a} \_{n})\|\_{2}}{\|\nabla F(\mathbf {a} \_{n})\|\_{2}}}}，然之後透過最佳化不等式（1）揀返{\displaystyle \mathbf {p} \_{n}}同{\displaystyle \gamma \_{n}}。
* 喺函數{\displaystyle F}上有更強嘅假設嘅話，譬如有凸性質，可以實現到先進啲嘅方法，譬如快速梯度下降。

通常，按照上述方法之一，可以保證收斂得到個局部最細值。函數{\displaystyle F}若果係凸嘅，噉所有啲局部最細值亦即係啲全局最細值，係噉喺呢種情況下，梯度下降可以收斂得到全局解。

線性系統嘅解
------

應用嚟Wiener濾波器嘅最速下降演算法
梯度下降可用嚟求解線性方程組，

{\displaystyle A\mathbf {x} -\mathbf {b} =0}
可以重新表述為二次最細化問題（quadratic minimization problem）。若果系統矩陣{\displaystyle A}係實對稱而且正定（positive-definite）嘅，通常最細化嘅二次函數為

{\displaystyle F(\mathbf {x} )=\mathbf {x} ^{T}A\mathbf {x} -2\mathbf {x} ^{T}\mathbf {b} ,}
係噉有

{\displaystyle \nabla F(\mathbf {x} )=2(A\mathbf {x} -\mathbf {b} ).}
對於一般嘅實數矩陣{\displaystyle A} ，線性最細二乘法定義

{\displaystyle F(\mathbf {x} )=\left\|A\mathbf {x} -\mathbf {b} \right\|^{2}.}
喺傳統嘅線性最細二乘法中使到歐幾里得範數幫實嘅{\displaystyle A}同{\displaystyle \mathbf {b} }計，有：

{\displaystyle \nabla F(\mathbf {x} )=2A^{T}(A\mathbf {x} -\mathbf {b} ).}
呢個行搜索嘅最細化，嚟搵每次疊代局部最佳𨂾長{\displaystyle \gamma }嘅，對二次函數可以解析噉執行得到，而且針對局部最佳{\displaystyle \gamma }嘅顯式公式都可以噉樣知到。

譬如話，對於實對稱同正定矩陣{\displaystyle A} ，一個簡單嘅演算法可以如下：

{\displaystyle {\begin{aligned}&{\text{repeat in the loop:}}\\&\qquad \mathbf {r} :=\mathbf {b} -\mathbf {Ax} \\&\qquad \gamma :={\mathbf {r} ^{\mathsf {T}}\mathbf {r} }/{\mathbf {r} ^{\mathsf {T}}\mathbf {Ar} }\\&\qquad \mathbf {x} :=\mathbf {x} +\gamma \mathbf {r} \\&\qquad {\hbox{if }}\mathbf {r} ^{\mathsf {T}}\mathbf {r} {\text{ is sufficiently small, then exit loop}}\\&{\text{end repeat loop}}\\&{\text{return }}\mathbf {x} {\text{ as the result}}\end{aligned}}}
避免每疊代兩次乘埋{\displaystyle A}，注意到{\displaystyle \mathbf {x} :=\mathbf {x} +\gamma \mathbf {r} }暗指{\displaystyle \mathbf {r} :=\mathbf {r} -\gamma \mathbf {Ar} } ，即畀到傳統演算法：

{\displaystyle {\begin{aligned}&\mathbf {r} :=\mathbf {b} -\mathbf {Ax} \\&{\text{repeat in the loop:}}\\&\qquad \gamma :={\mathbf {r} ^{\mathsf {T}}\mathbf {r} }/{\mathbf {r} ^{\mathsf {T}}\mathbf {Ar} }\\&\qquad \mathbf {x} :=\mathbf {x} +\gamma \mathbf {r} \\&\qquad {\hbox{if }}\mathbf {r} ^{\mathsf {T}}\mathbf {r} {\text{ is sufficiently small, then exit loop}}\\&\qquad \mathbf {r} :=\mathbf {r} -\gamma \mathbf {Ar} \\&{\text{end repeat loop}}\\&{\text{return }}\mathbf {x} {\text{ as the result}}\end{aligned}}}
呢個方法好少用嚟求解線性方程，共軛梯度法（conjugate gradient method）係最受歡迎嘅替代方法之一。梯度下降疊代嘅次數通常正比於系統矩陣{\displaystyle A}嘅頻譜條件數{\displaystyle \kappa (A)}（spectral condition number） （{\displaystyle A^{T}A}最大特徵值比上最細特徵值 ）。之不過共軛梯度法嘅收斂性通常係由個條件數嘅平方根決定，係噉速度要快得多。兩種方法都可以透過預處理（preconditioning）受益；喺呢種情況下，梯度下降可能需要少啲假設喺個預處理器上。

非線性系統嘅解
-------

梯度下降亦都可以用嚟求解非線性方程組。以下示例顯示到點樣使用梯度下降法求解三個未知變量*x*1 ，*x*2同*x*3 。呢個示例顯示咗梯度下降嘅一次疊代。

考慮非線性方程組

{\displaystyle {\begin{cases}3x\_{1}-\cos(x\_{2}x\_{3})-{\tfrac {3}{2}}=0\\4x\_{1}^{2}-625x\_{2}^{2}+2x\_{2}-1=0\\\exp(-x\_{1}x\_{2})+20x\_{3}+{\tfrac {10\pi -3}{3}}=0\end{cases}}}
引入相關嘅函數

{\displaystyle G(\mathbf {x} )={\begin{bmatrix}3x\_{1}-\cos(x\_{2}x\_{3})-{\tfrac {3}{2}}\\4x\_{1}^{2}-625x\_{2}^{2}+2x\_{2}-1\\\exp(-x\_{1}x\_{2})+20x\_{3}+{\tfrac {10\pi -3}{3}}\\\end{bmatrix}},}
其中

{\displaystyle \mathbf {x} ={\begin{bmatrix}x\_{1}\\x\_{2}\\x\_{3}\\\end{bmatrix}}.}
係噉可以定義個目標函數：

{\displaystyle F(\mathbf {x} )={\frac {1}{2}}G^{\mathrm {T} }(\mathbf {x} )G(\mathbf {x} )={\frac {1}{2}}\left[\left(3x\_{1}-\cos(x\_{2}x\_{3})-{\frac {3}{2}}\right)^{2}+\left(4x\_{1}^{2}-625x\_{2}^{2}+2x\_{2}-1\right)^{2}+\left(\exp(-x\_{1}x\_{2})+20x\_{3}+{\frac {10\pi -3}{3}}\right)^{2}\right],}
嘗試將佢最細化。初步斷估，使用

{\displaystyle \mathbf {x} ^{(0)}=\mathbf {0} ={\begin{bmatrix}0\\0\\0\\\end{bmatrix}}.}
已知

{\displaystyle \mathbf {x} ^{(1)}=\mathbf {0} -\gamma \_{0}\nabla F(\mathbf {0} )=\mathbf {0} -\gamma \_{0}J\_{G}(\mathbf {0} )^{\mathrm {T} }G(\mathbf {0} ),}
Jacobian矩陣{\displaystyle J\_{G}}藉由噉樣得出：

{\displaystyle J\_{G}(\mathbf {x} )={\begin{bmatrix}3&\sin(x\_{2}x\_{3})x\_{3}&\sin(x\_{2}x\_{3})x\_{2}\\8x\_{1}&-1250x\_{2}+2&0\\-x\_{2}\exp {(-x\_{1}x\_{2})}&-x\_{1}\exp(-x\_{1}x\_{2})&20\\\end{bmatrix}}.}
計算：

{\displaystyle J\_{G}(\mathbf {0} )={\begin{bmatrix}3&0&0\\0&2&0\\0&0&20\end{bmatrix}},\qquad G(\mathbf {0} )={\begin{bmatrix}-2.5\\-1\\10.472\end{bmatrix}}.}
因此有：

{\displaystyle \mathbf {x} ^{(1)}=\mathbf {0} -\gamma \_{0}{\begin{bmatrix}-7.5\\-2\\209.44\end{bmatrix}},}
{\displaystyle F(\mathbf {0} )=0.5\left((-2.5)^{2}+(-1)^{2}+(10.472)^{2}\right)=58.456.}
呢個動畫顯示咗梯度下降嘅前83次疊代。曲面係{\displaystyle F(\mathbf {x} ^{(n)})}嘅等值面，喺目前嘅猜測{\displaystyle \mathbf {x} ^{(n)}}度，箭頭表示下降方向。由於𨂾長細又恆定，收斂係幾慢。
必須搵到一個啱嘅{\displaystyle \gamma \_{0}}，嚟令到滿足以下條式：

{\displaystyle F\left(\mathbf {x} ^{(1)}\right)\leq F\left(\mathbf {x} ^{(0)}\right)=F(\mathbf {0} ).}
呢項工可以透過多種線搜索演算法當中任意一種來完成。其中可以斷估{\displaystyle \gamma \_{0}=0.001,} 得到

{\displaystyle \mathbf {x} ^{(1)}={\begin{bmatrix}0.0075\\0.002\\-0.20944\\\end{bmatrix}}.}
喺呢個值之下評估個目標函數，得出：

{\displaystyle F\left(\mathbf {x} ^{(1)}\right)=0.5\left((-2.48)^{2}+(-1.00)^{2}+(6.28)^{2}\right)=23.306.}
從{\displaystyle F(\mathbf {0} )=58.456}減少到下一步嘅值，

{\displaystyle F\left(\mathbf {x} ^{(1)}\right)=23.306}
係針對目標函數嘅一次大幅下降。跟尾啲𨂾步會進一步降低佢個值，直至搵到呢個系統嘅近似解。

評
-

梯度下降可以喺任意多個維度嘅空間度發揮作用，甚至喺無限維度嘅空間度又得。喺後一種情況下，搜索空間通常係一個函數空間，而且計算要最細化嘅函數嘅Fréchet導數嚟確定下降方向。

嗰種梯度下降、嗰種喺任何數量（至少係有限）嘅維度上都起到作用嘅，可以認為係Cauchy-Schwarz不等式嘅一種結果。文章證明，任意維度兩枚矢量共線嗰陣，佢哋內積（點積）嘅幅值（大細）會最大化。喺梯度下降嘅情況下，噉樣就係自變數啲調整（adjustments）嘅嗰個向量成比於啲偏導數個梯度向量嘅情況。

若果畀定函數喺唔同方向上啲曲率（curvature）非常之唔同，噉梯度下降可能需要多次疊代先至可以喺所需嘅精度計出一個局部最細值。對於此類函數，預處理可以改變空間嘅幾何形狀，係噉似同心圓一樣整出啲函數水平集（function level sets），進而解決得到太慢收斂嘅問題。但係，構造同應用預處理可能會喺計算上花銷好大。

梯度下降可以結合埋線搜索，搵到每次疊代中局部最優𨂾長{\displaystyle \gamma }。執行線搜索可能好耗時。相反，使用固定嘅細{\displaystyle \gamma }會產生曳啲嘅收斂性。

啲基於牛頓法同埋基於藉由共軛梯度法反演Hessian矩陣嘅方法可能係愈發好嘅替代方案。 通常嚟講，呢類方法收斂嘅疊代次數少啲，但每次疊代嘅成本高啲。一個示例係BFGS方法，呢個方法𨂾親步都計一個矩陣，將矩陣乘埋梯度矢量嚟到好啲嘅方向，再結合仲要複雜嘅線搜索演算法，嚟搵到{\displaystyle \gamma }個「最佳」值。對於啲大型問題、其中電腦內存占主導嘅，應使用有限內存方法（譬如L-BFGS）代替BFGS或者最急下降。

梯度下降可以睇作係應用歐拉法求解常微分方程（ODE）{\displaystyle x'(t)=-\nabla f(x(t))}成梯度流（gradient flow）。反過來，呢個方程式可以作為一種最佳控制器（optimal controller）畀到個控制系統{\displaystyle x'(t)=u(t)}，其中{\displaystyle u(t)}係攞回輸形式{\displaystyle u(t)=-\nabla f(x(t))}畀出 。

模改
--

梯度下降可以收斂返一個局部最細值，並喺鞍點週邊變慢。即使對於冇約束到嘅二次最細化（unconstrained quadratic minimization），梯度下降亦都會隨住疊代嘅進行而喺後續啲疊代當中變返之字形步進，噉樣就令到收斂緩慢。有好多種梯度下降嘅模改（modifications）已得到提出，嚟解決啲噉嘅缺陷。

### 快速梯度法

Yurii Nesterov提出咗一個簡單嘅模改，幫凸最佳化問題收斂得愈發快；呢種模改又得到咗進一步嘅一般化（generalized）。對於冇約束到嘅平滑問題（unconstrained smooth problems），呢個方法叫做快速梯度法（FGM）或者加速梯度法（AGM）。具體來講，若果微分函數{\displaystyle F}係凸嘅，{\displaystyle \nabla F}係Lipschitz ，而且唔假定到{\displaystyle F}係強凸嘅（strongly convex），噉喺每𨂾步{\displaystyle k}中生成到嘅嗰個目標值、目標值嘅誤差透過梯度下降法係有{\textstyle {\mathcal {O}}\left({\tfrac {1}{k}}\right)}嘅複雜度 。使用Nesterov加速技術，誤差就會以{\textstyle {\mathcal {O}}\left({\tfrac {1}{k^{2}}}\right)}嘅複雜度降低。已知損失函數下降比率{\displaystyle {\mathcal {O}}\left({k^{-2}}\right)}係最啱一階最佳化方法嘅。儘管如此，照舊有機會透過減細常數因子來改進個演算法。最佳化梯度法（OGM） 捉常數減少到1/2，係噉成爲咗一種最佳嘅一階方法攞嚟解決啲規模大嘅問題。

對於受約束或者唔平滑嘅問題，Nesterov嘅FGM叫做快速近端梯度法（FPGM），係近端梯度法嘅加速版。

### 動量或者重球法

為咗打破梯度下降嘅之字形，動量（momentum）或者重球（heavy ball）法使用咗一個動量項，類似於喺最細化函數值上滑動嘅重球，或者牛頓動力學當中喺保守力場裏頭透過粘性介質嘅質量運動。有動量嘅梯度下降識記得到個解嘅更新喺每次疊代當中，並將下一個更新確定為梯度同前個更新嘅線性組合而唔係好似完全依靠單純梯度噉。對於冇約束到嘅二次最細化，重球法嘅理論收斂速度界限係漸近噉相同於最佳共軛梯度法嘅。 

呢個技術用嚟隨機噉梯度下降並作為一種反向傳播算法嘅擴展、啲攞嚟訓練人工神經網絡嘅。

擴展
--

梯度下降可以得到擴展嚟處理啲數學約束，噉嘅話係透過包含埋一個到啲約束個集合嘅投影嚟實現到。僅衹喺啲投影可以喺電腦上有效噉計算得到嗰陣，呢種方法先至可行。喺適當嘅假設下，呢個方法可以收斂得到。個方法係一種特定情況，屬於針對啲單調包含（inclusions）（包括凸規劃同埋變分不等式）嘅前向–後褪算法。

睇埋
--

* 回溯線搜索
* 共軛梯度法
* 隨機梯度下降
* Rprop
* Delta規則
* Wolfe條件
* 預處理
* Broyden–Fletcher–Goldfarb–Shanno演算法
* Davidon–Fletcher–Powell公式
* Nelder–Mead法
* Gauss–Newton演算法
* 爬山演算法
* 量子退火

考
-

 

1. ↑  Hill Climbing Algorithms (and gradient descent variants) IRL 互聯網檔案館嘅歸檔，歸檔日期2020年3月27號，..
2. ↑  Lemaréchal, C. (2012). "Cauchy and the Gradient Method" (PDF). *Doc Math Extra*: 251–254.
3. ↑  Hadamard, Jacques (1908). "Mémoire sur le problème d'analyse relatif à Véquilibre des plaques élastiques encastrées,". *Mémoires présentés par divers savants éstrangers à l'Académie des Sciences de l'Institut de France*. **33**.
4. ↑  Courant, Richard (January 1943). "Variational methods for the solution of problems of equilibrium and vibrations". *Bull. Amer. Math. Soc*. **49**: 1–23. doi:10.1090/S0002-9904-1943-07818-4 –透過Project Euclid.
5. ↑  Curry, Haskell B. (1944). "The Method of Steepest Descent for Non-linear Minimization Problems". *Quart. Appl. Math*. **2** (3): 258–261. doi:10.1090/qam/10667.
6. 1 2 3 4  Polyak, Boris (1987). *Introduction to Optimization* (英文).
7. 1 2  Akilov, G. P.; Kantorovich, L. V. (1982). *Functional Analysis* (第2版). Pergamon Press. ISBN 0-08-023036-9.
8. ↑  Barzilai, Jonathan; Borwein, Jonathan M. (1988). "Two-Point Step Size Gradient Methods". *IMA Journal of Numerical Analysis*. **8** (1): 141–148. doi:10.1093/imanum/8.1.141.
9. ↑  Fletcher, R. (2005). "On the Barzilai–Borwein Method". 出自 Qi, L.; Teo, K.; Yang, X. (編). *Optimization and Control with Applications*. Applied Optimization.第96卷. Boston: Springer. pp. 235–256. ISBN 0-387-24254-6.
10. ↑  Wolfe, Philip (1969-04-01). "Convergence Conditions for Ascent Methods". *SIAM Review*. **11** (2): 226–235. doi:10.1137/1011036. ISSN 0036-1445.
11. ↑  Bernstein. "On the distance between two neural networks and the stability of learning". `{{cite arxiv}}`: `|arxiv=` required (help)
12. ↑  Haykin, Simon S. Adaptive filter theory. Pearson Education India, 2008. - p. 108-142, 217-242
13. ↑  Saad, Yousef (2003). *Iterative methods for sparse linear systems* (第2版). Philadelphia, Pa.: Society for Industrial and Applied Mathematics. pp. 195. ISBN 978-0-89871-534-7.
14. 1 2  Bouwmeester, Henricus; Dougherty, Andrew; Knyazev, Andrew V. (2015). "Nonsymmetric Preconditioning for Conjugate Gradient and Steepest Descent Methods". *Procedia Computer Science*. **51**: 276–285. doi:10.1016/j.procs.2015.05.241.
15. ↑  Press, W. H.; Teukolsky, S. A.; Vetterling, W. T.; Flannery, B. P. (1992). *Numerical Recipes in C: The Art of Scientific Computing* (第2版). New York: Cambridge University Press. ISBN 0-521-43108-5.
16. ↑  Strutz, T. (2016). *Data Fitting and Uncertainty: A Practical Introduction to Weighted Least Squares and Beyond* (第2版). Springer Vieweg. ISBN 978-3-658-11455-8.
17. ↑  Ross, I. M. (2019-07-01). "An optimal control theory for nonlinear optimization". *Journal of Computational and Applied Mathematics* (英文). **354**: 39–51. doi:10.1016/j.cam.2018.12.044. ISSN 0377-0427.
18. ↑  Nesterov, Yu. (2004). *Introductory Lectures on Convex Optimization : A Basic Course*. Springer. ISBN 1-4020-7553-7.
19. ↑  Vandenberghe, Lieven (2019). "Fast Gradient Methods" (PDF). *Lecture notes for EE236C at UCLA*.
20. ↑  Kim, D.; Fessler, J. A. (2016). "Optimized First-order Methods for Smooth Convex Minimization". *Math. Prog.* **151** (1–2): 81–107. arXiv:1406.5468. doi:10.1007/s10107-015-0949-3. PMC 5067109. PMID 27765996.
21. ↑  Drori, Yoel (2017). "The Exact Information-based Complexity of Smooth Convex Minimization". *Journal of Complexity*. **39**: 1–16. arXiv:1606.01424. doi:10.1016/j.jco.2016.11.001.
22. ↑  Qian, Ning (January 1999). "On the momentum term in gradient descent learning algorithms" (PDF). *Neural Networks*. **12** (1): 145–151. CiteSeerX 10.1.1.57.5612. doi:10.1016/S0893-6080(98)00116-6. PMID 12662723. 原著 (PDF)喺8 May 2014歸檔. 喺17 October 2014搵到.
23. ↑  "Momentum and Learning Rate Adaptation". Willamette University. 喺17 October 2014搵到.
24. ↑  Combettes, P. L.; Pesquet, J.-C. (2011). "Proximal splitting methods in signal processing". 出自 Bauschke, H. H.; Burachik, R. S.; Combettes, P. L.; Elser, V.; Luke, D. R.; Wolkowicz, H. (編). *Fixed-Point Algorithms for Inverse Problems in Science and Engineering*. New York: Springer. pp. 185–212. arXiv:0912.3522. ISBN 978-1-4419-9568-1.

延伸閱讀
----

* Boyd, Stephen; Vandenberghe, Lieven (2004). "Unconstrained Minimization" (PDF). *Convex Optimization*. New York: Cambridge University Press. pp. 457–520. ISBN 0-521-83378-7.
* Chong, Edwin K. P.; Żak, Stanislaw H. (2013). "Gradient Methods". *An Introduction to Optimization* (第Fourth版). Hoboken: Wiley. pp. 131–160. ISBN 978-1-118-27901-4.
* Himmelblau, David M. (1972). "Unconstrained Minimization Procedures Using Derivatives". *Applied Nonlinear Programming*. New York: McGraw-Hill. pp. 63–132. ISBN 0-07-028921-2.

連出去
---

* 喺C ++，Boost，Ublas度使用梯度下降進行線性回歸
* 可汗學院嘅一系列視頻討論咗梯度上升
* 深度神經網絡環境下嘅喺線書教學梯度下降
* "Gradient Descent, How Neural Networks Learn". *3Blue1Brown*. October 16, 2017 –透過YouTube.

| * 睇
* 傾
* 改
機械學習同數據探勘 |
| --- |
| 可以睇埋機械學習詞彙同數據科學 |
| 基本概念 | 人工智能 · 學習 · 運算學習論 · 線性可分度 · 事前數據處理 · 特徵提取 · 知識表示 |  |
| 數學模型 | 

|  |
| --- |
| 迴歸模型 · 決策樹（蒙地卡羅樹搜尋） · 貝葉斯網絡 · 支援向量機 · 關聯規則學習 |
| 神經網絡 | 

|  |  |
| --- | --- |
| 網絡基礎 | 人工神經細胞 · 前饋網絡（感知機 · 多層感知機） |
| 遞迴網絡 | 霍菲特網絡 · 玻茲曼機 · 長短期記憶 · 神經圖靈機 |
| 深度學習 | 卷積網絡 · 受限玻茲曼機（深度信念網絡） · 深度強化學習 |
| 網絡概念 | 反向傳播算法 · 關注機制 · 生成對抗網絡 · 基於流嘅生成模型 |
| 自編碼器 · 脈衝神經網絡 · 自組織對映 · 網絡種類一覽 |

 |

 |
| 最佳化 | 誤差函數 · 爬山演算法 · 梯度下降法 · 全局最佳化 · 正則化 · 變分推斷 · 資訊最大化 |
| 學習範式 | 監督式學習 · 非監督式學習 · 強化學習 · 遺傳演算法 · 主動機械學習 |
| 模型評估 | 自助抽樣法 · 交叉驗證 · 訓練曲線 · 適合度函數 · 過適 |
| 主要應用 | 統計分類（線性分類機） · 表徵學習 · 降維（特徵選擇） · 聚類分析 · 異常檢測 |
| 拉雜相關 | 認知科學 · 電腦科學 · 統計學 · 資訊理論 · 資訊系統、資訊過多同大數據 |
| 機械學習類 · 數據探勘類 |