從圖像到標籤分值的映射
一個線性映射:
其中,參數 爲權重(weights), 稱爲偏差向量(bias vector)
一個將圖像映射到分類分值的例子:
-
爲了便於可視化,假設圖像只有4個像素值,有3個分類。
-
首先將圖像像素拉伸爲一個列向量,與 進行矩陣乘,再加上偏置項 ,得到各個分類的分值。
-
需要注意的是,由於權值沒有訓練到位,貓分類的分值非常低。
多類 SVM 分類器
針對第 個數據的 類 SVM 的損失函數定義如下:
使用多類 SVM 分類時,正確分類的分數需要比其他不正確的分類分數高出 邊界值 delta()。其他分類分數進入了紅色的區域時,就開始計算損失。在紅色區域之前,損失值爲0。
SVM 評分函數中,將輸出 作爲第 個數據針對第 個類別的得分,所以分類損失的詳細定義爲:
加上正則化項:
其中:
-
函數,它常被稱爲 折葉損失(hinge loss)。有時候會聽到人們使用 平方折葉損失SVM(即 L2-SVM),它使用的是 ,將更強烈(平方地而不是線性地)地懲罰過界的邊界值。可以通過交叉驗證來決定到底使用哪個。
-
在絕大多數情況下設置 都是安全的。超參數 和 一起控制損失函數中的數據損失(data loss)和正則化損失(regularization loss)之間的權衡。
-
不同分類分值之間的邊界的具體值(比如 或 )從某些角度來看是沒意義的,因爲權重自己就可以控制差異變大和縮小。也就是說,真正的權衡是我們允許權重能夠變大到何種程度,通過正則化強度 來控制,詳見:正則化方法 。
Softmax 分類器
Softmax 分類器可以理解爲 邏輯迴歸分類器 面對多個分類的一般化歸納,輸出歸一化的分類概率。
在Softmax分類器中,函數映射 保持不變,但將這些評分值視爲每個分類的未歸一化的對數概率,並且將折葉損失(hinge loss)替換爲交叉熵損失(cross-entropy loss)。公式如下:
或等價的:
其中:
-
使用 來表示分類評分向量 中的第 個元素。
-
函數 被稱作 softmax 函數,其輸入值是一個向量,向量中元素爲任意實數的評分值( 中的),函數對其進行壓縮,輸出一個向量,其中每個元素值在 0 到 1 之間,且所有元素之和爲 1。
對數的基本性質:
- 函數拆分:
- log() vs log() :
圖中,藍線爲 ln() ,黑線爲 ln()
數值歸一化:
-
編程實現 softmax 函數計算的時候,中間項 和 因爲存在指數函數,所以數值可能非常大。
-
除以大數值可能導致數值計算的不穩定,所以使用歸一化非常重要。如果在分式的分子和分母都乘以一個常數 ,並把它變換到求和之中,就能得到一個從數學上等價的公式:
- 代碼實現如下:
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)。
對分類分值的不同解釋:
-
針對一個數據點,兩個分類器都計算了同樣的分值向量
-
SVM分類器將 看做是分類評分,它的損失函數鼓勵正確的分類(本例中是藍色的類別2)的分值比其他分類的分值高出至少一個邊界值。
-
Softmax分類器將 看做是每個分類沒有歸一化的對數概率,鼓勵正確分類的歸一化的對數概率變高,其餘的變低。
-
SVM的最終的損失值是 1.58,Softmax 的最終的損失值是 0.452,但要注意這兩個數值沒有可比性。只在給定同樣數據,在同樣的分類器的損失值計算中,它們纔有意義。
在實際使用中,SVM 和 Softmax 經常是相似的:
-
通常說來,兩種分類器的表現差別很小。
-
相對於 Softmax 分類器,SVM 更加局部目標化(local objective),這既可以看做是一個特性,也可以看做是一個劣勢。
-
SVM 對於各個分類的得分細節並不關心:分數是 或者 ,對於 SVM 來說沒什麼不同,只要分差超過邊界值,那麼損失值就等於 0,不會超過限制去細微地操作具體分數。
-
對於 softmax 分類器,情況則不同。對於 來說,計算出的損失值就遠遠高於 的。換句話來說,softmax 分類器對於分數是永遠不會滿意的。