機器學習中牛頓法凸最佳化的通俗解釋
我們知道,梯度下降演算法是利用梯度進行一階最佳化,而今天我介紹的牛頓最佳化演算法採用的是二階最佳化。本文將重點講解牛頓法的基本概念和推導過程,並將梯度下降與牛頓法做個比較。
1. 牛頓法求解方程的根
有時候,在方程比較複雜的情況下,使用一般方法求解它的根並不容易。牛頓法透過迭代的方式和不斷逼近的思想,可以近似求得方程較為準確的根。
牛頓法求根的核心思想是泰勒一階展開。例如對於方程 f(x) = 0,我們在任意一點 x0 處,進行一階泰勒展開:
令 f(x) = 0,帶入上式,即可得到:
注意,這裡使用了近似,得到的 x 並不是方程的根,只是近似解。但是,x 比 x0 更接近於方程的根。效果如下圖所示:
然後,利用迭代方法求解,以 x 為 x0,求解下一個距離方程的根更近的位置。迭代公式可以寫成:
經過一定次數的有效迭代後,一般都能保證在方程的根處收斂。下面給出整個迭代收斂過程的動態演示。
2. 牛頓法凸最佳化
上一部分介紹牛頓法如何求解方程的根,這一特性可以應用在凸函式的最佳化問題上。
機器學習、深度學習中,損失函式的最佳化問題一般是基於一階導數梯度下降的。現在,從另一個角度來看,想要讓損失函式最小化,這其實是一個最值問題,對應函式的一階導數 f'(x) = 0。也就是說,如果我們找到了能讓 f'(x) = 0 的點 x,損失函式取得最小值,也就實現了模型最佳化目標。
現在的目標是計算 f'(x) = 0 對應的 x,即 f'(x) = 0 的根。轉化為求根問題,就可以利用上一節的牛頓法了。
與上一節有所不同,首先,對 f(x) 在 x0 處進行二階泰勒展開:
上式成立的條件是 f(x) 近似等於 f(x0)。令 f(x) = f(x0),並對 (x - x0) 求導,可得:
同樣,雖然 x 並不是最優解點,但是 x 比 x0 更接近f'(x) = 0 的根。這樣,就能得到最最佳化的迭代公式:
透過迭代公式,就能不斷地找到 f'(x) = 0 的近似根,從而也就實現了損失函式最小化的最佳化目標。
3. 梯度下降 VS 牛頓法
現在,分別寫出梯度下降和牛頓法的更新公式:
梯度下降演算法是將函式在 xn 位置進行一次函式近似,也就是一條直線。計算梯度,從而決定下一步最佳化的方向是梯度的反方向。而牛頓法是將函式在 xn 位置進行二階函式近似,也就是二次曲線。計算梯度和二階導數,從而決定下一步的最佳化方向。一階最佳化和二階最佳化的示意圖如下所示:
梯度下降:一階最佳化
牛頓法:二階最佳化
以上所說的是梯度下降和牛頓法的最佳化方式差異。那麼誰的最佳化效果更好呢?
首先,我們來看一下牛頓法的優點。第一,牛頓法的迭代更新公式中沒有引數學習因子,也就不需要透過交叉驗證選擇合適的學習因子了。第二,牛頓法被認為可以利用到曲線本身的資訊, 比梯度下降法更容易收斂(迭代更少次數)。如下圖是一個最小化一個目標方程的例子, 紅色曲線是利用牛頓法迭代求解, 綠色曲線是利用梯度下降法求解。顯然,牛頓法最最佳化速度更快一些。
然後,我們再來看一下牛頓法的缺點。我們注意到牛頓法迭代公式中除了需要求解一階導數之外,還要計算二階導數。從矩陣的角度來說,一階導數和二階導數分別對應雅可比矩陣(Jacobian matrix)和海森矩陣(Hessian matrix)。
Jacobian 矩陣
Hessian 矩陣
牛頓法不僅需要計算Hessian 矩陣,而且需要計算Hessian 矩陣的逆。當資料量比較少的時候,運算速度不會受到大的影響。但是,當資料量很大,特別在深度神經網路中,計算Hessian 矩陣和它的逆矩陣是非常耗時的。從整體效果來看,牛頓法最佳化速度沒有梯度下降演算法那麼快。所以,目前神經網路損失函式的最佳化策略大多都是基於梯度下降。
值得一提的是,針對牛頓法的缺點,目前已經有一些改進演算法。這類改進演算法統稱擬牛頓演算法。比較有代表性的是 BFGS 和 L-BFGS。
BFGS 演算法使用近似的方法來計算Hessian 矩陣的逆,有效地提高了運算速度。但是仍然需要將整個Hessian 近似逆矩陣儲存起來,空間成本較大。
L-BFGS 演算法是對BFGS 演算法的改進,不需要儲存 Hessian 近似逆矩陣, 而是直接透過迭代演算法獲取本輪的搜尋方向,空間成本大大降低。
總的來說,基於梯度下降的最佳化演算法,在實際應用中更加廣泛一些,例如 RMSprop、Adam等。但是,牛頓法的改進演算法,例如 BFGS、L-BFGS 也有其各自的特點,也有很強的實用性。
作者:紅色石頭Will
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4686/viewspace-2818160/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 機器學習-牛頓法詳解機器學習
- 機器學習之牛頓法機器學習
- 機器學習術語通俗易懂的解釋機器學習
- 機器學習中的查全率recall、精度和F1得分的通俗解釋機器學習
- 機器學習梯度下降法,最通俗易懂的解釋機器學習梯度
- 【機器學習之數學】02 梯度下降法、最速下降法、牛頓法、共軛方向法、擬牛頓法機器學習梯度
- 資料分析入門必知:機器學習最通俗的解釋?機器學習
- spring IOC 通俗解釋Spring
- 牛頓迭代法求根
- 最優化演算法【牛頓法、擬牛頓法、BFGS演算法】優化演算法
- 通俗講明白機器學習中的學習問題 - svpino機器學習
- 最通俗的機器學習介紹機器學習
- 粒子濾波(Particle Filter)的通俗解釋Filter
- 牛頓迭代法 - 求解非線性方程根的近似解
- 案例版名詞解釋:機器學習中的概念漂移!機器學習
- 通俗易懂的解釋:什麼是APIAPI
- 前端切圖的通俗解釋(說人話)前端
- 數值解和解析解/softmax迴歸/泰勒展開/牛頓法
- 【小白學AI】XGBoost 推導詳解與牛頓法AI
- 【小白學AI】XGBoost推導詳解與牛頓法AI
- 通俗解釋啥是雲端計算
- 通俗解釋什麼函式程式設計中的函子Functors? - iRi函式程式設計
- 區塊鏈是什麼通俗解釋區塊鏈
- 如何通俗解釋Docker是什麼_1Docker
- 求平方根 && 牛頓迭代法
- 終於有人把機器學習中的文字摘要解釋清楚了!機器學習
- 【機器學習】李宏毅——Explainable ML(可解釋性的機器學習)機器學習AI
- WQS 二分 & 凸最佳化dp
- 通俗解釋協方差與相關係數
- 牛頓的蘋果蘋果
- 數學知識-核函式的通俗解釋例項函式
- 啥叫軟體配置管理?——一個通俗的解釋
- 用通俗易懂的方法解釋MongoDB的選舉機制MongoDB
- 通俗易懂解釋Rust所有權和借用概念Rust
- 趣文:通俗解釋主要程式語言及其用途
- 談談機器學習模型的可解釋性機器學習模型
- Java解釋單連結串列中的頭插法以及尾插法Java
- Oracle 0至6級鎖的通俗解釋及實驗案例Oracle