1. 程式人生 > >深度學習基礎--loss與啟用函式--sigmiod與softmax;對數損失函式與交叉熵代價函式

深度學習基礎--loss與啟用函式--sigmiod與softmax;對數損失函式與交叉熵代價函式

sigmiod與softmax

  sigmiod就是邏輯迴歸(解決二分類問題);softmax是多分類問題的邏輯迴歸
  雖然邏輯迴歸能夠用於分類,不過其本質還是線性迴歸。它僅線上性迴歸的基礎上,在特徵到結果的對映中加入了一層sigmoid函式(非線性)對映,即先把特徵線性求和,然後使用sigmoid函式來預測。


sigmoid函式

  當sigmoid函式作為神經元的啟用函式時,有兩種較好的損失函式選擇:
  1)sigmoid搭配方差代價函式(即採用均方誤差MSE)。對於sigmoid,初始的誤差越大,收斂得越緩慢。

  2)sigmoid搭配交叉熵代價函式。它可以克服方差代價函式更新權重過慢的問題。
  sigmiod的兩端趨於平坦,導數中沒有σ′(z)這一項,權重的更新是受σ(z)?y這一項影響,即受誤差的影響。所以當誤差大的時候,權重更新就快,當誤差小的時候,權重的更新就慢。這是一個很好的性質。

Sigmoid 函式的物理含義

  有兩大關鍵的性質:易求導和連續性。

例子1

  判斷一個物件的分類時,很難做到 100% 的把握。所以,我們要算概率。為了方便討論,只討論 2 個分類的情況。
  橫座標是測量值,縱座標是概率。p 越大,屬於 1 的概率越高,否則屬於 0。
  p = 0.5 是分界線,無法判斷屬於哪一個分類。
  從 0.5 變到 0.6,基本可以認為屬於分類 1,質的飛躍,雖然把握不大。0.6 -> 0.7, 非常重要的改進。從 0.9 變到 1,因為把握已經很大了,所以實際的幫助有限。

例子2

  生物的種群增長。剛開始,種群的數量非常少,繁殖的速度會比較慢。隨著數量的增加,繁殖速度越來越快。然後,食物不足,有天敵出現等原因。增速開始下降,最後穩定在一個區間內。而logistic 曲線非常好的描述了這個變化規律。


softmax

  也是一種迴歸,CNN網路的最後一層採用softmax全連線(多分類時輸出層一般用softmax)。softmax迴歸是logistic迴歸的多類別推廣。

概念和性質

  1)對概率分佈進行歸一化,使得所有概率之和為 1 。將一組數(一個一維向量)對映成一組範圍為【0,1】的數,故向量的維度不變。
  2)softmax 迴歸演算法的代價函式 J(\theta),與logistic 代價函式在形式上非常類似,只是在Softmax損失函式中對類標記的 k 個可能值進行了累加。對於 J(\theta) 的最小化問題,目前還沒有閉式解法。因此,我們使用迭代的優化演算法(例如梯度下降法,或 L-BFGS)。
  3)通過新增一個權重衰減項來修改代價函式,這個衰減項會懲罰過大的引數值。

  注意:三個類別是互斥的時候,更適於選擇softmax迴歸分類器 。而其他時候,建立三個獨立的 logistic迴歸分類器更加合適。

Softmax Loss 和 Multiclass SVM Loss

  參考資料:http://blog.csdn.net/u012767526/article/details/51396196

  Softmax Loss:
給出 (xi,yi) ,其中 xi 是影象,yi 是影象的類別(整數),s=f(xi,W),其中s 是網路的輸出,則定義誤差如下:
P(Y=k|X=xi)=esk∑jesj
Li=−logP(Y=yi|X=xi)

  例如:s=[3.2,5.1,−1.7],則p=[0.13,0.87,0.00] ,可得Li=−log(0.13)=0.89" "從誤差的定義我們可以看出,Softmax在計算誤差是考慮到了所有的類別的取值,因此,如果希望Softmax Loss儘可能的小,那麼會導致其他類別的分數儘可能的低;
但是在SVM Loss(其實就是hing-loss)的定義中,我們可以看到,SVM Loss只考慮了那些在正確值附近或者壓制了正確值的那些值,其他的均作為0處理,因此,SVM Loss更看重魯棒性,只看重那些可能造成影響的點,這些所謂的可能造成影響的點也就是支援向量(現在你應該明白支援向量機是什麼意思了);

  但是,在分類問題中,這兩種方法得到的結果往往都是一致的,所以我們也不需要擔心太多。

SoftnaxWithLoss—softmax損失層

  一般用於計算多分類問題的損失,在概念上等同於softmax層後面跟一個多變數的logistic迴歸損失層,但能提供更穩定的梯度。


對數損失函式(logarithmic loss function) 或對數似然函式

  對數似然函式常用來作為softmax迴歸的代價函式。對應的,交叉熵代價函式常用來作為sigmoid迴歸的代價函式。
  對數似然代價函式在二分類時可以化簡為交叉熵代價函式的形式。


交叉熵代價函式(cross-entropy cost function)

  是損失函式,它前面是概率(可以是sigmoid的輸出,也可以是softmax的輸出)。
  參考資料:https://blog.csdn.net/chaipp0607/article/details/73392175

特性

  1)非負性。(所以我們的目標就是最小化代價函式)
  2)交叉熵刻畫的是實際輸出(概率)與期望輸出(概率)的距離,也就是交叉熵的值越小,兩個概率分佈就越接近。

公式

  假設概率分佈p為期望輸出(即標籤label),概率分佈q為實際輸出,H(p,q)為交叉熵。
  故在分類問題中,只有當x是label時,p=1,其餘情況下p=0!
在這裡插入圖片描述
在這裡插入圖片描述

例如

  softmax和交叉熵組合時,損失為softmax_cross_entropy(交叉熵)。
x = [[1, 2, 3],
  [11, 7, 5]]

label = [2, 0]

則:
softmax(x) = [[0.09003057, 0.24472848,0.66524094],
  [0.97962922, 0.01794253,0.00242826]]

softmax_cross_entropy(data, label) = - log(0.66524084) - log(0.97962922) = 0.4281871

具體的使用

  在tensorflow中:
  1)tf.nn.sigmoid_cross_entropy_with_logits()來表示跟sigmoid搭配使用的交叉熵。
  2)tf.nn.softmax_cross_entropy_with_logits()來表示跟softmax搭配使用的交叉熵。

應用場景

  當誤差越大時,梯度就越大,引數w和b的調整就越快,訓練的速度也就越快。
  如果輸出神經元是線性的,那麼二次代價函式就是一種合適的選擇。如果輸出神經元是S型函式,那麼比較適合用交叉熵代價函式。

  具體來說,當sigmoid函式作為神經元的啟用函式時,最好使用交叉熵代價函式來替代方差代價函式(MSE),以避免訓練過程太慢。
  它可以克服方差代價函式更新權重過慢的問題(sigmiod的兩端趨於平坦),導數中沒有σ′(z)這一項,權重的更新是受σ(z)?y這一項影響,即受誤差的影響。所以當誤差大的時候,權重更新就快,當誤差小的時候,權重的更新就慢。這是一個很好的性質。

cross-entropy loss與hinge loss

  總而言之,cross-entropy loss比hinge loss要好!
  1)cross-entropy的解釋性強;通過作圖可以看出, cross-entropy是平滑的;
  2)hinge loss不是平滑的:hinge loss 對於正例的loss是0, 反例不是0, 這樣導致其在每次迭代中, 只用到反例來更新模型(也就是隻用了反例來建樹, 丟失了正例的資訊)
  3)從它們的loss上看, cross-entropy loss對反例的懲罰是呈指數增長的, 而hinge loss是線性增長的。