为什么不对分类问题使用均方误差?
Why not use mean squared error for classification problems?
我正在尝试使用 LSTM 解决一个简单的二元分类问题。我试图找出网络的正确损失函数。问题是,当我使用二元交叉熵作为损失函数时,与使用均方误差 (MSE) 函数相比,训练和测试的损失值相对较高。
经过研究,我发现了二元交叉熵应该用于分类问题和 MSE 用于回归问题的理由。但是,就我而言,使用 MSE 进行二元分类时,我获得了更高的准确度和更小的损失值。
我不确定如何证明这些获得的结果。为什么不对分类问题使用均方误差?
我想分享我对 MSE 和二进制 cross-entropy 函数的理解。
在分类的情况下,我们取每个训练实例的概率argmax
。
现在,考虑一个二元分类器的示例,其中模型预测的概率为 [0.49, 0.51]
。在这种情况下,模型将 return 1
作为预测。
现在,假设实际标签也是1
。
在这种情况下,如果使用MSE,它将return 0
作为损失值,而二进制cross-entropy将return一些"tangible" 值。
并且,如果以某种方式使用所有数据样本,训练模型预测相似类型的概率,则二进制 cross-entropy 有效地 return 一个大的累积损失值,而 MSE 将 return a 0
.
根据 MSE,这是一个完美的模型,但实际上,它并不是那么好的模型,这就是为什么我们不应该使用 MSE 进行分类。
我想用一个例子来展示它。
假设一个 6 class class化问题。
假设,
真实概率 = [1, 0, 0, 0, 0, 0]
案例一:
预测概率 = [0.2, 0.16, 0.16, 0.16, 0.16, 0.16]
案例二:
预测概率 = [0.4, 0.5, 0.1, 0, 0, 0]
Case1和Case 2的MSE分别为0.128和0.1033
尽管案例 1 正确预测了实例 class 1,但案例 1 中的损失高于案例 2 中的损失。
尽管@nerd21 给出了一个很好的例子“MSE 因为损失函数对 6-class classification 不利”,但二进制 classification 并不相同。
让我们只考虑二进制class化。标签是[1, 0]
,一个预测是h1=[p, 1-p]
,另一个预测是h2=[q, 1-q]
,因此他们的MSE是:
L1 = 2*(1-p)^2, L2 = 2*(1-q)^2
假设 h1 是错误的 classifcation,即 p<1-p
,因此 0<p<0.5
假设 h2 是正确的-class化,即 q>1-q
,因此 0.5<q<1
那么 L1-L2=2(p-q)(p+q-2) > 0
是肯定的:
p < q
是肯定的;
q + q < 1 + 0.5 < 1.5
,因此 p + q - 2 < -0.5 < 0
;
因此 L1-L2>0
,即 L1 > L2
这意味着对于以 MSE 作为损失函数的二进制 class化,错误的class化肯定会比正确的class化具有更大的损失。
答案就在你的问题中。二元交叉熵损失的值高于rmse损失。
案例一(大误差):
假设您的模型预测为 1e-7,而实际标签为 1。
二进制交叉熵损失将为 -log(1e-7) = 16.11.
均方根误差将为 (1-1e-7)^2 = 0.99.
案例2(小错误)
假设您的模型预测为 0.94,实际标签为 1。
二进制交叉熵损失将为 -log(0.94) = 0.06.
均方根误差将为 (1-1e-7)^2 = 0.06.
在情况 1 中,当预测与现实相去甚远时,BCELoss 与 RMSE 相比具有更大的价值。当你有很大的损失值时,你就会有很大的梯度值,因此优化器会在与梯度相反的方向上迈出更大的一步。这样会相对减少损失。
我正在尝试使用 LSTM 解决一个简单的二元分类问题。我试图找出网络的正确损失函数。问题是,当我使用二元交叉熵作为损失函数时,与使用均方误差 (MSE) 函数相比,训练和测试的损失值相对较高。
经过研究,我发现了二元交叉熵应该用于分类问题和 MSE 用于回归问题的理由。但是,就我而言,使用 MSE 进行二元分类时,我获得了更高的准确度和更小的损失值。
我不确定如何证明这些获得的结果。为什么不对分类问题使用均方误差?
我想分享我对 MSE 和二进制 cross-entropy 函数的理解。
在分类的情况下,我们取每个训练实例的概率argmax
。
现在,考虑一个二元分类器的示例,其中模型预测的概率为 [0.49, 0.51]
。在这种情况下,模型将 return 1
作为预测。
现在,假设实际标签也是1
。
在这种情况下,如果使用MSE,它将return 0
作为损失值,而二进制cross-entropy将return一些"tangible" 值。
并且,如果以某种方式使用所有数据样本,训练模型预测相似类型的概率,则二进制 cross-entropy 有效地 return 一个大的累积损失值,而 MSE 将 return a 0
.
根据 MSE,这是一个完美的模型,但实际上,它并不是那么好的模型,这就是为什么我们不应该使用 MSE 进行分类。
我想用一个例子来展示它。 假设一个 6 class class化问题。
假设, 真实概率 = [1, 0, 0, 0, 0, 0]
案例一: 预测概率 = [0.2, 0.16, 0.16, 0.16, 0.16, 0.16]
案例二: 预测概率 = [0.4, 0.5, 0.1, 0, 0, 0]
Case1和Case 2的MSE分别为0.128和0.1033
尽管案例 1 正确预测了实例 class 1,但案例 1 中的损失高于案例 2 中的损失。
尽管@nerd21 给出了一个很好的例子“MSE 因为损失函数对 6-class classification 不利”,但二进制 classification 并不相同。
让我们只考虑二进制class化。标签是[1, 0]
,一个预测是h1=[p, 1-p]
,另一个预测是h2=[q, 1-q]
,因此他们的MSE是:
L1 = 2*(1-p)^2, L2 = 2*(1-q)^2
假设 h1 是错误的 classifcation,即 p<1-p
,因此 0<p<0.5
假设 h2 是正确的-class化,即 q>1-q
,因此 0.5<q<1
那么 L1-L2=2(p-q)(p+q-2) > 0
是肯定的:
p < q
是肯定的;
q + q < 1 + 0.5 < 1.5
,因此 p + q - 2 < -0.5 < 0
;
因此 L1-L2>0
,即 L1 > L2
这意味着对于以 MSE 作为损失函数的二进制 class化,错误的class化肯定会比正确的class化具有更大的损失。
答案就在你的问题中。二元交叉熵损失的值高于rmse损失。
案例一(大误差):
假设您的模型预测为 1e-7,而实际标签为 1。
二进制交叉熵损失将为 -log(1e-7) = 16.11.
均方根误差将为 (1-1e-7)^2 = 0.99.
案例2(小错误)
假设您的模型预测为 0.94,实际标签为 1。
二进制交叉熵损失将为 -log(0.94) = 0.06.
均方根误差将为 (1-1e-7)^2 = 0.06.
在情况 1 中,当预测与现实相去甚远时,BCELoss 与 RMSE 相比具有更大的价值。当你有很大的损失值时,你就会有很大的梯度值,因此优化器会在与梯度相反的方向上迈出更大的一步。这样会相对减少损失。