機器學習Lesson 20— 為什麼「梯度提升」會叫「梯度」提升呢?

--

梯度提升(Gradient Boosting)是很常見的集成式學習(Ensemble Learning)演算法,其中梯度提升決策樹(Gradient Boosting Decision Tree)更是鼎鼎大名,曾經有 Kaggle 的參賽者用梯度提升決策樹,就獲得獎牌。所以梯度提升可謂強大的演算法!

可是,你想過梯度提升為什麼會叫梯度提升嗎?不就是增加一個基學習器(Base Learner)來修正之前基學習器的錯誤嗎?那跟梯度有什麼關聯?

Photo by Afif Kusuma on Unsplash

今天我們就來解答吧。

一、提升法

先讓我們來回顧一下提升法(Boosting)是什麼。訓練資料中特徵(Feature)是 x、標籤(Label)是 y。我們訓練完一個基學習器 g1 後,我們可以得到誤差:

接著,我們再訓練一個基學習器 g2,想辦法縮小 e1。該怎麼做呢?很簡單,讓 g1 + g2 使用特徵 x 去預測 e1。找到 g2 後模型誤差則是:

不斷重複上述步驟,就是提升法的基本概念。不過,通常這邊會加上一個學習率,來控制演算法配適的程度:

接下來的問題,就是要想辦法找到 g1、g2、...。

二、提升法搭配平方誤差損失函數

我們先看看如果損失函數(Loss Function)是平方誤差(Squared-Error)的狀況,平方誤差的公式如下:

我們想要最小化損失函數,作法就是找損失函數對 g1 微分為 0:

觀察上述的數學式跟本文第一個數學式,可以發現差別只在於負號跟 2 倍。也就是說,當我們要訓練一個基學習器,做法就是找出損失函數的梯度(Gradient),然後新增一個基學習器,透過最小化均方誤差來預測負的梯度。

三、梯度提升

梯度提升是上述概念的延伸,不管什麼損失函數,我們都直接找出損失函數的梯度,然後預測這個梯度,所以這個演算法才會叫「梯度」提升。

演算法的流程如下:

1、設定一個可以微分的損失函數(不一定是平方誤差)。

2、對每一筆資料,計算出損失函數對預測值的微分。

3、最小化「模型+新基學習器」跟「步驟 2 的微分」的均方誤差。

4、將新基學習器乘上學習率,加入模型。

5、重複步驟 2 到步驟 4,直到模型有足夠的基學習器。

參考資料

D.P. Kroese, Z.I. Botev, T. Taimre, R. Vaisman. Data Science and Machine Learning: Mathematical and Statistical Methods, Chapman and Hall/CRC, Boca Raton, 2019.

關於作者

Chia-Hao Li received the M.S. degree in computer science from Durham University, United Kingdom. He engages in computer algorithm, machine learning, and hardware/software codesign. He was former senior engineer in Mediatek, Taiwan. His currently research topic is the application of machine learning techniques for fault detection in the high-performance computing systems.

--

--

施威銘研究室
施威銘研究室

Written by 施威銘研究室

致力開發AI領域的圖書、創客、教具,希望培養更多的AI人才。整合各種人才,投入創客產品的開發,推廣「實作學習」,希望實踐學以致用的理想。

No responses yet