Skip to content

Blending 與 Bagging:把多個假說合起來為什麼更好|台大林軒田 機器學習技法 第 7 堂

2026年9月30日1 分鐘
TL;DR手上有 T 個假說 gₜ 時,除了用 validation 挑一個,還可以一人一票(uniform blending)、學一組票數(linear blending)或再學一個模型來組合(any blending,也叫 stacking)。這堂用一段六行的代數證明:平方誤差下,平均後的 G 不會比 gₜ 的平均表現差,差距就是 gₜ 之間的分散程度,也就是 variance。最後用 bootstrap 從唯一一份資料重抽出 T 份,各訓練一個 gₜ 再投票,就是 bagging。

查詞與收藏

正在載入查詞工具…

🌏 English version

影片狀態:已附影片。 這篇依官方 MOOC 講義 207_handout.pdf 與四支官方影片的機器轉錄逐字稿寫成,公式以講義為準;逐字稿未經人工校對。每一節開頭附該節的官方影片與大致的時間區段。文中的頁碼指投影片右下角的編號(0/23 到 23/23),寫「課堂上」的地方是轉述影片裡的說法。

這是台大林軒田 機器學習基石與技法 導讀裡的技法第 7 堂。講義第 1 頁的 Roadmap 把技法分成三種處理特徵的技巧,前六堂都屬於第一種 Embedding Numerous Features: Kernel Models,到上一堂技法第 6 堂:支援向量迴歸收尾。這堂開始第二種:Combining Predictive Features: Aggregation Models。題目換成:手上已經有好幾個假說(hypothesis),每一個都有點預測能力,怎麼把它們合起來,得到比單獨用任何一個更好的結果。課堂上說,這個家族會用五堂課來談,每堂挑幾個不同的做法介紹,這堂是第一堂。

先備是基石第 15 堂:驗證的 EvalE_{\text{val}} 與 g−g^- 記號、基石第 9 堂:線性迴歸的平方誤差、基石第 12 堂:非線性轉換「先轉換、再跑線性模型」的流程,以及期望值的基本運算。讀完之後,你應該能自己重推 uniform blending 的誤差拆解,說出 bias 與 variance 各是哪一項;能照步驟做 linear blending 與 any blending,並解釋為什麼票數要在驗證資料上學;能寫出 bagging 的流程,算出一份 bootstrap 資料長什麼樣子。

為什麼要把假說合起來:從選一個朋友到讓大家投票

YouTube:Blending and Bagging :: Motivation of Aggregation @ Machine Learning Techniques (機器學習技法)

(影片 00:17–02:03 回顧上一堂並預告主題,02:03–05:18 是朋友報股票的故事,05:18–10:34 把四種做法寫成式子,10:34–12:59 談 selection 的侷限,12:59–17:49 是兩張示意圖,之後是 Fun Time。)

四種用朋友的方法

講義第 2 頁的故事是這樣的:你有 TT 個朋友 g1,…,gTg_1, \dots, g_T,每個人都會預測某支股票明天漲還是跌,朋友 tt 的預測記成 gt(x)g_t(\mathbf{x})。課堂上直接假設有 15 個朋友,有人說漲、有人說跌。聽完之後你可以:

  1. 挑一個最可信的人,只聽他的。 依每個人平常的表現來選。講義在旁邊標了 validation:這就是基石第 15 堂的模型選擇。
  2. 所有人一人一票。 多數人說漲就當漲。
  3. 投票,但票數不一樣。 比較可信的人多給幾票。
  4. 看情況決定聽誰的。 講義寫的是:如果「朋友 tt 滿足某個條件」,才給他票。課堂上舉的例子是,有人擅長科技類股、有人擅長傳統產業,看科技類股時參考甲、乙、丙的意見,看傳統產業時改成參考甲和丁。

講義把這類做法統稱 aggregation models:把假說混合(mix)或組合(combine)起來,希望表現更好。

四種方法寫成式子

第 3 頁把上面四件事各寫成一行。漲記成 +1+1、跌記成 −1-1,最後的結果記成大寫的 GG。

選一個(select):

G(x)=gt∗(x),t∗=argmin⁡t∈{1,2,…,T} Eval(gt−)G(\mathbf{x}) = g_{t_*}(\mathbf{x}), \qquad t_* = \underset{t \in \{1, 2, \dots, T\}}{\operatorname{argmin}}\ E_{\text{val}}(g_t^-)

gt−g_t^- 是只用訓練資料(不含驗證資料)學出來的版本,用它算驗證誤差來選;選定 t∗t_* 之後回傳的是用全部資料學的 gt∗g_{t_*},這是基石第 15 堂的做法。

一人一票(uniform):

G(x)=sign⁡(∑t=1T1⋅gt(x))G(\mathbf{x}) = \operatorname{sign}\Big(\sum_{t=1}^{T} 1 \cdot g_t(\mathbf{x})\Big)

把所有人的 ±1\pm 1 加起來,看總和是正是負。

票數不同(non-uniform):

G(x)=sign⁡(∑t=1Tαt⋅gt(x)),αt≥0G(\mathbf{x}) = \operatorname{sign}\Big(\sum_{t=1}^{T} \alpha_t \cdot g_t(\mathbf{x})\Big), \qquad \alpha_t \ge 0

αt\alpha_t 是朋友 tt 的票數。課堂上說票數當然不能是負的,但可以是 0,代表完全不需要這個人的票。

看條件(conditional):

G(x)=sign⁡(∑t=1Tqt(x)⋅gt(x)),qt(x)≥0G(\mathbf{x}) = \operatorname{sign}\Big(\sum_{t=1}^{T} q_t(\mathbf{x}) \cdot g_t(\mathbf{x})\Big), \qquad q_t(\mathbf{x}) \ge 0

票數從一個固定的數變成 x\mathbf{x} 的函數。課堂上的說明是:輸入裡如果記著這是哪一類股票,qt(x)q_t(\mathbf{x}) 就能依這個資訊決定要不要問朋友 tt、給他幾票。

這四種是一層包一層的關係。講義用 ⟦⋅⟧\llbracket \cdot \rrbracket 表示「條件成立時是 1、不成立時是 0」:

比較大的形式怎麼設定就退回比較小的形式
non-uniformαt=⟦Eval(gt−) 最小⟧\alpha_t = \llbracket E_{\text{val}}(g_t^-) \text{ 最小} \rrbracket:只有驗證誤差最小的那個人拿到 1 票,其他人 0 票,就是 select
non-uniformαt=1\alpha_t = 1:就是 uniform
conditionalqt(x)=αtq_t(\mathbf{x}) = \alpha_t:不管什麼條件都給同樣的票,就是 non-uniform

所以 conditional 包含了前面全部。講義的總結是 aggregation models: a rich family。

只選一個的侷限

第 4 頁回頭看 selection。它簡單、常用,但有兩件事要記得:

  • 如果用 Ein(gt)E_{\text{in}}(g_t) 取代 Eval(gt−)E_{\text{val}}(g_t^-) 來選,要付出 dVCd_{\text{VC}} 上的複雜度代價。這是基石第 15 堂講過的,這堂談 linear blending 時還會再用一次。
  • selection 要成功,候選裡得有一個夠強的 gt−g_t^-,才能保證 EvalE_{\text{val}} 小、進而 EoutE_{\text{out}} 小。課堂上講得很直白:如果每個 gt−g_t^- 都弱,再怎麼選也只是從一堆不好的裡面挑一個。

講義把兩者對照成兩句話。selection 靠的是一個強的假說,課堂上稱為強人領導。aggregation 問的是:如果手上是很多個可能比較弱的假說,能不能靠合起來做得更好?

兩張圖:合起來可以變強,也可以變穩

第 5 頁用兩張圖回答「為什麼合起來可能有用」。兩張圖都是二維平面上的圈圈(正例)與叉叉(負例)。

左圖:弱的合起來變強。 規定只能用水平線或垂直線來分類。這份資料的圈圈在右上、叉叉在左下,看起來至少要一條斜線才分得開,任何單獨一條水平線或垂直線都分不好。圖上畫了一條水平線與兩條垂直線,三條各自都不完美;讓它們一人一票之後,得到的邊界是一條先往下、往右、再往下的階梯狀折線,把圈圈與叉叉完全分開。講義的註解是:把不同的弱假說均勻混合,G(x)G(\mathbf{x}) 變「強」了,效果像特徵轉換(feature transform)。

右圖:很多條都對的線,合起來取中間。 這份資料線性可分,能把它完全分對的線有無限多條。PLA 隨機執行時,停在其中哪一條都有可能,圖上畫了一堆灰色的線。讓這些灰線投票,結果是中間那條黑線。課堂上的解釋是:灰線散布在所有可行的線之間,投票的結果會靠近中庸的那一條,不會緊貼著某個圈圈或某個叉叉;而中庸的線大致就是邊界比較胖的線,所以效果像 SVM 的 large margin,也就是正則化(regularization)。講義的註解是 G(x)G(\mathbf{x}) 變得「moderate」。

課堂上特別點出這兩件事在基石裡是相反的方向:特徵轉換像踩油門,讓模型更有能力;正則化像踩煞車,讓模型不要那麼強。同樣是讓假說投票,卻兩種效果都可能出現。把 aggregation 做對,就像油門和煞車都控制好。講義這一頁的結論是 proper aggregation ⟹ better performance,兩個效果後面都打了問號;本文的理解是,這兩張圖給的是直覺,還不是證明。一個效果對付模型能力不足,一個對付過擬合,到 aggregation 的最後一堂技法第 11 堂:梯度提升決策樹做總整理時會再出現一次。

Fun Time:三個 decision stump 投票

題目(第 6 頁): 有三個從 R\mathbb{R} 對到 {−1,+1}\{-1, +1\} 的 decision stump:g1(x)=sign⁡(1−x)g_1(x) = \operatorname{sign}(1 - x)、g2(x)=sign⁡(1+x)g_2(x) = \operatorname{sign}(1 + x)、g3(x)=−1g_3(x) = -1。三個假說一人一票,得到的 G(x)G(x) 是哪一個?

  1. 2⟦∣x∣≤1⟧−12\llbracket \lvert x \rvert \le 1 \rrbracket - 1
  2. 2⟦∣x∣≥1⟧−12\llbracket \lvert x \rvert \ge 1 \rrbracket - 1
  3. 2⟦x≤−1⟧−12\llbracket x \le -1 \rrbracket - 1
  4. 2⟦x≥+1⟧−12\llbracket x \ge +1 \rrbracket - 1

先讀懂選項的寫法:⟦⋅⟧\llbracket \cdot \rrbracket 成立時是 1,2×1−1=+12 \times 1 - 1 = +1;不成立時是 0,2×0−1=−12 \times 0 - 1 = -1。所以選項 1 的意思是「∣x∣≤1\lvert x \rvert \le 1 時輸出 +1+1,其他地方輸出 −1-1」。decision stump 是只看一個維度、只切一刀的分類器,g1g_1 在 x=1x = 1 切、g2g_2 在 x=−1x = -1 切,g3g_3 是不管輸入都說 −1-1 的常數。

答案:1。 把數線分成三段,逐段數票:

區域g1g_1g2g_2g3g_3票數總和GG
x<−1x < -1+1+1−1-1−1-1−1-1−1-1
−1<x<1-1 < x < 1+1+1+1+1−1-1+1+1+1+1
x>1x > 1−1-1+1+1−1-1−1-1−1-1

只有中間那一段同時拿到 g1g_1 與 g2g_2 的兩張正票,贏過 g3g_3 的一張反對票。選項 2 把內外弄反了。選項 3 與 4 各只有一個切點,但投票的結果有兩個切點。

本文補充:剛好在 x=±1x = \pm 1 的兩個點,其中一個 stump 算的是 sign⁡(0)\operatorname{sign}(0)。把 sign⁡(0)\operatorname{sign}(0) 當成 +1+1,這兩個點也是 +1+1,才會跟選項 1 的「≤\le」完全一致。

講義的解答補了一句:三個 decision stump 合起來,可以形成比較複雜的假說。每個 stump 只能把數線切成左右兩邊,GG 卻切出「中間一段」。課堂上說這有點像第 5 頁左邊那張圖:把一堆簡單的假說合起來,做出比較複雜的東西。

一人一票為什麼有用:uniform blending 與誤差的拆解

YouTube:Blending and Bagging :: Uniform Blending @ Machine Learning Techniques (機器學習技法)

(影片 00:00–04:17 是分類的投票,04:17–06:46 是迴歸的平均,06:46–15:24 推導誤差的拆解,15:24–19:54 是虛擬流程與 bias–variance,之後是 Fun Time。)

blending 這個字,以及分類的投票

課堂上先解釋用詞。blending 是果汁機在做的事:把一堆假說丟進去打成一杯綜合果汁。這個字用在「gtg_t 已經在手上」的情況,例如你帶一個三人小組,三個人各交給你一個 gg,問題只剩怎麼合。每個 gtg_t 地位相同、一人一票,叫 uniform blending。

二元分類的式子(第 7 頁)就是前面那一行:

G(x)=sign⁡(∑t=1T1⋅gt(x))G(\mathbf{x}) = \operatorname{sign}\Big(\sum_{t=1}^{T} 1 \cdot g_t(\mathbf{x})\Big)

講義列了兩種極端情況:

  • 所有 gtg_t 都一樣(講義戲稱 autocracy,獨裁):投票的結果就是那一個 gtg_t,沒有任何好處。
  • gtg_t 彼此很不同(diversity 加 democracy):多數可以修正少數。

第 7 頁右邊的圖就是第 5 頁左圖的實際投票結果。課堂上的說明是:一條水平線與兩條垂直線把平面切成六塊,每一塊裡三條線各說一個答案,取兩票的那一邊;右上那一帶整塊是圈圈,左下那一帶整塊是叉叉,階梯狀的邊界就是這樣數票數出來的。「少數服從多數」能修正錯誤,背後的假設是少數那一方比較可能是犯錯的。

多類別分類也能投票,只是不再加加減減,改成數每個類別得幾票,選最高票:

G(x)=argmax⁡1≤k≤K∑t=1T⟦gt(x)=k⟧G(\mathbf{x}) = \underset{1 \le k \le K}{\operatorname{argmax}} \sum_{t=1}^{T} \llbracket g_t(\mathbf{x}) = k \rrbracket

本文舉個例子:五個假說對同一個 x\mathbf{x} 分別說類別 2、1、2、3、2,類別 2 拿到三票,G(x)=2G(\mathbf{x}) = 2。

迴歸:把輸出平均

迴歸的輸出是實數,第 8 頁的做法是平均:

G(x)=1T∑t=1Tgt(x)G(\mathbf{x}) = \frac{1}{T}\sum_{t=1}^{T} g_t(\mathbf{x})

為什麼要除以 TT?課堂上的例子是:正確答案是 2,十個人都預測在 2 附近,直接加起來會變成 20。要一人一票又要落在同樣的範圍,就得除以人數。

兩種極端情況跟分類一樣。gtg_t 都相同時,平均還是它自己。gtg_t 不同時,講義寫的是:有些 gt(x)>f(x)g_t(\mathbf{x}) > f(\mathbf{x}),有些 gt(x)<f(x)g_t(\mathbf{x}) < f(\mathbf{x}),平均「可能」比個別的更準。高估與低估會互相抵銷一部分。

講義把兩頁收成一句:假說夠多樣(diverse)時,連最簡單的 uniform blending 都可能比任何單一假說好。這句話裡的「可能」,接下來用一段代數變成確定的不等式。

推導:平均誤差等於分散程度加上 G 的誤差

第 9 頁要證明的是:gtg_t 的平均平方誤差,與 GG 的平方誤差,剛好差一項「gtg_t 有多分散」。

先約定記號。課堂上說,每個函數後面都拖著 (x)(\mathbf{x}) 太麻煩,所以先固定一個 x\mathbf{x},把 gt(x)g_t(\mathbf{x})、f(x)f(\mathbf{x})、G(x)G(\mathbf{x}) 簡寫成 gtg_t、ff、GG,三個都只是數字。另外用 avg⁡\operatorname{avg} 表示「對 t=1,…,Tt = 1, \dots, T 加總再除以 TT」,所以 G=avg⁡(gt)G = \operatorname{avg}(g_t)。課堂上說寫成 avg 比加總符號平易近人。

這個 avg⁡\operatorname{avg} 有兩個性質,整段推導只靠這兩個:它是線性的(加法可以拆開、常數可以提出來),以及跟 tt 無關的量取平均還是自己。ff 與 GG 都跟 tt 無關。

avg⁡((gt−f)2)=avg⁡(gt2−2gtf+f2)=avg⁡(gt2)−2Gf+f2=avg⁡(gt2)−G2+(G−f)2=avg⁡(gt2)−2G2+G2+(G−f)2=avg⁡(gt2−2gtG+G2)+(G−f)2=avg⁡((gt−G)2)+(G−f)2\begin{aligned} \operatorname{avg}\big((g_t - f)^2\big) &= \operatorname{avg}\big(g_t^2 - 2g_t f + f^2\big) \\ &= \operatorname{avg}\big(g_t^2\big) - 2Gf + f^2 \\ &= \operatorname{avg}\big(g_t^2\big) - G^2 + (G - f)^2 \\ &= \operatorname{avg}\big(g_t^2\big) - 2G^2 + G^2 + (G - f)^2 \\ &= \operatorname{avg}\big(g_t^2 - 2g_t G + G^2\big) + (G - f)^2 \\ &= \operatorname{avg}\big((g_t - G)^2\big) + (G - f)^2 \end{aligned}

每一行做了什麼:

  1. 展開平方。
  2. 把平均拆進三項。 第一項留著。中間項 avg⁡(2gtf)=2favg⁡(gt)=2Gf\operatorname{avg}(2g_t f) = 2f \operatorname{avg}(g_t) = 2Gf,因為 ff 是常數、avg⁡(gt)\operatorname{avg}(g_t) 就是 GG。最後一項 avg⁡(f2)=f2\operatorname{avg}(f^2) = f^2。
  3. 湊出 (G−f)2(G - f)^2。 我們的目標裡有 GG 的誤差 (G−f)2=G2−2Gf+f2(G - f)^2 = G^2 - 2Gf + f^2,手上有 −2Gf+f2-2Gf + f^2,少一個 G2G^2。課堂上的說法是先借一項 G2G^2 來,再還它一項,所以多了 −G2-G^2。
  4. 把 −G2-G^2 寫成 −2G2+G2-2G^2 + G^2。 課堂上說這是變個魔術,目的是讓前半段也能湊成一個平方。
  5. 把 GG 放回平均裡面。 2G2=2G⋅avg⁡(gt)=avg⁡(2gtG)2G^2 = 2G \cdot \operatorname{avg}(g_t) = \operatorname{avg}(2g_t G),這一步把其中一個 GG 還原成「gtg_t 的平均」;G2=avg⁡(G2)G^2 = \operatorname{avg}(G^2),因為 GG 跟 tt 無關。
  6. 認出完全平方。 gt2−2gtG+G2=(gt−G)2g_t^2 - 2g_t G + G^2 = (g_t - G)^2。

結論是對這個固定的 x\mathbf{x}:

avg⁡((gt−f)2)⏟gt 的平均誤差=avg⁡((gt−G)2)⏟gt 離 G 多遠+(G−f)2⏟G 的誤差\underbrace{\operatorname{avg}\big((g_t - f)^2\big)}_{g_t \text{ 的平均誤差}} = \underbrace{\operatorname{avg}\big((g_t - G)^2\big)}_{g_t \text{ 離 } G \text{ 多遠}} + \underbrace{(G - f)^2}_{G \text{ 的誤差}}

數值例子:三個預測值

以下是本文自擬的例子,不在講義上。固定一個 x\mathbf{x},真正的答案是 f=6f = 6,三個假說的預測是 g1=2g_1 = 2、g2=4g_2 = 4、g3=9g_3 = 9。兩個低估、一個高估。

  • G=(2+4+9)/3=5G = (2 + 4 + 9)/3 = 5。
  • 左邊:avg⁡((gt−f)2)=(16+4+9)/3=29/3≈9.67\operatorname{avg}\big((g_t - f)^2\big) = (16 + 4 + 9)/3 = 29/3 \approx 9.67。
  • 分散程度:avg⁡((gt−G)2)=(9+1+16)/3=26/3≈8.67\operatorname{avg}\big((g_t - G)^2\big) = (9 + 1 + 16)/3 = 26/3 \approx 8.67。
  • GG 的誤差:(5−6)2=1(5 - 6)^2 = 1。

26/3+1=29/326/3 + 1 = 29/3,等式成立。三個假說的平方誤差分別是 16、4、9,平均起來將近 10;平均後的 GG 只有 1,這個例子裡 GG 比三個都好。

但等式保證的只有「不輸給平均」。把預測換成 g1=6g_1 = 6、g2=2g_2 = 2、g3=1g_3 = 1,ff 仍是 6:G=3G = 3,GG 的誤差是 9,gtg_t 的平均誤差是 (0+16+25)/3=41/3≈13.67(0 + 16 + 25)/3 = 41/3 \approx 13.67,分散程度是 (9+1+4)/3=14/3(9 + 1 + 4)/3 = 14/3,14/3+9=41/314/3 + 9 = 41/3 仍然成立。可是 g1g_1 的誤差是 0,比 GG 好。課堂上講的就是這件事:最好的那個 gtg_t 有沒有比 GG 好,不知道;能確定的是 GG 比「隨便挑一個 gtg_t」的期望表現好,因為你事先並不知道該挑哪一個。

從一個點到整體的 Eout

上面的等式對每一個 x\mathbf{x} 都成立,所以可以對產生 x\mathbf{x} 的分布取期望值。講義用 E\mathcal{E} 表示這個期望。平方誤差的期望值就是 EoutE_{\text{out}}:E (gt−f)2=Eout(gt)\mathcal{E}\,(g_t - f)^2 = E_{\text{out}}(g_t)、E (G−f)2=Eout(G)\mathcal{E}\,(G - f)^2 = E_{\text{out}}(G)。avg⁡\operatorname{avg} 與 E\mathcal{E} 都是線性運算,先後順序可以交換,於是第 9 頁下半部寫成

avg⁡(Eout(gt))=avg⁡(E (gt−G)2)+Eout(G) ≥ Eout(G)\operatorname{avg}\big(E_{\text{out}}(g_t)\big) = \operatorname{avg}\big(\mathcal{E}\,(g_t - G)^2\big) + E_{\text{out}}(G) \ \ge\ E_{\text{out}}(G)

中間那一項是平方的平均再取期望,不可能是負的,把它丟掉就得到不等式。在平方誤差的迴歸問題裡,uniform blending 的 GG 保證不比 gtg_t 的平均表現差,兩者的差距正好是 gtg_t 之間的分散程度:gtg_t 愈不一樣,GG 贏得愈多;gtg_t 完全相同時那一項是 0,沒有任何好處。前面說的「要多樣」在這裡有了精確的意思。

本文補充:這個結論是對迴歸的平方誤差證的。分類的投票沒有同樣漂亮的恆等式,自我檢查第 2 題用機率算一個分類的例子。

一組特別的 gₜ:bias 與 variance

第 10 頁把同一個等式用在一組特別的 gtg_t 上。想像一個虛擬的流程,對 t=1,2,…,Tt = 1, 2, \dots, T:

  1. 從分布 PNP^N 拿到一份新的、大小為 NN 的資料 Dt\mathcal{D}_t(i.i.d.)。
  2. 用演算法 A\mathcal{A} 學出 gt=A(Dt)g_t = \mathcal{A}(\mathcal{D}_t)。

課堂上說這個流程是抽象的,哪裡不實際先留著沒講;到 bagging 那一節會看到,問題在於現實中沒有人能每一輪都拿到一份全新的資料。把 TT 推到無限大,平均的結果記成 gˉ\bar{g}:

gˉ=lim⁡T→∞G=lim⁡T→∞1T∑t=1Tgt=ED A(D)\bar{g} = \lim_{T \to \infty} G = \lim_{T \to \infty} \frac{1}{T}\sum_{t=1}^{T} g_t = \underset{\mathcal{D}}{\mathcal{E}}\ \mathcal{A}(\mathcal{D})

gˉ\bar{g} 是演算法 A\mathcal{A} 看過各式各樣的資料之後,產生的假說的期望值。把 GG 換成 gˉ\bar{g},前面的等式變成

avg⁡(Eout(gt))=avg⁡(E (gt−gˉ)2)+Eout(gˉ)\operatorname{avg}\big(E_{\text{out}}(g_t)\big) = \operatorname{avg}\big(\mathcal{E}\,(g_t - \bar{g})^2\big) + E_{\text{out}}(\bar{g})

本文補充:等式換了對象仍然成立,是因為推導只用到平均的線性,以及 GG 是 gtg_t 的平均。把「對 tt 平均」換成「對資料 D\mathcal{D} 取期望」,這兩個性質都還在。

講義替三項各取了名字:

式子裡的項講義的說法名稱
avg⁡(Eout(gt))\operatorname{avg}\big(E_{\text{out}}(g_t)\big)expected performance of A\mathcal{A}:演算法的期望表現—
Eout(gˉ)E_{\text{out}}(\bar{g})performance of consensus:共識本身的表現bias
avg⁡(E (gt−gˉ)2)\operatorname{avg}\big(\mathcal{E}\,(g_t - \bar{g})^2\big)expected deviation to consensus:各個 gtg_t 偏離共識的期望程度variance

gˉ\bar{g} 叫共識(consensus),是所有 gtg_t 的共同意見。課堂上的白話是:bias 看的是這個共識離我們真正要的 ff 還有多遠;variance 看的是這群 gtg_t 七嘴八舌,意見到底有多亂。一個演算法的平均表現可以拆成這兩項,統計的書上叫 bias–variance decomposition。

講義這一頁的結論是:uniform blending 降低的是 variance,換來比較穩定的表現。課堂上的說法是,平均的過程就是在消除「意見有多亂」這一項的影響。等式本身也看得出來:改用共識 gˉ\bar{g} 之後,誤差只剩 Eout(gˉ)E_{\text{out}}(\bar{g}) 這一項 bias,variance 那一項整個消失。bias 則不會因為平均而變小,共識離 ff 有多遠就是多遠。

數值例子:一筆資料學一個常數

以下是本文自擬的例子,不在講義上,目的是把三項各算出一個數字。

  • 輸入 xx 等機率取 −1-1、00、11,目標函數 f(x)=x2f(x) = x^2,所以 ff 的值分別是 1、0、1。
  • 每份資料只有 N=1N = 1 筆。演算法 A\mathcal{A} 回傳通過那一筆的常數假說 g(x)=y1g(x) = y_1。

資料有三種等機率的可能,學到的 gg 分別是常數 1、0、1。常數假說 g(x)=cg(x) = c 的 EoutE_{\text{out}} 是 13[(c−1)2+c2+(c−1)2]\frac{1}{3}\big[(c - 1)^2 + c^2 + (c - 1)^2\big]:

抽到的 xx學到的 ggEout(g)E_{\text{out}}(g)(g−gˉ)2(g - \bar{g})^2
−1-11113\frac{1}{3}19\frac{1}{9}
000023\frac{2}{3}49\frac{4}{9}
111113\frac{1}{3}19\frac{1}{9}
  • 共識:gˉ=(1+0+1)/3=23\bar{g} = (1 + 0 + 1)/3 = \frac{2}{3}。
  • 演算法的期望表現:(13+23+13)/3=49(\frac{1}{3} + \frac{2}{3} + \frac{1}{3})/3 = \frac{4}{9}。
  • variance:(19+49+19)/3=29(\frac{1}{9} + \frac{4}{9} + \frac{1}{9})/3 = \frac{2}{9}。因為 gg 是常數,(g−gˉ)2(g - \bar{g})^2 不隨 xx 變,對 xx 的期望就是它自己。
  • bias:Eout(gˉ)=13[19+49+19]=29E_{\text{out}}(\bar{g}) = \frac{1}{3}\big[\frac{1}{9} + \frac{4}{9} + \frac{1}{9}\big] = \frac{2}{9}。

29+29=49\frac{2}{9} + \frac{2}{9} = \frac{4}{9},等式成立。這個結果的意思是:只看一筆資料就下結論的演算法,期望誤差 49\frac{4}{9} 裡有一半來自「每次看到的資料不同,學到的東西跟著晃」。如果能把所有可能的 gg 平均起來,誤差降到 29\frac{2}{9},比三種 gg 的任何一個(13\frac{1}{3} 或 23\frac{2}{3})都低。剩下的 29\frac{2}{9} 是常數假說本來就表達不了 x2x^2 的部分,再怎麼平均也消不掉。

Fun Time:線性假說平均之後是什麼

題目(第 11 頁): 把 uniform blending G(x)=1T∑t=1Tgt(x)G(\mathbf{x}) = \frac{1}{T}\sum_{t=1}^{T} g_t(\mathbf{x}) 用在線性迴歸的假說 gt(x)=innerprod⁡(wt,x)g_t(\mathbf{x}) = \operatorname{innerprod}(\mathbf{w}_t, \mathbf{x}) 上。哪一個最能描述得到的 G(x)G(\mathbf{x})?

  1. x\mathbf{x} 的常數函數
  2. x\mathbf{x} 的線性函數
  3. x\mathbf{x} 的二次函數
  4. 以上皆非

答案:2。 內積對第一個引數是線性的,所以

G(x)=1T∑t=1Tinnerprod⁡(wt,x)=innerprod⁡(1T∑t=1Twt, x)G(\mathbf{x}) = \frac{1}{T}\sum_{t=1}^{T} \operatorname{innerprod}(\mathbf{w}_t, \mathbf{x}) = \operatorname{innerprod}\Big(\frac{1}{T}\sum_{t=1}^{T}\mathbf{w}_t,\ \mathbf{x}\Big)

GG 仍是一個線性假說,權重是所有 wt\mathbf{w}_t 的平均。選項 1 只在平均後的權重剛好讓 GG 不隨 x\mathbf{x} 變時才成立,不是一般情況。選項 3 不可能,線性函數相加不會長出二次項。講義順便解釋了為什麼寫 innerprod:平常的轉置記號 w⊤x\mathbf{w}^\top\mathbf{x} 裡的 T 會跟假說的個數 TT 撞名。

本文補充:這題和「三個 decision stump 投票」那題 Fun Time 剛好是一組對照。線性迴歸的假說平均之後還在原本的假說集合裡,模型的能力沒有增加,平均能帶來的只有降低 variance。decision stump 投票時多了一層 sign⁡\operatorname{sign},合起來的 GG 就跑到單一 stump 表達不了的地方。第 5 頁的兩張圖一張講能力變強、一張講結果變穩;stump 那題是前者的小例子,線性迴歸這題則是「只變穩、能力不變」最單純的情況(右圖的 PLA 投票還多一層 sign⁡\operatorname{sign},不完全相同)。

票數怎麼決定:linear blending 與 any blending

YouTube:Blending and Bagging :: Linear and Any Blending @ Machine Learning Techniques (機器學習技法)

(影片 00:00–03:44 把 linear blending 看成線性模型,03:44–06:18 談 αt≥0\alpha_t \ge 0 的限制,06:18–11:10 與 selection 比較並給出實務步驟,11:10–12:49 是 any blending,12:49–16:11 是 KDD Cup 2011 的故事,之後是 Fun Time。)

求票數就是做一次線性迴歸

linear blending(第 12 頁)同樣假設 gtg_t 已經在手上,要決定每個 gtg_t 拿幾票:

G(x)=sign⁡(∑t=1Tαt⋅gt(x)),αt≥0G(\mathbf{x}) = \operatorname{sign}\Big(\sum_{t=1}^{T} \alpha_t \cdot g_t(\mathbf{x})\Big), \qquad \alpha_t \ge 0

名字裡的 linear,課堂上的解釋是:GG 是把 gtg_t 的輸出用 αt\alpha_t 做線性組合。什麼是好的 α\alpha?最直接的想法是讓誤差最小,min⁡αt≥0Ein(α)\min_{\alpha_t \ge 0} E_{\text{in}}(\boldsymbol{\alpha})。以迴歸為例,講義把它和基石學過的問題並排:

linear blending for regression線性迴歸加特徵轉換
min⁡αt≥01N∑n=1N(yn−∑t=1Tαt gt(xn))2\displaystyle \min_{\alpha_t \ge 0} \frac{1}{N}\sum_{n=1}^{N}\Big(y_n - \sum_{t=1}^{T}\alpha_t\, g_t(\mathbf{x}_n)\Big)^2min⁡wi1N∑n=1N(yn−∑i=1d~wi ϕi(xn))2\displaystyle \min_{w_i} \frac{1}{N}\sum_{n=1}^{N}\Big(y_n - \sum_{i=1}^{\tilde{d}} w_i\, \phi_i(\mathbf{x}_n)\Big)^2

兩邊逐項對得上:αt\alpha_t 對 wiw_i,gtg_t 對 ϕi\phi_i,假說的個數 TT 對轉換後的維度 d~\tilde{d}。唯一的差別是左邊多了 αt≥0\alpha_t \ge 0。所以講義把 linear blending 寫成一條式子:

linear blending = 線性模型 + 把假說當特徵轉換 + 限制式

課堂上說,linear blending 其實沒有新東西,把 gtg_t 當成特徵轉換,剩下的全是學過的線性模型:做迴歸就用線性迴歸,要輸出機率就用邏輯迴歸。講義提醒這像 two-level learning。課堂上指出那是在講 probabilistic SVM 時出現的(技法第 5 堂:Kernel 邏輯迴歸):先跑 SVM,再把它的輸出交給邏輯迴歸。這裡是先得到一堆 gtg_t,再跑一次線性模型得到 α\alpha。

票數不能是負的嗎

線性模型本來沒有 αt≥0\alpha_t \ge 0 這種限制,加上它之後不能直接套現成的解法。第 13 頁先把誤差換成一般的寫法 min⁡αt≥01N∑nerr⁡(yn,∑tαtgt(xn))\min_{\alpha_t \ge 0} \frac{1}{N}\sum_n \operatorname{err}\big(y_n, \sum_t \alpha_t g_t(\mathbf{x}_n)\big),再問:如果解出來某個 αt<0\alpha_t < 0,代表什麼?

αt<0⟹αt gt(x)=∣αt∣⋅(−gt(x))\alpha_t < 0 \quad\Longrightarrow\quad \alpha_t\, g_t(\mathbf{x}) = \lvert \alpha_t \rvert \cdot \big(-g_t(\mathbf{x})\big)

給 gtg_t 負的票數,等於給 −gt-g_t 正的票數。在二元分類裡,−gt-g_t 就是把 gtg_t 的答案反過來。課堂上的說法是:機器學完之後算出負的 αt\alpha_t,是在建議你把這個 gtg_t 反過來用。

講義用一句玩笑說明反過來用沒什麼不好:如果你有一個錯誤率 99% 的股票漲跌分類器,請告訴我。課堂上把話說完:他說漲我就猜跌,他說跌我就猜漲,錯誤率 99% 就變成正確率 99%。

所以講義的結論是,實務上常常直接把限制式拿掉,投影片上「+ constraints」被劃了一條線:

linear blending = 線性模型 + 把假說當特徵轉換

課堂上也承認,迴歸時把假說反過來用的意思沒那麼直觀,不過多數時候刻意留著這條限制並沒有必要。

數值例子:替三個 decision stump 算票數

以下是本文自擬的例子,不在講義上;用的假說是講義兩題 Fun Time 裡的三個 decision stump,g1(x)=sign⁡(1−x)g_1(x) = \operatorname{sign}(1 - x)、g2(x)=sign⁡(1+x)g_2(x) = \operatorname{sign}(1 + x)、g3(x)=−1g_3(x) = -1。

把假說當特徵轉換,Φ(x)=(g1(x),g2(x),g3(x))\boldsymbol{\Phi}(x) = (g_1(x), g_2(x), g_3(x))。數線上的點轉換後只有三種結果:

區域Φ(x)\boldsymbol{\Phi}(x)
x<−1x < -1(+1,−1,−1)(+1, -1, -1)
−1<x<1-1 < x < 1(+1,+1,−1)(+1, +1, -1)
x>1x > 1(−1,+1,−1)(-1, +1, -1)

拿五筆資料 x=−2,−1.5,0,0.5,3x = -2, -1.5, 0, 0.5, 3 來學票數,用不加限制式的線性迴歸,也就是找 α\boldsymbol{\alpha} 讓 ∑n(yn−α⊤Φ(xn))2\sum_n (y_n - \boldsymbol{\alpha}^\top\boldsymbol{\Phi}(x_n))^2 最小。如果有一組 α\boldsymbol{\alpha} 能讓每一筆的誤差都是 0,它就是最小值,所以直接解「三種區域各一條等式」:

x<−1:α1−α2−α3=y左−1<x<1:α1+α2−α3=y中x>1:−α1+α2−α3=y右\begin{aligned} x < -1:&\quad \alpha_1 - \alpha_2 - \alpha_3 = y_{\text{左}} \\ -1 < x < 1:&\quad \alpha_1 + \alpha_2 - \alpha_3 = y_{\text{中}} \\ x > 1:&\quad -\alpha_1 + \alpha_2 - \alpha_3 = y_{\text{右}} \end{aligned}

第二式減第一式得到 2α2=y中−y左2\alpha_2 = y_{\text{中}} - y_{\text{左}},第二式減第三式得到 2α1=y中−y右2\alpha_1 = y_{\text{中}} - y_{\text{右}},再代回第二式求 α3=α1+α2−y中\alpha_3 = \alpha_1 + \alpha_2 - y_{\text{中}}。對三種不同的目標各解一次:

目標(y=+1y = +1 的區域)(y左,y中,y右)(y_{\text{左}}, y_{\text{中}}, y_{\text{右}})解出的 (α1,α2,α3)(\alpha_1, \alpha_2, \alpha_3)這組票數的意思
∣x∣<1\lvert x \rvert < 1(−1,+1,−1)(-1, +1, -1)(1,1,1)(1, 1, 1)一人一票,就是 uniform blending
x<1x < 1(+1,+1,−1)(+1, +1, -1)(1,0,0)(1, 0, 0)只留 g1g_1,就是 selection
x<−1x < -1(+1,−1,−1)(+1, -1, -1)(0,−1,0)(0, -1, 0)把 g2g_2 反過來用

以第三列為例:2α2=−1−1=−22\alpha_2 = -1 - 1 = -2,α2=−1\alpha_2 = -1;2α1=−1−(−1)=02\alpha_1 = -1 - (-1) = 0,α1=0\alpha_1 = 0;α3=0+(−1)−(−1)=0\alpha_3 = 0 + (-1) - (-1) = 0。驗證:x=−2x = -2 時 α⊤Φ=(−1)(−1)=+1\boldsymbol{\alpha}^\top\boldsymbol{\Phi} = (-1)(-1) = +1,x=0x = 0 時是 (−1)(+1)=−1(-1)(+1) = -1,x=3x = 3 時也是 −1-1,五筆都完全吻合。把這五筆的 Φ(xn)\boldsymbol{\Phi}(x_n) 與 yny_n 交給基石第 9 堂的線性迴歸解法再算一次,得到的也是同樣的答案。

這個小例子把這一節的三件事都走到了。同一組假說、同一套線性迴歸,資料長得不一樣,學出的票數可以是 uniform,可以是 selection,這就是第 3 頁那張包含關係的表。第三列的 α2=−1\alpha_2 = -1 是負的:這三條等式只有這一組解,如果堅持 αt≥0\alpha_t \ge 0,就做不到誤差為 0;允許負的票數,等於多了 −g2=sign⁡(−1−x)-g_2 = \operatorname{sign}(-1 - x) 這個假說可以用。

這個例子裡的三個 stump 是事先給定的,不是從這五筆資料學出來的。實務上 gtg_t 通常也是從資料學來的,這時拿哪些資料來學票數就有講究,接下來處理這件事。

不能用 Ein 來學票數

gtg_t 在實務上通常怎麼來?第 14 頁的說法是:各自來自不同的模型,g1∈H1,g2∈H2,…,gT∈HTg_1 \in \mathcal{H}_1, g_2 \in \mathcal{H}_2, \dots, g_T \in \mathcal{H}_T,每個都是在自己的假說集合裡把 EinE_{\text{in}} 降到最低得到的。這跟基石第 15 堂模型選擇的情境一樣,那時的結論也適用:

  • 用 EinE_{\text{in}} 做 selection,選到的是 best of best,要付的複雜度代價是 dVC(⋃t=1THt)d_{\text{VC}}\big(\bigcup_{t=1}^{T}\mathcal{H}_t\big)。課堂上的比喻是兩個班的第一名出來再比一次,選出來的人代表的是兩個班合起來的複雜度。
  • linear blending 包含 selection 當特例,把 αt\alpha_t 設成 ⟦Eval(gt−) 最小⟧\llbracket E_{\text{val}}(g_t^-) \text{ 最小} \rrbracket 就是。
  • 所以用 EinE_{\text{in}} 做 linear blending,講義稱為 aggregation of best,複雜度代價 ≥dVC(⋃t=1THt)\ge d_{\text{VC}}\big(\bigcup_{t=1}^{T}\mathcal{H}_t\big)。

第三點的理由,課堂上講的是:selection 只是從各班第一名裡挑一個,linear blending 是把所有第一名組成一支菁英團隊;它能做到的事包含了 selection,付出的代價只會更高。best of best 已經夠危險,這樣做更容易過擬合,所以實務上不建議用 EinE_{\text{in}} 學 α\alpha。

講義的處方跟 selection 一樣,兩個地方都換掉:用 EvalE_{\text{val}} 取代 EinE_{\text{in}};被組合的假說用 gt−g_t^-,也就是只在 Dtrain\mathcal{D}_{\text{train}} 上把 EtrainE_{\text{train}} 降到最低得到的版本。課堂上補充了第二點的用意:算 α\alpha 用的驗證資料,要跟產生那些假說的資料分開,才有獨立性。

實務步驟,以及 any blending

第 15 頁把流程寫出來。把資料切成 Dtrain\mathcal{D}_{\text{train}} 與 Dval\mathcal{D}_{\text{val}} 之後:

  1. 在 Dtrain\mathcal{D}_{\text{train}} 上學出 g1−,g2−,…,gT−g_1^-, g_2^-, \dots, g_T^-。
  2. 把 Dval\mathcal{D}_{\text{val}} 裡的每一筆 (xn,yn)(\mathbf{x}_n, y_n) 轉換成 (zn=Φ−(xn), yn)(\mathbf{z}_n = \boldsymbol{\Phi}^-(\mathbf{x}_n),\ y_n),其中 Φ−(x)=(g1−(x),…,gT−(x))\boldsymbol{\Phi}^-(\mathbf{x}) = (g_1^-(\mathbf{x}), \dots, g_T^-(\mathbf{x}))。
  3. 在轉換後的資料上學組合的方式。
  4. 回傳的 GG 改用 Φ(x)=(g1(x),…,gT(x))\boldsymbol{\Phi}(\mathbf{x}) = (g_1(\mathbf{x}), \dots, g_T(\mathbf{x})),也就是不帶減號的 gtg_t。

第 3、4 步有兩種做法:

Linear BlendingAny Blending(Stacking)
第 3 步α=LinearModel({(zn,yn)})\boldsymbol{\alpha} = \text{LinearModel}\big(\{(\mathbf{z}_n, y_n)\}\big)g~=AnyModel({(zn,yn)})\tilde{g} = \text{AnyModel}\big(\{(\mathbf{z}_n, y_n)\}\big)
第 4 步GLINB(x)=LinearHypothesisα(Φ(x))G_{\text{LINB}}(\mathbf{x}) = \text{LinearHypothesis}_{\boldsymbol{\alpha}}\big(\boldsymbol{\Phi}(\mathbf{x})\big)GANYB(x)=g~(Φ(x))G_{\text{ANYB}}(\mathbf{x}) = \tilde{g}\big(\boldsymbol{\Phi}(\mathbf{x})\big)

LinearHypothesisα\text{LinearHypothesis}_{\boldsymbol{\alpha}} 的意思,課堂上的說明是:先算 α\boldsymbol{\alpha} 與 Φ(x)\boldsymbol{\Phi}(\mathbf{x}) 的內積,迴歸就直接輸出,分類再取 sign⁡\operatorname{sign}。

第 4 步為什麼用 Φ\boldsymbol{\Phi}、不用 Φ−\boldsymbol{\Phi}^-?課堂上特別停下來講:這跟 validation 選完模型之後回傳 gg、不回傳 g−g^- 是同一個道理,gtg_t 用了全部的資料,預期表現會比 gt−g_t^- 好。本文補充:這表示每個模型要訓練兩次,一次只用 Dtrain\mathcal{D}_{\text{train}} 得到 gt−g_t^- 來學 α\boldsymbol{\alpha},一次用全部資料得到 gtg_t 來做最後的預測。

右邊那一欄把線性模型換成任何模型,叫 any blending,也叫 stacking。課堂上解釋 stacking 是一層疊一層的意思:第一層得到 gtg_t,第二層把它們合起來;第二層可以用非線性的 SVM 或任何你想用的模型。他還開了個玩笑:LinearModel 的 Lin 是 linear,不是因為他姓林。

講義對 any blending 的評語有兩條:

  • powerful:第二層是非線性的,可以做到第 3 頁的 conditional blending,等於在不同的條件下用不同的 gtg_t。
  • danger of overfitting:愈有能力的模型愈容易過擬合。課堂上提醒用 any blending 要非常小心,該加正則化就加,要常踩煞車。

實例:KDD Cup 2011 Track 1

第 16 頁是台大團隊拿下 KDD Cup 2011 Track 1 世界冠軍的解法,出處是 Chen 等人的論文 A linear ensemble of individual and blended models for music rating prediction。投影片上方的流程圖有五個方塊,依序是:

  1. Data-Set
  2. Single Models:箭頭來自 Data-Set;訓練出很多個單一模型,就是這堂課的 gtg_t。
  3. Val.-Set Blending:箭頭來自 Single Models,另有一條直接來自 Data-Set。
  4. Test-Set Blending:箭頭來自 Val.-Set Blending,另有一條直接來自 Single Models。
  5. Post-Processing

也就是說,單一模型與第一次 blending 得到的模型,都會進到第二次 blending。

兩次 blending 各有數字,講義標的是 EtestE_{\text{test}} (squared):

步驟做法EtestE_{\text{test}}講義說它的作用
validation set blending一種特別的 any blending519.45 ⟹ 456.24最後兩週保住領先
test set blending用 E~test\tilde{E}_{\text{test}} 做 linear blending456.24 ⟹ 442.06最後一小時逆轉

本文算了一下降幅:第一步降了 63.21,約 12.2%;第二步降了 14.18,約 3.1%。

課堂上補了比賽的經過。第一步把單一模型用非線性的方式合起來,做完之後台大隊在比賽倒數兩週穩定待在領先群。第二步是把前面得到的上百個 gg 與 GG 再合一次,這次只給每個模型不同的票數;特別的地方是用了某種方法,拿得到很接近 EtestE_{\text{test}} 的估計值,投影片在 EtestE_{\text{test}} 上面加一條波浪線就是這個意思,再直接針對這個估計值來學票數。第二步的降幅看起來小,卻讓台大隊在比賽最後一小時從第二名變成第一名。

講義的結論是 blending 在實務上「有用」,儘管計算負擔很重。課堂上自己也打了折扣:競賽算不算實務是一回事,真實的系統會不會放兩百多個模型在裡面又是另一回事;可以確定的是,如果你從不同的方向做了嘗試、手上有一些不同的 gtg_t,把它們合起來是真的有用,代價是模型的複雜度與計算量。

Fun Time:x 等於 0 時的轉換結果

題目(第 17 頁): 同樣是那三個 decision stump,g1(x)=sign⁡(1−x)g_1(x) = \operatorname{sign}(1 - x)、g2(x)=sign⁡(1+x)g_2(x) = \operatorname{sign}(1 + x)、g3(x)=−1g_3(x) = -1。x=0x = 0 時,linear/any blending 回傳的假說裡用到的 Φ(x)=(g1(x),g2(x),g3(x))\boldsymbol{\Phi}(x) = (g_1(x), g_2(x), g_3(x)) 是哪一個?

  1. (+1,+1,+1)(+1, +1, +1)
  2. (+1,+1,−1)(+1, +1, -1)
  3. (+1,−1,−1)(+1, -1, -1)
  4. (−1,−1,−1)(-1, -1, -1)

答案:2。 直接代入:g1(0)=sign⁡(1)=+1g_1(0) = \operatorname{sign}(1) = +1,g2(0)=sign⁡(1)=+1g_2(0) = \operatorname{sign}(1) = +1,g3(0)=−1g_3(0) = -1。講義的解答只寫了一句「Too easy? :-)」。

其他選項可以對回前面例子的表:選項 3 是 x<−1x < -1 那一段的 Φ(x)\boldsymbol{\Phi}(x)。選項 1 與 4 對任何 xx 都不會出現:選項 1 的第三個分量是 +1+1,但 g3g_3 永遠是 −1-1;選項 4 要 g1g_1 與 g2g_2 同時是 −1-1,那需要 x>1x > 1 且 x<−1x < -1。

這題要確認的是「把假說當特徵轉換」這件事有沒有看懂:原本一維的 xx,被三個假說轉成三維的 z\mathbf{z},第二層的模型看到的是 z\mathbf{z},看不到原本的 xx。

只有一份資料時怎麼得到不同的假說:bootstrap 與 bagging

YouTube:Blending and Bagging :: Bagging (Bootstrap Aggregation) @ Machine Learning Techniques (機器學習技法)

(影片 00:00–03:00 回顧 blending 並列出多樣性的來源,03:00–04:30 回到 bias–variance,04:30–06:42 是 bootstrap,06:42–08:12 是 bagging,08:12–09:46 是 pocket 的示範,之後是 Fun Time 與總結。)

從「先有 gₜ 再合」到「邊學 gₜ 邊合」

第 18 頁先整理到目前為止的三種 blending,並提出下一個問題。blending 是拿到 gtg_t 之後才合;講義把「一邊得到 gtg_t、一邊合起來」叫 learning:

aggregation typeblendinglearning
uniformvoting/averaging?
non-uniformlinear?
conditionalstacking?

右邊一欄這堂只填第一格。對照技法第 9 堂講義開頭的同一張表,三格的答案依序是 Bagging、AdaBoost、Decision Tree,後兩格是接下來兩堂的內容。

要為 uniform aggregation 學出 gtg_t,前面的分析已經說了關鍵:要多樣。講義列出四種多樣性的來源:

  • 不同的模型:g1∈H1,g2∈H2,…,gT∈HTg_1 \in \mathcal{H}_1, g_2 \in \mathcal{H}_2, \dots, g_T \in \mathcal{H}_T。
  • 不同的參數:例如梯度下降用 η=0.001,0.01,…,10\eta = 0.001, 0.01, \dots, 10。課堂上多舉了 SVM 用不同的 γ\gamma 或不同的 CC。
  • 演算法本身的隨機性:隨機的 PLA 用不同的亂數種子。課堂上說 pocket 用不同的起始點也算。
  • 資料的隨機性:cross-validation 過程中的那些 gv−g_v^-,每一個是用不同的幾份資料學出來的。

講義接下來要走的是第四條,但加了一個條件:diversity by data randomness without g−g^-。本文的理解是,cross-validation 的 gv−g_v^- 每一個都少用了一份資料;這裡想找的做法是不必切出驗證資料,同一份資料也能造出很多個不同的 gtg_t。

回到 bias–variance:兩個做不到的地方

第 19 頁回到 uniform blending 那一節的結論:

演算法 A 的期望表現=偏離共識的期望程度+共識的表現,gˉ=來自 Dt∼PN 的 gt 的期望\text{演算法 } \mathcal{A} \text{ 的期望表現} = \text{偏離共識的期望程度} + \text{共識的表現}, \qquad \bar{g} = \text{來自 } \mathcal{D}_t \sim P^N \text{ 的 } g_t \text{ 的期望}

講義說,共識 gˉ\bar{g} 比直接用 A(D)\mathcal{A}(\mathcal{D}) 穩定,但它需要的 Dt\mathcal{D}_t 比手上那一份 D\mathcal{D} 多得多。課堂上把困難拆成兩個:gˉ\bar{g} 要無限多個 gtg_t 的平均,我們沒有無限多個;每個 gtg_t 都要一份新鮮的資料,我們只有手上這一份。所以要做兩個妥協:

  • 用有限、但夠大的 TT 代替無限多。
  • 只用手上的 D\mathcal{D},想辦法造出「長得像新資料」的 Dt\mathcal{D}_t,再用它得到 gt=A(Dt)g_t = \mathcal{A}(\mathcal{D}_t)。

第二個妥協靠的是 bootstrapping。講義的定義是:一種統計工具,從 D\mathcal{D} 重新抽樣來「模擬」Dt\mathcal{D}_t。課堂上提到它有人直譯成拔靴法。

bootstrap:有放回地重抽

第 20 頁的定義:bootstrap sample D~t\tilde{\mathcal{D}}_t 是從 D\mathcal{D} 裡均勻地、有放回地(uniformly with replacement)重抽 NN 筆得到的資料。

手上有 NN 筆,再抽 NN 筆,不就是原來那一份嗎?課堂上把過程講得很具體:每次抓一筆出來,記下「這次抽到第 3 筆」,放回去;再抓一筆,記下「這次抽到第 5 筆」,放回去;再抓一筆,又是第 3 筆,也記下來,放回去。因為每次都放回去,同一筆資料可能被抽到好幾次,也可能有資料一次都沒被抽到。這樣做 NN 次,記下來的那 NN 筆就是一個 bootstrap sample。波浪線表示它跟想像中的 Dt\mathcal{D}_t 很像,但不一樣。

抽的筆數不一定要是 NN,講義寫可以用任意的 N′N'。課堂上的例子是:有一萬筆資料,覺得每次抽三千筆就夠,那 N′N' 就是 3000。重點在「抽出來、記下來、放回去」這個過程。

bagging 的流程

有了 bootstrap,第 10 頁的虛擬流程就能換成做得到的版本。講義把兩者並排:

virtual aggregation(虛擬的)bootstrap aggregation(實際做得到的)
每一輪 t=1,2,…,Tt = 1, 2, \dots, T,第 1 步從 PNP^N 拿一份大小 NN 的新資料 Dt\mathcal{D}_t用 bootstrap 從 D\mathcal{D} 抽一份大小 N′N' 的 D~t\tilde{\mathcal{D}}_t
第 2 步gt=A(Dt)g_t = \mathcal{A}(\mathcal{D}_t)gt=A(D~t)g_t = \mathcal{A}(\tilde{\mathcal{D}}_t)
最後G=Uniform({gt})G = \text{Uniform}(\{g_t\})G=Uniform({gt})G = \text{Uniform}(\{g_t\})

Uniform\text{Uniform} 就是這堂課的 uniform blending:分類用投票,迴歸用平均。兩欄只差在資料從哪裡來。

bootstrap aggregation 簡稱 BAGging。課堂上說這個暱稱像是把一堆 gtg_t 打包起來。它不管底下的 A\mathcal{A} 是什麼,任何演算法都能套,所以講義稱它是蓋在 base algorithm A\mathcal{A} 上面的 meta algorithm。

數值例子:三筆資料的 bootstrap

以下是本文自擬的例子,不在講義上。資料只有三筆,yy 的值是 1、2、6,不看輸入,只學一個常數來預測 yy。抽三次、每次三種可能,一共 33=273^3 = 27 種等機率的抽法。不計順序的話是 10 種組合:

抽到的三筆抽法數平均數中位數
1, 1, 11111
1, 1, 2343\frac{4}{3}1
1, 1, 6383\frac{8}{3}1
1, 2, 2353\frac{5}{3}2
2, 2, 21222
2, 2, 63103\frac{10}{3}2
1, 2, 66332
1, 6, 63133\frac{13}{3}6
2, 6, 63143\frac{14}{3}6
6, 6, 61666

抽法數加起來是 27。27 種抽法裡,只有 6 種抽到的剛好是原來的三筆;其他 21 種都有重複、也都漏掉至少一筆。每一輪的 D~t\tilde{\mathcal{D}}_t 多半跟 D\mathcal{D} 不同,彼此也不同,各個 gtg_t 的差異就是從這裡來的。

再看兩種 base algorithm。把 TT 取到很大,bagging 的輸出會接近 27 種抽法的平均:

  • A\mathcal{A} 回傳平均數。 原資料上 A(D)=3\mathcal{A}(\mathcal{D}) = 3。27 種抽法的平均數再平均,還是 3。各個 gtg_t 明明都不一樣,合起來卻回到原點。
  • A\mathcal{A} 回傳中位數。 原資料上 A(D)=2\mathcal{A}(\mathcal{D}) = 2。27 種抽法裡中位數是 1 的有 7 種、是 2 的有 13 種、是 6 的有 7 種,平均是 (7×1+13×2+7×6)/27=75/27=25/9≈2.78(7 \times 1 + 13 \times 2 + 7 \times 6)/27 = 75/27 = 25/9 \approx 2.78,跟原本的 2 不同。

這個例子說明兩件事。第一,bagging 的 GG 不一定等於直接在 D\mathcal{D} 上跑一次 A\mathcal{A} 的結果,中位數的情況就不一樣。第二,bootstrap 只是從同一份 D\mathcal{D} 重抽,沒有帶進新的資料。平均數的情況最明顯:每一筆被抽到的機率相同,bootstrap 平均數的期望值就是原資料的平均數,所以重抽再平均之後只是回到 A(D)=3\mathcal{A}(\mathcal{D}) = 3。虛擬流程裡的 gˉ\bar{g} 是對真正的新資料取期望,兩者不是同一個東西;課堂上講 bagging 時也說,這只是在模擬想像中的那個過程。以上兩點是本文從這個例子讀出來的,不是講義的內容。這個例子沒有 ff,所以沒辦法說哪一個答案比較好,它只呈現 bagging 改變了什麼、沒改變什麼。

示範:bagging 加 pocket

第 21 頁是實際跑出來的圖,base algorithm 是基石第 2 堂的 pocket 演算法。設定是 TPOCKET=1000T_{\text{POCKET}} = 1000、TBAG=25T_{\text{BAG}} = 25:做 25 次 bootstrap,每一份資料讓 pocket 跑 1000 輪,各得到一條線。

圖上 25 條灰線方向差很多,課堂上的描述是有的比較像橫的、有的是斜的,這些差異全是 bootstrap 造成的。25 條線投票之後得到黑色的邊界,它是一條彎彎折折的非線性邊界。課堂上的評價很保守:圈圈和叉叉分得還可以,不算非常好,但可能比單獨一條 pocket 的線來得好。

講義整理成兩點:bagging 得到的 gtg_t 很多樣;把二元分類器合起來之後,得到合適的非線性邊界。這一頁的結論是:base algorithm 對資料的隨機性敏感時,bagging 的效果不錯。課堂上的解釋是,演算法愈敏感,bootstrap 出來的 gtg_t 愈不一樣,合起來就愈可能有好處。這句話是技法第 10 堂:隨機森林的伏筆:完全長大的決策樹正是對資料非常敏感的演算法。

Fun Time:抽回原來那一份的機率

題目(第 22 頁): 用 bootstrap 從有 NN 筆的資料 D\mathcal{D} 重抽 NN 筆得到 D~t\tilde{\mathcal{D}}_t。D~t\tilde{\mathcal{D}}_t 跟 D\mathcal{D} 完全一樣的機率是多少?

  1. 0/NN=00 / N^N = 0
  2. 1/NN1 / N^N
  3. N!/NNN! / N^N
  4. NN/NN=1N^N / N^N = 1

答案:3。 講義的解法是把重抽想成有順序的 NN 步:每一步有 NN 種可能,總共 NNN^N 種結果,每一種機率相同。其中有 N!N! 種是原本 D\mathcal{D} 的排列,每一筆恰好出現一次,只是順序不同,所以機率是 N!/NNN!/N^N。

課堂上唸題目時補了一個條件:原本的 NN 筆是不一樣的資料。這題也把「一樣」當成不計順序的一樣。

其他選項錯在哪:選項 1 說不可能,但每一筆剛好各抽到一次是會發生的。選項 2 只算了「依原本的順序抽到」那一種,如果連順序都要相同才對。選項 4 說一定一樣,忽略了重複抽到同一筆的情況。

本文驗算:前面三筆資料的例子,27 種抽法裡有 6 種是原資料的排列,3!/33=6/27=2/93!/3^3 = 6/27 = 2/9,跟表上那一列的抽法數 6 吻合。NN 一大,這個機率掉得很快:N=5N = 5 是 24/625=0.038424/625 = 0.0384,N=10N = 10 是 0.000360.00036。資料量稍微大一點,每一份 bootstrap 資料幾乎一定跟原資料不同。

第 23 頁的總結把四節各收成一句:合起來的 GG 可以變強,也可以變得中庸;假說要多樣,一人一票、票票等值;linear 與 any blending 是把假說當特徵轉換的 two-level learning;bootstrap 用來產生多樣的假說。下一堂的預告是 getting more diverse hypotheses to make GG strong。課堂上的講法是:能不能得到比 bagging 更不一樣的假說,讓 GG 做得更好。

自我檢查

1. 固定一個 x\mathbf{x},f=2f = 2,三個假說的預測是 g1=1g_1 = 1、g2=2g_2 = 2、g3=9g_3 = 9。算出 GG、gtg_t 的平均平方誤差、gtg_t 對 GG 的分散程度、GG 的平方誤差,並檢查等式。GG 有沒有贏過每一個 gtg_t?

答案:G=12/3=4G = 12/3 = 4。平均平方誤差是 (1+0+49)/3=50/3(1 + 0 + 49)/3 = 50/3;分散程度是 (9+4+25)/3=38/3(9 + 4 + 25)/3 = 38/3;GG 的平方誤差是 (4−2)2=4(4 - 2)^2 = 4。38/3+4=50/338/3 + 4 = 50/3,成立。GG 的誤差 4 遠低於平均的 50/3≈16.750/3 \approx 16.7,但 g1g_1(誤差 1)與 g2g_2(誤差 0)都比 GG 好。等式保證的是 GG 不輸給平均,沒有保證贏過最好的那一個。

2. 三個二元分類器,各自有 20% 的機率答錯,而且三個答錯與否互相獨立。一人一票的 GG 答錯的機率是多少?如果三個分類器完全相同呢?如果每個的錯誤率是 60% 呢?

答案(本文的計算,獨立是題目給的假設):GG 答錯需要至少兩個同時答錯,機率是 3×0.22×0.8+0.23=0.096+0.008=0.1043 \times 0.2^2 \times 0.8 + 0.2^3 = 0.096 + 0.008 = 0.104,比單獨一個的 0.2 低。三個完全相同時,投票結果就是那一個,錯誤率仍是 0.2,這是講義說的 autocracy。錯誤率 60% 時是 3×0.62×0.4+0.63=0.432+0.216=0.6483 \times 0.6^2 \times 0.4 + 0.6^3 = 0.432 + 0.216 = 0.648,比單獨一個還差:多數修正少數,前提是多數比較可能是對的。

3. 做 linear blending 時,為什麼 α\boldsymbol{\alpha} 要在 Dval\mathcal{D}_{\text{val}} 上用 gt−g_t^- 的輸出來學,最後回傳時卻改用 gtg_t?

判準:答案要說出三件事。第一,linear blending 包含 selection 當特例,用 EinE_{\text{in}} 學 α\boldsymbol{\alpha} 付出的複雜度代價至少是 dVC(⋃tHt)d_{\text{VC}}(\bigcup_t \mathcal{H}_t),容易過擬合。第二,gt−g_t^- 只看過 Dtrain\mathcal{D}_{\text{train}},所以 Dval\mathcal{D}_{\text{val}} 對它們來說是沒看過的資料,學 α\boldsymbol{\alpha} 時才不會被已經記住的資料誤導。第三,票數定下來之後,換回用全部資料訓練的 gtg_t,理由跟 validation 選完模型後回傳 gg 而不是 g−g^- 相同。

4. 用正文裡那三個 decision stump 做不加限制式的 linear blending,目標是「∣x∣>1\lvert x \rvert > 1 時 y=+1y = +1,∣x∣<1\lvert x \rvert < 1 時 y=−1y = -1」。解出 α\boldsymbol{\alpha},並說明它的意思。

答案:(y左,y中,y右)=(+1,−1,+1)(y_{\text{左}}, y_{\text{中}}, y_{\text{右}}) = (+1, -1, +1)。2α2=−1−1=−22\alpha_2 = -1 - 1 = -2,α2=−1\alpha_2 = -1;2α1=−1−1=−22\alpha_1 = -1 - 1 = -2,α1=−1\alpha_1 = -1;α3=−1−1−(−1)=−1\alpha_3 = -1 - 1 - (-1) = -1。α=(−1,−1,−1)\boldsymbol{\alpha} = (-1, -1, -1):三個假說都反過來用再一人一票。這是 Fun Time 那個 GG 的相反,三票全是負的;有 αt≥0\alpha_t \ge 0 的限制時做不到。

5. N=4N = 4 筆互不相同的資料,bootstrap 抽 4 筆。抽到的資料跟原本完全一樣(不計順序)的機率是多少?這對 bagging 代表什麼?

答案:4!/44=24/256=3/32≈0.0944!/4^4 = 24/256 = 3/32 \approx 0.094。超過九成的機率會有資料被重複抽到、同時有資料沒被抽到,所以每一輪的 D~t\tilde{\mathcal{D}}_t 多半跟 D\mathcal{D} 不同,base algorithm 才會給出不同的 gtg_t。

練習與對應閱讀

兩個學期的對應週次。 Fall 2024 課程頁把這堂排在 W11(11/11),投影片代號是 207u。Fall 2026 課程頁排在 W11(11/18),和技法第 8 堂同一週上;這一週的投影片在 2026-09-30 還沒上線,所以本文只用 MOOC 版講義。

教科書。 兩份課程頁都沒有替這堂標 Learning from Data(LFD)的章節,本文只依講義與影片。

作業。 相關的題目在 Fall 2024 HW6(2024-11-18 發布、12-02 截止)與 HW7(12-02 發布、12-16 截止),沒有官方解答:

題類型練什麼
HW6 Q4自動批改5 個錯誤互相獨立、各自 Eout=0.25E_{\text{out}} = 0.25 的分類器做 uniform blending,GG 的 EoutE_{\text{out}} 大約多少(題目直接引用講義 207 第 7 頁)。算法跟自我檢查第 2 題相同
HW6 Q9人工批改把 linear blending 的 Φ(x)=(g1(x),…,gT(x))\boldsymbol{\Phi}(\mathbf{x}) = (g_1(\mathbf{x}), \dots, g_T(\mathbf{x})) 與 kernel 結合:用整數輸入上的縮放 decision stump 當 gtg_t,推出對應的 kernel
HW7 Q1自動批改N=1126N = 1126 時,bootstrap 抽多少個才有超過 70% 的機率出現重複的資料
HW7 Q5人工批改2M+12M + 1 個分類器 uniform 投票時,Eout(G)E_{\text{out}}(G) 最緊的上界

HW6 Q9 的提示附了林軒田早期的論文 infkernel.pdf。HW7 Q1 可以用蒙地卡羅模擬核對自己的解析解。整份作業的導讀在技法作業與期末專題。

延伸閱讀。 課程頁列的延伸閱讀裡,跟這堂有關的是兩篇:Breiman, Bagging Predictors(UC Berkeley 技術報告 421)是 bagging 的原始論文;Chen et al. 是講義第 16 頁引用的 KDD Cup 2011 解法。站內其他課程對同一主題的講法:Harvard CS181 HW4:決策樹、隨機森林與 MoE、Stanford CS229 導讀。

下一堂。 技法第 8 堂:AdaBoost 接著處理這堂留下的問題:bootstrap 靠隨機抽樣得到不同的 gtg_t,能不能刻意調整資料,讓下一個 gtg_t 跟上一個更不一樣。

課程影片來源

原始影片:Motivation of Aggregation、Uniform Blending、Linear and Any Blending、Bagging (Bootstrap Aggregation)

查核日期:2026-10-13。影片 ID、標題與長度於當天從官方播放清單取得;YouTube 上沒有字幕軌,本文的課堂說法來自自行轉錄的逐字稿。

更新紀錄

  • 2026-10-10:標註影片狀態,核對錄影來源與取得方式。
  • 2026-10-10:重查影片狀態。嵌入影片與官方播放清單的講次相符。
  • 2026-10-13:原本與第 8 堂合為一篇,改為一堂一篇,依講義與影片逐字稿重寫。

參考資料