稍微了解有監督機器學習的人都會知道,我們先通過訓練集訓練出模型,然后在測試集上測試模型效果,最后在未知的數據集上部署算法。然而,我們的目標是希望算法在未知的數據集上有很好的分類效果(即最低的泛化誤差),為什么訓練誤差最小的模型對控制泛化誤差也會有效呢?這一節關於學習理論的知識就是讓大家知其然也知其所以然。
學習理論
1.empirical risk minimization(經驗風險最小化)
假設有m個樣本的訓練集,並且每個樣本都是相互獨立地從概率分布D中生成的。對於假設h,定義training error訓練誤差(或者叫empirical risk經驗風險)為:h誤分類樣本占整個訓練集的比重:
另外,定義generalization error泛化誤差為:從生成訓練集的概率分布D中生成新的樣本,假設h誤分類的概率![]()
值得注意的是:假設訓練集與新的樣本都相互獨立地由同一個分布D產生(IID獨立同分布)是學習理論里重要的基礎。
當我們選擇模型參數時使用如下方法:![]()
就是所謂的經驗風險最小化(empirical risk minimization),經驗風險最小化是一個非凸優化問題難以求解,而logistic回歸與SVM可以看做這個問題的凸優化近似。
為了使得定義更加一般化(不僅限於線性分類器參數θ的選擇),我們定義hypothesis class H為一個學習算法所考慮的所有分類器(函數h),則經驗風險最小化變為:![]()
2.最小化經驗風險與最小化泛化誤差的關系
2.1 對於有限的H
這里將直接給出公式推導的結論,具體的步驟可參考cs229課程筆記。首先,根據union bound Lemma與Cherno bound Lemma可以推出:![]()
該式被稱為uniform convergence,其中k為H中包含的模型假設數量。再將使得經驗風險最小化的假設與使得泛化誤差最小化的假設帶入,可得:
也就是說,在uniform convergence的前提下,通過最小化經驗風險選出的模型的泛化誤差與最小化泛化誤差模型的分類准確度只差2γ。
由此,有定理:設H中包含的假設數量為k樣本量為m,則至少在1-δ的概率下我們有:
有了這個定理,就可以更全面地理解Andrew所說的bias與variance(與概率中的方差無關)
最左邊的圖對應着high bias,因為hypothesis class中可選的假設少,因此即使大大提升樣本量也無法降低最小泛化誤差,這種現象對應着欠擬合;
最右邊的圖對應着high variance,因為增大了hypothesis class(增加了參數),因此min ε(h)肯定會下降或者保持不變,但是k增大將導致γ也增大,尤其是當m很小時將有可能導致雖然經驗風險很小但是泛化誤差依然很大,這種現象對應着過擬合。
而最好的方案是在high bias與high variance之間做好折中,即對應着中間那副圖。
最后還有一個用於求樣本復雜度的推論:設H中包含的假設數量為k,則至少在1-δ的概率下,要使最小化經驗風險的泛化誤差與最小泛化誤差的差值小於等於γ,需要確保樣本量:
2.2 對於無限的H
在大多數情況下,H包含的假設都是無限的,因此有必要把上一小節的結論推廣至無限的H中,但是證明步驟過於復雜因此Andrew也略過了證明過程。在介紹定理前需要先說一下
Vapnik-Chervonenkis dimension(VC維度):首先定義shatter:給定樣本集S,H shatters S是指H可以划分出S上所有的標記。而H的VC維度VC(H)則定義為:能被H shatter的最大集合的樣本量。舉例來說,對下圖集合中的三個點:
h(x) = 1{θ0 + θ1x1 + θ2x2 ≥0} 可以shatter這三個點:
並且這個H無法shatter4個點的集合,因此VC(H)=3。
定理:對於給定的H,h∈H,d=VC(H),在至少1-δ的概率下,我們有:
回憶一下,svm通過核函數可以使用無限維度的特征,那么是否會出現過擬合?Andrew給出的答案是不會:可以證明svm的VC維度是有上界的(即使特征向量的維度是無限的),因此variance不會過大。
推論:在至少1-δ的概率下,要使最小化經驗風險的泛化誤差與最小泛化誤差的差值小於等於γ,則樣本量m的復雜度為Oγδ(d)。
如果嚴格按照推論得到的公式來計算所需要的樣本量,通常會發現根本無法取得如此大的樣本量。但是Andrew提到一個粗略估計的方法:要使得算法學習得比較好,需要訓練集的樣本量m與VC(H)是線性關系;而對於大多數H,VC(H)又大致與模型參數的個數線性相關;聯合起來就是,通常需要的訓練集樣本量應該大致與模型參數的個數為線性關系。
最后,Andrew還提到了自己的經驗:做邏輯回歸,訓練集樣本量為參數個數的10倍時,通常就可以擬合出不錯的邊界,即使只有不到十倍,也還可以接受。
模型選擇
1.cross validation交叉驗證
1.1 hold-out cross validation
- 隨機地將樣本集划分成訓練集(通常是70%的樣本量)與測試集(剩下的30%)
- 在訓練集上對每個候選假設進行訓練得到相應的模型
- 選出能使測試集上經驗風險最小的模型為最優模型
- 對初始條件擾動不敏感的模型,還可以在整個樣本集中重新訓練模型(可選)
這種方法的優點是每個模型只需要訓練一次,成本比較低;缺點是只利用了70%的樣本進行訓練。當樣本數據很多時可以使用,當樣本數據很稀有(比如只有20個)應考慮其他方法。
1.2 k-fold cross validation
- 隨機地將樣本集S划分成k個子集S1,…,Sk,每個子集的樣本量為m/k(k通常取10)
- 訓練與驗證模型的方法為:

- 選出泛化誤差估計值最小的模型,並在樣本集S中重新訓練模型
與hold-out cross validation相比,這種方法成本較高,對每個模型要訓練k次;但是更充分地利用了樣本進行模型的訓練。對於樣本量極其稀缺的情況,還有一種更極端的做法。
1.3 leave-one-out cross validation
步驟同k-fold cross validation,不過令fold的數量k等於樣本量m。
2.特征選擇
當特征數非常多時,很容易出現過擬合的現象,因此特征選擇十分有必要。對於n個特征的模型,將會有2n種可能的特征子集,一些啟發式的搜索過程可以被用來尋找好的特征子集:
2.1 forward search
- 初始化的特征空間F = ∅
- repeat {
for i = 1,…,n if i ∉ F, 令Fi = F ∪ {i} 並通過交叉驗證來評估Fi的效果
從上一步中選出效果最好的Fi作為新的F
} - 選出循環過程中,效果最好的特征子集
最外層的循環終止條件可以是遍歷完所有的特征組合,或者特征空間的維數|F|達到了某個預設的值(比如:從1000個特征中選出100個)。
2.2 backward search
與forward search基本一致,只不過初始特征空間變為所有特征:F={1,…,n},終止條件變為F=∅,循環中每次從特征空間中刪去一個特征。
以上兩種方法又被稱為wrapper model feature selection,不過這類方法的計算成本較高,如果完全遍歷整個特征空間,則計算復雜度為O(n2)。
2.3 Filter feature selection
- 為每個特征xi計算一個評分S(i)來衡量其對分類標簽y預測的信息貢獻程度
- 選出評分S(i)最高的k個特征(可以通過交叉驗證確定k的取值)
評分S(i)可選的一種計算方案是:xi與y的相關性。在實踐中,最常用的相關性計算是mutual information(尤其是對離散型的特征):
這個公式要求特征變量與類標簽變量都是二元的,這個公式給出了“p(xi, y)與p(xi)p(y)有多么的不同”:如果xi與y是相互獨立的,那么p(xi, y) = p(xi)p(y),MI(xi, y)=0,也就是說xi對y不貢獻任何信息,因此評分應該小。
對於用朴素貝葉斯做文本分類,默認的特征空間大小是詞匯表的大小n(通常非常大),而使用特征選擇經常能夠增加分類的准確性。
貝葉斯統計正則化
為了防止過擬合,特征選擇做的事情是使得模型更加簡單,而正則化則可以在保留所有參數的前提下防止過擬合:
以線性回歸為例,我們之前的做法是通過極大化似然函數求得最優的模型
其背后的邏輯是:存在一個最優的參數組合θ,而我們可以通過極大化似然函數來找到它。這是頻率學派(frequentist)的觀點。
而貝葉斯學派(Bayesian)則認為θ也是一個隨機變量,為了進行預測,我們先假設一個θ的先驗分布p(θ),給定一個樣本集后,我們可以求得θ的后驗分布:
當給定一個新的樣本x,我們要預測它的結果時,可以得到結果的分布為:
我們可以通過分布的期望給出預測:
然而,要在很高的維度上求積分是一件困難的事,因此上面的步驟將變得難以計算。所以我們轉而去求θ的后驗分布中概率最大的θ,即MAP(maximum a posteriori):
最后通過θMAP進行預測。
在實踐中,θ的先驗分布p(θ)通常被假設為θ ~ N(0, τ2 I),而使用貝葉斯MAP估計求θ與使用最大化似然函數的區別,表現在損失函數上就是前者比后者多了一個懲罰項:
+ λ ||θ||2 (λ=1/τ2)
通過這樣的正則化后,模型將更不容易過擬合,比如:貝葉斯邏輯回歸也被證明是一個高效的文本分類算法,即使在文本分類中通常存在n >> m。
4.online learning
為了體現課程體系的完整性,因此將這塊知識放到最后,並且只做了簡單介紹。
之前我們學習的算法,都是先用一批樣本訓練好模型后再對新的數據進行預測,這稱為batch learning;
而還有一種算法,是一邊學習一邊預測,即每新增一個數據就進行一次新的訓練,並且馬上給出預測,這稱為online learning。
之前學到的每一種模型都可以做online learning,不過考慮到實時性,並不是每個模型都可以在短時間內被更新好且進行下一次預測,而感知機算法十分適合做online learning:
參數更新的方法為:
如果hθ(x) = y 則預測准確,參數不更新
否則,θ := θ + yx (其實這個式子和梯度下降的更新策略是一樣的,只不過類標號改為了{1,-1}且學習速率α不會影響感知機的表現因此被去掉了)
最后,假設||x(i)|| ≤ D,且存在一個單位向量u(||u|| = 1)且y(i) (uTx(i)) ≥ γ(其實就是svm的模型,u能以幾何間隔γ分隔所有數據),還可以證明感知機在線算法預測錯誤的總數量將小於等於(D/γ)2。
