一般说到多分类问题,我们很自然地会采用softmax交叉熵损失,而谈到回归问题,我们可能会选择MSE这样的损失。但有一天,我们也许想知道二者之间是否真的就泾渭分明,能否把交叉熵损失用于回归任务,或者把MSE损失用于分类任务呢。这么想不是没有道理的,毕竟我们可以把多分类问题,看做是离散的回归问题,或者把回归问题,看做是无穷多类别下的分类问题。
模型输出的logits,经过softmax归一化后,是采用交叉熵损失好,还是MSE损失好,原因是什么。
两者直观上的区别是,交叉熵损失仅关注预测概率向量的target值,MSE会关注所有non-target值。我们隐隐感觉到,对于分类问题,只用关注target处的元素值,所以交叉熵损失好。下面我们尝试进行更细致的分析:
[ 以最简单的二分类为例分析 ]
记logits为 [ z 1 , z 2 ] [z_1,z_2] [z1,z2],经softmax归一化后为 [ a 1 , a 2 ] [a_1,a_2] [a1,a2],对应标签 [ y 1 , y 2 ] [y_1,y_2] [y1,y2](0,1取值),则:
L m s e = ( a 1 − y 1 ) 2 + ( a 2 − y 2 ) 2 L_{mse}=(a_1-y_1)^2+(a_2-y_2)^2 Lmse=(a1−y1)2+(a2−y2)2,
L c e = y 1 l n ( a 1 ) + y 2 l n ( a 2 ) L_{ce}=y_1ln(a_1)+y_2ln(a_2) Lce=y1ln(a1)+y2ln(a2),
∂ L m s e / ∂ a 1 = 2 ( a 1 − y 1 ) \partial{L_{mse}}/\partial{a_1}=2(a_1-y_1) ∂Lmse/∂a1=2(a1−y1),
∂ L c e / ∂ a 1 = − y 1 / a 1 \partial{L_{ce}}/\partial{a_1}=-y_1/a_1 ∂Lce/∂a1=−y1/a1,
可以看到,随着 a 1 a_1 a1趋近于 y 1 y_1 y1, L m s e L_{mse} Lmse对 z 1 z_1 z1的梯度会被 ( a 1 − y 1 ) (a_1-y_1) (a1−y1)这一项打折扣,而 L c e L_{ce} Lce的不会,因为 y 1 / a 1 y_1/a_1 y1/a1最小为1。下面写出完整的梯度公式对比:
可以看到,交叉熵损失对应的梯度非常简洁。
举个实例, [ a 1 , a 2 ] = [ 0.8 , 0.2 ] [a_1,a_2]=[0.8, 0.2] [a1,a2]=[0.8,0.2],
若 y 1 = 0 y_1=0 y1=0,式(1)=0.512,式(2)=0.8
若 y 1 = 1 y_1=1 y1=1,式(1)=-0.128,式(2)=-0.2
可以发现,交叉熵损失对应的梯度更利于快速收敛。
更新1
更新2
若MSE/MAE也只关注target处的值,则有:
对于分类问题,交叉熵损失和MSE都可以用,只不过交叉熵损失优于MSE
对于一个向量,能否用(非)softmax的方式,将其归一化(元素和为1),然后基于交叉熵损失做回归任务,原因是什么。
[ 以二维向量回归为例分析 ]
对于 [ G 1 , G 2 ] [G_1, G_2] [G1,G2]和 [ z 1 , z 2 ] [z_1, z_2] [z1,z2],分别softmax归一化得 [ y 1 , y 2 ] [y_1, y_2] [y1,y2]和 [ a 1 , a 2 ] [a_1, a_2] [a1,a2]。我们希望 [ z 1 , z 2 ] [z_1, z_2] [z1,z2]趋近 [ G 1 , G 2 ] [G_1, G_2] [G1,G2],一个自然的思路是基于回归,即 L m s e = ( z 1 − G 1 ) 2 + ( z 2 − G 2 ) 2 L_{mse}=(z_1-G_1)^2+(z_2-G_2)^2 Lmse=(z1−G1)2+(z2−G2)2,或者我们想试试能否基于交叉熵损失,此时转换为希望 [ a 1 , a 2 ] [a_1, a_2] [a1,a2]趋向 [ y 1 , y 2 ] [y_1, y_2] [y1,y2], L c e = y 1 l n ( a 1 ) + y 2 l n ( a 2 ) L_{ce}=y_1ln(a_1) + y_2ln(a_2) Lce=y1ln(a1)+y2ln(a2)。对比两种思路:
基于MSE的回归任务,不能转换为基于交叉熵损失的分类任务。