1. 程式人生 > >三分鐘帶你對 Softmax 劃重點

三分鐘帶你對 Softmax 劃重點

1. 什麼是Softmax

Softmax 在機器學習和深度學習中有著非常廣泛的應用。尤其在處理多分類(C > 2)問題,分類器最後的輸出單元需要Softmax 函式進行數值處理。關於Softmax 函式的定義如下所示:

Si=eViiCeVi

其中,Vi 是分類器前級輸出單元的輸出。i 表示類別索引,總的類別個數為 C。Si 表示的是當前元素的指數與所有元素指數和的比值。Softmax 將多分類的輸出數值轉化為相對概率,更容易理解和比較。我們來看下面這個例子。

一個多分類問題,C = 4。線性分類器模型最後輸出層包含了四個輸出值,分別是:

V=[3210]

經過Softmax處理後,數值轉化為相對概率:

S=[0.00570.83900.04180.1135]

很明顯,Softmax 的輸出表徵了不同類別之間的相對概率。我們可以清晰地看出,S1 = 0.8390,對應的概率最大,則更清晰地可以判斷預測為第1類的可能性更大。Softmax 將連續數值轉化成相對概率,更有利於我們理解。

實際應用中,使用 Softmax 需要注意數值溢位的問題。因為有指數運算,如果 V 數值很大,經過指數運算後的數值往往可能有溢位的可能。所以,需要對 V 進行一些數值處理:即 V 中的每個元素減去 V 中的最大值。

D=max(V) Si=eViDiCeViD

相應的python示例程式碼如下:

scores = np.array([123, 456, 789])    # example with 3 classes and each having large scores
scores -= np.max(scores)    # scores becomes [-666, -333, 0]
p = np.exp(scores) / np.sum(np.exp(scores))

2. Softmax 損失函式

我們知道,線性分類器的輸出是輸入 x 與權重係數的矩陣相乘:s = Wx。對於多分類問題,使用 Softmax 對線性輸出進行處理。這一小節我們來探討下 Softmax 的損失函式。

Si=eSyij=1CeSj

其中,Syi是正確類別對應的線性得分函式,Si 是正確類別對應的 Softmax輸出。

由於 log 運算子不會影響函式的單調性,我們對 Si 進行 log 操作:

Si=logeSyij=1CeSj

我們希望 Si 越大越好,即正確類別對應的相對概率越大越好,那麼就可以對 Si 前面加個負號,來表示損失函式:

Li=Si=logeSyij=1CeSj

對上式進一步處理,把指數約去: