--- tags: 機器學習技法 --- Ch11 Gradient Boosted Decision Tree === ## Content [TOC] ## [Slides & Videos](https://www.csie.ntu.edu.tw/~htlin/mooc/) ## [Adaptive Boosted Decision Tree](https://www.coursera.org/learn/machine-learning-techniques/lecture/pWVz1/adaptive-boosted-decision-tree) ### From Random Forest to AdaBoost-DTree - 要把 decision tree 跟 adaboost 結合,就要讓 decision tree 能夠接受每筆 data 有不同 weight $u$ ### Weighted Decision Tree Algorithm - 一種加 weight 的方式就是直接把 algorithm 攤開來看,看哪些部份是跟 data 的 weight 會有關係的,我們把 weight 加進去 - 但是像 decision tree 這種 algorithm 有許多作者自己的巧思,全都拆開來看太麻煩了,我們就直接把演算法當成 black box,直接對 data 動手腳即可 - 根據權重 $u$ 對 data 做 sampling,這樣就不需要修改演算法。 ### Weak Decision Tree Algorithm - fully grown 的 tree 會導致 $\alpha_t$ 幾乎是無限大,這樣就沒有 aggregation 了 - 我們需要: **pruned** tree trained on **some** $x_n$ to be **weak** - some: sampling 即可算是只 train 在部分 data - pruned: pruning or limiting height - AdaBoost-DTree: often via - AdaBoost + sampling $\propto u^{(t)}$ + pruned $\textrm{DTree}(\tilde{\mathcal D})$ ### AdaBoost with Extremely-Pruned Tree - 若 tree 只有一層高,其實就是 decision stump - 因此 AdaBoost-Stump = special case of AdaBoost-DTree ### Fun Time: Weights of AdaBoost-DTree ![](https://i.imgur.com/3qGajhf.png) - 在 $\tilde{\mathcal D}$ 上 zero-error,但是在 $\mathcal D$ 上什麼 $\epsilon$ 都有可能 - > Q: 不是也應該是 0 嗎 @@,sample data 的 weight $u$ 有可能有 0 嗎? 沒有 0 的話 $\mathcal D$ 的 error 應該也是 0 吧? - > 可能是因為雖然 $u$ 不會變 0,但是 sample 可能會沒 sample 到吧 ## [Optimization View of AdaBoost](https://www.coursera.org/learn/machine-learning-techniques/lecture/fTNGj/optimization-view-of-adaboost) ### Example Weights of AdaBoost ![](https://i.imgur.com/smPA8CJ.png) - 本來的 $u_n^{(t+1)}$ 可以寫成 $u_n^{(t)}\cdot 菱形_t^{-y_ng_t(x_n)}$ - $u_n^{(t+1)}$: 第 n 筆資料下一次的權重 - 當初的 $菱形_t=\exp(\alpha_t)$ - 因此原式 $u_n^{(t+1)} = u_n^{(t)}\cdot\exp(-y_n\alpha_t g_t(x_n))$ - 這樣就可以用 $u_n^{(1)}$ 表示了 (注意 $u_n^{(1)}=\frac 1 N$),然後再把連乘移到指數變連加,可以得到 $u_n^{(T+1)}=\frac 1 N\cdot\exp(-y_n\sum_{t=1}^T \alpha_t g_t(x_n))$ - 回想一下我們整個 model 的 prediction $G(x)=\textrm{sign}(\sum_{t=1}^T \alpha_t g_t(x))$,prediction 是根據這個加總而定的 - 因此我們先把這個 $\sum_{t=1}^T \alpha_t g_t(x)$ 命名為 **voting score** (以 $\alpha_t$ 為 voting weight) - 也就是說,data 的 weight 可以視為 $\propto \exp(-y_n(\textrm{voting score on }x_n))$ - 等等針對 voting score 進行探討。 - (直覺: ensemble 結果越正確,新權重越小) - 這裡可以先 review [Ch8 AdaBoost](https://hackmd.io/@johnnyasd12/ryDZnL_kI/https%3A%2F%2Fhackmd.io%2F%40johnnyasd12%2FBk1joyIZU) - $u_n^{(t)}$ 用來找 $g_t$ - $g_t$ 用來找 $u_n^{(t+1)}$ ### Voting Score and Margin ![](https://i.imgur.com/U70Xc1q.png) - 之前說過,linear blending 可以視為 linear model + hypotheses as transform,因此**我們把 $\alpha_t$ 看成是 $w_i$;$g_t(x_n)$ 看成是 feature transform $\phi_i(x_n)$** - $w_i$ 即轉換後的第 $i$ 個 feature 的權重 - 回顧 SVM,$\frac{y_n w^T\phi(x_n)}{\|w\|}$ 是 「$x_n$ 距離邊界有多遠」,即 margin - > Q: 可能要回去複習+確認一下QQ - 注意 $b$ 並不影響幾何意義 - 這樣 $y_n(\textrm{voting score})$ 就可以看成是未正規化的 margin - 若是 SVM,則我們希望 margin 越大越好 - margin 越大 - $\leftrightarrow\exp(-y_n(\textrm{voting score}))$ 越小 - $\leftrightarrow u_n^{(T+1)}$ 越小 - 而 AdaBoost 有一個性質:$\sum_{n=1}^N u_n^{(t)}$ 會隨著 $t$ 而越來越小,這樣也就可以導致 large margin 的效果 - 等等就來證明 權重加總會越來越小 ### AdaBoost Error Function ![](https://i.imgur.com/qsJIKCy.png) - 如果說 AdaBoost 試著減少 $\sum_{n=1}^N u_n^{(t)}$,也可以說是減少 $\sum_{n=1}^N u_n^{(T+1)}=\frac 1 N \sum_{n=1}^N \exp(-y_n\sum_{t=1}^T \alpha_t g_t(x_n))$ - 我們把 $\sum_{t=1}^T \alpha_t g_t(x_n)$ 當成 score $s$,可以看出我們在 minimize $\exp(-ys)$,而這也是 0/1 error 的 upper bound - $\widehat{err}_{ADA}(s,y)=\exp(-ys)$ 這又稱做 **exponential error measure** ### Gradient Descent on AdaBoost Error Function ![](https://i.imgur.com/juKAN8e.png) - 但是 AdaBoost 真的可以做到好嗎? - > Q: 這裡指的是 minimize $\sum_{n=1}^N u_n^{(T+1)}$ 嗎? - 回顧基石教的 gradient descent,我們要找一個最好的向量 $v$ (方向),而我們在基石已經推導出最好的方向就是負的梯度的方向 - 那麼我們現在跟 gradient descent 一樣,要找一個最好的函數(函數可以視為向量),來優化 error function $\hat E_{ADA}$ - 會說函數可以視為向量,是因為函數跟向量都是 input 一個數字(整數/實數),然後會 output 一個 scalar - 這樣 $\sum_{\tau=1}^{t-1}\alpha_\tau g_\tau(x_n)$ 部分就可以視為「現在的位置」 - 而 $h(\cdot)$ (也就是新的 $g_t$) 就可以視為最佳的方向 - 又紫色部分可以化簡為 $u_n^{(t)}$,因此 $\widehat E_{ADA} = \sum_{n=1}^N u_n^{(t)}\exp(-y_n\eta h(x_n))$ - 在原點附近做泰勒展開 (線性逼近),可以得到 $\sum_{n=1}^N u_n^{(t)}(1-y_n \eta h(x_n))$ - > Q: 可能要回去複習一下泰勒展開... - 然後就可以拆成 $\sum_{n=1}^N u_n^{(t)} - \eta \sum_{n=1}^N u_n^{(t)}y_n h(x_n)$ - 前面那項(在 gradient descent 所扮演的角色?) 就是「目前的 $E_{in}$」了 - > Q: 是因為這項是已知的? 還是真的是 $E_{in}$? - 好像是因為是目前以 $u$ 為 weight 的 0/1 error? - 既然要找到一個 $h$ 來最小化整個式子,那就跟前面那項無關啦,所以我們專心最小化後面那項的 $\sum_{n=1}^N u_n^{(t)}(-y_n h(x_n))$ ### Learning Hypothesis as Optimization ![slide](https://i.imgur.com/oL01if9.png) - 注意這裡 $h(x)$ 跟 $y$ 一樣是 $\in\{+1,-1\}$ - 利用以上性質分別討論後可以得到 $\sum_{n=1}^N u_n^{(t)}(-y_n h(x_n))=-\sum_{n=1}^N u_n^{(t)}+2E_{in}^{u^{(t)}}(h)\cdot N$ - $E_{in}^{u^{(t)}}(h)$ 應該就是以 $u$ 為權重的 0/1 error - 也就是說 AdaBoost 找一個好的 $g_t=h$ 這樣的「方向」來讓 $E_{in}^u$ 變小?? - > Q: 不太確定結論是不是這樣,以及因果關係,可能要再梳理一下整個脈絡 ### Deciding Blending Weight as Optimization ![](https://i.imgur.com/6iIrSvo.png) - 我們除了想找出最好的 $g_t$,其實也想在找到 $g_t$ 之後,找出最好的 $\eta$ (跨大步一點),因為 $\eta$ 太小的話就要求很多個 $g_t$,cost 太大 - 這又叫 steepest gradient descent - 利用剛剛說的 $h(x)\in\{+1,-1\}$ 就可以故技重施,分別討論 - 第 $n$ 筆 data 若預測正確,summation 當中的該項就會是 $u_n^{(t)}\exp(-\eta)$ - 這樣的 data 占全部的 $1-\epsilon_t$ - 第 $n$ 筆 data 若預測錯誤,summation 當中的該項就會是 $u_n^{(t)}\exp(\eta)$ - 這樣的 data 占全部的 $\epsilon_t$ - 所以 $\widehat E_{ADA}=(\sum_{n=1}^N u_n^{(t)})((1-\epsilon_t)\exp(-\eta)+\epsilon_t \exp(\eta))$ - 最佳解在微分$\frac{\partial\widehat E_{ADA}}{\partial\eta}=0$,可以導出 $\eta_t=\ln\sqrt{\frac{1-\epsilon_t}{\epsilon_t}}=\alpha_t$ - 所以 AdaBoost 的另外一個解釋就是,叫後面的 algorithm 找出一個好的方向(函數) $g_t$,做 steepest gradient descent - 而且這個 gradient 是 functional gradient (因為是在函數的世界做 gradient descent) ## [Gradient Boosting](https://www.coursera.org/learn/machine-learning-techniques/lecture/LsWkO/gradient-boosting) ### Gradient Boosting for Arbitrary Error Function ![](https://i.imgur.com/3ffh1Z2.png) - 之前的討論已經得知:AdaBoost 是在做兩個 optimization - **AdaBoost**: $\min_\limits{\eta}\min_\limits{h}\frac 1 N\sum_\limits{n=1}^N\exp(-y_n(\sum_\limits{\tau=1}^{t-1}\alpha_\tau g_\tau(x_n)+\eta h(x_n)))$ - 那我們可不可以不 minimize exponential error 呢? 可不可以 minimize cross entropy / square error 之類的? 擴展它? 這就叫 gradient boosting。 - **GradientBoost**: $\min_\limits \eta \min_\limits h \frac 1 N \sum_\limits{n=1}^N err(\sum_\limits{\tau=1}^{t-1}\alpha_\tau g_\tau(x_n)+\eta h(x_n),y_n)$ ### GradientBoost for Regression ![](https://i.imgur.com/AcMdvuS.png) - 現在先把 $\sum_\limits{\tau=1}^{t-1} \alpha_\tau g_\tau(x_n)$ 寫做 $s_n$ (即第 $n$ 筆資料的 score) - 想要找到 $\eta$ 跟 $h$ 使得 error function $(s-y)^2$ 加總最小 - (做泰勒展開?) 得到 $\frac 1 N\sum_{n=1}^N err(s_n,y_n)+\frac 1 N\sum_{n=1}^N\eta h(x_n)\frac{\partial err}{\partial s}|_{s_n}$ - 微分要在現在的位置 (也就是 $s_n$) 取值 - > Q: 回去複習泰勒展開啦!! - 因為是要找 $h$ 所以重點是把後面那項 $\sum_{n=1}^N h(x_n)\cdot 2(s_n-y_n)$ 做到好 - 但是如果不限制 $h$ 的話就有個問題 - $s_n-y_n$ 如果是正的,那就讓 $h(x_n)$ 是負無限大 - $s_n-y_n$ 如果是負的,就讓 $h(x_n)$ 是正無限大。 - 也就是說讓 $h(x_n)=-\infty\cdot(s_n-y_n)$ 即可。 - 回想,當做 gradient descent 的時候我們不希望它變負無限大,我們只是想要找到對的方向,因此直接限制他的大小為 1。 - > Q: 雖然負無限大怪怪的,但為何不行? - 反正之後會找一個 $\eta$ 來決定要跨多大步。 ### Learning Hypothesis as Optimization (GradientBoost) ![slide](https://i.imgur.com/d2WwqRu.png) - 這樣的話我們也來照著當初推導 gradient descent 的方式,限制 $h(x)$ 的大小 - 把本來想要 minimize 的 $2h(x_n)(s_n-y_n)$ 加上 $h(x_n)^2$ - 然後發現可以整理成平方的形式 $(h(x_n)-(y_n-s_n))^2-(y_n-s_n)^2$ - 而這個 $(y_n-s_n)^2$ 對 $h$ 來說是 constant 因此 minimize 過程這項可以省略 - 發現最終式子 $\min_\limits h \sum_{n=1}^N(h(x_n)-(y_n-s_n))^2$ 其實就是在解一個 **regression with residual** 的問題 - 註:residual 即 $y_n-s_n$ ### Deciding Blending Weight as Optimization ![slide](https://i.imgur.com/X2pC1y9.png) - 找到 $g_t$ 之後要找 $\eta$ 其實就相當於做 linear regression - input 是經由 $g_t$ transform 之後的 input - output 是 residual ### Putting Everything Together ![slide](https://i.imgur.com/RWQDReT.png) - 這就是 AdaBoostDTree 的 regression 版本 ## [Summary of Aggregation Models](https://www.coursera.org/learn/machine-learning-techniques/lecture/u1D3V/summary-of-aggregation-models) ### Map of Blending Models ![](https://i.imgur.com/FYys6Ug.png) - 「已給定」數個 model,如何做結合 - uniform blending - 簡單且穩定 - non-uniform blending (linear or nonlinear) - 強大,但要面臨 overfitting 的風險 - linear - nonlinear - 又稱 stacking - > Q: 那 linear 算嗎? 要回去複習 Blending 了... ### Map of Aggregation-Learning Models ![](https://i.imgur.com/T3dwMU6.png) ### Map of Aggregation of Aggregation Models ![](https://i.imgur.com/RQI3IdE.png) ### Specialty of Aggregation Models ![](https://i.imgur.com/6AYh9D5.png) - aggregation (a.k.a. **ensemble**) - 不同的 aggregation 可以有不同的效果 ### Summary ![](https://i.imgur.com/7mqM5fZ.png)