機器怎樣能夠學得更好?

本系列是臺灣大學資訊工程系林軒田(Hsuan-Tien Lin)教授開設的《機器學習基石》課程的梳理。重在梳理,而非詳細的筆記,所以可能會略去一些細節。算法

該課程共16講,分爲4個部分:app

  1. 機器何時可以學習?(When Can Machines Learn?)
  2. 機器爲何可以學習?(Why Can Machines Learn?)
  3. 機器怎樣學習?(How Can Machines Learn?)
  4. 機器怎樣能夠學得更好?(How Can Machines Learn Better?)

本文是第4部分,對應原課程中的13-16講。機器學習

本部分的主要內容:函數

  • 過擬合問題,過擬合與噪聲、目標函數複雜度的關係;
  • 正則化,正則化與VC理論的聯繫;
  • 驗證,留一交叉驗證和V-折交叉驗證;
  • 三個學習原則,即奧卡姆剃刀、抽樣誤差和數據窺探。

1 過擬合問題

1.1 過擬合的發生

假設如今用帶很小噪聲的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)。測試

噪聲和數據規模都會影響過擬合。先來看如下兩個數據集:優化

  • 數據由10次多項式生成,有一些噪聲;
  • 數據由50次多項式生成,無噪聲。

數據集圖像以下:
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次多項式生成的數據,「目標函數的複雜度」自己就能夠看做相似的噪聲。

接下來作個更細節的實驗。用

\[\begin{aligned} y &= f(x) + \epsilon\\ &\sim \text{Gaussian}\left(\sum_{q=0}^{Q_f} \alpha_q x^q, \sigma^2 \right) \end{aligned} \]

生成\(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\),它的值是肯定的:

1.2 過擬合的處理

通常來講,處理過擬合的思路有如下幾種:

  • 從簡單的模型開始;
  • 數據清洗(data cleaning),將錯誤的數據修正(如更正它的標籤類別);
  • 數據剪枝(data pruning),刪去離羣點(outlier);
  • data hinting,當樣本量不夠時,能夠對現有樣本作些簡單的處理,增長樣本量,如在數字分類中,能夠將數據微微旋轉或平移而不改變它們的標籤,這樣就可增大樣本量;
  • 正則化(regularization),見下節;
  • 驗證(validation),見後文。

2 正則化(regularization)

2.1 正則化

正則化的思想是比如從\(\mathcal{H}_{10}\)「逐步回退」到\(\mathcal{H}_{2}\)。這個名字的由來是在早期作函數逼近(function approximation)時,有不少問題是ill-posed problems,即有不少函數都是知足問題的解,因此要加入一些限制條件。從某種意義上說,機器學習中的過擬合也是「正確的解太多」的問題。

\(\mathcal{H}_{10}\)中假設的通常形式爲

\[w_0+w_1 x+w_2 x^2+w_3 x^3+\cdots+w_{10} x^{10} \]

\(\mathcal{H}_{2}\)中假設的通常形式爲

\[w_0+w_1 x+w_2 x^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}'\)下,求解的問題轉化成了

\[\min\limits_{\mathbf{w}\in \mathbb{R}^{10+1}} E_\text{in}(\mathbf{w})\quad \text{s.t. } \sum\limits_{q=0}^{10}\mathbf{1}_{[w_1\ne 0]}\le 3 \]

這是個NP-hard問題,複雜度很高。不如再將它變爲

\[\min\limits_{\mathbf{w}\in \mathbb{R}^{10+1}} E_\text{in}(\mathbf{w})\quad \text{s.t. } \sum\limits_{q=0}^{10}w^2_q \le C \]

記該假設集爲\(\mathcal{H}(C)\),它與\(\mathcal{H}_2'\)是有部分重疊的,而且對於\(C\)有軟的、光滑的結構:

\[\mathcal{H}_{0} \subset \mathcal{H}_{1} \subset \cdots \subset \mathcal{H}_{\infty} =\mathcal{H}_{10} \]

記在\(\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})\),所以,達到最優解時,必定有

\[-\nabla E_\text{in}(\mathbf{w}) \propto \mathbf{w}_\text{REG} \]

由此,問題能夠轉化爲求解

\[\nabla E_\text{in}(\mathbf{w}_\text{REG}) +\dfrac{2 \lambda}{N} \mathbf{w}_\text{REG}=0 \]

其中\(\lambda\)是引入的拉格朗日乘子(Lagrange multiplier)。假設已知\(\lambda>0\),只須要把梯度的式子寫出來,即有:

\[\dfrac{2}{N}(X^T X\mathbf{w}_\text{REG}-X^T \mathbf{y})+\dfrac{2 \lambda}{N} \mathbf{w}_\text{REG}=0 \]

直接求解便可得

\[\mathbf{w}_\text{REG}\leftarrow (X^T X+\lambda I)^{-1} X^T\mathbf{y} \]

只要\(\lambda>0\)\(X^T X+\lambda I\)就是正定矩陣,它必定可逆。

在統計學中,這一般叫嶺迴歸(ridge regression)。

換一種視角來看,求解

\[\nabla E_\text{in}(\mathbf{w}_\text{REG}) +\dfrac{2 \lambda}{N} \mathbf{w}_\text{REG}=0 \]

就等價於求解(至關於對上式兩邊取積分)

\[\min\limits_{\mathbf{w}} E_\text{in}(\mathbf{w})+\dfrac{\lambda}{N}\mathbf{w}^T\mathbf{w} \]

\(\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個勒讓德多項式以下圖:

2.2 正則化與VC理論

在最小化augmented error的時候,儘管它與帶約束最值問題是等價的,但在計算時,其實並無真正的將\(\mathbf{w}\)限制在\(\mathcal{H}(C)\)中。那麼正則化到底是怎麼發生的?

能夠從另外一個角度看augmented error:

\[E_\text{aug}(\mathbf{w})=E_\text{in}(\mathbf{w})+\dfrac{\lambda}{N}\mathbf{w}^T\mathbf{w} \]

若記\(\mathbf{w}^T\mathbf{w}\)\(\Omega(\mathbf{w})\),它度量的是某個假設\(\mathbf{w}\)的複雜度。而在VC Bound中

\[E_\text{out}(\mathbf{w})\le E_\text{in}(\mathbf{w})+\Omega(\mathcal{H}) \]

\(\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維就會比較小。

2.3 更通常的正則項

有沒有更通常的正則項\(\Omega(\mathbf{w})\)?該如何選擇呢?有如下建議:

  • 與目標有關(target-dependent),若是知道目標函數的一些性質,就能夠寫出來,好比咱們預先知道目標函數是接近於偶函數的,那就能夠選取\(\sum \mathbf{1}_{[q \text{ is odd}]} w^2_q\)
  • 合理的(plausible),能夠選平滑的或簡單的,如爲了稀疏性而選L1正則項\(\sum\vert w_q \vert\),下文會說明;
  • 友好的(friendly),即容易優化,如L2正則項\(\sum w_q^2\)
  • 就算選的正則項很差,也沒有關係,由於能夠靠\(\lambda\)來調節,最差也就是至關於沒有加入正則項。

L1正則項以下圖:

它是凸的,但不是到處可微,加入它以後,解具備稀疏性。若是在實際中須要有稀疏解,L1就會頗有用。

\(\lambda\)要怎麼選呢?可根據\(E_\text{out}\)的狀況選出的最優\(\lambda\),示例以下(加粗點爲最優\(\lambda\)):

從圖中能夠看到,噪聲越大,越須要增長regularization。

但通常狀況下,噪聲是未知的,該如何選擇合適的\(\lambda\)

3 驗證(Validation)

3.1 驗證集

\(\lambda\)該如何選擇?咱們徹底不知道\(E_\text{out}\),而且也不能直接經過\(E_\text{in}\)作選擇。若是有一個歷來沒被使用過的測試集就行了,這樣就能夠根據測試集進行選擇:

\[m^*=\mathop{\arg\min}\limits_{1\le m\le M} \left( E_m=E_\text{test}(\mathcal{A}_m(\mathcal{D})) \right) \]

而且,這樣作是有泛化保證的(Hoeffding):

\[E_\text{out}(g_{m^*})\le E_\text{test}(g_{m^*})+O(\sqrt{\dfrac{\log M}{N_\text{test}}}) \]

但哪裏有真正測試集?只能折中地從\(\mathcal{D}\)劃分出一部分數據做爲驗證集\(\mathcal{D}_\text{val}\subset \mathcal{D}\)了,固然,也要求它是在過去從未被\(\mathcal{A}_m\)使用過的。

劃分驗證集\(\mathcal{D}_\text{val}\)的過程以下:

用訓練集獲得的\(g^-_m\),也能夠有泛化保證:

\[E_\text{out}(g_m^-)\le E_\text{val}(g_m^-)+O(\sqrt{\dfrac{\log M}{K}}) \]

作驗證時的通常流程以下:

能夠看到,在用驗證集選出最好的模型\(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\)差不少。

咱們真正想要作到的是

\[E_\text{out}(g)\approx E_\text{out}(g^-)\approx E_\text{val}(g^-) \]

第一個約等號要求\(K\)較小,第二個約等號要求\(K\)較大,所以必須選一個合適的\(K\),按經驗法則可選\(K=\dfrac{N}{5}\)

3.2 留一交叉驗證(LOOCV)

若是讓\(K=1\),即只留一個樣本\(n\)做爲驗證集,記

\[E_\text{val}^{(n)}(g_n^-)=\text{err}(g_n^-(\mathbf{x}_n),y_n)=e_n \]

但單個\(e_n\)沒法告訴咱們準確的信息,要想辦法對全部可能的\(E_\text{val}^{(n)}(g_n^-)\)取平均。能夠用留一交叉驗證(Leave-One-Out Cross Validation):

\[E_\text{loocv}(\mathcal{H},\mathcal{A})=\dfrac{1}{N}\sum\limits_{n=1}^{N} e_n=\dfrac{1}{N} \sum\limits_{n=1}^{N} \text{err}(g_n^- (\mathbf{x}_n),y_n) \]

咱們但願的是有\(E_\text{loocv}(\mathcal{H},\mathcal{A})\approx E_\text{out}(g)\)。可做證實:

\[\begin{aligned} &\mathop{\mathcal{E}}\limits_{\mathcal{D}} E_\text{loovc}(\mathcal{H},\mathcal{A})\\ =& \mathop{\mathcal{E}}\limits_{\mathcal{D}}\dfrac{1}{N}\sum\limits_{n=1}^{N} e_n\\ =&\dfrac{1}{N} \sum\limits_{n=1}^{N} \mathop{\mathcal{E}}\limits_{\mathcal{D}} e_n\\ =&\dfrac{1}{N} \sum\limits_{n=1}^{N} \mathop{\mathcal{E}}\limits_{\mathcal{D}_n} \mathop{\mathcal{E}}\limits_{(\mathbf{x}_n,y_n)} \text{err}(g_n^-(\mathbf{x}_n),y_n)\\ =&\dfrac{1}{N} \sum\limits_{n=1}^{N} \mathop{\mathcal{E}}\limits_{\mathcal{D}_n} E_\text{out}(g_n^-)\\ =&\dfrac{1}{N} \sum\limits_{n=1}^{N} \overline{E_\text{out}}(N-1)\\ =& \overline{E_\text{out}}(N-1) \end{aligned} \]

因爲\(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}\)分別隨特徵數變化而變化的狀況畫出來,如圖:

3.3 \(V\)-折交叉驗證

若是有1000個點,作留一交叉驗證就要計算1000次\(e_n\),每次計算還要用999個樣本作訓練,除了少數算法(如線性迴歸,它有解析解),在大多數狀況下會很是耗時間。另外一方面,由上一節最後可看到,因爲\(E_\text{loocv}\)是在單個點上作平均,結果會有跳動,不夠穩定。所以,在實際中,loocv並非很經常使用。

在實際中,更經常使用的是\(V\)折交叉驗證(\(V\)-Fold Cross Validation),即將\(\mathcal{D}\)隨機分爲\(V\)等分,輪流用每一份作驗證,用剩下的\(V-1\)份作訓練,在實際中通常常取\(V=10\),以下圖:

這樣能計算出

\[E_\text{cv}(\mathcal{H}, \mathcal{A})=\dfrac{1}{V}\sum\limits_{v=1}^{V} E_\text{val}^{(v)}(g_v^-) \]

再用它對參數作選擇:

\[m^*=\mathop{\arg\min}\limits_{1\le m\le M} \left( E_m=E_\text{cv}(\mathcal{H}_m, \mathcal{A}_m) \right) \]

值得注意的是,因爲驗證過程也是在作選擇,它的結果依舊會比最後的測試結果樂觀一些。所以,最後重要的是測試的結果,而非找出來的最好的驗證的結果。

4 三個學習的原則

這裏介紹三個學習的原則。

4.1 奧卡姆剃刀

首先是奧卡姆剃刀(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)\)

從哲學意義上說,越簡單的模型,「擬合」發生的機率越小,若是真的發生了,那就說明數據中可能真的有一些比較重要的規律。

4.2 抽樣誤差

第二個是要注意抽樣誤差(Sampling Bias)。

若是數據的抽樣過程存在誤差,那麼機器學習也會產生一個有誤差的結果。

在講解VC維時,提到過一個前提條件,就是訓練數據和測試數據須要來自同一個分佈。當沒法知足時,經驗法則是,儘量讓測試環境和訓練環境儘量匹配。

4.3 數據窺探

第三是要注意數據窺探(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)\),它會很是大,泛化會很是差。這是由於其實在每一步過程當中,做者都經過閱讀前人的文獻而窺探了數據。

所以在作機器學習時,要審慎地處理數據。要避免用數據來作一些決策,即最好事先就將領域知識加入到模型中,而不是在觀察了數據後再把一些特性加入模型中。另外,不管是在實際操做中,仍是在看論文過程當中,或者是在對待本身的結果時,都要時刻保持懷疑。

相關文章
相關標籤/搜索