淺談torch中的softmax與CrossEntropy
首先是softmax函數(shù),我認(rèn)為我在之前的文章
已經(jīng)較為清楚的闡述,故這里不再重復(fù)贅述。
在上文中,我較為清晰的說明了,softmax函數(shù)只是為了將我們的預(yù)測(cè)結(jié)果,表達(dá)成一種合適的結(jié)果,去擬合one-hot編碼。
但是對(duì)于這種向量標(biāo)簽,我們并不能很好的去定義其損失函數(shù)(誤差函數(shù))。
我們理所當(dāng)然應(yīng)該想到均方誤差函數(shù),但實(shí)際上,均方誤差函數(shù)(MSE),對(duì)于標(biāo)量標(biāo)簽確實(shí)能起到一個(gè)非常好的效果。
而對(duì)于一個(gè)向量標(biāo)簽,我們選擇了一個(gè)能實(shí)現(xiàn)與之同等效果的CrossEntropy函數(shù),也即交叉熵?fù)p失函數(shù)。

如上圖所示,其中??為正確的標(biāo)簽,而
為預(yù)測(cè)標(biāo)簽(經(jīng)過softmax處理后)。
該損失函數(shù)在計(jì)算上具有非常明顯的便利性,即僅考慮正確標(biāo)簽下對(duì)應(yīng)的損失。例如,我們不妨令? = [0, 1, 0],
= [0.3, 0.1, 0.6], 那么此時(shí)的?
?,
即僅考慮到了正確標(biāo)簽下的損失。
而其優(yōu)越性不僅表現(xiàn)在此處,其導(dǎo)函數(shù)更是有非常優(yōu)異的性質(zhì),即:

其中??為未經(jīng)softmax處理前得到的預(yù)測(cè)標(biāo)簽。
換言之,
如下圖所示:

毫無疑問,y_pred.grad == softmax(y_pred) - one_hot(y),這是成立的。(不成立可能是精度誤差導(dǎo)致的,看圖中明顯成立)。
而觀察y_pred.grad,對(duì)于y[1]這個(gè)樣本,我們明顯可以看出,其梯度是正在減少前兩項(xiàng)的權(quán)值,而增大最后一項(xiàng)的權(quán)值,以努力實(shí)現(xiàn)正確歸類至第三類,這是符合我們預(yù)期的。
故,CrossEntropy函數(shù)確實(shí)是在朝著我們的目標(biāo)去實(shí)現(xiàn)。