【機器學習】——爲什麼softmax搭配cross entropy是解決分類問題的通用方案?

衆所周知,softmax+cross entropy是在線性模型、神經網絡等模型中解決分類問題的通用方案,但是爲什麼選擇這種方案呢?它相對於其他方案有什麼優勢?筆者一直也困惑不解,最近瀏覽了一些資料,有一些小小心得,希望大家指正~

損失函數:交叉熵Cross Entropy

我們可以從三個角度來理解cross entropy的物理意義

從實例上直觀理解

我們首先來看Cross Entropy 的公式:
假設存在兩個分佈ppqqpp爲樣本的真實分佈,qq爲模型預測出的樣本分佈,則在給定的樣本集XX上,交叉熵的計算方式爲
LCE(p,q)=xXp(x)logq(x)L_{CE}(p,q)=-\sum _{x\in X}p(x)logq(x)
通常情況下在線性模型、神經網絡等模型中,關於樣本的真實分佈可以用one-hot的編碼來表示,比如男、女分別可以用[0,1]和[1,0]來表示,同樣的,C種類別的樣本可以用長度爲C的向量來表示,且一個樣本的表示向量中有且僅有一個維度爲1,其餘爲0。那會造成什麼後果呢?我們來看一個例子,假設一個樣本的真實label爲[0,0,0,1,0][0,0,0,1,0],預測的分佈爲[0.02,0.02,0.02,0.9,0.04][0.02,0.02,0.02,0.9,0.04],則交叉熵爲:
LCE=1log0.9L_{CE}=-1*log0.9
如果預測分佈爲[0.1,0.5,0.2,0.1,0.2][0.1,0.5,0.2,0.1,0.2],則交叉熵爲:
LCE=1log0.1L_{CE}=-1*log0.1
可以看出其實LCEL_{CE}只與label中1所對應下標的預測值有關,且該預測值越大,LCEL_{CE}越小
只要label中1所對應下標的預測值越接近1,則損失函數越小,這在直觀上就是符合我們對於損失函數的預期

交叉熵爲什麼比均方誤差好

作爲迴歸問題的常見損失函數,均方誤差公式爲lossMSE(y,t)=12i=1n(yiti)2loss_{MSE}(y,t)=\frac{1}{2}\sum_{i=1}^{n}(y_i - t_i)^2,好像也可以用來計算分類問題的損失函數,那它爲什麼不適合分類問題呢?我們再來看一個例子假設一個樣本的真實label爲[0,0,0,1,0][0,0,0,1,0],預測的分佈爲D1=[0.1,0.1,0.1,0.6,0.1]D_1 =[0.1,0.1,0.1,0.6,0.1],預測分佈D2=[0,0,0,0.6,0.4]D_2 =[0,0,0,0.6,0.4],此時lossMSED1<lossMSED2loss_{MSE}D_1 < loss_{MSE}D_2 ,也就是說對於lossMSEloss_{MSE}而言,即使與label中1所對應下標的預測值是正確的,其他項預測值的分佈也會影響損失的大小,這不符合我們對於分類問題損失函數的預期。

似然估計的視角

我們知道,對於一個多分類問題,給定樣本xx,它的似然函數可以表示爲
p(tx)=i=1CP(tix)ti=i=1Cyitip(t|x)=\prod_{i=1}^{C}P(t_i|x)^{t_i}=\prod_{i=1}^{C}y_i^{t_i}
其中 yiy_i是模型預測的概率,tit_i是對應類的label,那麼其對數似然估計則爲:
i=1Ctilogyi-\sum_{i=1}^{C}t_ilog{y_i},tit_i對應於p(x)p(x)yiy_i對應於q(x)q(x),其實交叉熵就是對應於該樣本的負對數似然估計

KL散度視角

KL散度又被稱爲相對熵,可以用來衡量兩個分佈之間的距離,想了解KL散度可以參考如何理解K-L散度(相對熵)。需要了解的是:KL散度越小,兩個分佈越相近。這麼看KL散度是不是很符合我們對於兩個分佈損失函數的定義呢?
,公式爲:
DKL=xXp(x)logp(x)q(x)=xXp(x)logp(x)xXp(x)logq(x)=H(p)xXp(x)logq(x)D_{KL}=-\sum _{x\in X}p(x)log\frac{p(x)}{q(x)}\\ =-\sum _{x\in X}p(x)logp(x) - \sum _{x\in X}p(x)logq(x)\\ =-H(p)-\sum _{x\in X}p(x)logq(x)
其中H(p)H(p)爲p的熵,注意這裏的pp是樣本的真實分佈,所以H(p)H(p)爲常數,因此,KL散度與交叉熵事實上是等價的,所以交叉熵也可以用來衡量兩個分佈之間的距離,符合我們對於損失函數的期待

softmax+cross entropy到底學到了什麼?

我們知道在迴歸問題中的最常用的損失函數是均方誤差lossMSE(y,t)=12i=1n(yiti)2loss_{MSE}(y,t)=\frac{1}{2}\sum_{i=1}^{n}(y_i - t_i)^2,那麼在反向傳播時,lossyi=yiti\frac{\partial{loss}}{\partial{y_i}}=y_i-t_i,即均方誤差在反向傳播時傳遞的是預測值與label值的偏差,這顯然是一個符合我們預期的、非常直覺的結果。
假定分類問題的最後一個隱藏層和輸出層如下圖所示
在這裏插入圖片描述
a1........aca_1........a_c爲最後一個隱藏層的C個類別,y1.....ycy_1.....y_c爲輸出層,則有LossCEai=yiti\frac{\partial{Loss_{CE}}}{\partial{a_i}}=y_i-t_i因此softmax+cross entropy在反向傳播時傳遞的同樣是預測值與label值的偏差,即yitiy_i-t_i,如果對於證明不感興趣的,那麼這篇文章就可以到此結束了~以下均爲證明過程。
圖中yi=eaij=1Ceajy_i=\frac{e^{a_i}}{\sum_{j=1}^Ce^{a_j}},我們用\sum表示分母j=1Ceaj\sum_{j=1}^Ce^{a_j},則yi=eaiy_i=\frac{e^{a_i}}{\sum}
LCEai=j=1CLCEyjyjai=i=1C(tiyj)yjai\frac{\partial{L_{CE}}}{\partial{a_i}}=\sum_{j=1}^{C}\frac{\partial{L_{CE}}}{\partial{y_j}}\frac{\partial{y_j}}{\partial{a_i}}=\sum_{i=1}^{C}(\frac{t_i}{y_j})\frac{\partial{y_j}}{\partial{a_i}} 注意這裏的yi=eaij=1Ceajy_i=\frac{e^{a_i}}{\sum_{j=1}^Ce^{a_j}}與所有的aia_i都相關,因此需要用鏈式法則求導
下面求yjai\frac{\partial{y_j}}{\partial{a_i}},
yjai\frac{\partial{y_j}}{\partial{a_i}}的求導分爲兩種情況
ii != jj時,yjai=eajai=eajeai=yiyj\frac{\partial{y_j}}{\partial{a_i}}=\frac{\partial{\frac{e^{a_j}}{\sum} }}{\partial{a_i}}=-\frac{e^{a_j}}{\sum} \frac{e^{a_i}}{\sum}=-y_iy_j
i=ji=j時,yjai=eaiai=eaieaieaj2=eaieaj=yi(1yj)\frac{\partial{y_j}}{\partial{a_i}}=\frac{\partial{\frac{e^{a_i}}{\sum} }}{\partial{a_i}}=\frac{e^{a_i}\sum-e^{a_i}e^{a_j}}{{\sum}^2}=\frac{e^{a_i}}{\sum} *\frac{\sum-e^{a_j}}{\sum}=y_i(1-y_j)
代入上式得
LCEai=i=1C(tiyj)yjai=tiyiyiaii=jCyiai=tiyiyi(1yj)i!=jCtiyi(yiyj)=ti+yij=1Ctj=yiti\frac{\partial{L_{CE}}}{\partial{a_i}}= \sum_{i=1}^{C}(\frac{t_i}{y_j})\frac{\partial{y_j}}{\partial{a_i}}= -\frac{t_i}{y_i}\frac{\partial{y_i}}{\partial{a_i}}-\sum_{i = j}^{C}\frac{\partial{y_i}}{\partial{a_i}}=-\frac{t_i}{y_i}y_i(1-y_j)-\sum_{i!=j}^{C}\frac{t_i}{y_i}(-y_iy_j) =-t_i+y_i\sum_{j=1}^Ct_j=y_i-t_i 注意這裏j=1Ctj\sum_{j=1}^Ct_j爲所有label的和,應該等於1.

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