天天看點

劃重點!十分鐘掌握牛頓法凸優化

我們知道,梯度下降算法是利用梯度進行一階優化,而今天我介紹的牛頓優化算法采用的是二階優化。本文将重點講解牛頓法的基本概念和推導過程,并将梯度下降與牛頓法做個比較。

1 牛頓法求解方程的根

有時候,在方程比較複雜的情況下,使用一般方法求解它的根并不容易。牛頓法通過疊代的方式和不斷逼近的思想,可以近似求得方程較為準确的根。

牛頓法求根的核心思想是泰勒一階展開。例如對于方程 f(x) = 0,我們在任意一點 x0 處,進行一階泰勒展開:

劃重點!十分鐘掌握牛頓法凸優化
劃重點!十分鐘掌握牛頓法凸優化
劃重點!十分鐘掌握牛頓法凸優化
劃重點!十分鐘掌握牛頓法凸優化

2 牛頓法凸優化

上一部分介紹牛頓法如何求解方程的根,這一特性可以應用在凸函數的優化問題上。

機器學習、深度學習中,損失函數的優化問題一般是基于一階導數梯度下降的。現在,從另一個角度來看,想要讓損失函數最小化,這其實是一個最值問題,對應函數的一階導數 f'(x) = 0。也就是說,如果我們找到了能讓 f'(x) = 0 的點 x,損失函數取得最小值,也就實作了模型優化目标。

現在的目标是計算 f'(x) = 0 對應的 x,即 f'(x) = 0 的根。轉化為求根問題,就可以利用上一節的牛頓法了。

與上一節有所不同,首先,對 f(x) 在 x0 處進行二階泰勒展開:

劃重點!十分鐘掌握牛頓法凸優化
劃重點!十分鐘掌握牛頓法凸優化

3 梯度下降 VS 牛頓法

現在,分别寫出梯度下降和牛頓法的更新公式:

劃重點!十分鐘掌握牛頓法凸優化

梯度下降算法是将函數在 xn 位置進行一次函數近似,也就是一條直線。計算梯度,進而決定下一步優化的方向是梯度的反方向。而牛頓法是将函數在 xn 位置進行二階函數近似,也就是二次曲線。計算梯度和二階導數,進而決定下一步的優化方向。一階優化和二階優化的示意圖如下所示:

劃重點!十分鐘掌握牛頓法凸優化

以上所說的是梯度下降和牛頓法的優化方式差異。那麼誰的優化效果更好呢?

首先,我們來看一下牛頓法的優點。第一,牛頓法的疊代更新公式中沒有參數學習因子,也就不需要通過交叉驗證選擇合适的學習因子了。第二,牛頓法被認為可以利用到曲線本身的資訊, 比梯度下降法更容易收斂(疊代更少次數)。如下圖是一個最小化一個目标方程的例子, 紅色曲線是利用牛頓法疊代求解, 綠色曲線是利用梯度下降法求解。顯然,牛頓法最優化速度更快一些。

劃重點!十分鐘掌握牛頓法凸優化

然後,我們再來看一下牛頓法的缺點。我們注意到牛頓法疊代公式中除了需要求解一階導數之外,還要計算二階導數。從矩陣的角度來說,一階導數和二階導數分别對應雅可比矩陣(Jacobian matrix)和海森矩陣(Hessian matrix)。

劃重點!十分鐘掌握牛頓法凸優化

牛頓法不僅需要計算 Hessian 矩陣,而且需要計算 Hessian 矩陣的逆。當資料量比較少的時候,運算速度不會受到大的影響。但是,當資料量很大,特别在深度神經網絡中,計算 Hessian 矩陣和它的逆矩陣是非常耗時的。從整體效果來看,牛頓法優化速度沒有梯度下降算法那麼快。是以,目前神經網絡損失函數的優化政策大多都是基于梯度下降。

值得一提的是,針對牛頓法的缺點,目前已經有一些改進算法。這類改進算法統稱拟牛頓算法。比較有代表性的是 BFGS 和 L-BFGS。

BFGS 算法使用近似的方法來計算 Hessian 矩陣的逆,有效地提高了運算速度。但是仍然需要将整個 Hessian 近似逆矩陣存儲起來,空間成本較大。

L-BFGS 算法是對BFGS 算法的改進,不需要存儲 Hessian 近似逆矩陣, 而是直接通過疊代算法擷取本輪的搜尋方向,空間成本大大降低。

總的來說,基于梯度下降的優化算法,在實際應用中更加廣泛一些,例如 RMSprop、Adam等。但是,牛頓法的改進算法,例如 BFGS、L-BFGS 也有其各自的特點,也有很強的實用性。

繼續閱讀