機器學習(三十四)— Sigmoid 與 Softmax 的理解


1、Sigmoid、Softmax 函數

  (1)Sigmoid 

  Sigmoid =多標簽分類問題=多個正確答案=非獨占輸出(例如胸部X光檢查、住院)。構建分類器,解決有多個正確答案的問題時,用Sigmoid函數分別處理各個原始輸出值。

Sigmoid函數是一種logistic函數,它將任意的值轉換到 [公式] 之間,如圖1所示,函數表達式為: [公式]

它的導函數為: [公式]

優點:1. Sigmoid函數的輸出在(0,1)之間,輸出范圍有限,優化穩定,可以用作輸出層。2. 連續函數,便於求導。

缺點

  • 1. 最明顯的就是飽和性,從上圖也不難看出其兩側導數逐漸趨近於0,容易造成梯度消失。
  • 2.激活函數的偏移現象。Sigmoid函數的輸出值均大於0,使得輸出不是0的均值,這會導致后一層的神經元將得到上一層非0均值的信號作為輸入,這會對梯度產生影響。
  • 3. 計算復雜度高,因為Sigmoid函數是指數形式。

  (2)Softmax

   Softmax =多類別分類問題=只有一個正確答案=互斥輸出(例如手寫數字,鳶尾花)。構建分類器,解決只有唯一正確答案的問題時,用Softmax函數處理各個原始輸出值。Softmax函數的分母綜合了原始輸出值的所有因素,這意味着,Softmax函數得到的不同概率之間相互關聯。

  Softmax函數,又稱歸一化指數函數,函數表達式為: [公式]

  Softmax函數是二分類函數Sigmoid在多分類上的推廣,目的是將多分類的結果以概率的形式展現出來。如圖2所示,Softmax直白來說就是將原來輸出是3,1,-3通過Softmax函數一作用,就映射成為(0,1)的值,而這些值的累和為1(滿足概率的性質),那么我們就可以將它理解成概率,在最后選取輸出結點的時候,我們就可以選取概率最大(也就是值對應最大的)結點,作為我們的預測目標。

  由於Softmax函數先拉大了輸入向量元素之間的差異(通過指數函數),然后才歸一化為一個概率分布,在應用到分類問題時,它使得各個類別的概率差異比較顯著,最大值產生的概率更接近1,這樣輸出分布的形式更接近真實分布。

  (3)比較

  • 如果模型輸出為非互斥類別,且可以同時選擇多個類別,則采用Sigmoid函數計算該網絡的原始輸出值。
  • 如果模型輸出為互斥類別,且只能選擇一個類別,則采用Softmax函數計算該網絡的原始輸出值。
  • Sigmoid函數可以用來解決多標簽問題,Softmax函數用來解決單標簽問題。
  • 對於某個分類場景,當Softmax函數能用時,Sigmoid函數一定可以用。

2、分類問題

  對於二分類問題來說, 理論上,兩者是沒有任何區別的。由於我們現在用的Pytorch、TensorFlow等框架計算矩陣方式的問題,導致兩者在反向傳播的過程中還是有區別的。實驗結果表明,兩者還是存在差異的,對於不同的分類模型,可能Sigmoid函數效果好,也可能是Softmax函數效果。

(1)理論上,無區別

 (2)使用上的區別

  (a)兩者存在差異的主要原因,參數量不同。首先我們要明白,當你用Sigmoid函數的時候,你的最后一層全連接層的神經元個數為1,而當你用Softmax函數的時候,你的最后一層全連接層的神經元個數是2。這個很好理解,因為Sigmoid函數只有是目標和不是目標之分,實際上只存在一類目標類,另外一個是背景類。而Softmax函數將目標分類為了二類,所以有兩個神經元。

  (b)Sigmoid函數針對兩點分布提出。神經網絡的輸出經過它的轉換,可以將數值壓縮到(0,1)之間,得到的結果可以理解成分類成目標類別的概率P,而不分類到該類別的概率是(1 - P),這也是典型的兩點分布的形式。

  Softmax函數本身針對多項分布提出,當類別數是2時,它退化為二項分布。而它和Sigmoid函數真正的區別就在——二項分布包含兩個分類類別(姑且分別稱為A和B),而兩點分布其實是針對一個類別的概率分布,其對應的那個類別的分布直接由1-P得出。

  簡單點理解就是,Sigmoid函數,我們可以當作成它是對一個類別的“建模”,將該類別建模完成,另一個相對的類別就直接通過1減去得到。而softmax函數,是對兩個類別建模,同樣的,得到兩個類別的概率之和是1。

  神經網絡在做二分類時,使用Softmax還是Sigmoid,做法其實有明顯差別。由於Softmax是對兩個類別(正反兩類,通常定義為0/1的label)建模,所以對於NLP模型而言(比如泛BERT模型),Bert輸出層需要通過一個nn.Linear()全連接層壓縮至2維,然后接Softmax(Pytorch的做法,就是直接接上torch.nn.CrossEntropyLoss);而Sigmoid只對一個類別建模(通常就是正確的那個類別),所以Bert輸出層需要通過一個nn.Linear()全連接層壓縮至1維,然后接Sigmoid(torch就是接torch.nn.BCEWithLogitsLoss)。

  總而言之,Sotfmax和Sigmoid確實在二分類的情況下可以化為相同的數學表達形式,但並不意味着二者有一樣的含義,而且二者的輸入輸出都是不同的。Sigmoid得到的結果是“分到正確類別的概率和未分到正確類別的概率”,Softmax得到的是“分到正確類別的概率和分到錯誤類別的概率”。

  • 對於NLP而言,這兩者之間確實有差別,Softmax的處理方式有時候會比Sigmoid的處理方式好一點。
  • 對於CV而言,這兩者之間也是有差別的,Sigmoid的處理方式有時候會比Softmax的處理方式好一點。

參考文獻: 知乎回答
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM