前言

一般说到多分类问题,我们很自然地会采用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。下面写出完整的梯度公式对比:
Rethinking分类&回归损失
可以看到,交叉熵损失对应的梯度非常简洁。
举个实例,[z1,z2]=[0.8,0.2][z_1,z_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

对于分类问题,交叉熵损失和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的回归任务,不能转换为基于交叉熵损失的分类任务。

相关文章: