之前,我發(fā)過(guò)一篇文章裆装,通俗地解釋了梯度下降算法的數(shù)學(xué)原理和推導(dǎo)過(guò)程踱承,推薦一看倡缠。鏈接如下:
我們知道昙沦,梯度下降算法是利用梯度進(jìn)行一階優(yōu)化,而今天我介紹的牛頓優(yōu)化算法采用的是二階優(yōu)化载荔。本文將重點(diǎn)講解牛頓法的基本概念和推導(dǎo)過(guò)程盾饮,并將梯度下降與牛頓法做個(gè)比較。
1.?牛頓法求解方程的根
有時(shí)候懒熙,在方程比較復(fù)雜的情況下丘损,使用一般方法求解它的根并不容易。牛頓法通過(guò)迭代的方式和不斷逼近的思想工扎,可以近似求得方程較為準(zhǔn)確的根徘钥。
牛頓法求根的核心思想是泰勒一階展開。例如對(duì)于方程 f(x) = 0肢娘,我們?cè)谌我庖稽c(diǎn) x0 處呈础,進(jìn)行一階泰勒展開:
令 f(x) = 0,帶入上式橱健,即可得到:
注意而钞,這里使用了近似,得到的 x 并不是方程的根畴博,只是近似解笨忌。但是,x 比 x0 更接近于方程的根俱病。效果如下圖所示:
然后官疲,利用迭代方法求解,以 x 為 x0亮隙,求解下一個(gè)距離方程的根更近的位置途凫。迭代公式可以寫成:
經(jīng)過(guò)一定次數(shù)的有效迭代后,一般都能保證在方程的根處收斂溢吻。下面給出整個(gè)迭代收斂過(guò)程的動(dòng)態(tài)演示维费。
2.?牛頓法凸優(yōu)化
上一部分介紹牛頓法如何求解方程的根,這一特性可以應(yīng)用在凸函數(shù)的優(yōu)化問題上促王。
機(jī)器學(xué)習(xí)犀盟、深度學(xué)習(xí)中,損失函數(shù)的優(yōu)化問題一般是基于一階導(dǎo)數(shù)梯度下降的∮牵現(xiàn)在阅畴,從另一個(gè)角度來(lái)看,想要讓損失函數(shù)最小化迅耘,這其實(shí)是一個(gè)最值問題贱枣,對(duì)應(yīng)函數(shù)的一階導(dǎo)數(shù) f'(x) = 0监署。也就是說(shuō),如果我們找到了能讓 f'(x) = 0 的點(diǎn) x纽哥,損失函數(shù)取得最小值钠乏,也就實(shí)現(xiàn)了模型優(yōu)化目標(biāo)。
現(xiàn)在的目標(biāo)是計(jì)算 f'(x) = 0 對(duì)應(yīng)的 x春塌,即 f'(x) = 0 的根晓避。轉(zhuǎn)化為求根問題,就可以利用上一節(jié)的牛頓法了摔笤。
與上一節(jié)有所不同够滑,首先,對(duì) f(x) 在 x0 處進(jìn)行二階泰勒展開:
上式成立的條件是 f(x) 近似等于 f(x0)吕世。令 f(x) = f(x0)彰触,并對(duì) (x - x0) 求導(dǎo),可得:
同樣命辖,雖然 x 并不是最優(yōu)解點(diǎn)况毅,但是 x 比 x0 更接近f'(x) = 0 的根。這樣尔艇,就能得到最優(yōu)化的迭代公式:
通過(guò)迭代公式尔许,就能不斷地找到 f'(x) = 0 的近似根,從而也就實(shí)現(xiàn)了損失函數(shù)最小化的優(yōu)化目標(biāo)终娃。
3.?梯度下降 VS 牛頓法
現(xiàn)在味廊,分別寫出梯度下降和牛頓法的更新公式:
梯度下降算法是將函數(shù)在 xn 位置進(jìn)行一次函數(shù)近似,也就是一條直線棠耕。計(jì)算梯度余佛,從而決定下一步優(yōu)化的方向是梯度的反方向。而牛頓法是將函數(shù)在 xn 位置進(jìn)行二階函數(shù)近似窍荧,也就是二次曲線辉巡。計(jì)算梯度和二階導(dǎo)數(shù),從而決定下一步的優(yōu)化方向蕊退。一階優(yōu)化和二階優(yōu)化的示意圖如下所示:
梯度下降:一階優(yōu)化
牛頓法:二階優(yōu)化
以上所說(shuō)的是梯度下降和牛頓法的優(yōu)化方式差異郊楣。那么誰(shuí)的優(yōu)化效果更好呢?
首先瓤荔,我們來(lái)看一下牛頓法的優(yōu)點(diǎn)净蚤。第一,牛頓法的迭代更新公式中沒有參數(shù)學(xué)習(xí)因子输硝,也就不需要通過(guò)交叉驗(yàn)證選擇合適的學(xué)習(xí)因子了塞栅。第二,牛頓法被認(rèn)為可以利用到曲線本身的信息, 比梯度下降法更容易收斂(迭代更少次數(shù))。如下圖是一個(gè)最小化一個(gè)目標(biāo)方程的例子, 紅色曲線是利用牛頓法迭代求解, 綠色曲線是利用梯度下降法求解放椰。顯然,牛頓法最優(yōu)化速度更快一些愉粤。
然后砾医,我們?cè)賮?lái)看一下牛頓法的缺點(diǎn)。我們注意到牛頓法迭代公式中除了需要求解一階導(dǎo)數(shù)之外衣厘,還要計(jì)算二階導(dǎo)數(shù)如蚜。從矩陣的角度來(lái)說(shuō),一階導(dǎo)數(shù)和二階導(dǎo)數(shù)分別對(duì)應(yīng)雅可比矩陣(Jacobian matrix)和海森矩陣(Hessian matrix)影暴。
Jacobian 矩陣
Hessian 矩陣
牛頓法不僅需要計(jì)算Hessian 矩陣错邦,而且需要計(jì)算Hessian 矩陣的逆。當(dāng)數(shù)據(jù)量比較少的時(shí)候型宙,運(yùn)算速度不會(huì)受到大的影響撬呢。但是,當(dāng)數(shù)據(jù)量很大妆兑,特別在深度神經(jīng)網(wǎng)絡(luò)中魂拦,計(jì)算Hessian 矩陣和它的逆矩陣是非常耗時(shí)的。從整體效果來(lái)看搁嗓,牛頓法優(yōu)化速度沒有梯度下降算法那么快芯勘。所以,目前神經(jīng)網(wǎng)絡(luò)損失函數(shù)的優(yōu)化策略大多都是基于梯度下降腺逛。
值得一提的是荷愕,針對(duì)牛頓法的缺點(diǎn),目前已經(jīng)有一些改進(jìn)算法棍矛。這類改進(jìn)算法統(tǒng)稱擬牛頓算法安疗。比較有代表性的是 BFGS 和 L-BFGS。
BFGS 算法使用近似的方法來(lái)計(jì)算Hessian 矩陣的逆茄靠,有效地提高了運(yùn)算速度茂契。但是仍然需要將整個(gè)Hessian 近似逆矩陣存儲(chǔ)起來(lái),空間成本較大慨绳。
L-BFGS 算法是對(duì)BFGS 算法的改進(jìn)掉冶,不需要存儲(chǔ) Hessian 近似逆矩陣, 而是直接通過(guò)迭代算法獲取本輪的搜索方向脐雪,空間成本大大降低厌小。
總的來(lái)說(shuō),基于梯度下降的優(yōu)化算法战秋,在實(shí)際應(yīng)用中更加廣泛一些璧亚,例如 RMSprop、Adam等脂信。但是癣蟋,牛頓法的改進(jìn)算法透硝,例如 BFGS、L-BFGS 也有其各自的特點(diǎn)疯搅,也有很強(qiáng)的實(shí)用性濒生。