本系列是臺灣大學資訊工程系林軒田(Hsuan-Tien Lin)教授開設的《機器學習基石》課程的梳理。重在梳理,而非詳細的筆記,所以可能會略去一些細節。算法
該課程共16講,分爲4個部分:app
本文是第4部分,對應原課程中的13-16講。機器學習
本部分的主要內容:函數
假設如今用帶很小噪聲的2次多項式生成了5個樣本,對於這5個樣本,其實用4次多項式就能夠完美擬合它:oop
這樣作可以使\(E_\text{in}=0\),但\(E_\text{out}\)卻會很是大。學習
若是出現\(E_\text{in}\)很小,\(E_\text{out}\)很大的狀況,就是出現了很差的泛化(bad generalization)。若是在訓練的過程當中,\(E_\text{in}\)愈來愈小,\(E_\text{out}\)愈來愈大,就稱爲過擬合(overfitting)。測試
噪聲和數據規模都會影響過擬合。先來看如下兩個數據集:優化
數據集圖像以下:
spa
若是咱們用2次和10次多項式分別擬合以上兩個數據集,那麼在從\(g_2 \in \mathcal{H}_2\)到\(g_{10} \in \mathcal{H}_{10}\)的過程當中,會發生過擬合嗎?3d
擬合結果以下:
比較後發現,在兩個數據集中,都發生了過擬合!
來看學習曲線,當\(N\to \infty\)時顯然\(\mathcal{H}_{10}\)會有更小的\(\overline{E_{out}}\),但\(N\)較小時它會有很大的泛化偏差。灰色區域就是過擬合發生的區域。
其實對於由無噪聲的50次多項式生成的數據,「目標函數的複雜度」自己就能夠看做相似的噪聲。
接下來作個更細節的實驗。用
生成\(N\)個數據,其中\(\epsilon\)是獨立同分布的高斯噪聲,噪聲水平爲\(\sigma^2\),\(f(x)\)關於複雜度水平\(Q_f\)是均勻分佈的。也就是說,目標函數有\(Q_f\)和\(\sigma^2\)兩個變量。
而後,分別固定\(Q_f=20\)和\(\sigma^2=0.1\),仍是分別用2次和10次多項式擬合數據,並用\(E_\text{out}(g_{10})-E_\text{out}(g_{2})\)度量過擬合水平。結果以下:
顏色偏紅的區域,就是發生了過擬合。
加上去的\(\sigma^2\)高斯噪聲可稱爲stochastic noise,而目標函數的次數\(Q_f\)也有相似噪聲的影響,所以可叫deterministic noise。
若是\(f\notin \mathcal{H}\),那麼\(f\)必定有某些部分就沒法被\(\mathcal{H}\)所捕捉到,最好的\(h^*\in\mathcal{H}\)與\(f\)的差就是deterministic noise,它的表現與隨機噪聲沒什麼不同(與僞隨機數生成器相似)。它與stochastic noise的不一樣之處在於,它與\(\mathcal{H}\)有關,且對於每一個\(x\),它的值是肯定的:
通常來講,處理過擬合的思路有如下幾種:
正則化的思想是比如從\(\mathcal{H}_{10}\)「逐步回退」到\(\mathcal{H}_{2}\)。這個名字的由來是在早期作函數逼近(function approximation)時,有不少問題是ill-posed problems,即有不少函數都是知足問題的解,因此要加入一些限制條件。從某種意義上說,機器學習中的過擬合也是「正確的解太多」的問題。
\(\mathcal{H}_{10}\)中假設的通常形式爲
而\(\mathcal{H}_{2}\)中假設的通常形式爲
其實只要限制\(w_3=w_4=\cdots=w_{10}=0\),就會有\(\mathcal{H}_{10}=\mathcal{H}_{2}\)。若是在用\(\mathcal{H}_{10}\)時加上這個限制,其實就是在用\(\mathcal{H}_2\)作機器學習。
\(\mathcal{H}_2\)的靈活性有限,但\(\mathcal{H}_{10}\)又很危險,那有沒有折中一些的假設集呢?不妨把這個條件放鬆一些,變成\(\sum\limits_{q=0}^{10}\mathbf{1}_{[w_1\ne 0]}\le 3\),記在該限制下的假設集爲\(\mathcal{H}_2'\),有\(\mathcal{H}_{2}\subset \mathcal{H}_{2}' \subset \mathcal{H}_{10}\),即它比\(\mathcal{H}_{2}\)更靈活,但又沒有\(\mathcal{H}_{10}\)那麼危險。
在\(\mathcal{H}_{2}'\)下,求解的問題轉化成了
這是個NP-hard問題,複雜度很高。不如再將它變爲
記該假設集爲\(\mathcal{H}(C)\),它與\(\mathcal{H}_2'\)是有部分重疊的,而且對於\(C\)有軟的、光滑的結構:
記在\(\mathcal{H}(C)\)下找到的最優解爲\(\mathbf{w}_\text{REG}\)。
在沒有正則化時,用梯度降低更新參數的方向是\(-\nabla E_\text{in}(\mathbf{w})\)。而在加入了正則化\(\mathbf{w}^T \mathbf{w}\le C\)的限制時,必須在該限制下更新,以下圖:
\(\mathbf{w}^T \mathbf{w}= C\)的法向量(normal vector)就是\(\mathbf{w}\),從圖中可知,只要\(-\nabla E_\text{in}(\mathbf{w})\)和\(\mathbf{w}\)不平行,就可繼續在該限制降低低\(E_\text{in}(\mathbf{w})\),所以,達到最優解時,必定有
由此,問題能夠轉化爲求解
其中\(\lambda\)是引入的拉格朗日乘子(Lagrange multiplier)。假設已知\(\lambda>0\),只須要把梯度的式子寫出來,即有:
直接求解便可得
只要\(\lambda>0\),\(X^T X+\lambda I\)就是正定矩陣,它必定可逆。
在統計學中,這一般叫嶺迴歸(ridge regression)。
換一種視角來看,求解
就等價於求解(至關於對上式兩邊取積分)
\(\mathbf{w}^T\mathbf{w}\)可叫regularizer,整個\(E_\text{in}(\mathbf{w})+\dfrac{\lambda}{N}\mathbf{w}^T\mathbf{w}\)可叫做augmented error \(E_\text{aug}(\mathbf{w})\)。
這樣,本來是給定\(C\)後解一個條件最值問題,如今轉化成了一個給定\(\lambda\)的無條件最值問題。
可將\(+\dfrac{\lambda}{N}\mathbf{w}^T\mathbf{w}\)稱爲weight-decay regulariztion,由於更大的\(\lambda\),就至關於讓\(\mathbf{w}\)更短一些,也至關於\(C\)更小一點。
一個小細節:在作特徵變換時,若是用\(\Phi(\mathbf{x})=(1,x,x^2,\ldots,x^Q)\),假設\(x_n \in [-1,+1]\),那麼\(x^q_n\)會很是小,這一項原本就須要很大的\(w_q\)才能起到做用,若是此時再用正則化,就對高維的係數有些「過分懲罰」了,由於它原本就要比較大才行。所以,可在多項式的空間中找出一些正交的基函數(orthonormal basis function),這是一些比較特別的多項式,叫勒讓德多項式(Legendre Polynomials),再用這些多項式這樣作特徵變換\((1,L_1(x),L_2(x),\ldots,L_Q(x))\)便可。前5個勒讓德多項式以下圖:
在最小化augmented error的時候,儘管它與帶約束最值問題是等價的,但在計算時,其實並無真正的將\(\mathbf{w}\)限制在\(\mathcal{H}(C)\)中。那麼正則化到底是怎麼發生的?
能夠從另外一個角度看augmented error:
若記\(\mathbf{w}^T\mathbf{w}\)爲\(\Omega(\mathbf{w})\),它度量的是某個假設\(\mathbf{w}\)的複雜度。而在VC Bound中
\(\Omega(\mathcal{H})\)度量的是整個\(\mathcal{H}\)的複雜度。若是\(\dfrac{\lambda}{N}\Omega(\mathbf{w})\)與\(\Omega(\mathcal{H})\)有某種關聯,\(E_\text{aug}\)就能夠直接做爲\(E_\text{out}\)的代理,不須要再經過作好\(E_\text{in}\)來作好\(E_\text{out}\),而同時,又能夠享受整個\(\mathcal{H}\)的高度靈活性。
再換個角度,本來對於整個\(\mathcal{H}\)有\(d_\text{VC}(\mathcal{H})=\tilde{d}+1\),而如今至關於只考慮\(\mathcal{H}(C)\)中的假設,也就是說VC維變成了\(d_\text{VC}(\mathcal{H}(C))\)。能夠定義一個「有效VC維」\(d_\text{EFF}(\mathcal{H},\mathcal{A})\),只要\(\mathcal{A}\)中作了正則化,有效VC維就會比較小。
有沒有更通常的正則項\(\Omega(\mathbf{w})\)?該如何選擇呢?有如下建議:
L1正則項以下圖:
它是凸的,但不是到處可微,加入它以後,解具備稀疏性。若是在實際中須要有稀疏解,L1就會頗有用。
\(\lambda\)要怎麼選呢?可根據\(E_\text{out}\)的狀況選出的最優\(\lambda\),示例以下(加粗點爲最優\(\lambda\)):
從圖中能夠看到,噪聲越大,越須要增長regularization。
但通常狀況下,噪聲是未知的,該如何選擇合適的\(\lambda\)?
\(\lambda\)該如何選擇?咱們徹底不知道\(E_\text{out}\),而且也不能直接經過\(E_\text{in}\)作選擇。若是有一個歷來沒被使用過的測試集就行了,這樣就能夠根據測試集進行選擇:
而且,這樣作是有泛化保證的(Hoeffding):
但哪裏有真正測試集?只能折中地從\(\mathcal{D}\)劃分出一部分數據做爲驗證集\(\mathcal{D}_\text{val}\subset \mathcal{D}\)了,固然,也要求它是在過去從未被\(\mathcal{A}_m\)使用過的。
劃分驗證集\(\mathcal{D}_\text{val}\)的過程以下:
用訓練集獲得的\(g^-_m\),也能夠有泛化保證:
作驗證時的通常流程以下:
能夠看到,在用驗證集選出最好的模型\(g^-_{m^*}\)後,仍是要用全部的數據再訓練一個最好的模型\(g_{m^*}\)出來,通常來講此次訓練獲得的\(g_m^*\)會因爲訓練數據量的更大而有更低的\(E_\text{out}\),見下圖:
圖中最下面的虛線爲\(E_\text{out}\)。能夠看到,\(K\)不能過大或太小,若是\(K\)太小,雖然\(g_m^-\approx g_m\),但\(E_\text{val}\)和\(E_\text{out}\)會差異很大,而若是\(K\)過大,儘管\(E_\text{val}\approx E_\text{out}\),但會使\(g_m^-\)比\(g_m\)差不少。
咱們真正想要作到的是
第一個約等號要求\(K\)較小,第二個約等號要求\(K\)較大,所以必須選一個合適的\(K\),按經驗法則可選\(K=\dfrac{N}{5}\)。
若是讓\(K=1\),即只留一個樣本\(n\)做爲驗證集,記
但單個\(e_n\)沒法告訴咱們準確的信息,要想辦法對全部可能的\(E_\text{val}^{(n)}(g_n^-)\)取平均。能夠用留一交叉驗證(Leave-One-Out Cross Validation):
咱們但願的是有\(E_\text{loocv}(\mathcal{H},\mathcal{A})\approx E_\text{out}(g)\)。可做證實:
因爲\(E_\text{loovc}(\mathcal{H},\mathcal{A})\)的指望會告訴咱們一些關於\(E_\text{out}(g^-)\)的指望的信息,所以也叫做\(E_\text{out}(g)\)的「幾乎無偏估計」(almost unbiased estimate)。
用手寫數字識別——對數字是否爲1進行分類——看看效果,兩個基礎特徵爲對稱性和平均強度(average intensity),對它們進行特徵變換(增長特徵數量),再分別用\(E_\text{in}\)和\(E_\text{loocv}\)進行參數選擇(參數是變換後的特徵個數),結果以下:
若是將\(E_\text{out}\)、\(E_\text{in}\)、\(E_\text{loocv}\)分別隨特徵數變化而變化的狀況畫出來,如圖:
若是有1000個點,作留一交叉驗證就要計算1000次\(e_n\),每次計算還要用999個樣本作訓練,除了少數算法(如線性迴歸,它有解析解),在大多數狀況下會很是耗時間。另外一方面,由上一節最後可看到,因爲\(E_\text{loocv}\)是在單個點上作平均,結果會有跳動,不夠穩定。所以,在實際中,loocv並非很經常使用。
在實際中,更經常使用的是\(V\)折交叉驗證(\(V\)-Fold Cross Validation),即將\(\mathcal{D}\)隨機分爲\(V\)等分,輪流用每一份作驗證,用剩下的\(V-1\)份作訓練,在實際中通常常取\(V=10\),以下圖:
這樣能計算出
再用它對參數作選擇:
值得注意的是,因爲驗證過程也是在作選擇,它的結果依舊會比最後的測試結果樂觀一些。所以,最後重要的是測試的結果,而非找出來的最好的驗證的結果。
這裏介紹三個學習的原則。
首先是奧卡姆剃刀(Occam's Razor)。
An explanation of the data should be made as simple as possible, but no simpler.
--Albert Einsterin (?)
這句話傳說是愛因斯坦所說,但沒有證據。最先可追溯到奧卡姆的話:
entia non sunt multiplicanda praeter necessitatem (entities must not be multiplied beyond necessity)
--William of Occam (1287-1347)
在機器學習中,這是說能擬合數據的最簡單的模型每每是最合理的。
什麼叫簡單的模型呢?對於單個假設\(h\)來講,要求\(\Omega(h)\)較小即參數較少,對於一個模型(假設集)\(\mathcal{H}\)來講,要求\(\Omega(\mathcal{H})\)較小即它沒包含太多可能的假設。這二者是相關的,好比\(\vert \mathcal{H} \vert\)規模是\(2^\ell\),那麼其實只須要\(\ell\)個參數就能夠描述全部的\(h\),所以小的\(\Omega(\mathcal{H})\)也就意味着小的\(\Omega(h)\)。
從哲學意義上說,越簡單的模型,「擬合」發生的機率越小,若是真的發生了,那就說明數據中可能真的有一些比較重要的規律。
第二個是要注意抽樣誤差(Sampling Bias)。
若是數據的抽樣過程存在誤差,那麼機器學習也會產生一個有誤差的結果。
在講解VC維時,提到過一個前提條件,就是訓練數據和測試數據須要來自同一個分佈。當沒法知足時,經驗法則是,儘量讓測試環境和訓練環境儘量匹配。
第三是要注意數據窺探(Data Snooping)。
若是你經過觀察,發現數據比較符合某個模型,進而選用該模型,這是比較危險的,由於至關於加入了你大腦中的模型的複雜度。
在任何使用數據的過程當中,其實都是間接窺探到了數據。在窺探了數據的表現後,作任何決策,都會引入「大腦」複雜度。
好比在作scaling時,不能把訓練集和測試集放在一塊兒作scaling,而只能對訓練集作。
其實在機器學習的前沿研究中,也存在相似的狀況。好比第一篇論文發現了\(\mathcal{H}_1\)會在\(\mathcal{D}\)上表現較好,而第二篇論文提出了\(\mathcal{H}_2\),它在\(\mathcal{D}\)上比\(\mathcal{H}_1\)表現得更好(不然就不會發表),第三篇也如此……若是將全部論文看做一篇最終版的論文,那麼真正的VC維實際上是\(d_\text{vc}(\cup_m \mathcal{H}_m)\),它會很是大,泛化會很是差。這是由於其實在每一步過程當中,做者都經過閱讀前人的文獻而窺探了數據。
所以在作機器學習時,要審慎地處理數據。要避免用數據來作一些決策,即最好事先就將領域知識加入到模型中,而不是在觀察了數據後再把一些特性加入模型中。另外,不管是在實際操做中,仍是在看論文過程當中,或者是在對待本身的結果時,都要時刻保持懷疑。