前言
一般说到多分类问题,我们很自然地会采用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。下面写出完整的梯度公式对比:

可以看到,交叉熵损失对应的梯度非常简洁。
举个实例,[z1,z2]=[0.8,0.2],
若y1=0,式(1)=0.512,式(2)=0.8
若y1=1,式(1)=-0.128,式(2)=-0.2
可以发现,交叉熵损失对应的梯度更利于快速收敛。
结论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的回归任务,不能转换为基于交叉熵损失的分类任务。