多類SVM的損失函數

2021-02-13 CSDN雲計算

幾個星期之前,我們討論了線性分類和參數化學習的概念。這類學習方法使我們能夠輸入一組數據和類別標籤,然後從中學到一個從輸入值到預測值的映射關係,而我們只需要定義一組參數並優化這些參數。

我們本篇線性分類器教程主要關注評分函數的概念和它的用法。但是,為了真的「學會」輸入值和類別標籤的映射關係,我們需要討論下面兩個重要的概念:

在本周和下周的文章中,我們會討論兩類常見的損失函數,它們在機器學習、神經網絡和深度學習算法中都被應用:

接下來,我們就討論多類SVM損失。

用最簡單的方式來解釋,損失函數就是用來衡量一個預測器在對輸入數據進行分類預測時的質量好壞。

損失值越小,分類器的效果越好,越能反映輸入數據與輸出類別標籤的關係(雖然我們的模型有時候會過擬合——這是由於訓練數據被過度擬合,導致我們的模型失去了泛化能力)。

相反,損失值越大,我們需要花更多的精力來提升模型的準確率。就參數化學習而言,這涉及到調整參數,比如需要調節權重矩陣W或偏置向量B,以提高分類的精度。確切地說,我們如何去更新這些參數屬於優化問題,我們這一系列的教程的後續篇幅將會覆蓋這些話題。

在閱讀完Python的線性分類教程之後,你會發現我們選用的分類器是線性支持向量機(linear SVM)。

上一篇教程著重介紹了評分函數f的概念,它把我們的特徵向量映射為數值型的類別標籤。如其名稱所示,線性SVM採用簡單的線性映射:

現在我們有了評分/映射函數f,我們需要確定這個函數預測的質量(給定權重矩陣W和偏置向量b)是「好」還是「壞」。

為了完成這一目標,需要定義一個損失函數。接著,我們就來給損失函數下一個定義。

基於之前的線性分類器教程,我們知道當前有一個特徵向量矩陣x —— 這些特徵向量可以從顏色直方圖中獲取,也可以是HOG特徵,或者甚至是原始像素值。

無論我們如何選擇量化圖像,我們都能從圖像數據集中抽取出一個特徵矩陣x。然後,我們可以用xi獲取某張圖片的第i維特徵,也就是x的第i個特徵向量。

同樣的,我們也有一個向量y,存儲了每個x的類別標籤。這些y值是我們的參照標籤,正是我們希望評分函數能夠準確預測的標籤值。就像我們可以用xi得到某個特徵向量,我們也可以用yi讀取第i個類別標籤。

為了簡化,我們將評分函數簡寫為s:

第i個數據的第j類預測得分值可以表示為:

按照上述定義,我們將它代入公式,得到了hinge損失函數:

注意:我先故意略過正則化參數項。在後續的文章中,當我們理解了損失函數,我會再來介紹正則化。

那麼,上面那個方程究竟有什麼用途?

我很高興你能提出這樣的問題。

簡單來說,hinge損失函數將預測不正確的類別()累加,然後將我們評分函數s在第j類(不正確類別)的輸出值與在第yi類的輸出值比較。

然後應用max函數,使得函數的輸出值不小於0 —— 這一點非常重要,因而輸出不會出現負值。

若Li=0,說明給定的數據xi被正確分類了(我在後續的章節中會舉一個例子)。

當把損失值推廣到整個訓練數據集,我們對所有的Li取平均數:

此外,常用的損失函數還有平方hinge損失:

平方項對損失值的懲罰力度更大。

至於選用何種損失函數,這需要視數據集而定。標準的hinge損失函數比較常見,但某些數據集可能使用平方項能取得更好的精度 —— 總之,這是一個需要你交叉驗證的超參數。

現在,再來討論hinge損失和平方hinge損失的數學原理,以下面的問題為例。

我們再一次選用Kaggle的狗vs.貓數據集,即判斷指定圖片裡包含了貓還是狗。

這個數據集中只包含了兩種可能的類別標籤,因此屬於二分類問題,可以用標準的二項SVM損失函數求解。也就是說,我們仍然使用多類SVM損失,所以我們可以有一個成功實踐的例子。然後,我會擴展示例來處理三種類別的問題。

首先,看看下面的圖片,圖片是來自「狗vs.貓」數據集的兩個訓練樣本:


圖1:對圖像選用hinge損失

給定任意的權重矩陣W和偏置向量b,f(x,W)=Wx+b函數的輸出分數如上表所示。分數值越大,說明我們的評分函數對預測結果的置信度越高。

我們先來計算「狗」類的損失值Li。假設一個二分類問題,這就非常容易:

>>> max(0, 1.33 - 4.26 + 1)0>>>

請注意「狗」的損失值為啥等於零 —— 意思是正確地預測了狗的類別。快速地回顧上述圖1所示的內容:「狗」的分值大於「貓」的分值。

同樣的,我們對第二張圖像採取相同的做法,這張圖片包含了一隻貓:

>>> max(0, 3.76 - (-1.2) + 1)5.96>>>

損失函數的輸出值大於零,意味著我們的預測結果不正確。

我們計算兩張圖片的損失值的均值作為整體損失值:

>>> (0 + 5.96) / 22.98>>

對於二分類問題,計算過程非常簡單,那對於三分類問題呢?過程會變得複雜嗎?

事實上,並沒有複雜 —— 下圖是一個三類問題的示例,我新加入了一個類別「馬」:


圖2:hinge損失在三類圖片的分類問題上的應用。

再次計算「狗」這一類的損失值:

>>> max(0, 1.49 - (-0.39) + 1) + max(0, 4.21 - (-0.39) + 1)8.48>>>

請注意我們是如何將求和部分擴展到兩項計算的 —— 分別計算「狗」類的預測得分與「貓」類和」馬」類分值的差。

同樣的,計算」貓」這一類的損失值:

>>> max(0, -4.61 - 3.28 + 1) + max(0, 1.46 - 3.28 + 1)0>>>

最後,計算」馬」這一類的損失值:

>>> max(0, 1.03 - (-2.27) + 1) + max(0, -2.37 - (-2.27) + 1)5.199999999999999>>>

因此,整體損失值是:

>>> (8.48 + 0.0 + 5.2) / 34.56>>>

正如你所看到的,它們都適用同樣的原則 —— 只要記住在擴展類別數目的同時,求和的項數也要擴展。

測驗:根據上面三類的損失值判斷,哪一類是正確的預測值?

如果你願意,也可以動手實現hinge和平方hinge損失值 —— 但這主要還是出於學習的目的。

你幾乎可以在所有的機器學習/深度學習庫裡找到hinge損失和平方hinge損失的實現,比如scikit-learn, Keras, Caffe等等。

今天我們討論了多類SVM損失的概念。給定一個評分函數(將輸入數據映射到輸出的類別標籤),我們的損失函數可以用來定量評判評分函數預測正確類別標籤質量的「好」與「壞」。

損失值越小,我們的預測越準確(但存在過擬合的風險,映射函數過於擬合了輸入數據)。

相反,損失值越大,我們的預測結果越不準確,因此需要繼續優化參數W和b —— 當我們更深入地理解損失函數之後,後續文章會介紹優化方法。

理解「損失」的概念以及它在機器學習和深度學習算法中的應用之後,我們仔細研究了兩類損失函數:

通常,hinge損失更常見 —— 但仍然需要調優分類器的超參數來判斷哪種損失函數更適合你的數據集。

相關焦點

  • 一文掌握SVM用法(基於R語言)
    其實還有要完全理解SVM原理及算法,還需要理解 線性回歸,最小二乘法,邏輯回歸,線性分類器,線性可分,核函數,損失函數,但是不要怕,不具體理解SVM原理及算法,我們仍然是可以使用它,左右不過是一個分類器罷了,就是根據一堆自變量來預測因變量,所以就是變量預測,值得一提的是,SVM通常應用於二元分類變量預測,但是經過一些改進也可以勉強對多元分類變量預測
  • CS231N 02: 損失函數和正則化
    Loss function在上一節中,我們定義了一個從像素值到分類分數的函數,這個函數的參數是由一組權重 W 確定的,數據 (xi,yi) 是固定的,但是我們可以控制這些權重,使預測的分類分數與訓練數據中的真實標籤一致。
  • 使用sklearn-svm進行多分類
    實際上,svm經過合適的設計也可以運用於多分類問題,sklearn中的svm模塊封裝了libsvm和liblinear,本節我們利用它進行多分類。SVM回顧SVM算法最初是為二值分類問題設計的,當處理多類問題時,就需要構造合適的多類分類器。
  • 【典型算法】SVM算法
    支持向量機是一個相對較新和較先進的機器學習技術,最初提出是為了解決二類分類問題,現在被廣泛用於解決多類非線性分類問題和回歸問題。繼續閱讀本文,你將學習到支持向量機如何工作,以及如何利用R語言實現支持向量機。支持向量機如何工作?
  • 支持向量機SVM原理(參數解讀和python腳本)
    [1] 此方法的證明牽涉到偏微分,全微分或鏈法,從而找到能讓設出的隱函數的微分為零的未知數的值。支持向量優點1.支持多維空間2.不同核函數用於不同決策函數python代碼實現分多類,decision_function_shape="ovr"
  • 零基礎也教你玩轉SVM
    各種資料對它評價甚高,說「它在解決小樣本、非線性及高維模式識別中表現出許多特有的優勢,並能夠推廣應用到函數擬合等其他機器學習問題中」;SVM還包括核技巧,這使它成為實質上的非線性分類器。SVM的學習策略就是間隔最大化,可形式化為一個求解凸二次規劃的問題,也等價於正則化的合頁損失函數的最小化問題。SVM的學習算法就是求解凸二次規劃的最優化算法。
  • 基於線性SVM的CIFAR-10圖像集分類
    接下來,我們就可以根據這種思想定義SVM的損失函數:由於y1與y0的差值大於閾值 Δ,則其損失函數為0;雖然y1比y2大,但差值小於閾值 Δ,則計算得到其損失函數為2。總的損失函數即為2。這類損失函數的表達式一般稱作合頁損失函數「Hinge Loss Function」:
  • Sklearn參數詳解—SVM
    在開始看本篇前你可以看看這篇:支持向量機詳解LinearSVCclass sklearn.svm.LinearSVC(penalty='l2', loss='squared_hinge', dual=True, tol=0.0001, C=1.0, multi_class='ovr', fit_intercept=True, intercept_scaling=1,
  • 從最優化的角度看待Softmax損失函數
    Softmax交叉熵損失函數應該是目前最常用的分類損失函數了,在大部分文章都是從概率角度來解釋的(請讀者自行搜索),本文將嘗試從最優化的角度來推導出Softmax交叉熵損失函數,希望能夠啟發出更多的研究思路。
  • 從最優化的角度看待 Softmax 損失函數
    Softmax交叉熵損失函數應該是目前最常用的分類損失函數了,在大部分文章中,Softmax交叉熵損失函數都是從概率角度來解釋的,本周二極市就推送了一篇Softmax相關文章:一文道盡softmax loss及其變種。本文將嘗試從最優化的角度來推導出Softmax交叉熵損失函數,希望能夠啟發出更多的研究思路。
  • Python機器學習筆記:SVM-sklearn實現 (4)FlyAI
    ,(xm, ym),w,b是我們回歸超平面 wT*xi + b = 0 的係數,ξv, ξ^ 為第 i 個樣本的鬆弛係數, C為懲罰係數,ε 為損失邊界,到超平面距離小於 ε 的訓練集的點沒有損失,Φ(xi) 為低維到高維的映射函數  其中和原始形式不同的 αv, α^ 為拉格朗日係數向量,K(xi, xj) 為我們要使用的核函數。3.
  • 關於支持向量機(SVM)的原理,你了解多少?(萬字長文 速收)
    @孤獨之守望者:"最後,推出svm的cost function 是hinge loss,然後對比其他的方法的cost function,說明其實他們的目標函數很像,那麼問題是svm為什麼這麼popular呢?您可以再加些VC dimension跟一些error bound的數學,點一下,提供一個思路和方向"。--http://weibo.com/1580904460/AiohoyDwq?
  • 神經網絡中的各種損失函數介紹
    不同的損失函數可用於不同的目標。在這篇文章中,我將帶你通過一些示例介紹一些非常常用的損失函數。這篇文章提到的一些參數細節都屬於tensorflow或者keras的實現細節。損失函數的簡要介紹損失函數有助於優化神經網絡的參數。
  • 機器學習算法筆記-SVM支持向量機簡介及JAVA小實現
    實際上,一個線性函數是一個實值函數(即函數的值是連續的實數),而我們的分類問題(例如這裡的二元分類問題——回答一個樣本屬於還是不屬於一個類別的問題)需要離散的輸出值,例如用1表示某個樣本屬於類別A,而用0表示不屬於(不屬於A也就意味著屬於B),這時候只需要簡單的在實值函數的基礎上附加一個閾值即可,通過分類函數執行時得到的值大於還是小於這個閾值來確定類別歸屬。
  • SVM大解密五(附代碼和公式)
    目前版LIBSVM(3.2.0)在matlab下編譯完後只有四個函數,libsvmread,Libsvmwrite,svmtrain(matlab自帶的工具箱中有一個同名的函數),svmpredict。
  • SVM大解密(連載四)
    目前版LIBSVM(3.2.0)在matlab下編譯完後只有四個函數,libsvmread,Libsvmwrite,svmtrain(matlab自帶的工具箱中有一個同名的函數),svmpredict。
  • 要做好深度學習任務,不妨先在損失函數上「做好文章」
    雷鋒網 AI 科技評論按:損失函數對於機器學習而言,是最基礎也最重要的環節之一,因此在損失函數上「做好文章」,是一個機器學習項目順利進行的前提之一。Deep Learning Demystified 編輯、數據科學家 Harsha Bommana 以淺顯易懂的文字介紹了在不同的深度學習任務中如何設置損失函數,以期大家能夠對損失函數有一個更加清晰的認識。
  • 機器學習之分類算法:SVM [5. 實例解析]
    類中方法:fit(X,y[, sample_weight]) 用訓練數據擬合svm模型predict(X) 預測待測樣本X的類別值decision_function(X) 決策函數,獲得樣本X到分類超平面的距離score(X,y[, sample_weight]) 計算測試集的平均準確率get_params([deep]) 獲得模型(分類器類)的參數。
  • Rethink DL | 激活、損失函數與正則化
    Activation FunctionSigmoid最開始接觸 ANN 的時候,大家聽說的 Activation Function 應該還都是 Sigmoid 函數。它的定義如下:其圖形如下Sigmoid 函數優點很多:作為 Activation Function,它是單調遞增的,能夠很好地描述被激活的程度Sigmoid 能將
  • 機器學習的分類算法之SVM(支持向量機)
    在二維空間(平面),線性函數呈現為一條直線,而在一維空間(一條直線),線性函數退化為一個點。同理,在三維空間,線性函數是一個平面。不區分維數的情況下,統稱這裡的線性函數為「超平面」。因此,超平面的表達式為: