coursera-斯坦福-機器學習-吳恩達-支持向量機

支持向量機(Support Vector Machines)

12.1 優化目標

參考視頻: 12 - 1 - Optimization Objective (15 min).mkv

到目前爲止,你已經見過一系列不同的學習算法。在監督學習中,許多學習算法的性能都非常類似,因此,重要的不是你該選擇使用學習算法A還是學習算法B,而更重要的是,應用這些算法時,所創建的大量數據在應用這些算法時,表現情況通常依賴於你的水平。比如:你爲學習算法所設計的特徵量的選擇,以及如何選擇正則化參數,諸如此類的事。還有一個更加強大的算法廣泛的應用於工業界和學術界,它被稱爲支持向量機(Support Vector Machine)。與邏輯迴歸和神經網絡相比,支持向量機,或者簡稱SVM,在學習複雜的非線性方程時提供了一種更爲清晰,更加強大的方式。因此,在接下來的視頻中,我會探討這一算法。在稍後的課程中,我也會對監督學習算法進行簡要的總結。當然,僅僅是作簡要描述。但對於支持向量機,鑑於該算法的強大和受歡迎度,在本課中,我會花許多時間來講解它。它也是我們所介紹的最後一個監督學習算法。

正如我們之前開發的學習算法,我們從優化目標開始。那麼,我們開始學習這個算法。爲了描述支持向量機,事實上,我將會從邏輯迴歸開始展示我們如何一點一點修改來得到本質上的支持向量機。

                                    

那麼,在邏輯迴歸中我們已經熟悉了這裏的假設函數形式,和右邊的S型激勵函數。然而,爲了解釋一些數學知識.我將用z 表示

現在考慮下我們想要邏輯迴歸做什麼:如果有一個 y=1的樣本,我的意思是不管是在訓練集中或是在測試集中,又或者在交叉驗證集中,總之是 y=1,現在我們希望趨近1。因爲我們想要正確地將此樣本分類,這就意味着當 趨近於1時, 應當遠大於0,這裏的>>意思是遠遠大於0。這是因爲由於 z表示 ,當 z遠大於0時,即到了該圖的右邊,你不難發現此時邏輯迴歸的輸出將趨近於1。相反地,如果我們有另一個樣本,即y=0。我們希望假設函數的輸出值將趨近於0,這對應於,或者就是 z會遠小於0,因爲對應的假設函數的輸出值趨近0。

                                    

如果你進一步觀察邏輯迴歸的代價函數,你會發現每個樣本 (x,y)都會爲總代價函數,增加這裏的一項,因此,對於總代價函數通常會有對所有的訓練樣本求和,並且這裏還有一個1/m項,但是,在邏輯迴歸中,這裏的這一項就是表示一個訓練樣本所對應的表達式。現在,如果我將完整定義的假設函數代入這裏。那麼,我們就會得到每一個訓練樣本都影響這一項。

現在,先忽略 1/m這一項,但是這一項是影響整個總代價函數中的這一項的。

現在,一起來考慮兩種情況:

一種是y等於1的情況;另一種是 y 等於0的情況。

在第一種情況中,假設 y=1 ,此時在目標函數中只需有第一項起作用,因爲y=1時,(1-y)項將等於0。因此,當在 y=1 的樣本中時,即在 (x, y) 中 ,我們得到 這樣一項,這裏同上一張幻燈片一致。

我用 z 表示,即: z= 。當然,在代價函數中,y 前面有負號。我們只是這樣表示,如果 y=1 代價函數中,這一項也等於1。這樣做是爲了簡化此處的表達式。如果畫出關於z的函數,你會看到左下角的這條曲線,我們同樣可以看到,當z 增大時,也就是相當於增大時,z對應的值會變的非常小。對整個代價函數而言,影響也非常小。這也就解釋了,爲什麼邏輯迴歸在觀察到正樣本y=1時,試圖將設置得非常大。因爲,在代價函數中的這一項會變的非常小。

現在開始建立支持向量機,我們從這裏開始:

我們會從這個代價函數開始,也就是一點一點修改,讓我取這裏的z=1 點,我先畫出將要用的代價函數。

                                                        

新的代價函數將會水平的從這裏到右邊(圖外),然後我再畫一條同邏輯迴歸非常相似的直線,但是,在這裏是一條直線,也就是我用紫紅色畫的曲線,就是這條紫紅色的曲線。那麼,到了這裏已經非常接近邏輯迴歸中使用的代價函數了。只是這裏是由兩條線段組成,即位於右邊的水平部分和位於左邊的直線部分,先別過多的考慮左邊直線部分的斜率,這並不是很重要。但是,這裏我們將使用的新的代價函數,是在y=1的前提下的。你也許能想到,這應該能做同邏輯迴歸中類似的事情,但事實上,在之後的優化問題中,這會變得更堅定,並且爲支持向量機,帶來計算上的優勢。例如,更容易計算股票交易的問題等等。

目前,我們只是討論了y=1的情況,另外一種情況是當y=0時,此時如果你仔細觀察代價函數只留下了第二項,因爲第一項被消除了。如果當y=0時,那麼這一項也就是0了。所以上述表達式只留下了第二項。因此,這個樣本的代價或是代價函數的貢獻。將會由這一項表示。並且,如果你將這一項作爲z的函數,那麼,這裏就會得到橫軸z。現在,你完成了支持向量機中的部分內容,同樣地,我們要替代這一條藍色的線,用相似的方法。

                                                         

如果我們用一個新的代價函數來代替,即這條從0點開始的水平直線,然後是一條斜線,像上圖。那麼,現在讓我給這兩個方程命名,左邊的函數,我稱之爲,同時,右邊函數我稱它爲。這裏的下標是指在代價函數中,對應的 y=1 和 y=0 的情況,擁有了這些定義後,現在,我們就開始構建支持向量機。

                                 

這是我們在邏輯迴歸中使用代價函數。也許這個方程看起來不是非常熟悉。這是因爲之前有個負號在方程外面,但是,這裏我所做的是,將負號移到了表達式的裏面,這樣做使得方程看起來有些不同。對於支持向量機而言,實質上我們要將這替換爲,也就是,同樣地,我也將這一項替換爲,也就是代價。這裏的代價函數,就是之前所提到的那條線。此外,代價函數,也是上面所介紹過的那條線。因此,對於支持向量機,我們得到了這裏的最小化問題,即:

                                                 

然後,再加上正則化參數。現在,按照支持向量機的慣例,事實上,我們的書寫會稍微有些不同,代價函數的參數表示也會稍微有些不同。

首先,我們要除去1/m這一項,當然,這僅僅是由於人們使用支持向量機時,對比於邏輯迴歸而言,不同的習慣所致,但這裏我所說的意思是:你知道,我將要做的是僅僅除去1/m這一項,但是,這也會得出同樣的 最優值,好的,因爲1/m 僅是個常量,因此,你知道在這個最小化問題中,無論前面是否有1/m 這一項,最終我所得到的最優值都是一樣的。這裏我的意思是,先給你舉一個樣本,假定有一最小化問題:即要求當取得最小值時的u值,這時最小值爲:當u=5時取得最小值。

現在,如果我們想要將這個目標函數乘上常數10,這裏我的最小化問題就變成了:求使得最小的值u,然而,使得這裏最小的u值仍爲5。因此將一些常數乘以你的最小化項,這並不會改變最小化該方程時得到u值。因此,這裏我所做的是刪去常量m。也相同的,我將目標函數乘上一個常量m,並不會改變取得最小值時的值。

第二點概念上的變化,我們只是指在使用支持向量機時,一些如下的標準慣例,而不是邏輯迴歸。因此,對於邏輯迴歸,在目標函數中,我們有兩項:第一個是訓練樣本的代價,第二個是我們的正則化項,我們不得不去用這一項來平衡。這就相當於我們想要最小化A加上正則化參數,然後乘以其他項B對吧?這裏的A表示這裏的第一項,同時我用B表示第二項,但不包括,我們不是優化這裏的A+ XB。我們所做的是通過設置不同正則參數達到優化目的。這樣,我們就能夠權衡對應的項,是使得訓練樣本擬合的更好。即最小化A。還是保證正則參數足夠小,也即是對於B項而言,但對於支持向量機,按照慣例,我們將使用一個不同的參數替換這裏使用的來權衡這兩項。你知道,就是第一項和第二項我們依照慣例使用一個不同的參數稱爲C,同時改爲優化目標,C×A+B。 因此,在邏輯迴歸中,如果給定,一個非常大的值,意味着給予B更大的權重。而這裏,就對應於將C 設定爲非常小的值,那麼,相應的將會給B比給A更大的權重。因此,這只是一種不同的方式來控制這種權衡或者一種不同的方法,即用參數來決定是更關心第一項的優化,還是更關心第二項的優化。當然你也可以把這裏的參數C考慮成1/,同 1/所扮演的角色相同,並且這兩個方程或這兩個表達式並不相同,因爲C=1/,但是也並不全是這樣,如果當C=1/時,這兩個優化目標應當得到相同的值,相同的最優值。因此,就用它們來代替。那麼,我現在刪掉這裏的,並且用常數C來代替。因此,這就得到了在支持向量機中我們的整個優化目標函數。然後最小化這個目標函數,得到SVM 學習到的參數C。

                                        

最後有別於邏輯迴歸輸出的概率。在這裏,我們的代價函數,當最小化代價函數,獲得參數時,支持向量機所做的是它來直接預測y的值等於1,還是等於0。因此,這個假設函數會預測1。當大於或者等於0時,或者等於0時,所以學習參數就是支持向量機假設函數的形式。那麼,這就是支持向量機數學上的定義。

在接下來的視頻中,讓我們再回去從直觀的角度看看優化目標,實際上是在做什麼,以及SVM的假設函數將會學習什麼,同時也會談談如何做些許修改,學習更加複雜、非線性的函數。

12.2 大邊界的直觀理解

參考視頻: 12 - 2 - Large Margin Intuition (11 min).mkv

人們有時將支持向量機看作是大間距分類器。在這一部分,我將介紹其中的含義,這有助於我們直觀理解SVM模型的假設是什麼樣的。

                                      

這是我的支持向量機模型的代價函數,在左邊這裏我畫出了關於z的代價函數,此函數用於正樣本,而在右邊這裏我畫出了關於z的代價函數,橫軸表示z,現在讓我們考慮一下,最小化這些代價函數的必要條件是什麼。如果你有一個正樣本,y=1,則只有在z>=1時,代價函數纔等於0。

換句話說,如果你有一個正樣本,我們會希望,反之,如果y=0,我們觀察一下,函數,它只有在z<=-1的區間裏函數值爲0。這是支持向量機的一個有趣性質。事實上,如果你有一個正樣本y=1,則其實我們僅僅要求大於等於0,就能將該樣本恰當分出,這是因爲如果>0大的話,我們的模型代價函數值爲0,類似地,如果你有一個負樣本,則僅需要<=0就會將負例正確分離,但是,支持向量機的要求更高,不僅僅要能正確分開輸入的樣本,即不僅僅要求>0,我們需要的是比0值大很多,比如大於等於1,我也想這個比0小很多,比如我希望它小於等於-1,這就相當於在支持向量機中嵌入了一個額外的安全因子,或者說安全的間距因子。

當然,邏輯迴歸做了類似的事情。但是讓我們看一下,在支持向量機中,這個因子會導致什麼結果。具體而言,我接下來會考慮一個特例。我們將這個常數C設置成一個非常大的值。比如我們假設C的值爲100000或者其它非常大的數,然後來觀察支持向量機會給出什麼結果?

                                   

如果 C非常大,則最小化代價函數的時候,我們將會很希望找到一個使第一項爲0的最優解。因此,讓我們嘗試在代價項的第一項爲0的情形下理解該優化問題。比如我們可以把C設置成了非常大的常數,這將給我們一些關於支持向量機模型的直觀感受。

                                      

我們已經看到輸入一個訓練樣本標籤爲y=1​,你想令第一項爲0,你需要做的是找到一個,使得>=1​,類似地,對於一個訓練樣本,標籤爲y=0​,爲了使 函數的值爲0,我們需要<=-1​。因此,現在考慮我們的優化問題。選擇參數,使得第一項等於0,就會導致下面的優化問題,因爲我們將選擇參數使第一項爲0,因此這個函數的第一項爲0,因此是C​乘以0加上二分之一乘以第二項。這裏第一項是C​乘以0,因此可以將其刪去,因爲我知道它是0。

這將遵從以下的約束:>=1,如果 是等於1 的,<=-1,如果樣本i是一個負樣本,這樣當你求解這個優化問題的時候,當你最小化這個關於變量的函數的時候,你會得到一個非常有趣的決策邊界。

                                                   

具體而言,如果你考察這樣一個數據集,其中有正樣本,也有負樣本,可以看到這個數據集是線性可分的。我的意思是,存在一條直線把正負樣本分開。當然有多條不同的直線,可以把正樣本和負樣本完全分開。

                                                  

比如,這就是一個決策邊界可以把正樣本和負樣本分開。但是多多少少這個看起來並不是非常自然是麼?

或者我們可以畫一條更差的決策界,這是另一條決策邊界,可以將正樣本和負樣本分開,但僅僅是勉強分開,這些決策邊界看起來都不是特別好的選擇,支持向量機將會選擇這個黑色的決策邊界,相較於之前我用粉色或者綠色畫的決策界。這條黑色的看起來好得多,黑線看起來是更穩健的決策界。在分離正樣本和負樣本上它顯得的更好。數學上來講,這是什麼意思呢?這條黑線有更大的距離,這個距離叫做間距(margin)。

                                           

當畫出這兩條額外的藍線,我們看到黑色的決策界和訓練樣本之間有更大的最短距離。然而粉線和藍線離訓練樣本就非常近,在分離樣本的時候就會比黑線表現差。因此,這個距離叫做支持向量機的間距,而這是支持向量機具有魯棒性的原因,因爲它努力用一個最大間距來分離樣本。因此支持向量機有時被稱爲大間距分類器,而這其實是求解上一頁幻燈片上優化問題的結果。

我知道你也許想知道求解上一頁幻燈片中的優化問題爲什麼會產生這個結果?它是如何產生這個大間距分類器的呢?我知道我還沒有解釋這一點。

我將會從直觀上略述爲什麼這個優化問題會產生大間距分類器。總之這個圖示有助於你理解支持向量機模型的做法,即努力將正樣本和負樣本用最大的間距分開。

                                                  

在本節課中關於大間距分類器,我想講最後一點:我們將這個大間距分類器中的正則化因子常數C設置的非常大,我記得我將其設置爲了100000,因此對這樣的一個數據集,也許我們將選擇這樣的決策界,從而最大間距地分離開正樣本和負樣本。那麼在讓代價函數最小化的過程中,我們希望找出在y=1和y=0兩種情況下都使得代價函數中左邊的這一項儘量爲零的參數。如果我們找到了這樣的參數,則我們的最小化問題便轉變成:

                                                               

事實上,支持向量機現在要比這個大間距分類器所體現得更成熟,尤其是當你使用大間距分類器的時候,你的學習算法會受異常點(outlier) 的影響。比如我們加入一個額外的正樣本。

                                                              

在這裏,如果你加了這個樣本,爲了將樣本用最大間距分開,也許我最終會得到一條類似這樣的決策界,對麼?就是這條粉色的線,僅僅基於一個異常值,僅僅基於一個樣本,就將我的決策界從這條黑線變到這條粉線,這實在是不明智的。而如果正則化參數C,設置的非常大,這事實上正是支持向量機將會做的。它將決策界,從黑線變到了粉線,但是如果C 設置的小一點,**如果你將C設置的不要太大,則你最終會得到這條黑線,當然數據如果不是線性可分的,如果你在這裏有一些正樣本或者你在這裏有一些負樣本,則支持向量機也會將它們恰當分開。因此,大間距分類器的描述,僅僅是從直觀上給出了正則化參數C非常大的情形,同時,要提醒你C的作用類似於1/是我們之前使用過的正則化參數。這只是C非常大的情形,或者等價地 非常小的情形。你最終會得到類似粉線這樣的決策界,但是實際上應用支持向量機的時候,當C不是非常非常大的時候,它可以忽略掉一些異常點的影響,得到更好的決策界。**甚至當你的數據不是線性可分的時候,支持向量機也可以給出好的結果。

回顧 C=1/,因此:

C 較大時,相當於較小,可能會導致過擬合,高方差。

C 較小時,相當於較大,可能會導致低擬合,高偏差。

我們稍後會介紹支持向量機的偏差和方差,希望在那時候關於如何處理參數的這種平衡會變得更加清晰。我希望,這節課給出了一些關於爲什麼支持向量機被看做大間距分類器的直觀理解。它用最大間距將樣本區分開,儘管從技術上講,這隻有當參數C是非常大的時候是真的,但是它對於理解支持向量機是有益的。

本節課中我們略去了一步,那就是我們在幻燈片中給出的優化問題。爲什麼會是這樣的?它是如何得出大間距分類器的?我在本節中沒有講解,在下一節課中,我將略述這些問題背後的數學原理,來解釋這個優化問題是如何得到一個大間距分類器的。

12.3 大邊界分類背後的數學(選修)

參考視頻: 12 - 3 - Mathematics Behind Large Margin Classification (Optional) (20 min).mkv

在本節課中,我將介紹一些大間隔分類背後的數學原理。本節爲選修部分,你完全可以跳過它,但是聽聽這節課可能讓你對支持向量機中的優化問題,以及如何得到大間距分類器,產生更好的直觀理解。

                                        

首先,讓我來給大家複習一下關於向量內積的知識。假設我有兩個向量,u和v,我將它們寫在這裏。兩個都是二維向量,我們看一下,的結果。也叫做向量u和v之間的內積。由於是二維向量,我可以將它們畫在這個圖上。我們說,這就是向量u即在橫軸上,取值爲某個,而在縱軸上,高度是某個作爲u的第二個分量。現在,很容易計算的一個量就是向量u的範數。表示u的範數,即u的長度,即向量u的歐幾里得長度。根據畢達哥拉斯定理,,這是向量u的長度,它是一個實數。現在你知道了這個的長度是多少了。我剛剛畫的這個向量的長度就知道了。

現在讓我們回頭來看向量v ,因爲我們想計算內積。v是另一個向量,它的兩個分量是已知的。向量v可以畫在這裏,現在讓我們來看看如何計算u和v之間的內積。這就是具體做法,我們將向量v投影到向量u上,我們做一個直角投影,或者說一個90度投影將其投影到u上,接下來我度量這條紅線的長度。我稱這條紅線的長度爲p,因此p就是長度,或者說是向量v投影到向量u上的量,我將它寫下來,p是v投影到向量u上的長度,因此可以將,或者說u的長度。這是計算內積的一種方法。如果你從幾何上畫出p的值,同時畫出u的範數,你也會同樣地計算出內積,答案是一樣的。另一個計算公式是:就是這個一行兩列的矩陣乘以v。因此可以得到。根據線性代數的知識,這兩個公式會給出同樣的結果。順便說一句,。因此如果你將u和v交換位置,將u投影到v上,而不是將v投影到u上,然後做同樣地計算,只是把u和v的位置交換一下,你事實上可以得到同樣的結果。申明一點,在這個等式中u的範數是一個實數,p也是一個實數,因此就是兩個實數正常相乘。

                                                                         

最後一點,需要注意的就是p值,p事實上是有符號的,即它可能是正值,也可能是負值。我的意思是說,如果u是一個類似這樣的向量,v是一個類似這樣的向量,u和v之間的夾角大於90度,則如果將v投影到u上,會得到這樣的一個投影,這是p的長度,在這個情形下我們仍然有是等於p乘以u的範數。唯一一點不同的是p在這裏是負的。在內積計算中,如果u和v之間的夾角小於90度,那麼那條紅線的長度p是正值。然而如果這個夾角大於90度,則p將會是負的。就是這個小線段的長度是負的。如果它們之間的夾角大於90度,兩個向量之間的內積也是負的。這就是關於向量內積的知識。我們接下來將會使用這些關於向量內積的性質試圖來理解支持向量機中的目標函數。

                                                                     

這就是我們先前給出的支持向量機模型中的目標函數。爲了講解方便,我做一點簡化,僅僅是爲了讓目標函數更容易被分析。

                                     

我接下來忽略掉截距,令,這樣更容易畫示意圖。我將特徵數n置爲2,因此我們僅有兩個特徵,現在我們來看一下目標函數,支持向量機的優化目標函數。當我們僅有兩個特徵,即n=2時,這個式子可以寫作:,我們只有兩個參數。你可能注意到括號裏面的這一項是向量的範數,或者說是向量的長度。我的意思是如果我們將向量寫出來,那麼我剛剛畫紅線的這一項就是向量的長度或範數。這裏我們用的是之前學過的向量範數的定義,事實上這就等於向量的長度。

當然你可以將其寫作,如果,那就是的長度。在這裏我將忽略,這樣來寫的範數,它僅僅和有關。但是,數學上不管你是否包含,其實並沒有差別,因此在我們接下來的推導中去掉不會有影響這意味着我們的目標函數是等於。因此支持向量機做的全部事情,就是極小化參數向量${{\theta }}$範數的平方,或者說長度的平方

現在我將要看看這些項:更深入地理解它們的含義。給定參數向量給定一個樣本x,這等於什麼呢?在前一頁幻燈片上,我們畫出了在不同情形下,的示意圖,我們將會使用這些概念,就類似於u和v。

                                                                       

讓我們看一下示意圖:我們考察一個單一的訓練樣本,我有一個正樣本在這裏,用一個叉來表示這個樣本,意思是在水平軸上取值爲,在豎直軸上取值爲。這就是我畫出的訓練樣本。儘管我沒有將其真的看做向量。它事實上就是一個始於原點,終點位置在這個訓練樣本點的向量。現在,我們有一個參數向量我會將它也畫成向量。我將畫在橫軸這裏,將 畫在縱軸這裏,那麼內積 將會是什麼呢?

使用我們之前的方法,我們計算的方式就是我將訓練樣本投影到參數向量,然後我來看一看這個線段的長度,我將它畫成紅色。我將它稱爲用來表示這是第 i個訓練樣本在參數向量上的投影。根據我們之前幻燈片的內容,我們知道的是將會等於p乘以向量 θ的長度或範數。這就等於。這兩種方式是等價的,都可以用來計算θ和之間的內積。

這告訴了我們什麼呢?這裏表達的意思是:這個>=1 或者<-1的,約束是可以被>=1這個約束所代替的。因爲 ,將其寫入我們的優化目標。我們將會得到沒有了約束,而變成了

                                    

需要提醒一點,我們之前曾講過這個優化目標函數可以被寫成等於

現在讓我們考慮下面這裏的訓練樣本。現在,繼續使用之前的簡化,即,我們來看一下支持向量機會選擇什麼樣的決策界。這是一種選擇,我們假設支持向量機會選擇這個決策邊界。這不是一個非常好的選擇,因爲它的間距很小。這個決策界離訓練樣本的距離很近。我們來看一下爲什麼支持向量機不會選擇它。

對於這樣選擇的參數,可以看到參數向量事實上是和決策界是90度正交的,因此這個綠色的決策界對應着一個參數向量這個方向,順便提一句的簡化僅僅意味着決策界必須通過原點(0,0)。現在讓我們看一下這對於優化目標函數意味着什麼。

                               

比如這個樣本,我們假設它是我的第一個樣本,如果我考察這個樣本到參數的投影,投影是這個短的紅線段,就等於,它非常短。類似地,這個樣本如果它恰好是,我的第二個訓練樣本,則它到的投影在這裏。我將它畫成粉色,這個短的粉色線段是,即第二個樣本到我的參數向量的投影。因此,這個投影非常短。事實上是一個負值,是在相反的方向,這個向量和參數向量的夾角大於90度,的值小於0。

我們會發現這些將會是非常小的數,因此當我們考察優化目標函數的時候,對於正樣本而言,我們需要,但是如果 在這裏非常小,那就意味着我們需要的範數非常大.因爲如果 很小,而我們希望,令其實現的唯一的辦法就是這兩個數較大。如果 小,我們就希望的範數大。類似地,對於負樣本而言我們需要。我們已經在這個樣本中看到會是一個非常小的數,因此唯一的辦法就是的範數變大。但是我們的目標函數是希望找到一個參數,它的範數是小的。因此,這看起來不像是一個好的參數向量的選擇。

                          

相反的,來看一個不同的決策邊界。比如說,支持向量機選擇了這個決策界,現在狀況會有很大不同。如果這是決策界,這就是相對應的參數的方向,因此,在這個決策界之下,垂直線是決策界。使用線性代數的知識,可以說明,這個綠色的決策界有一個垂直於它的向量。現在如果你考察你的數據在橫軸x上的投影,比如這個我之前提到的樣本,我的樣本,當我將它投影到橫軸x上,或說投影到上,就會得到這樣。它的長度是,另一個樣本,那個樣本是。我做同樣的投影,我會發現,的長度是負值。你會注意到現在這些投影長度是長多了。如果我們仍然要滿足這些約束,,則因爲變大了,的範數就可以變小了。因此這意味着通過選擇右邊的決策界,而不是左邊的那個,支持向量機可以使參數的範數變小很多。因此,如果我們想令的範數變小,從而令範數的平方變小,就能讓支持向量機選擇右邊的決策界。這就是支持向量機如何能有效地產生大間距分類的原因。

看這條綠線,這個綠色的決策界。我們希望正樣本和負樣本投影到的值大。要做到這一點的唯一方式就是選擇這條綠線做決策界。這是大間距決策界來區分開正樣本和負樣本這個間距的值。這個間距的值就是等等的值。通過讓間距變大,即通過這些等等的值,支持向量機最終可以找到一個較小的範數。這正是支持向量機中最小化目標函數的目的。

以上就是爲什麼支持向量機最終會找到大間距分類器的原因。因爲它試圖極大化這些的範數,它們是訓練樣本到決策邊界的距離。最後一點,我們的推導自始至終使用了這個簡化假設,就是參數

                                   

就像我之前提到的。這個的作用是:的意思是我們讓決策界通過原點。如果你令不是0的話,含義就是你希望決策界不通過原點。我將不會做全部的推導。實際上,支持向量機產生大間距分類器的結論,會被證明同樣成立,證明方式是非常類似的,是我們剛剛做的證明的推廣。

之前視頻中說過,即便不等於0,支持向量機要做的事情都是優化這個目標函數對應着$C$值非常大的情況,但是可以說明的是,即便不等於0,支持向量機仍然會找到正樣本和負樣本之間的大間距分隔。

總之,我們解釋了爲什麼支持向量機是一個大間距分類器。在下一節我們,將開始討論如何利用支持向量機的原理,應用它們建立一個複雜的非線性分類器。

12.4 核函數1

參考視頻: 12 - 4 - Kernels I (16 min).mkv

回顧我們之前討論過可以使用高級數的多項式模型來解決無法用直線進行分隔的分類問題:

                                                               

爲了獲得上圖所示的判定邊界,我們的模型可能是的形式。

我們可以用一系列的新的特徵f來替換模型中的每一項。例如令:

...得到。然而,除了對原有的特徵進行組合以外,有沒有更好的方法來構造我們可以利用核函數來計算出新的特徵。

給定一個訓練樣本x,我們利用x的各個特徵與我們預先選定的地標的近似程度來選取新的特徵

                                                 

例如:

其中:,爲實例x中所有特徵與地標之間的距離的和。上例中的就是核函數,具體而言,這裏是一個高斯核函數(Gaussian Kernel)。 注:這個函數與正態分佈沒什麼實際上的關係,只是看上去像而已。

這些地標的作用是什麼?如果一個訓練樣本x與地標之間的距離近似於0,則新特徵 f近似於,如果訓練樣本x與地標之間距離較遠,則f近似於

假設我們的訓練樣本含有兩個特徵,給定地標與不同的值,見下圖:

                                 

圖中水平面的座標爲 而垂直座標軸代表f。可以看出,只有當x與重合時f才具有最大值。隨着x的改變f值改變的速率受到的控制。

在下圖中,當樣本處於洋紅色的點位置處,因爲其離更近,但是離較遠,因此接近1,而接近0。因此,因此預測y=1。同理可以求出,對於離較近的綠色點,也預測y=1,但是對於藍綠色的點,因爲其離三個地標都較遠,預測y=0。

                                    

這樣,圖中紅色的封閉曲線所表示的範圍,便是我們依據一個單一的訓練樣本和我們選取的地標所得出的判定邊界,在預測時,我們採用的特徵不是訓練樣本本身的特徵,而是通過核函數計算出的新特徵

12.5 核函數2

參考視頻: 12 - 5 - Kernels II (16 min).mkv

在上一節視頻裏,我們討論了核函數這個想法,以及怎樣利用它去實現支持向量機的一些新特性。在這一節視頻中,我將補充一些缺失的細節,並簡單的介紹一下怎麼在實際中使用應用這些想法。

如何選擇地標?

我們通常是根據訓練集的數量選擇地標的數量,即如果訓練集中有m個樣本,則我們選取m個地標,並且令:。這樣做的好處在於:現在我們得到的新特徵是建立在原有特徵與訓練集中所有其他特徵之間距離的基礎之上的,即:

                                                             

                          

下面我們將核函數運用到支持向量機中,修改我們的支持向量機假設爲:

• 給定x,計算新特徵f,當時,預測 y=1,否則反之。

相應地修改代價函數爲:

在具體實施過程中,我們還需要對最後的正則化項進行些微調整,在計算時,我們用代替,其中M是根據我們選擇的核函數而不同的一個矩陣。這樣做的原因是爲了簡化計算。

理論上講,我們也可以在邏輯迴歸中使用核函數,但是上面使用 M來簡化計算的方法不適用與邏輯迴歸,因此計算將非常耗費時間。

在此,我們不介紹最小化支持向量機的代價函數的方法,你可以使用現有的軟件包(如liblinear,libsvm等)。在使用這些軟件包最小化我們的代價函數之前,我們通常需要編寫核函數,並且如果我們使用高斯核函數,那麼在使用之前進行特徵縮放是非常必要的。

另外,支持向量機也可以不使用核函數,不使用核函數又稱爲線性核函數(linear kernel),當我們不採用非常複雜的函數,或者我們的訓練集特徵非常多而樣本非常少的時候,可以採用這種不帶核函數的支持向量機。

下面是支持向量機的兩個參數C和的影響:

C較大時,相當於較小,可能會導致過擬合,高方差;

C較小時,相當於較大,可能會導致低擬合,高偏差;

較大時,可能會導致低方差,高偏差;

較小時,可能會導致低偏差,高方差。

如果你看了本週的編程作業,你就能親自實現這些想法,並親眼看到這些效果。這就是利用核函數的支持向量機算法,希望這些關於偏差和方差的討論,能給你一些對於算法結果預期的直觀印象。

12.6 使用支持向量機

參考視頻: 12 - 6 - Using An SVM (21 min).mkv

目前爲止,我們已經討論了SVM比較抽象的層面,在這個視頻中我將要討論到爲了運行或者運用SVM。你實際上所需要的一些東西:支持向量機算法,提出了一個特別優化的問題。但是就如在之前的視頻中我簡單提到的,我真的不建議你自己寫軟件來求解參數,因此由於今天我們中的很少人,或者其實沒有人考慮過自己寫代碼來轉換矩陣,或求一個數的平方根等我們只是知道如何去調用庫函數來實現這些功能。同樣的,用以解決SVM最優化問題的軟件很複雜,且已經有研究者做了很多年數值優化了。因此你提出好的軟件庫和好的軟件包來做這樣一些事兒。然後強烈建議使用高優化軟件庫中的一個,而不是嘗試自己落實一些數據。有許多好的軟件庫,我正好用得最多的兩個是liblinearlibsvm,但是真的有很多軟件庫可以用來做這件事兒。你可以連接許多你可能會用來編寫學習算法的主要編程語言。

在高斯核函數之外我們還有其他一些選擇,如:

多項式核函數(Polynomial Kernel)

字符串核函數(String kernel

卡方核函數( chi-square kernel

直方圖交集核函數(histogram intersection kernel

等等...

這些核函數的目標也都是根據訓練集和地標之間的距離來構建新特徵,這些核函數需要滿足Mercer's定理,才能被支持向量機的優化軟件正確處理。

多類分類問題

假設我們利用之前介紹的一對多方法來解決一個多類分類問題。如果一共有k個類,則我們需要k個模型,以及k個參數向量。我們同樣也可以訓練k個支持向量機來解決多類分類問題。但是大多數支持向量機軟件包都有內置的多類分類功能,我們只要直接使用即可。

儘管你不去寫你自己的SVM的優化軟件,但是你也需要做幾件事:

1、是提出參數C的選擇。我們在之前的視頻中討論過誤差/方差在這方面的性質。

2、你也需要選擇內核參數或你想要使用的相似函數,其中一個選擇是:我們選擇不需要任何內核參數,沒有內核參數的理念,也叫線性核函數。因此,如果有人說他使用了線性核的SVM(支持向量機),這就意味這他使用了不帶有核函數的SVM(支持向量機)。

從邏輯迴歸模型,我們得到了支持向量機模型,在兩者之間,我們應該如何選擇呢?

下面是一些普遍使用的準則:

n爲特徵數,m爲訓練樣本數。

(1)如果相較於m而言,n要大許多,即訓練集數據量不夠支持我們訓練一個複雜的非線性模型,我們選用邏輯迴歸模型或者不帶核函數的支持向量機。

(2)如果n較小,而且m大小中等,例如n在 1-1000 之間,而m在10-10000之間,使用高斯核函數的支持向量機。

(3)如果n較小,而m較大,例如n在1-1000之間,而m大於50000,則使用支持向量機會非常慢,解決方案是創造、增加更多的特徵,然後使用邏輯迴歸或不帶核函數的支持向量機。

值得一提的是,神經網絡在以上三種情況下都可能會有較好的表現,但是訓練神經網絡可能非常慢,選擇支持向量機的原因主要在於它的代價函數是凸函數,不存在局部最小值。

今天的SVM包會工作得很好,但是它們仍然會有一些慢。當你有非常非常大的訓練集,且用高斯核函數是在這種情況下,我經常會做的是嘗試手動地創建,擁有更多的特徵變量,然後用邏輯迴歸或者不帶核函數的支持向量機。如果你看到這個幻燈片,看到了邏輯迴歸,或者不帶核函數的支持向量機。在這個兩個地方,我把它們放在一起是有原因的。原因是:邏輯迴歸和不帶核函數的支持向量機它們都是非常相似的算法,不管是邏輯迴歸還是不帶核函數的SVM,通常都會做相似的事情,並給出相似的結果。但是根據你實現的情況,其中一個可能會比另一個更加有效。但是在其中一個算法應用的地方,邏輯迴歸或不帶核函數的SVM另一個也很有可能很有效。但是隨着SVM的複雜度增加,當你使用不同的內核函數來學習複雜的非線性函數時,這個體系,你知道的,當你有多達1萬(10,000)的樣本時,也可能是5萬(50,000),你的特徵變量的數量這是相當大的。那是一個非常常見的體系,也許在這個體系裏,不帶核函數的支持向量機就會表現得相當突出。你可以做比這困難得多需要邏輯迴歸的事情。

最後,神經網絡使用於什麼時候呢? 對於所有的這些問題,對於所有的這些不同體系一個設計得很好的神經網絡也很有可能會非常有效。有一個缺點是,或者說是有時可能不會使用神經網絡的原因是:對於許多這樣的問題,神經網絡訓練起來可能會特別慢,但是如果你有一個非常好的SVM實現包,它可能會運行得比較快比神經網絡快很多,儘管我們在此之前沒有展示,但是事實證明,SVM具有的優化問題,是一種凸優化問題。因此,好的SVM優化軟件包總是會找到全局最小值,或者接近它的值。對於SVM你不需要擔心局部最優。在實際應用中,局部最優不是神經網絡所需要解決的一個重大問題,所以這是你在使用SVM的時候不需要太去擔心的一個問題。根據你的問題,神經網絡可能會比SVM慢,尤其是在這樣一個體系中,至於這裏給出的參考,看上去有些模糊,如果你在考慮一些問題,這些參考會有一些模糊,但是我仍然不能完全確定,我是該用這個算法還是改用那個算法,這個沒有太大關係,當我遇到機器學習問題的時候,有時它確實不清楚這是否是最好的算法,但是就如在之前的視頻中看到的算法確實很重要。但是通常更加重要的是:你有多少數據,你有多熟練是否擅長做誤差分析和排除學習算法,指出如何設定新的特徵變量和找出其他能決定你學習算法的變量等方面,通常這些方面會比你使用邏輯迴歸還是SVM這方面更加重要。但是,已經說過了,SVM仍然被廣泛認爲是一種最強大的學習算法,這是一個體系,包含了什麼時候一個有效的方法去學習複雜的非線性函數。因此,實際上與邏輯迴歸、神經網絡、SVM一起使用這些方法來提高學習算法,我認爲你會很好地建立很有技術的狀態。(編者注:當時GPU計算比較慢,神經網絡還不流行。)

機器學習系統對於一個寬泛的應用領域來說,這是另一個在你軍械庫裏非常強大的工具,你可以把它應用到很多地方,如硅谷、在工業、學術等領域建立許多高性能的機器學習系統。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章