文章目錄
- 一.交叉熵函數的由來(推導)
-
- 1.1普通推導交叉熵 :
- 1.2極大似然推導交叉熵:
- 二.交叉熵函數直覺了解
- 三.交叉熵的兩種不同形式
-
- 3.1 Sigmoid + Cross-entropy
- 3.2 SoftMax + Cross-entropy
- 四.交叉熵函數求導
-
- 4.1 Sigmoid + Cross-entropy
- 4.2 SoftMax + Cross-entropy
- 六.優缺點
- 七.為什麼邏輯回歸不用MSE而用交叉熵
一.交叉熵函數的由來(推導)
1.1普通推導交叉熵 :
我們一共有m組已知樣本, ( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i))表示第i組資料及其對應的類别标記,
其中 x ( i ) = ( 1 , x 1 i , x 2 i , x 3 i … x p i ) x^{(i)} = (1, x^{i}_1,x^{i}_2,x^{i}_3…x^{i}_p) x(i)=(1,x1i,x2i,x3i…xpi), y ( i ) y^{(i)} y(i)則為表示類别的一個數:
- logistic回歸(二分類問題)中, y ( i ) y(i) y(i)取0或者1;
- softmax回歸 (多分類問題)中, y ( i ) y(i) y(i)取1,2…k中的一個表示類别标号的一個數(假設共有k類) 以上來自交叉熵代價函數(損失函數)及其求導推導 (Logistic Regression)
1.2極大似然推導交叉熵:
二.交叉熵函數直覺了解
單個樣本的交叉熵損失函數(注意這裡是用單個樣本做例子,是以公式裡沒有 Σ \Sigma Σ):
L o s s = − [ y l o g y ^ + ( 1 − y ) l o g ( 1 − y ^ ) ] Loss = - [ylogŷ + (1-y)log(1-ŷ)] Loss=−[ylogy^+(1−y)log(1−y^)]
其中 y ^ ŷ y^表示真實值,y表示預測值
-
當 y = 1 y=1 y=1時: L o s s = − l o g y ^ Loss = -logŷ Loss=−logy^
這時候,Loss與預測輸出的關系如下圖所示:
橫坐标是預測輸出,縱坐标是交叉熵損失函數 L。顯然,預測輸出越接近真實樣本标簽 1,損失函數 L 越小;預測輸出越接近 0,L 越大。是以,函數的變化趨勢完全符合實際需要的情況。 -
當 y = 0 y = 0 y=0 時: L o s s = − l o g ( 1 − y ^ ) Loss = -log(1- ŷ) Loss=−log(1−y^)
這時候,Loss 與預測輸出的關系如下圖所示:
同樣,預測輸出越接近真實樣本标簽 0,損失函數 L 越小;預測函數越接近 1,L 越大。函數的變化趨勢也完全符合實際需要的情況。
從上面兩種圖,可以幫助我們對交叉熵損失函數有更直覺的了解。無論真實樣本标簽 y 是 0 還是 1,L 都表征了預測輸出與 y 的差距。
從損失函數中我們可以知道交叉熵是用來描述兩個分布的距離的,而神經網絡訓練的目的就是使 預測值ŷ 逼近 真實值y。
三.交叉熵的兩種不同形式
- − [ y l o g y ^ + ( 1 − y ) l o g ( 1 − y ^ ) ] - [ylogŷ + (1-y)log(1-ŷ)] −[ylogy^+(1−y)log(1−y^)]
- − y l o g y ^ -ylog ŷ −ylogy^
這兩個都是交叉熵損失函數,但是看起來長的卻有天壤之别。這是因為這兩個交叉熵損失函數對應不同的最後一層的輸出:第一個對應的最後一層是sigmoid,第二個對應的最後一層是softMax。 下面會具體解釋Sigmoid + Cross-entropy 和 SoftMax + Cross-entropy。
3.1 Sigmoid + Cross-entropy
用sigmoid函數作為神經元的激活函數時,最好使用交叉熵代價函數而不用均方誤差損失函數,以避免訓練過程太慢
為什麼呢?
如果使用均方誤差損失函數時:
C = ( y − a ) 2 2 C = \frac{(y-a)^2}{2} C=2(y−a)2
其中, y y y為真實值, a a a為預測值, a = σ ( z ) a = \sigma(z) a=σ(z) , z = w x + b z = wx +b z=wx+b ,是以 a = σ ( w x + b ) a = \sigma(wx + b) a=σ(wx+b)
用鍊式法則來求權重和偏置的偏導數得:
∂ C ∂ w = ( a − y ) σ ′ ( z ) x = a σ ′ ( z ) \frac{\partial C}{\partial w} = (a - y) \sigma'(z)x = a\sigma'(z) ∂w∂C=(a−y)σ′(z)x=aσ′(z)
∂ C ∂ b = ( a − y ) σ ′ ( z ) = a σ ′ ( z ) \frac{\partial C}{\partial b} = (a - y) \sigma'(z) = a\sigma'(z) ∂b∂C=(a−y)σ′(z)=aσ′(z)
而梯度下降更新規則為:
w = w − η ∂ C ∂ w w = w - \eta\frac{\partial C}{\partial w} w=w−η∂w∂C
b = b − η ∂ C ∂ b b = b - \eta\frac{\partial C}{\partial b} b=b−η∂b∂C
由 sigmoid 函數的圖像我們可以知道,當 z 很小 ( 遠小于0 ) 或者 z 很大 ( 遠大于0 ) 時,σ′(z) 趨于 0,是以代價函數對于 w 和 b 的偏導數就會很小。也可以從下圖的sigmoid求導後的圖像可以看出,最大值隻有0.25,是以 w 和 b 就會産生的變化很小,故,學習緩慢。
而使用交叉熵作代價函數時:
其用鍊式法則來求權重和偏置的偏導數就有:
σ′(z) 在鍊式求導時被約去了,是以不會出現學習緩慢的問題 (除非在最後結果收斂的時候) 。它告訴我們權重學習的速度受到 σ(z) − y,也就是輸出中的誤差的控制。更大的誤差,會有更快的學習速度。這是我們期待的結果,比如現實生活中,如果你犯了很大的錯誤,肯定會知道應該更要往正确的方向學習,是以學習速度大大提升。
3.2 SoftMax + Cross-entropy
多分類是指分類任務中有多個類别, 比如對一堆水果圖檔分類, 它們可能是橘子、蘋果、梨. 多類分類是假設每個樣本都被設定了一個且僅有一個标簽: 一個水果可以是蘋果或者梨, 但是同時不可能是兩者。
是以用真實值y用one-hot表示方法表示出來: [ 0 , 0 , 1 ] [0,0,1] [0,0,1]1表示圖檔屬于這個類别,0則表示圖檔不屬于這個類别。
那為什麼在多分類問題中通常使用SoftMax + Cross-entropy的組合方式呢?因為softmax 函數,它可以将一個N維的實數向量壓縮成一個滿足特定條件的N維實數向。壓縮後的向量滿足兩個條件:
- 向量中的每個元素的大小都在[0,1]
- 向量所有元素的和為 1
比如預測一張圖檔屬于橘子、蘋果、梨等的機率,經過softMax函數之後y值變為 [ 0.1 , 0.5 , 0.4 ] [0.1,0.5,0.4] [0.1,0.5,0.4]
可以看到y值都在區間[0,1],且之和為1.
經過softMax函數之後的輸出的預測值機率矩陣與經過one-hot編碼後的真實值矩陣相對應:
具體步驟如下圖所示:
在這裡softMax更像是一個激活函數而不是損失函數
四.交叉熵函數求導
4.1 Sigmoid + Cross-entropy
4.2 SoftMax + Cross-entropy
求導
舉個例子,通過若幹層的計算,最後得到的某個訓練樣本的向量的分數是 [ z 4 , z 5 , z 6 ] = [ 2 , 3 , 4 ] [z4,z5,z6] = [ 2, 3, 4 ] [z4,z5,z6]=[2,3,4]那麼經過softmax函數作用後機率分别就是: [ e 2 ( e 2 + e 3 + e 4 ) , e 3 ( e 2 + e 3 + e 4 ) , e 4 ( e 2 + e 3 + e 4 ) ] = [ 0.0903 , 0.2447 , 0.665 ] [\frac{e^2}{(e^2+e^3+e^4)},\frac{e^3}{(e^2+e^3+e^4)},\frac{e^4}{(e^2+e^3+e^4)}] = [0.0903,0.2447,0.665] [(e2+e3+e4)e2,(e2+e3+e4)e3,(e2+e3+e4)e4]=[0.0903,0.2447,0.665]如果這個樣本正确的分類是第二個的話,那麼計算出來的偏導就是 [ 0.0903 , 0.2447 − 1 , 0.665 ] = [ 0.0903 , − 0.7553 , 0.665 ] [0.0903,0.2447-1,0.665]=[0.0903,-0.7553,0.665] [0.0903,0.2447−1,0.665]=[0.0903,−0.7553,0.665]
正确分類數值-1 , 不正确分類數值不變
六.優缺點
-
優點
在用梯度下降法做參數更新的時候,模型學習的速度取決于兩個值:一、學習率;二、偏導值。其中,學習率是我們需要設定的超參數,是以我們重點關注偏導值。從上面的式子中,我們發現,偏導值的大小取決于 [公式] 和 [公式] ,我們重點關注後者,後者的大小值反映了我們模型的錯誤程度,該值越大,說明模型效果越差,但是該值越大同時也會使得偏導值越大,進而模型學習速度更快。是以,使用邏輯函數得到機率,并結合交叉熵當損失函數時,在模型效果差的時候學習速度比較快,在模型效果好的時候學習速度變慢。
-
缺點
sigmoid(softmax)+cross-entropy loss 擅長于學習類間的資訊,因為它采用了類間競争機制,它隻關心對于正确标簽預測機率的準确性,忽略了其他非正确标簽的差異,導緻學習到的特征比較散。基于這個問題的優化有很多,比如對softmax進行改進,如L-Softmax、SM-Softmax、AM-Softmax等。
七.為什麼邏輯回歸不用MSE而用交叉熵
因為 當我們在學習邏輯回歸參數的時候,會發現我們的優化目标不是凸優化,隻能找到多個局部 最優值,梯度下降法很可能找不到全局最優值,雖然平方差是一個不錯的損失函數,但是我 們在邏輯回歸模型中會使用交叉熵損失函數。