目錄html
通過前一篇博客的簡單介紹,咱們對導數、方向導數、梯度應該有一個較爲清晰的認識。在知道梯度以後,咱們就能夠經過一些無約束的優化方法來求極值。git
梯度降低法(Gradient descent),顧名思義,就是自變量沿着梯度向量的反方向進行移動,由於梯度的方向是上升的方向。github
對於一個 \(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)}\),則自變量的更新公式爲:
\[ \bm x^{(k+1)} = \bm x^{(k)} - \alpha \cdot \nabla f(\bm x^{(k)}) \tag{1} \]網絡
式(1)中,\(\alpha\) 爲步長,在深度學習中被稱爲學習率(learning rate),控制了梯度降低速度的快慢。app
梯度降低法和反向傳播算法是深度學習的基石,咱們用梯度降低法更新神經網絡的參數,用反向傳播算法一層一層地將偏差由後向前傳播(就是用鏈式法則對 cost function 求偏導)。機器學習
若是咱們定義 loss function 爲
\[ L(\bm w) = \bm g(\bm w; (\bm x, y)) = (y - \bm w^{\top} \bm x)^2 \tag{2} \]函數
那麼 cost function 就應該爲
\[ C(\bm w) = \frac{1}{n}\sum_{i = 1}^n L(\bm w) = \frac{1}{n} \sum_{i = 1}^n (y_i - \bm w^{\top} \bm x_i)^2 \tag{3} \]性能
其中 \(n\) 爲一次性計算 loss 的樣本個數,在深度學習中經常就是一個 batch 的大小。(也有人把 cost function 中的 \(\frac{1}{n}\) 改成 \(\frac{1}{n-1}\),這就是有偏估計和無偏估計,影響不大。)學習
cost function/loss function 中,自變量是神經網絡的權重,而咱們的輸入數據是已知的,這個時候咱們就能夠用用式(4)更新參數了:
\[ \bm w^{(k+1)} = \bm w^{(k)} - \alpha \cdot \nabla C(\bm w^{(k)}) \tag{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)})\) 取最小值。即
\[ \alpha_k = \mathop{\arg\min}_{\alpha \ge 0} f(\bm x^{(k)} - \alpha \nabla f(\bm x^{(k)})) \tag{5} \]
有意思的是,最速降低法每次更新的軌跡都和上一次垂直。並且只要梯度 \(\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 x^{\top} Q \bm x = \bm x^{\top} Q^{\top} \bm x = \bm x^{\top} ( \frac{1}{2}Q + \frac{1}{2}Q^{\top} )\bm x \]
當目標函數爲二次型函數時,令目標函數爲:
\[ f(\bm x) = \frac{1}{2}\bm x^{\top} Q \bm x - \bm b^{\top} \bm x \]
梯度函數爲:
\[ \nabla f(\bm x) = Q\bm x - \bm b \]
爲表示方便,令 \(\bm g^{(k)} = \nabla f(\bm x^{(k)})\)。
黑塞矩陣爲:
\[ F(\bm x) = Q = Q^{\top} \]
當目標函數爲二次型函數時,咱們能夠算得每一步的步長取值爲:
\[ \alpha_k = \frac{\bm g^{(k) \top} \bm g^{(k)}}{\bm g^{(k) \top}Q \bm g^{(k)}} \]
其中,梯度爲 \(\bm g^{(k)} = \nabla f(\bm x^{(k)}) = Q\bm x^{(k)} - \bm b\)。
因此當目標函數爲二次型函數時,最速降低法的迭代公式爲:
\[ \bm x^{(k+1)} = \bm x^{(k)} - \frac{\bm g^{(k) \top} \bm g^{(k)}}{\bm g^{(k) \top}Q \bm g^{(k)}} \bm g^{(k)} \]
在肯定搜索方向時,梯度降低和最速降低只用到了目標函數的一階導數(梯度),而牛頓法(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\) 的更新公式爲:
\[ \bm x^{(k+1)} = \bm x^{(k)} - F(\bm x^{(k)})^{-1}\nabla f(\bm x^{(k)}) \]
其中 \(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 d^{(k)} = - F(\bm x^{(k)})^{-1}\nabla f(\bm x^{(k)}) = \bm x^{(k+1)} - \bm x^{(k)} \]
要想從 \(\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)})\)。
此時牛頓法的更新公式爲:
\[ \bm x^{(k+1)} = \bm x^{(k)} - \alpha_kF(\bm x^{(k)})^{-1}\nabla 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 修正。
若是 黑塞矩陣 $ F(\bm x^{(k)})$ 不正定,那麼搜索方向 \(\bm d^{(k)} = - F(\bm x^{(k)})^{-1}\nabla f(\bm x^{(k)})\) 可能不會是降低方向。 牛頓法的 Levenberg-Marquardt 修正能夠解決這個問題:
\[ \bm x^{(k+1)} = \bm x^{(k)} - \alpha_k(F(\bm x^{(k)}) + \mu_t \bm I)^{-1}\nabla f(\bm x^{(k)}) \]
其中,\(u_t \ge 0\),\(\bm I\) 爲單位矩陣。在該修正中, $ F(\bm x^{(k)})$ 能夠不正定,可是 \(\bm G = F(\bm x^{(k)}) + \mu_t \bm I\) 須要是正定的,因此,取適當的 \(\mu_t\),使得 \(\bm G\) 正定便可。(矩陣正定,當前僅當全部特徵值大於 0。)
\(\mu_t\) 過大也不行,不然就至關於步長取了很小的值。(逆太小或者是分母過大。)
可能會有一個疑問,梯度降低法中梯度的反方向不是當前點降低最快的方向嗎,爲何牛頓法會收斂更快,牛頓法的更新方向更好嗎?牛頓法是二階收斂,梯度降低法是一階收斂,因此牛頓法就更快。更通俗地,梯度降低法只從當前位置選擇一個坡度最大的方向走一步,而牛頓法在選擇方向時,不只會考慮坡度是否夠大,還會考慮走了一步後,坡度是否會變得更大。從幾何上說,牛頓法就是用一個二次曲面去擬合當前位置的的局部曲面,而梯度降低法用的是一個平面去擬合,一般狀況下,二次曲面的擬合會比平面更好,因此牛頓法選擇的降低路徑會更符合真實的最優降低路徑。詳情參見 最優化問題中,牛頓法爲何比梯度降低法求解須要的迭代次數更少? -- 大餅土博。
共軛方向法的性能優於最速降低法,但不如牛頓法。
共軛方向法具備如下特性:
考慮一個二次型函數 \(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 g^{(k)} = \nabla f(\bm x^{(k)}) = Q\bm x^{(k)} - \bm b \\ \alpha_k = - \frac{\bm g^{(k) \top} \bm d^{(k)}}{\bm d^{(k) \top} Q \bm d^{(k)}} \\ \bm x^{(k+1)} = \bm x^{(k)} + \alpha_k \bm d^{(k)} \]
上式和最速降低法的公式很像,當更新方向爲梯度的方向,即 \(\bm d^{(k)} = \bm g^{(k)}\) 時,共軛方向法和最速降低法就長得如出一轍了。固然,這通常是不可能的,共軛方向法要求更新方向是共軛的。
共軛方向法的計算效率很高,但前提是給定一組 \(Q\) 共軛方向。共軛梯度法不須要提早給定一組 \(Q\) 共軛方向,而是隨着迭代的進行,逐一產生 \(Q\) 共軛方向。
做爲共軛方向法的典型表明,共軛梯度法不一樣之處在於其 \(Q\) 共軛方向的獲取,每一次迭代,咱們須要當場生成下一次迭代的方向:
\[ \bm d^{(k+1)} = - \bm g^{(k+1)} + \beta_k \bm d^{(k)}, k = 0,1,2,... \]
按照以下方式選擇係數 \(\beta_k\),可使得新生成的方向 \(\bm d^{(k+1)}\) 和以前的方向 \(\bm d^{(0)}, \bm d^{(1)}, ..., \bm d^{(k)}\) \(Q\) 共軛:
\[ \beta_k = \frac{\bm g^{(k+1) \top} Q \bm d^{(k)}}{\bm d^{(k) \top} Q \bm d^{(k)}} \]
對於初始方向 \(\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 x^{(k+1)} = \bm x^{(k)} - \alpha_k \bm H_k \nabla f(\bm x^{(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}\) 的遞推式,那麼在迭代過程當中就不須要涉及到黑塞矩陣也不會求逆。
\(\bm H_{k+1}\) 的遞推式爲:
\[ \boldsymbol{H}_{k+1}=\boldsymbol{H}_{k}+\frac{\left(\Delta \boldsymbol{x}^{(k)}-\boldsymbol{H}_{k} \Delta \boldsymbol{g}^{(k)}\right)\left(\Delta \boldsymbol{x}^{(k)}-\boldsymbol{H}_{k} \Delta \boldsymbol{g}^{(k)}\right)^{\top}}{\Delta \boldsymbol{g}^{(k) \top}\left(\Delta \boldsymbol{x}^{(k)}-\boldsymbol{H}_{k} \Delta \boldsymbol{g}^{(k)}\right)} \]
其中,\(\Delta x^{(k)}=\alpha_{k} d^{(k)}\),\(\Delta \boldsymbol{g}^{(k)}=\boldsymbol{g}^{(k+1)}-\boldsymbol{g}^{(k)}\)。
\(\bm H_0\) 能夠取任一對稱正定實矩陣。
\(\bm H_{k+1}\) 的遞推式能夠採用如下記法:(這不是秩 1 算法的推導過程,只是爲了考試便於記憶罷了。)
Edwin K. P. Chong, Stanislaw H. Zak-An Introduction to Optimization, 4th Edition
最優化問題中,牛頓法爲何比梯度降低法求解須要的迭代次數更少? -- 大餅土博
Newton's method in optimization - Wikipedia
【機器學習之數學】01 導數、偏導數、方向導數、梯度
【機器學習之數學】02 梯度降低法、最速降低法、牛頓法、共軛方向法、擬牛頓法
【機器學習之數學】03 有約束的非線性優化問題——拉格朗日乘子法、KKT條件、投影法