Rethinking分類&迴歸損失

前言

一般說到多分類問題,我們很自然地會採用softmax交叉熵損失,而談到迴歸問題,我們可能會選擇MSE這樣的損失。但有一天,我們也許想知道二者之間是否真的就涇渭分明,能否把交叉熵損失用於迴歸任務,或者把MSE損失用於分類任務呢。這麼想不是沒有道理的,畢竟我們可以把多分類問題,看做是離散的迴歸問題,或者把迴歸問題,看做是無窮多類別下的分類問題。

討論1

模型輸出的logits,經過softmax歸一化後,是採用交叉熵損失好,還是MSE損失好,原因是什麼。
兩者直觀上的區別是,交叉熵損失僅關注預測概率向量的target值,MSE會關注所有non-target值。我們隱隱感覺到,對於分類問題,只用關注target處的元素值,所以交叉熵損失好。下面我們嘗試進行更細緻的分析:

[ 以最簡單的二分類爲例分析 ]
記logits爲[z1,z2][z_1,z_2],經softmax歸一化後爲[a1,a2][a_1,a_2],對應標籤[y1,y2][y_1,y_2](0,1取值),則:
Lmse=(a1y1)2+(a2y2)2L_{mse}=(a_1-y_1)^2+(a_2-y_2)^2
Lce=y1ln(a1)+y2ln(a2)L_{ce}=y_1ln(a_1)+y_2ln(a_2)
Lmse/a1=2(a1y1)\partial{L_{mse}}/\partial{a_1}=2(a_1-y_1)
Lce/a1=y1/a1\partial{L_{ce}}/\partial{a_1}=-y_1/a_1
可以看到,隨着a1a_1趨近於y1y_1LmseL_{mse}z1z_1的梯度會被(a1y1)(a_1-y_1)這一項打折扣,而LceL_{ce}的不會,因爲y1/a1y_1/a_1最小爲1。下面寫出完整的梯度公式對比:
grad
可以看到,交叉熵損失對應的梯度非常簡潔。
舉個實例,[a1,a2]=[0.8,0.2][a_1,a_2]=[0.8, 0.2]
y1=0y_1=0,式(1)=0.512,式(2)=0.8
y1=1y_1=1,式(1)=-0.128,式(2)=-0.2
可以發現,交叉熵損失對應的梯度更利於快速收斂。

更新1

  1. 對於傳統的機器學習任務,多直接求得閉式解,因此可以使用基於MSE的損失函數;對於梯度優化的方式,MSE損失可能存在局部最優導致收斂失敗;
  2. 下圖是基於MSE損失的一個示例圖,對於一個給定的樣本點,以softmax的前一線性層參數爲橫座標(圖中的x),得到的loss曲線如下圖,可以看到,若參數初始值在右方的平坦區,且學習率較小,則損失無法收斂至左側的global optimal。
    MSE-based分類損失

更新2
若MSE/MAE也只關注target處的值,則有:

  1. CE相對更關注難例樣本,MSE相對更關注簡單樣本,MAE則一視同仁
  2. MAE也和MSE一樣,相比CE收斂速度和精度可能存在問題

以下截圖來自騰訊優圖Louis分享:
CE_vs_MAE_1CE_vs_MAE_2
GCE_loss

結論1

對於分類問題,交叉熵損失和MSE都可以用,只不過交叉熵損失優於MSE


討論2

對於一個向量,能否用(非)softmax的方式,將其歸一化(元素和爲1),然後基於交叉熵損失做迴歸任務,原因是什麼。

[ 以二維向量迴歸爲例分析 ]
對於[G1,G2][G_1, G_2][z1,z2][z_1, z_2],分別softmax歸一化得[y1,y2][y_1, y_2][a1,a2][a_1, a_2]。我們希望[z1,z2][z_1, z_2]趨近[G1,G2][G_1, G_2],一個自然的思路是基於迴歸,即Lmse=(z1G1)2+(z2G2)2L_{mse}=(z_1-G_1)^2+(z_2-G_2)^2,或者我們想試試能否基於交叉熵損失,此時轉換爲希望[a1,a2][a_1, a_2]趨向[y1,y2][y_1, y_2]Lce=y1ln(a1)+y2ln(a2)L_{ce}=y_1ln(a_1) + y_2ln(a_2)。對比兩種思路:

  1. 看梯度,可以發現Lmse/z1\partial{L_{mse}}/\partial{z_1}的取值是實數範圍,而Lce/z1\partial{L_{ce}}/\partial{z_1}取值範圍是[1,1][-1,1],後者限制了zz的更新速度。注意這裏交叉熵雖然是做分類,但我們的最終目標仍是zGz→G
    Lmse/z1=2(z1G1)\partial{L_{mse}}/\partial{z_1}=2(z_1-G_1)
    Lce/z1=a1y1\partial{L_{ce}}/\partial{z_1}=a_1-y_1
  2. 看優化目標,不同的[G1,G2][G_1, G_2][z1,z2][z_1, z_2],softmax歸一化操作後,可以存在[y1,y2]=[a1,a2][y_1, y_2]=[a_1, a_2],即在zzGG還存在誤差時,交叉熵損失得到的梯度已然爲0,此時交叉熵損失顯然不適用了。舉例,[G1,G2]=[1,2][G_1, G_2]=[1, 2][z1,z2]=[2,3][z_1, z_2]=[2, 3],兩者softmax歸一化均爲[1/(1+e),e/(1+e)][1/(1+e), e/(1+e)]
  3. 若採用非softmax的方式歸一化,比如通過直接除以元素之和,或者比如向量元素先自行平方,再除以平方之和,均存在一些問題:a. 元素之和可能爲0,需要近似處理;b.梯度中涉及對數ln()運算;c. 同樣存在上述2中的優化目標不一致的問題,比如[1,2]和[2,4],通過除以元素之和歸一化,均得到[1/3, 2/3]。

結論2

基於MSE的迴歸任務,不能轉換爲基於交叉熵損失的分類任務。

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