上一節課,我們介紹了分類問題的三種線性模型,可以用來解決binary classification和multiclass classification問題。本節課主要介紹非線性的模型來解決分類問題。
一、Quadratic Hypothesis
之前介紹的線性模型,在2D平面上是一條直線,在3D空間中是一個平面。數學上,我們用線性得分函式s來表示:s=w^Tx。其中,x為特徵值向量,w為權重,s是線性的。
線性模型的優點就是,它的VC Dimension比較小,保證了E_{in}\approx E_{out}。但是缺點也很明顯,對某些非線性問題,可能會造成E_{in}很大,雖然E_{in}\approx E_{out},但是也造成E_{out}很大,分類效果不佳。
為了解決線性模型的缺點,我們可以使用非線性模型來進行分類。例如資料集D不是線性可分的,而是圓形可分的,圓形內部是正類,外面是負類。假設它的hypotheses可以寫成:
h_{SEP}(x)=sign(-x_1^2-x_2^2+0.6)
基於這種非線性思想,我們之前討論的PLA、Regression問題都可以有非線性的形式進行求解。
下面介紹如何設計這些非線性模型的演演算法。還是上面介紹的平面圓形分類例子,它的h(x)的權重w0=0.6,w1=-1,w2=-1,但是h(x)的特徵不是線性模型的(1,x_1,x_2),而是(1,x_1^2,x_2^2)。我們令z_0=1,z_1=x_1^2,z_2=x_2^2,那麼,h(x)變成:
h(x)=sign(\breve{w}_0\cdot z_0+\breve{w}_1\cdot z_1+\breve{w}_2\cdot z_2)=sign(0.6\cdot z_0-1\cdot z_1-1\cdot z_2)=sign(\breve{w}^Tz)
這種x_n\rightarrow z_n的轉換可以看成是x空間的點對映到z空間中去,而在z域中,可以用一條直線進行分類,也就是從x空間的圓形可分對映到z空間的線性可分。z域中的直線對應於x域中的圓形。因此,我們把x_n\rightarrow z_n這個過程稱之為特徵轉換(Feature Transform)。透過這種特徵轉換,可以將非線性模型轉換為另一個域中的線性模型。
已知x域中圓形可分在z域中是線性可分的,那麼反過來,如果在z域中線性可分,是否在x域中一定是圓形可分的呢?答案是否定的。由於權重向量w取值不同,x域中的hypothesis可能是圓形、橢圓、雙曲線等等多種情況。
目前討論的x域中的圓形都是圓心過原點的,對於圓心不過原點的一般情況,x_n\rightarrow z_n對映公式包含的所有項為:
\Phi_2(x)=(1,x_1,x_2,x_1^2,x_1x_2,x_2^2)
也就是說,對於二次hypothesis,它包含二次項、一次項和常數項1,z域中每一條線對應x域中的某二次曲線的分類方式,也許是圓,也許是橢圓,也許是雙曲線等等。那麼z域中的hypothesis可以寫成:
二、Nonlinear Transform
上一部分我們定義了什麼了二次hypothesis,那麼這部分將介紹如何設計一個好的二次hypothesis來達到良好的分類效果。那麼目標就是在z域中設計一個最佳的分類線。
其實,做法很簡單,利用對映變換的思想,透過對映關係,把x域中的最高階二次的多項式轉換為z域中的一次向量,也就是從quardratic hypothesis轉換成了perceptrons問題。用z值代替x多項式,其中向量z的個數與x域中x多項式的個數一致(包含常數項)。這樣就可以在z域中利用線性分類模型進行分類訓練。訓練好的線性模型之後,再將z替換為x的多項式就可以了。具體過程如下:
整個過程就是透過對映關係,換個空間去做線性分類,重點包括兩個:
- 特徵轉換
-
訓練線性模型
其實,我們以前處理機器學習問題的時候,已經做過類似的特徵變換了。比如數字識別問題,我們從原始的畫素值特徵轉換為一些實際的concrete特徵,比如密度、對稱性等等,這也用到了feature transform的思想。
三、Price of Nonlinear Transform
若x特徵維度是d維的,也就是包含d個特徵,那麼二次多項式個數,即z域特徵維度是:
\breve d=1+C_d^1+C_d^2+d=\frac{d(d+3)}2+1
如果x特徵維度是2維的,即(x_1,x_2),那麼它的二次多項式為(1,x_1,x_2,x_1^2,x_1x_2,x_2^2),有6個。
現在,如果階數更高,假設階數為Q,那麼對於x特徵維度是d維的,它的z域特徵維度為:
\breve d=C_{Q+d}^Q=C_{Q+d}^d=O(Q^d)
由上式可以看出,計算z域特徵維度個數的時間複雜度是Q的d次方,隨著Q和d的增大,計算量會變得很大。同時,空間複雜度也大。也就是說,這種特徵變換的一個代價是計算的時間、空間複雜度都比較大。
另一方面,z域中特徵個數隨著Q和d增加變得很大,同時權重w也會增大,即自由度增加,VC Dimension增大。令z域中的特徵維度是1+\breve d,則在在域中,任何\breve d+2的輸入都不能被shattered;同樣,在x域中,任何\breve d+2的輸入也不能被shattered。\breve d+1是VC Dimension的上界,如果\breve d+1很大的時候,相應的VC Dimension就會很大。根據之前章節課程的討論,VC Dimension過大,模型的泛化能力會比較差。
下面透過一個例子來解釋為什麼VC Dimension過大,會造成不好的分類效果:
上圖中,左邊是用直線進行線性分類,有部分點分類錯誤;右邊是用四次曲線進行非線性分類,所有點都分類正確,那麼哪一個分類效果好呢?單從平面上這些訓練資料來看,四次曲線的分類效果更好,但是四次曲線模型很容易帶來過擬合的問題,雖然它的E_{in}比較小,從泛化能力上來說,還是左邊的分類器更好一些。也就是說VC Dimension過大會帶來過擬合問題,\breve d+1不能太大了。
那麼如何選擇合適的Q,來保證不會出現過擬合問題,使模型的泛化能力強呢?一般情況下,為了儘量減少特徵自由度,我們會根據訓練樣本的分佈情況,人為地減少、省略一些項。但是,這種人為地刪減特徵會帶來一些“自我分析”代價,雖然對訓練樣本分類效果好,但是對訓練樣本外的樣本,不一定效果好。所以,一般情況下,還是要儲存所有的多項式特徵,避免對訓練樣本的人為選擇。
四、Structured Hypothesis Sets
下面,我們討論一下從x域到z域的多項式變換。首先,如果特徵維度只有1維的話,那麼變換多項式只有常數項:
\Phi_0(x)=(1)
如果特徵維度是兩維的,變換多項式包含了一維的\Phi_0(x):
\Phi_1(x)=(\Phi_0(x),x_1,x_2,\ldots,x_d)
如果特徵維度是三維的,變換多項式包含了二維的\Phi_1(x):
\Phi_2(x)=(\Phi_1(x),x_1^2,x_1x_2,\ldots,x_d^2)
以此類推,如果特徵維度是Q次,那麼它的變換多項式為:
\Phi_Q(x)=(\Phi_{Q-1}(x),x_1^Q,x_1^{Q-1}x_2,\cdots,x_d^Q)
那麼對於不同階次構成的hypothesis有如下關係:
H_{\Phi_0} \subset H_{\Phi_1} \subset H_{\Phi_2} \subset \cdots \subset H_{\Phi_Q}
我們把這種結構叫做Structured Hypothesis Sets:
那麼對於這種Structured Hypothesis Sets,它們的VC Dimension滿足下列關係:
d_{VC}(H_0)\leq d_{VC}(H_1)\leq d_{VC}(H_2)\leq \cdots \leq d_{VC}(H_Q)
它的E_{in}滿足下列關係:
E_{in}(g_0)\geq E_{in}(g_1)\geq E_{in}(g_2)\geq \cdots \geq E_{in}(g_Q)
從上圖中也可以看到,隨著變換多項式的階數增大,雖然E_{in}逐漸減小,但是model complexity會逐漸增大,造成E_{out}很大,所以階數不能太高。
那麼,如果選擇的階數很大,確實能使E_{in}接近於0,但是泛化能力通常很差,我們把這種情況叫做tempting sin。所以,一般最合適的做法是先從低階開始,如先選擇一階hypothesis,看看E_{in}是否很小,如果E_{in}足夠小的話就選擇一階,如果E_{in}大的話,再逐漸增加階數,直到滿足要求為止。也就是說,儘量選擇低階的hypothes,這樣才能得到較強的泛化能力。
五、總結
這節課主要介紹了非線性分類模型,透過非線性變換,將非線性模型對映到另一個空間,轉換為線性模型,再來進行線性分類。本節課完整介紹了非線性變換的整體流程,以及非線性變換可能會帶來的一些問題:時間複雜度和空間複雜度的增加。最後介紹了在要付出代價的情況下,使用非線性變換的最安全的做法,儘可能使用簡單的模型,而不是模型越複雜越好。
註明:
文章中所有的圖片均來自臺灣大學林軒田《機器學習基石》課程
更多AI資源請關注公眾號:AI有道(ID:redstonewill)