經過前一篇博客的簡單介紹,我們對導數、方向導數、梯度應該有一個較為清晰的認識。在知道梯度之后,我們就可以通過一些無約束的優化方法來求極值。
梯度下降法
梯度下降法(Gradient descent),顧名思義,就是自變量沿着梯度向量的反方向進行移動,因為梯度的方向是上升的方向。
對於一個 \(R^m \to R\) 的函數 \(y = f(\bm x)\),初始時 \(\bm x = \bm x^{(0)}\),我們想要得到函數 \(y = f(\bm x)\) 的極小值點 \(\bm x^*\),如果能夠求得 $ f(\bm x)$ 的梯度 \(\nabla f(\bm x)\),那么我們就可以用梯度下降法進行迭代求極小值的近似解。(還有不能求梯度的情況嗎?還真有,機器學習中如果輸入的數據有缺失,那么 loss function 求出的梯度中仍然會含有未知數,這個時候可以用 EM 算法求解)
記自變量 \(\bm x\) 在第 \(k\) 迭代后的值為 \(\bm x^{(k)}\),則自變量的更新公式為:
式(1)中,\(\alpha\) 為步長,在深度學習中被稱為學習率(learning rate),控制了梯度下降速度的快慢。
機器學習中的梯度下降法
梯度下降法和反向傳播算法是深度學習的基石,我們用梯度下降法更新神經網絡的參數,用反向傳播算法一層一層地將誤差由后向前傳播(就是用鏈式法則對 cost function 求偏導)。
如果我們定義 loss function 為
那么 cost function 就應該為
其中 \(n\) 為一次性計算 loss 的樣本個數,在深度學習中常常就是一個 batch 的大小。
cost function/loss function 中,自變量是神經網絡的權重,而我們的輸入數據是已知的,這個時候我們就可以用用式(4)更新參數了:
如果輸入樣本 \((\bm x_i, y_i)\) 中含有未知數怎么辦?數據缺失了怎么辦,在深度學習中,我們可能會選擇剔除或者補全數據,然后再輸入到神經網絡中。如果不補全缺失值,對式(3)算梯度,梯度中會含有未知數,這樣式(4)沒法更新參數。
假設訓練集中含有 \(N\) 個數據樣本,我們對式(3)中的 \(n\) 取不同值(即一次性計算 loss 的樣本個數取不同值),會有不同的影響。如果 \(n = 1\),這就是 stochastic gradient descent;如果 \(1 <n< N\),這就是 mini-batch gradient descent;(mini-batch 的 batch size 一般不會很大。)如果 \(n = N\),這就是 (batch) gradient descent。
最速下降法
最速下降法(Steepest descent)是梯度下降法的一種更具體實現形式,其理念為在每次迭代中選擇合適的步長 \(\alpha_k\),使得目標函數值能夠得到最大程度的減少。
每一次迭代,沿梯度的反方向,我們總可以找到一個 \(\bm x^{(k+1)} = \bm x^{(k)} - \alpha_k \nabla f(\bm x^{(k)})\),使得在這個方向上 \(f(\bm x^{(k+1)})\) 取最小值。即
有意思的是,最速下降法每次更新的軌跡都和上一次垂直。而且只要梯度 \(\nabla f(\bm x^{(k)}) \not = 0\),則 \(f(\bm x^{(k+1)}) < f(\bm x^{(k)})\)。(即梯度不等於 0 時,肯定會下降。)具體證明參見《最優化導論》 第8.2節。

二次型目標函數
二次型指的是 \(\bm x^{\top} Q \bm x\),\(Q\) 是一個對稱矩陣,\(\bm x\) 是列向量。當 \(Q\) 不是對稱矩陣時,我們可以做如下變換使其變為對稱矩陣:
當目標函數為二次型函數時,令目標函數為:
梯度函數為:
為表示方便,令 \(\bm g^{(k)} = \nabla f(\bm x^{(k)})\)。
黑塞矩陣為:
當目標函數為二次型函數時,我們可以算得每一步的步長取值為:
其中,梯度為 \(\bm g^{(k)} = \nabla f(\bm x^{(k)}) = Q\bm x^{(k)} - \bm b\)。
所以當目標函數為二次型函數時,最速下降法的迭代公式為:
牛頓法
在確定搜索方向時,梯度下降和最速下降只用到了目標函數的一階導數(梯度),而牛頓法(Newton's method)用到了二階(偏)導數。
Newton's method (sometimes called the Newton-Raphson method) uses first and second derivatives and indeed does perform better than the steepest descent method if the initial point is close to the minimizer.

牛頓法的基本思路是在每次迭代中,利用二次型函數來局部近似目標函數 \(f\),並求解近似函數的極小點作為下一個迭代點,牛頓法自變量 \(\bm x\) 的更新公式為:
其中 \(F(\bm x^{(k)})^{-1}\) 為二階偏導數矩陣的逆(即 黑塞矩陣的逆)。(為什么更新公式是這樣的?可以將 \(f(\bm x)\) 在 \(\bm x^{(k)}\) 處進行二階泰勒展開,然后求導。)
Newton's method has superior convergence properties if the starting point is near the solution. However, the method is not guaranteed to converge to the solution if we start far away from it (in fact, it may not even be well-defined because the Hessian may be singular).
當起始點 \(\bm x^{(0)}\) 離極值點 \(\bm x^*\) 足夠近的時候,式(6)的更新公式沒有問題。但是,當 \(\bm x^{(0)}\) 離極值點 \(\bm x^*\) 較遠時,我們並不能保證牛頓法能收斂到極值點。甚至,牛頓法可能都不是一個 descent 的方法,即可能 \(f(\bm x^{(k+1)}) \ge f(\bm x^{(k)})\)。幸運的是可以做一點修改,確保牛頓法是一個 descent 的方法。(黑塞矩陣如果不是正定的,那就要對牛頓法進行修正,如 Levenberg-Marquardt 修正。)
如果 黑塞 矩陣正定(\(F(\bm x^{(k)}) > 0\) ),並且 \(\nabla f(\bm x^{(k)}) \not = 0\),那么我們的搜索的方向為
要想從 \(\bm x^{(k)}\) 到 \(\bm x^{(k+1)}\) 是 descent direction,只要存在一個 \(\overline \alpha > 0\),使得所有 \(\alpha \in (0, \overline \alpha)\),滿足 \(f(\bm x^{(k)} + \alpha \bm d^{(k)}) < f(\bm x^{(k)})\)。
此時牛頓法的更新公式為:
對於 \(\alpha_k\),我們也可以在方向 \(\bm d^{(k)}\) 上進行線性搜索,使得 \(\alpha_k = \mathop{\arg\min}_{\alpha \ge 0} f(\bm x^{(k)} - \alpha F(\bm x^{(k)})^{-1}\nabla f(\bm x^{(k)}))\)。
這個時候,梯度下降法和牛頓法除了一個黑塞矩陣外,是不是超級像了。如果黑塞矩陣不是正定的,那就要對牛頓法進行修正,如 Levenberg-Marquardt 修正。
Levenberg-Marquardt 修正
如果 黑塞矩陣 $ F(\bm x^{(k)})$ 不正定,那么搜索方向 \(\bm d^{(k)} = - F(\bm x^{(k)})^{-1}\nabla f(\bm x^{(k)})\) 可能不會是下降方向。 牛頓法的 Levenberg-Marquardt 修正可以解決這個問題:
其中,\(\mu_k \ge 0\),\(\bm I\) 為單位矩陣。在該修正中, $ F(\bm x^{(k)})$ 可以不正定,但是 \(\bm G = F(\bm x^{(k)}) + \mu_k \bm I\) 需要是正定的,所以,取適當的 \(\mu_k\),使得 \(\bm G\) 正定即可。(矩陣正定,當前僅當所有特征值大於 0。)
\(\mu_k\) 過大也不行,否則就相當於步長取了很小的值。(逆過小或者是分母過大。)
梯度下降法和牛頓法誰快?
可能會有一個疑問,梯度下降法中梯度的反方向不是當前點下降最快的方向嗎,為什么牛頓法會收斂更快,牛頓法的更新方向更好嗎?
- 牛頓法是二階收斂,梯度下降法是一階收斂,所以牛頓法就更快。
- 更通俗地,梯度下降法只從當前位置選擇一個坡度最大的方向走一步,而牛頓法在選擇方向時,不僅會考慮坡度是否夠大,還會考慮走了一步后,坡度是否會變得更大。
- 從幾何上說,牛頓法就是用一個二次曲面去擬合當前位置的的局部曲面,而梯度下降法用的是一個平面去擬合,通常情況下,二次曲面的擬合會比平面更好,所以牛頓法選擇的下降路徑會更符合真實的最優下降路徑。
詳情參見 最優化問題中,牛頓法為什么比梯度下降法求解需要的迭代次數更少? -- 大餅土博。

Newton's method uses curvature information (i.e. the second derivative) to take a more direct route.
共軛方向法
共軛方向法的性能優於最速下降法,但不如牛頓法。
共軛方向法具有以下特性:
- 對於 n 維二次型問題,能夠在 n 步之內求得結果;
- 作為共軛方向法的典型代表,共軛梯度法不需要計算黑塞矩陣;
- 不需要存儲 \(n \times n\) 的矩陣,也不需要對其求逆。
考慮一個二次型函數 \(f(\bm x) = \frac{1}{2}\bm x^{\top} Q \bm x - \bm b^{\top} \bm x\),其中 \(\bm x \in \mathbb{R}^n\),\(Q = Q^{\top}>0\)。(這里沒有考慮非二次型問題中的共軛方向法/共軛梯度法,有需要的直接參考 《最優化導論》 10.4 節)
什么是共軛方向?
設 \(Q\) 為 \(n \times n\) 的正定對稱實矩陣,對於方向 \(\bm d^{(0)},\bm d^{(1)},\bm d^{(2)},... ,\bm d^{(n-1)}\),如果對於所有的 \(i \not = j\),有 \(d^{(i) \top} Q d^{(j)} = 0\),則稱它們是關於 \(Q\) 共軛的,且是線性無關的。
基本的共軛方向法
給定初始點 \(\bm x^{(0)}\) 和一組關於 \(Q\) 的共軛方向 \(\bm d^{(0)},\bm d^{(1)},\bm d^{(2)},... ,\bm d^{(n-1)}\),迭代公式如下:(\(k \ge 0\) 表示迭代次數)
上式和最速下降法的公式很像,當更新方向為梯度的方向,即 \(\bm d^{(k)} = - \bm g^{(k)}\) 時,共軛方向法和最速下降法就長得一模一樣了。當然,這一般是不可能的,共軛方向法要求更新方向是共軛的。
上式中 \(\alpha_k\) 的更新公式有個負號,但這個數是個正數,將 \(\bm d^{(k)} = - \bm g^{(k)}\) 帶入就可以知道。
共軛方向法的計算效率很高,但前提是給定一組 \(Q\) 共軛方向。共軛梯度法不需要提前給定一組 \(Q\) 共軛方向,而是隨着迭代的進行,逐一產生 \(Q\) 共軛方向。
共軛梯度法
作為共軛方向法的典型代表,共軛梯度法不同之處在於其 \(Q\) 共軛方向的獲取,每一次迭代,我們需要當場生成下一次迭代的方向:
按照如下方式選擇系數 \(\beta_k\),可以使得新生成的方向 \(\bm d^{(k+1)}\) 和之前的方向 \(\bm d^{(0)}, \bm d^{(1)}, ..., \bm d^{(k)}\) \(Q\) 共軛:
對於初始方向 \(\bm d^{(0)}\),直接用負梯度即可,即 \(\bm d^{(0)} = - \bm g^{(0)}\)。
擬牛頓法
牛頓法需要計算黑塞矩陣 \(F(\bm x^{(k)})\) 並且計算它的逆 \(F(\bm x ^ {(k)})^{ -1}\),求逆並不是很簡單。
為了避免 \(F(\bm x ^ {(k)})^{ -1}\) 這種矩陣求逆運算,可以通過設計 \(F(\bm x ^ {(k)})^{ -1}\) 的近似矩陣來代替 \(F(\bm x ^ {(k)})^{ -1}\),這就是擬牛頓法的基本思路。
在擬牛頓法中,\(F(\bm x ^ {(k)})^{ -1}\) 近似矩陣 \(\bm H_k\) 的構建只需要用到 目標函數值 和 梯度。
擬牛頓法的更新公式為:
擬牛頓法的更新方向 \(\bm d^{(k)} = -\bm H_k \nabla f(\bm x^{(k)})\),當目標函數為二次型時,這些方向其實也是關於 \(Q\) 共軛的,即擬牛頓法也是一種共軛方向法。
擬牛頓法的關鍵在於求出 \(\bm H_{k+1}\),給出 \(\bm H_k\)、梯度 \(f(\bm x^{(k)})\)、\(\bm d^{(k)}\)、\(\alpha_k\),找到 \(\bm H_{k+1}\) 的遞推式,那么在迭代過程中就不需要涉及到黑塞矩陣也不會求逆。
秩 1 修正公式
\(\bm H_{k+1}\) 的遞推式為:
其中,\(\Delta x^{(k)}=\alpha_{k} d^{(k)}\),\(\Delta \boldsymbol{g}^{(k)}=\boldsymbol{g}^{(k+1)}-\boldsymbol{g}^{(k)}\)。
\(\bm H_0\) 可以取任一對稱正定實矩陣。
References
Edwin K. P. Chong, Stanislaw H. Zak-An Introduction to Optimization, 4th Edition
最優化問題中,牛頓法為什么比梯度下降法求解需要的迭代次數更少? -- 大餅土博
Newton's method in optimization - Wikipedia
相關博客
【機器學習之數學】01 導數、偏導數、方向導數、梯度
【機器學習之數學】02 梯度下降法、最速下降法、牛頓法、共軛方向法、擬牛頓法
【機器學習之數學】03 有約束的非線性優化問題——拉格朗日乘子法、KKT條件、投影法