上節課我們主要介紹了Support Vector Regression,將kernel model引入到regression中。首先,通過將ridge regression和representer theorem結合起來,得到kernel ridge regression。但是其解是dense的,即不部分不為零。為了得到sparse解,我們將regularized tube error和Lagrange dual結合起來,利用SVM dual的推導方法,得到support vector regression的sparse解。本系列1-6節課主要介紹Kernel Models及其應用,從本節課開始,講介紹Aggregation Models,即如何將不同的hypothesis和features結合起來,讓模型更好。本節課將介紹其中的兩個方法,一個是Blending,一個是Bagging。
1. Motivation of Aggregation
首先舉個例子來說明為什麼要使用Aggregation。假如你有T個朋友,每個朋友向你預測推薦明天某支股票會漲還是會跌,對應的建議分別是g_1,g_2,\cdots,g_T,那麼你該選擇哪個朋友的建議呢?即最終選擇對股票預測的g_t(x)是什麼樣的?
第一種方法是從T個朋友中選擇一個最受信任,對股票預測能力最強的人,直接聽從他的建議就好。這是一種普遍的做法,對應的就是validation思想,即選擇犯錯誤最小的模型。第二種方法,如果每個朋友在股票預測方面都是比較厲害的,都有各自的專長,那麼就同時考慮T個朋友的建議,將所有結果做個投票,一人一票,最終決定出對該支股票的預測。這種方法對應的是uniformly思想。第三種方法,如果每個朋友水平不一,有的比較厲害,投票比重應該更大一些,有的比較差,投票比重應該更小一些。那麼,仍然對T個朋友進行投票,只是每個人的投票權重不同。這種方法對應的是non-uniformly的思想。第四種方法與第三種方法類似,但是權重不是固定的,根據不同的條件,給予不同的權重。比如如果是傳統行業的股票,那麼給這方面比較厲害的朋友較高的投票權重,如果是服務行業,那麼就給這方面比較厲害的朋友較高的投票權重。以上所述的這四種方法都是將不同人不同意見融合起來的方式,接下來我們就要討論如何將這些做法對應到機器學習中去。Aggregation的思想與這個例子是類似的,即把多個hypothesis結合起來,得到更好的預測效果。
將剛剛舉的例子的各種方法用數學化的語言和機器學習符號歸納表示出來,其中G(x)表示最終選擇的模型。
第一種方法對應的模型:
G(x)=g_{t_*}(x)\ with\ t_*=argmin_{t\in{1,2,\cdots,T}}\ E_{val}(g_t^-)
第二種方法對應的模型:
G(x)=sign(\sum_{t=1}^T1\cdot g_t(x))
第三種方法對應的模型:
G(x)=sign(\sum_{t=1}^T\alpha_t\cdot g_t(x))\ with\ \alpha_t\geq0
第四種方法對應的模型:
G(x)=sign(\sum_{t=1}^Tq_t(x)\cdot g_t(x))\ with\ q_t(x)\geq0
注意這裡提到的第一種方法是通過驗證集來選擇最佳模型,不能使用E_{in}(g_t)來代替E_{val}(g_t^-)。經過Validation,選擇最小的E_{val},保證E_{out}最小,從而將對應的模型作為最佳的選擇。
但是第一種方法只是從眾多可能的hypothesis中選擇最好的模型,並不能發揮集體的智慧。而Aggregation的思想是博採眾長,將可能的hypothesis優勢集合起來,將集體智慧融合起來,使預測模型達到更好的效果。
下面先來看一個例子,通過這個例子說明為什麼Aggregation能work得更好。
如上圖所示,平面上分佈著一些待分類的點。如果要求只能用一條水平的線或者垂直的線進行分類,那不論怎麼選取直線,都達不到最佳的分類效果。這實際上就是上面介紹的第一種方法:validation。但是,如果可以使用集體智慧,比如一條水平線和兩條垂直線組合而成的圖中折線形式,就可以將所有的點完全分開,得到了最優化的預測模型。
這個例子表明,通過將不同的hypotheses均勻地結合起來,得到了比單一hypothesis更好的預測模型。這就是aggregation的優勢所在,它提高了預測模型的power,起到了特徵轉換(feature transform)的效果。
我們再從另外一方面來看,同樣是平面上分佈著一些待分類的點,使用PLA演算法,可以得到很多滿足條件的分類線,如下圖所示:
這無數條PLA選擇出來的直線對應的hypothesis都是滿足分類要求的。但是我們最想得到的分類直線是中間那條距離所有點都比較遠的黑色直線,這與之前SVM目標是一致的。如果我們將所有可能的hypothesis結合起來,以投票的方式進行組合選擇,最終會發現投票得到的分類線就是中間和黑色那條。這從哲學的角度來說,就是對各種效果較好的可能性進行組合,得到的結果一般是中庸的、最合適的,即對應圖中那條黑色直線。所以,aggregation也起到了正則化(regularization)的效果,讓預測模型更具有代表性。
基於以上的兩個例子,我們得到了aggregation的兩個優勢:feature transform和regularization。我們之前在機器學習基石課程中就介紹過,feature transform和regularization是對立的,還把它們分別比作踩油門和踩剎車。如果進行feature transform,那麼regularization的效果通常很差,反之亦然。也就是說,單一模型通常只能傾向於feature transform和regularization之一,在兩者之間做個權衡。但是aggregation卻能將feature transform和regularization各自的優勢結合起來,好比把油門和剎車都控制得很好,從而得到不錯的預測模型。
2. Uniform Blending
那對於我們已經選擇的效能較好的一些矩g_t,如何將它們進行整合、合併,來得到最佳的預測模型呢?這個過程稱為blending。
最常用的一種方法是uniform blending,應用於classification分類問題,做法是將每一個可能的矩賦予權重1,進行投票,得到的G(x)表示為:
g(x)=sign(\sum_{t=1}^T1\cdot g_t(x)
這種方法對應三種情況:第一種情況是每個候選的矩g_t都完全一樣,這跟選其中任意一個g_t效果相同;第二種情況是每個候選的矩g_t都有一些差別,這是最常遇到的,大都可以通過投票的形式使多數意見修正少數意見,從而得到很好的模型,如下圖所示;第三種情況是多分類問題,選擇投票數最多的那一類即可。
如果是regression迴歸問題,uniform blending的做法很簡單,就是將所有的矩g_t求平均值:
G(x)=\frac1T\sum_{t=1}^Tg_t(x)
uniform blending for regression對應兩種情況:第一種情況是每個候選的矩g_t都完全一樣,這跟選其中任意一個g_t效果相同;第二種情況是每個候選的矩g_t都有一些差別,有的g_t>f(x),有的g_t<f(x),此時求平均值的操作可能會消去這種大於和小於的影響,從而得到更好的迴歸模型。因此,從直覺上來說,求平均值的操作更加穩定,更加準確。
對於uniform blending,一般要求每個候選的矩g_t都有一些差別。這樣,通過不同矩g_t的組合和集體智慧,都能得到比單一矩g_t更好的模型。
剛才我們提到了uniform blending for regression中,計算g_t的平均值可能比單一的g_t更穩定,更準確。下面進行簡單的推導和證明。
推導過程中注意G(t)=avg(g_t)。經過推導,我們發現avg((g_t(x)-f(x))^2)與(G-f)^2之間差了avg((g_t-G)^2)項,且是大於零的。從而得到g_t與目標函式f的差值要比G與f的差值大。
剛才是對單一的x進行證明,如果從期望角度,對整個x分佈進行上述公式的整理,得到:
從結果上來看,avg(E_{out}(g_t))\geq E_{out}(G),從而證明了從平均上來說,計算g_t的平均值G(t)要比單一的g_t更接近目標函式f,regression效果更好。
我們已經知道G是數目為T的g_t的平均值。令包含N個資料的樣本D獨立同分佈於P^N,每次從新的D_t中學習得到新的g_t,在對g_t求平均得到G,當做無限多次,即T趨向於無窮大的時候:
\overline{g}=lim_{T\rightarrow \infty}\ G=lim_{T\rightarrow \infty}\ \frac1T\sum_{t=1}^Tg_t=\epsilon_DA(D)
當T趨於無窮大的時候,G=\overline{g},則有如下等式成立:
上述等式中左邊表示演演算法誤差的期望值;右邊第二項表示不同g_t的平均誤差共識,用偏差bias表示;右邊第一項表示不同g_t與共識的差距是多少,反映g_t之間的偏差,用方差variance表示。也就是說,一個演演算法的平均表現可以被拆成兩項,一個是所有g_t的共識,一個是不同g_t之間的差距是多少,即bias和variance。而uniform blending的操作時求平均的過程,這樣就削減弱化了上式第一項variance的值,從而演演算法的表現就更好了,能得到更加穩定的表現。
3. Linear and Any Blending
上一部分講的是uniform blending,即每個g_t所佔的權重都是1,求平均的思想。下面我們將介紹linear blending,每個g_t賦予的權重\alpha_t並不相同,其中\alpha_t\geq0。我們最終得到的預測結果等於所有g_t的線性組合。
如何確定\alpha_t的值,方法是利用誤差最小化的思想,找出最佳的\alpha_t,使E_{in}(\alpha)取最小值。例如對於linear blending for regression,E_{in}(\alpha)可以寫成下圖左邊形式,其中\alpha_t是帶求解引數,g_t(x_n)是每個矩得到的預測值,由已知矩得到。這種形式很類似於下圖右邊的形式,即加上特徵轉換\phi_i(x_n)的linear regression模型。兩個式子中的g_t(x_n)對應於\phi_i(x_n),唯一不同的就是linear blending for regression中\alpha_t\geq0,而linear regression中w_i沒有限制。
這種求解\alpha_t的方法就像是使用two-level learning,類似於我們之前介紹的probabilistic SVM。這裡,我們先計算g_t(x_n),再進行linear regression得到\alpha_t值。總的來說,linear blending由三個部分組成:LinModel,hypotheses as transform,constraints。其中值得注意的一點就是,計算過程中可以把g_t當成feature transform,求解過程就跟之前沒有什麼不同,除了\alpha\geq0的條件限制。
我們來看一下linear blending中的constraint \alpha_t\geq0。這個條件是否一定要成立呢?如果\alpha_t<0,會帶來什麼後果呢?其實\alpha_t<0並不會影響分類效果,只需要將正類看成負類,負類當成正類即可。例如分類問題,判斷該點是正類對應的\alpha_t<0,則它就表示該點是負類,且對應的-\alpha_t>0。如果我們說這個樣本是正類的概率是-99%,意思也就是說該樣本是負類的概率是99%。\alpha_t\geq0和\alpha_t<0的效果是等同的一致的。所以,我們可以把\alpha_t\geq0這個條件捨去,這樣linear blending就可以使用常規方法求解。
Linear Blending中使用的g_t是通過模型選擇而得到的,利用validation,從D_{train}中得到g_1^-,g_2^-,\cdots,g_T^-。然後將D_{train}中每個資料點經過各個矩的計算得到的值,代入到相應的linear blending計算公式中,迭代優化得到對應\alpha值。最終,再利用所有樣本資料,得到新的g_t代替g_t^-,則G(t)就是g_t的線性組合而不是g_t^-,係數是\alpha_t。
除了linear blending之外,還可以使用任意形式的blending。linear blending中,G(t)是g(t)的線性組合;any blending中,G(t)可以是g(t)的任何函式形式(非線性)。這種形式的blending也叫做Stacking。any blending的優點是模型複雜度提高,更容易獲得更好的預測模型;缺點是複雜模型也容易帶來過擬合的危險。所以,在使用any blending的過程中要時刻注意避免過擬合發生,通過採用regularization的方法,讓模型具有更好的泛化能力。
4. Bagging(Bootstrap Aggregation)
總結一些上面講的內容,blending的做法就是將已經得到的矩g_t進行aggregate的操作。具體的aggregation形式包括:uniform,non-uniforn和conditional。
現在考慮一個問題:如何得到不同的g_t呢?可以選取不同模型H;可以設定不同的引數,例如\eta、迭代次數n等;可以由演算法的隨機性得到,例如PLA、隨機種子等;可以選擇不同的資料樣本等。這些方法都可能得到不同的g_t。
那如何利用已有的一份資料集來構造出不同的g_t呢?首先,我們回顧一下之前介紹的bias-variance,即一個演演算法的平均表現可以被拆成兩項,一個是所有g_t的共識(bias),一個是不同g_t之間的差距是多少(variance)。其中每個g_t都是需要新的資料集的。只有一份資料集的情況下,如何構造新的資料集?
其中,\overline{g}是在矩個數T趨向於無窮大的時候,不同的g_t計算平均得到的值。這裡我們為了得到\overline{g},做兩個近似條件:
- 有限的T;
-
由已有資料集D構造出D_t~P^N,獨立同分布
第一個條件沒有問題,第二個近似條件的做法就是bootstrapping。bootstrapping是統計學的一個工具,思想就是從已有資料集D中模擬出其他類似的樣本D_t。
bootstrapping的做法是,假設有N筆資料,先從中選出一個樣本,再放回去,再選擇一個樣本,再放回去,共重複N次。這樣我們就得到了一個新的N筆資料,這個新的\breve{D_t}中可能包含原D裡的重複樣本點,也可能沒有原D裡的某些樣本,\breve{D_t}與D類似但又不完全相同。值得一提的是,抽取-放回的操作不一定非要是N,次數可以任意設定。例如原始樣本有10000個,我們可以抽取-放回3000次,得到包含3000個樣本的\breve{D_t}也是完全可以的。利用bootstrap進行aggragation的操作就被稱為bagging。
下面舉個實際中Bagging Pocket演算法的例子。如下圖所示,先通過bootstrapping得到25個不同樣本集,再使用pocket演算法得到25個不同的g_t,每個pocket演算法迭代1000次。最後,再利用blending,將所有的g_t融合起來,得到最終的分類線,如圖中黑線所示。可以看出,雖然bootstrapping會得到差別很大的分類線(灰線),但是經過blending後,得到的分類線效果是不錯的,則bagging通常能得到最佳的分類模型。
值得注意的是,只有當演演算法對資料樣本分佈比較敏感的情況下,才有比較好的表現。
5. 總結
本節課主要介紹了blending和bagging的方法,它們都屬於aggregation,即將不同的g_t合併起來,利用集體的智慧得到更加優化的G(t)。Blending通常分為三種情況:Uniform Blending,Linear Blending和Any Blending。其中,uniform blending取樣最簡單的“一人一票”的方法,linear blending和any blending都採用標準的two-level learning方法,類似於特徵轉換的操作,來得到不同g_t的線性組合或非線性組合。最後,我們介紹瞭如何利用bagging(bootstrap aggregation),從已有資料集D中模擬出其他類似的樣本D_t,而得到不同的g_t,再合併起來,優化預測模型。
註明:
文章中所有的圖片均來自臺灣大學林軒田《機器學習技法》課程
更多AI資源請關注公眾號:AI有道(ID:redstonewill)