斯坦福CS231n李飛飛計算機視覺之線性分類下

  • 線性分類器簡介
  • 線性評分函數
  • 闡明線性分類器
  • 損失函數
    • 多類SVM
    • Softmax分類器 譯者注:下篇翻譯起始處
    • SVM和Softmax的比較
  • 基於Web的可交互線性分類器原型
  • 小結

Softmax分類器

SVM是最常用的兩個分類器之一,而另一個就是Softmax分類器,它的損失函數與SVM的損失函數不同。對於學習過二元邏輯迴歸分類器的讀者來說,Softmax分類器就可以理解爲邏輯迴歸分類器面對多個分類的一般化歸納。SVM將輸出f(x_i,W)作爲每個分類的評分(因爲無定標,所以難以直接解釋)。與SVM不同,Softmax的輸出(歸一化的分類概率)更加直觀,並且從概率上可以解釋,這一點後文會討論。在Softmax分類器中,函數映射f(x_i;W)=Wx_i保持不變,但將這些評分值視爲每個分類的未歸一化的對數概率,並且將折葉損失(hinge loss)替換爲交叉熵損失cross-entropy loss)。公式如下:

\displaystyle Li=-log(\frac{e^{f_{y_i}}}{\sum_je^{f_j}}) 或等價的 L_i=-f_{y_i}+log(\sum_je^{f_j})

在上式中,使用f_j來表示分類評分向量f中的第j個元素。和之前一樣,整個數據集的損失值是數據集中所有樣本數據的損失值L_i的均值與正則化損失R(W)之和。其中函數f_j(z)=\frac{e^{z_j}}{\sum_ke^{z_k}}被稱作softmax 函數:其輸入值是一個向量,向量中元素爲任意實數的評分值(z中的),函數對其進行壓縮,輸出一個向量,其中每個元素值在0到1之間,且所有元素之和爲1。所以,包含softmax函數的完整交叉熵損失看起唬人,實際上還是比較容易理解的。

信息理論視角:在“真實”分佈p和估計分佈q之間的交叉熵定義如下:

\displaystyle H(p,q)=-\sum_xp(x) logq(x)

因此,Softmax分類器所做的就是最小化在估計分類概率(就是上面的e^{f_{y_i}}/\sum_je^{f_j})和“真實”分佈之間的交叉熵,在這個解釋中,“真實”分佈就是所有概率密度都分佈在正確的類別上(比如:p=[0,...1,...,0]中在y_i的位置就有一個單獨的1)。還有,既然交叉熵可以寫成熵和相對熵(Kullback-Leibler divergence)H(p,q)=H(p)+D_{KL}(p||q),並且delta函數p的熵是0,那麼就能等價的看做是對兩個分佈之間的相對熵做最小化操作。換句話說,交叉熵損失函數“想要”預測分佈的所有概率密度都在正確分類上。

譯者注:Kullback-Leibler差異(Kullback-Leibler Divergence)也叫做相對熵(Relative Entropy),它衡量的是相同事件空間裏的兩個概率分佈的差異情況。

概率論解釋:先看下面的公式:

P(y_i|x_i,W)=\frac{e^{f_{y_i}}}{\sum_je^{f_j}}

可以解釋爲是給定圖像數據x_i,以W爲參數,分配給正確分類標籤y_i的歸一化概率。爲了理解這點,請回憶一下Softmax分類器將輸出向量f中的評分值解釋爲沒有歸一化的對數概率。那麼以這些數值做指數函數的冪就得到了沒有歸一化的概率,而除法操作則對數據進行了歸一化處理,使得這些概率的和爲1。從概率論的角度來理解,我們就是在最小化正確分類的負對數概率,這可以看做是在進行最大似然估計(MLE)。該解釋的另一個好處是,損失函數中的正則化部分R(W)可以被看做是權重矩陣W的高斯先驗,這裏進行的是最大後驗估計(MAP)而不是最大似然估計。提及這些解釋只是爲了讓讀者形成直觀的印象,具體細節就超過本課程範圍了。

實操事項:數值穩定。編程實現softmax函數計算的時候,中間項e^{f_{y_i}}\sum_j e^{f_j}因爲存在指數函數,所以數值可能非常大。除以大數值可能導致數值計算的不穩定,所以學會使用歸一化技巧非常重要。如果在分式的分子和分母都乘以一個常數C,並把它變換到求和之中,就能得到一個從數學上等價的公式:

\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}}

C的值可自由選擇,不會影響計算結果,通過使用這個技巧可以提高計算中的數值穩定性。通常將C設爲logC=-max_jf_j。該技巧簡單地說,就是應該將向量f中的數值進行平移,使得最大值爲0。代碼實現如下:

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分類器使用的是折葉損失(hinge loss),有時候又被稱爲最大邊界損失(max-margin loss)。Softmax分類器使用的是交叉熵損失(corss-entropy loss)。Softmax分類器的命名是從softmax函數那裏得來的,softmax函數將原始分類評分變成正的歸一化數值,所有數值和爲1,這樣處理後交叉熵損失才能應用。注意從技術上說“softmax損失(softmax loss)”是沒有意義的,因爲softmax只是一個壓縮數值的函數。但是在這個說法常常被用來做簡稱。

SVM和Softmax的比較

下圖有助於區分這 Softmax和SVM這兩種分類器:

————————————————————————————————————————

針對一個數據點,SVM和Softmax分類器的不同處理方式的例子。兩個分類器都計算了同樣的分值向量f(本節中是通過矩陣乘來實現)。不同之處在於對f中分值的解釋:SVM分類器將它們看做是分類評分,它的損失函數鼓勵正確的分類(本例中是藍色的類別2)的分值比其他分類的分值高出至少一個邊界值。Softmax分類器將這些數值看做是每個分類沒有歸一化的對數概率,鼓勵正確分類的歸一化的對數概率變高,其餘的變低。SVM的最終的損失值是1.58,Softmax的最終的損失值是0.452,但要注意這兩個數值沒有可比性。只在給定同樣數據,在同樣的分類器的損失值計算中,它們纔有意義。

————————————————————————————————————————

Softmax分類器爲每個分類提供了“可能性”:SVM的計算是無標定的,而且難以針對所有分類的評分值給出直觀解釋。Softmax分類器則不同,它允許我們計算出對於所有分類標籤的可能性。舉個例子,針對給出的圖像,SVM分類器可能給你的是一個[12.5, 0.6, -23.0]對應分類“貓”,“狗”,“船”。而softmax分類器可以計算出這三個標籤的”可能性“是[0.9, 0.09, 0.01],這就讓你能看出對於不同分類準確性的把握。爲什麼我們要在”可能性“上面打引號呢?這是因爲可能性分佈的集中或離散程度是由正則化參數λ直接決定的,λ是你能直接控制的一個輸入參數。舉個例子,假設3個分類的原始分數是[1, -2, 0],那麼softmax函數就會計算:


[1,-2,0]\to[e^1,e^{-2},e^0]=[2.71,0.14,1]\to[0.7,0.04,0.26]

現在,如果正則化參數λ更大,那麼權重W就會被懲罰的更多,然後他的權重數值就會更小。這樣算出來的分數也會更小,假設小了一半吧[0.5, -1, 0],那麼softmax函數的計算就是:

[0.5,-1,0]\to[e^{0.5},e^{-1},e^0]=[1.65,0.73,1]\to[0.55,0.12,0.33]
 

現在看起來,概率的分佈就更加分散了。還有,隨着正則化參數λ不斷增強,權重數值會越來越小,最後輸出的概率會接近於均勻分佈。這就是說,softmax分類器算出來的概率最好是看成一種對於分類正確性的自信。和SVM一樣,數字間相互比較得出的大小順序是可以解釋的,但其絕對值則難以直觀解釋

在實際使用中,SVM和Softmax經常是相似的:通常說來,兩種分類器的表現差別很小,不同的人對於哪個分類器更好有不同的看法。相對於Softmax分類器,SVM更加“局部目標化(local objective)”,這既可以看做是一個特性,也可以看做是一個劣勢。考慮一個評分是[10, -2, 3]的數據,其中第一個分類是正確的。那麼一個SVM(\Delta =1)會看到正確分類相較於不正確分類,已經得到了比邊界值還要高的分數,它就會認爲損失值是0。SVM對於數字個體的細節是不關心的:如果分數是[10, -100, -100]或者[10, 9, 9],對於SVM來說沒設麼不同,只要滿足超過邊界值等於1,那麼損失值就等於0。

對於softmax分類器,情況則不同。對於[10, 9, 9]來說,計算出的損失值就遠遠高於[10, -100, -100]的。換句話來說,softmax分類器對於分數是永遠不會滿意的:正確分類總能得到更高的可能性,錯誤分類總能得到更低的可能性,損失值總是能夠更小。但是,SVM只要邊界值被滿足了就滿意了,不會超過限制去細微地操作具體分數。這可以被看做是SVM的一種特性。舉例說來,一個汽車的分類器應該把他的大量精力放在如何分辨小轎車和大卡車上,而不應該糾結於如何與青蛙進行區分,因爲區分青蛙得到的評分已經足夠低了。

交互式的網頁Demo

————————————————————————————————————————

 

我們實現了一個交互式的網頁原型,來幫助讀者直觀地理解線性分類器。原型將損失函數進行可視化,畫面表現的是對於2維數據的3種類別的分類。原型在課程進度上稍微超前,展現了最優化的內容,最優化將在下一節課討論。

 

————————————————————————————————————————

小結

總結如下:

  • 定義了從圖像像素映射到不同類別的分類評分的評分函數。在本節中,評分函數是一個基於權重W和偏差b的線性函數。
  • 與kNN分類器不同,參數方法的優勢在於一旦通過訓練學習到了參數,就可以將訓練數據丟棄了。同時該方法對於新的測試數據的預測非常快,因爲只需要與權重W進行一個矩陣乘法運算。
  • 介紹了偏差技巧,讓我們能夠將偏差向量和權重矩陣合二爲一,然後就可以只跟蹤一個矩陣。
  • 定義了損失函數(介紹了SVM和Softmax線性分類器最常用的2個損失函數)。損失函數能夠衡量給出的參數集與訓練集數據真實類別情況之間的一致性。在損失函數的定義中可以看到,對訓練集數據做出良好預測與得到一個足夠低的損失值這兩件事是等價的。

現在我們知道了如何基於參數,將數據集中的圖像映射成爲分類的評分,也知道了兩種不同的損失函數,它們都能用來衡量算法分類預測的質量。但是,如何高效地得到能夠使損失值最小的參數呢?這個求得最優參數的過程被稱爲最優化,將在下節課中進行介紹。

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