分類評分函數 score function

從圖像到標籤分值的映射

一個線性映射:

f(xi,W,b)=Wxi+b\displaystyle f(x_i,W,b)=Wx_i+b

其中,參數 WW 爲權重(weights),bb 稱爲偏差向量(bias vector)

一個將圖像映射到分類分值的例子:

  • 爲了便於可視化,假設圖像只有4個像素值,有3個分類。

  • 首先將圖像像素拉伸爲一個列向量,與 WW 進行矩陣乘,再加上偏置項 bb,得到各個分類的分值。

  • 需要注意的是,由於權值沒有訓練到位,貓分類的分值非常低。

多類 SVM 分類器

針對第 ii 個數據的 jj 類 SVM 的損失函數定義如下:

Li=j̸=yimax(0,sjsyi+Δ)\displaystyle L_i=\sum_{j\not=y_i}max(0,s_j-s_{y_i}+\Delta)

使用多類 SVM 分類時,正確分類的分數需要比其他不正確的分類分數高出 邊界值 deltaΔ\Delta)。其他分類分數進入了紅色的區域時,就開始計算損失。在紅色區域之前,損失值爲0。

SVM 評分函數中,將輸出 sj=f(xi,W)js_j=f(x_i,W)_j 作爲第 ii 個數據針對第 jj 個類別的得分,所以分類損失的詳細定義爲:

Li=j̸=yimax(0,wjTxiwyiTxi+Δ)\displaystyle L_i=\sum_{j\not=y_i}max(0,w^T_jx_i-w^T_{y_i}x_i+\Delta)

加上正則化項:

L=1Nij̸=yi[max(0,f(xi;W)jf(xi;W)yi+Δ)]+λklWk,l2L=\frac{1}{N}\sum_i\sum_{j\not=y_i}[max(0,f(x_i;W)_j-f(x_i;W)_{y_i}+\Delta)]+\lambda \sum_k \sum_l W^2_{k,l}

其中:

  • max(0,)max(0,-) 函數,它常被稱爲 折葉損失(hinge loss)。有時候會聽到人們使用 平方折葉損失SVM(即 L2-SVM),它使用的是 max(0,)2max(0,-)^2,將更強烈(平方地而不是線性地)地懲罰過界的邊界值。可以通過交叉驗證來決定到底使用哪個。

  • 在絕大多數情況下設置 Δ=1.0\Delta=1.0 都是安全的。超參數 Δ\Deltaλ\lambda 一起控制損失函數中的數據損失(data loss)和正則化損失(regularization loss)之間的權衡。

  • 不同分類分值之間的邊界的具體值(比如 Δ=1\Delta=1Δ=100\Delta=100)從某些角度來看是沒意義的,因爲權重自己就可以控制差異變大和縮小。也就是說,真正的權衡是我們允許權重能夠變大到何種程度,通過正則化強度 λ\lambda 來控制,詳見:正則化方法

Softmax 分類器

Softmax 分類器可以理解爲 邏輯迴歸分類器 面對多個分類的一般化歸納,輸出歸一化的分類概率。

在Softmax分類器中,函數映射 f(xi;W)=Wxif(x_i;W)=Wx_i 保持不變,但將這些評分值視爲每個分類的未歸一化的對數概率,並且將折葉損失(hinge loss)替換爲交叉熵損失(cross-entropy loss)。公式如下:

Li=log(efyijefj)L_i=-log(\frac{e^{f_{y_i}}}{\sum_je^{f_j}})

或等價的:

Li=fyi+log(jefj)L_i=-f_{y_i}+log(\sum_je^{f_j})

其中:

  • 使用 fjf_j 來表示分類評分向量 ff 中的第 jj 個元素。

  • 函數 fj(z)=ezjkezkf_j(z)=\frac{e^{z_j}}{\sum_ke^{z_k}} 被稱作 softmax 函數,其輸入值是一個向量,向量中元素爲任意實數的評分值(zz 中的),函數對其進行壓縮,輸出一個向量,其中每個元素值在 0 到 1 之間,且所有元素之和爲 1。

對數的基本性質:

  • 函數拆分:
    ln(ab)=ln(a)+ln(b)\ln(ab)=\ln(a)+\ln(b)
  • log(xx) vs log(1/x1/x) :
    log(x)=log(1/x)log(x) = -log(1/x)
    圖中,藍線爲 ln(1/x1/x) ,黑線爲 ln(xx)

數值歸一化:

  • 編程實現 softmax 函數計算的時候,中間項 efyie^{f_{y_i}}jefj\sum_j e^{f_j} 因爲存在指數函數,所以數值可能非常大。

  • 除以大數值可能導致數值計算的不穩定,所以使用歸一化非常重要。如果在分式的分子和分母都乘以一個常數 CC,並把它變換到求和之中,就能得到一個從數學上等價的公式:

efyijefj=CefyiCjefj=efyi+logCjefj+logC\frac{e^{f_{y_i}}}{\sum_je^{f_j}}=\frac{Ce^{f_{y_i}}}{C\sum_je^{f_j}}=\frac{e^{f_{y_i}+logC}}{\sum_je^{f_j+logC}}

  • 代碼實現如下:
f = np.array([123, 456, 789]) # 例子中有3個分類,每個評分的數值都很大
p = np.exp(f) / np.sum(np.exp(f)) # 不妙:數值問題,可能導致數值爆炸

# 那麼將f中的值平移到最大值爲0:
f -= np.max(f) # f becomes [-666, -333, 0]
p = np.exp(f) / np.sum(np.exp(f)) # 現在OK了,將給出正確結果

SVM 和 Softmax的比較

損失函數的不同:

  • SVM 分類器使用的是 折葉損失(hinge loss),有時候又被稱爲 最大邊界損失(max-margin loss)

  • Softmax 分類器使用的是 交叉熵損失(corss-entropy loss)

對分類分值的不同解釋:

  • 針對一個數據點,兩個分類器都計算了同樣的分值向量 ff

  • SVM分類器將 ff 看做是分類評分,它的損失函數鼓勵正確的分類(本例中是藍色的類別2)的分值比其他分類的分值高出至少一個邊界值。

  • Softmax分類器將 ff 看做是每個分類沒有歸一化的對數概率,鼓勵正確分類的歸一化的對數概率變高,其餘的變低。

  • SVM的最終的損失值是 1.58,Softmax 的最終的損失值是 0.452,但要注意這兩個數值沒有可比性。只在給定同樣數據,在同樣的分類器的損失值計算中,它們纔有意義。

在實際使用中,SVM 和 Softmax 經常是相似的:

  • 通常說來,兩種分類器的表現差別很小。

  • 相對於 Softmax 分類器,SVM 更加局部目標化(local objective),這既可以看做是一個特性,也可以看做是一個劣勢。

  • SVM 對於各個分類的得分細節並不關心:分數是 [10,100,100][10, -100, -100] 或者 [10,9,9][10, 9, 9],對於 SVM 來說沒什麼不同,只要分差超過邊界值,那麼損失值就等於 0,不會超過限制去細微地操作具體分數。

  • 對於 softmax 分類器,情況則不同。對於 [10,9,9][10, 9, 9] 來說,計算出的損失值就遠遠高於 [10,100,100][10, -100, -100] 的。換句話來說,softmax 分類器對於分數是永遠不會滿意的。

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