爲什麼要介紹梯度下降法和牛頓法那?
這裏提及兩個算法模型GBDT和XGBoost,兩個都是boosting模型。
GBDT和xgb的目標函數是不同的,同時針對其目標函數中的誤差函數 L(θ) 的擬合方式也有差異:
- GBDT利用一階泰勒展開兩項,做一個近似
- xgboost利用二階泰勒展開三項,做一個近似
言爲之意,
- GBDT在函數空間中利用梯度下降法進行優化
- XGBoost在函數空間中用牛頓法進行優化
最終的目標函數只依賴於每個數據點的在誤差函數上的一階導數和二階導數。
針對誤差函數可以自定義,比如說平方損失函數: (yi,yi)=(yi−yi)2,或logistic損失函數
更多介紹建議去聽:https://study.163.com/course/courseMain.htm?courseId=1006401020&share=2&shareId=400000000645014
1. 梯度下降法的推導
梯度下降法在機器學習和深度學習裏用的非常多,一般教程或者教材在解釋梯度下降法的時候會用形象化的方式(二次曲線、下凸面等),想必大家都知道如何用形象化的方式來說明梯度下降法的有效性。這裏,我就不再贅述這種形象化的解釋了。我這裏使用數學推導來證明梯度下降法的有效性。
一元函數的泰勒展開大家應該都知道,公式如下:
f(x)=f(x0)+1!f’(x0)(x−x0)+2!f’’(x0)(x−x0)2+3!f’’’(x0)(x−x0)3+…
不妨只取右邊式子的前兩項,也就是一個“約等於”的結果:
f(x)=f(x0)+1!f’(x0)(x−x0)
記:Δx=x−x0,上式變爲:
f(x)=f(x0)+1!f’(x0)Δx
我們的目標是在迭代過程中讓下式恆成立,也就是說希望迭代過程中函數值會逐漸減小,用數學語言描述就是:f(xn+1)≤f(xn)
容易想到,應該構造:
Δx=−f’(x0)
此時:
f(x)=f(x0)−f’(x0)2
寫成迭代形式:
f(xn+1)=f(xn)−f’(xn)2
由於f’(x)2≥0,我們就完成了對於梯度下降有效性的證明。從上述步驟歸納出來的參數迭代更新的公式如下:
f(xn+1)=f(xn)−f’(xn)2
以上步驟是在一元函數上證明了梯度下降的有效性。容易推廣到多元函數。另外,在多元函數中,還可以補充證明梯度方向是下降最快的方向。
詳見:知乎爲什麼梯度下降能找到最小值?
2. 牛頓法
說完了梯度下降法,順便介紹下牛頓法的推導。因爲牛頓法也是通過泰勒展開推導出來的。
繼續看泰勒展開:
f(x)=f(x0)+1!f’(x0)(x−x0)+2!f’’(x0)(x−x0)2+3!f’’’(x0)(x−x0)3+…
依舊,我們取右式的前2項:
f(x)=f(x0)+1!f’(x0)(x−x0)
對等式兩邊取導數:
f’(x)=f’(x0)+1!f’’(x0)(x−x0)
f’(x)=f’(x0)+1!f’’(x0)Δx
根據微積分的性質,f(x)取最小值時,有f’(x)=0,我們把這個性質代入上面的式子,有:
0=f’(x0)+1!f’’(x0)Δx
Δx=−f’’(x0)f’(x0)
這樣我們就得到了牛頓法的參數迭代更新公式如下:
xn+1=xn−f’’(xn)f’(xn)
3. 梯度下降法和牛頓法的異同
從上面的證明過程可以看出,梯度下降法和牛頓法雖然都可以用泰勒展開推導,但推導所依據的思想還是有一點不一樣的。
在實際運用中,牛頓法和梯度下降法都是廣泛應用於機器學習中的。兩者的區別其實很多博客都有寫,比如:梯度下降or擬牛頓法?
4. 擬牛頓法
在上面牛頓法的參數迭代更新公式中,我們可以看到f’’(x0)是位於分母部分的。記住,上面的數學推導是用的一元函數,對於多元函數,這個分母存在相當於要計算Hessian矩陣的逆矩陣,這是非常困難且耗費時間的。因此,很多牛頓算法的變形出現了,這類變形統稱擬牛頓算法。BFGS是用迭代法去近似計算海森矩陣。而BFGS需要額外儲存近似的那個海森矩陣,所以有了改進版L-BFGS。