【優化演算法】梯度之上:基於 Jacobian 和 Hessian 矩陣的優化演算法
上篇說的,僅僅基於梯度的優化演算法稱為 一階優化演算法(first-order optimization algorithms)
, 比如最典型的 梯度下降法;很多時候,僅僅使用一階的梯度資訊效果是不夠優良的,還需要考慮梯度的梯度, 也就是 二階優化演算法(second-order optimization algorithms)
, 二階優化演算法基於的是 Hessian 矩陣, 比較典型的方法如 牛頓法。
先來回顧一下 梯度,Jacobian 矩陣 和 Hessian 矩陣 的關係。開始!
二階導數(second derivative)
,即導數的導數,表達的是一階導數如何隨著輸入的變化而變化。一階導數,表徵的是曲線的斜率
曲率
. 藉助物理來理解,就是函式表徵的是位移和時間的對應關係,一階導數就是速度,二階導數就是加速度。
- 對於一個一次函式而言,比如 , 其一階導數就是常數, 而二階導數就是 , 或者說勻速直線運動,速度恆定,沒有加速度。
- 對於一個二次函式而言,比如自由落體運動 , 其一階導數就是, 二階導數就是常數 , 也就是說有隨變化的斜率和固定的曲率,或者說有固定的加速度然後有隨時間變化的速度。
回到優化演算法中,我們之前使用的梯度下降法,相當於以當前的速度勻速直線前進一個 時間,作為估計的 , 當然這個和真實的 肯定是有差距的。二階導數資訊就可以用來預知這個差距的大小:
- 如果
二階導數/曲率
為, 也就是沒有加速度,勻速直線運動,那麼我們用梯度進行預測就是很準確的。 - 如果
二階導數/曲率
為負, 也就是減速運動,那麼我們用梯度進行預測的值就會比真實值大。 - 如果
二階導數/曲率
為正, 也就是加速運動, 那麼我們用梯度進行預測的值就會比真實值小。
對於多元函式,二階函式有很多,我們將這些導數合併成為 Hessian 矩陣。由於微分運算元在任何二階偏導連續的點處都可以交換,因此 Hessian 矩陣在這些點上是對稱的。在深度學習背景中,我們遇到的大多數的 Hessian 矩陣基本都是對稱的。而由於Hessian 矩陣是實對稱的,我們可以將其分解為一組實特徵值和一組特徵向量的正交基。那麼在特定方向
下面我們定量的來看一下,通過二階導數如何衡量一個梯度下降步驟表現的有多好。我們在當前點 處做函式的近似二階泰勒展開
其中有三項,
- 函式的原始值
- 函式斜率導致的預期改善
- 函式曲率導致的校正
當最後一項太大時,函式值是可能向上移動的。
- 當 為 0 或者負數時候,近似的泰勒級數增加表明增加 將永遠使 下降。在理論上,這種情況下我們應該把步長儘量調大,然而在實踐中,泰勒級數不會在 很大的時候依然保持準確,因此在這個情況下我們必須採取更具啟發式的選擇。
- 當 為正數時,通過計算可得,使得近似泰勒級數下降最多的最優步長是
最壞的情況下, 與