前言
一般說到多分類問題,我們很自然地會採用softmax交叉熵損失,而談到迴歸問題,我們可能會選擇MSE這樣的損失。但有一天,我們也許想知道二者之間是否真的就涇渭分明,能否把交叉熵損失用於迴歸任務,或者把MSE損失用於分類任務呢。這麼想不是沒有道理的,畢竟我們可以把多分類問題,看做是離散的迴歸問題,或者把迴歸問題,看做是無窮多類別下的分類問題。
討論1
模型輸出的logits,經過softmax歸一化後,是採用交叉熵損失好,還是MSE損失好,原因是什麼。
兩者直觀上的區別是,交叉熵損失僅關注預測概率向量的target值,MSE會關注所有non-target值。我們隱隱感覺到,對於分類問題,只用關注target處的元素值,所以交叉熵損失好。下面我們嘗試進行更細緻的分析:
[ 以最簡單的二分類爲例分析 ]
記logits爲[z1,z2],經softmax歸一化後爲[a1,a2],對應標籤[y1,y2](0,1取值),則:
Lmse=(a1−y1)2+(a2−y2)2,
Lce=y1ln(a1)+y2ln(a2),
∂Lmse/∂a1=2(a1−y1),
∂Lce/∂a1=−y1/a1,
可以看到,隨着a1趨近於y1,Lmse對z1的梯度會被(a1−y1)這一項打折扣,而Lce的不會,因爲y1/a1最小爲1。下面寫出完整的梯度公式對比:
可以看到,交叉熵損失對應的梯度非常簡潔。
舉個實例,[a1,a2]=[0.8,0.2],
若y1=0,式(1)=0.512,式(2)=0.8
若y1=1,式(1)=-0.128,式(2)=-0.2
可以發現,交叉熵損失對應的梯度更利於快速收斂。
更新1
- 對於傳統的機器學習任務,多直接求得閉式解,因此可以使用基於MSE的損失函數;對於梯度優化的方式,MSE損失可能存在局部最優導致收斂失敗;
- 下圖是基於MSE損失的一個示例圖,對於一個給定的樣本點,以softmax的前一線性層參數爲橫座標(圖中的x),得到的loss曲線如下圖,可以看到,若參數初始值在右方的平坦區,且學習率較小,則損失無法收斂至左側的global optimal。
更新2
若MSE/MAE也只關注target處的值,則有:
- CE相對更關注難例樣本,MSE相對更關注簡單樣本,MAE則一視同仁
- MAE也和MSE一樣,相比CE收斂速度和精度可能存在問題
以下截圖來自騰訊優圖Louis分享:
結論1
對於分類問題,交叉熵損失和MSE都可以用,只不過交叉熵損失優於MSE
討論2
對於一個向量,能否用(非)softmax的方式,將其歸一化(元素和爲1),然後基於交叉熵損失做迴歸任務,原因是什麼。
[ 以二維向量迴歸爲例分析 ]
對於[G1,G2]和[z1,z2],分別softmax歸一化得[y1,y2]和[a1,a2]。我們希望[z1,z2]趨近[G1,G2],一個自然的思路是基於迴歸,即Lmse=(z1−G1)2+(z2−G2)2,或者我們想試試能否基於交叉熵損失,此時轉換爲希望[a1,a2]趨向[y1,y2],Lce=y1ln(a1)+y2ln(a2)。對比兩種思路:
- 看梯度,可以發現∂Lmse/∂z1的取值是實數範圍,而∂Lce/∂z1取值範圍是[−1,1],後者限制了z的更新速度。注意這裏交叉熵雖然是做分類,但我們的最終目標仍是z→G。
∂Lmse/∂z1=2(z1−G1)
∂Lce/∂z1=a1−y1
- 看優化目標,不同的[G1,G2]和[z1,z2],softmax歸一化操作後,可以存在[y1,y2]=[a1,a2],即在z和G還存在誤差時,交叉熵損失得到的梯度已然爲0,此時交叉熵損失顯然不適用了。舉例,[G1,G2]=[1,2],[z1,z2]=[2,3],兩者softmax歸一化均爲[1/(1+e),e/(1+e)]。
- 若採用非softmax的方式歸一化,比如通過直接除以元素之和,或者比如向量元素先自行平方,再除以平方之和,均存在一些問題:a. 元素之和可能爲0,需要近似處理;b.梯度中涉及對數ln()運算;c. 同樣存在上述2中的優化目標不一致的問題,比如[1,2]和[2,4],通過除以元素之和歸一化,均得到[1/3, 2/3]。
結論2
基於MSE的迴歸任務,不能轉換爲基於交叉熵損失的分類任務。