我正在尝试使用RNN LSTM实现一个简单的二进制分类问题,但仍然无法找出网络的正确损耗函数。问题是,当我使用cross_binary_entophy作为损失函数时,与使用mean_square_error函数相比,用于训练和测试的损失值相对较高。
在研究中,我发现有理由将二元交叉熵用于分类问题,将MSE用于回归问题。但是,就我而言,使用MSE进行二进制分类时,我获得了更好的精度和更低的损失值。
我不确定如何证明这些结果。对AI和ML技术来说是全新的。
答案 0 :(得分:1)
喜欢分享我对 MSE 和 cross_binary_entrophy 的理解。
在分类的情况下,我们采用每个训练实例的概率的 argmax()。
现在考虑一个二进制分类器的示例,其中模型将概率预测为(.49,.51)。在这种情况下,模型将返回“ 1”作为预测。
Assume if actual label is also "1".
在这种情况下,如果使用MSE,它将返回 0 作为损失值,而cross_binary_entrophy将返回一些有形值。 而且,如果以某种方式对所有数据样本进行训练后的模型预测出相似的概率类型,则cross_binary_entrophy有效地返回较大的累积损失值,而MSE将返回 0 。
According to MSE, its a perfect model, but in actuality its not a that good model, that's why we should not use MSE for classification.
答案 1 :(得分:0)
我想用一个例子来展示它。 假设有6类分类问题。
假设, 真实概率= [1、0、0、0、0、0]
情况1: 预测的概率= [0.2,0.16,0.16,0.16,0.16,0.16]
案例2: 预测的概率= [0.4,0.5,0.1,0,0,0]
案例1和案例2的MSE分别为 0.128 和 0.1033 。
尽管案例1正确地预测了实例的类别1,案例1的损失高于案例2的损失。
答案 2 :(得分:0)
尽管@ nerd21给出了一个很好的例子,“ MSE的损失函数对6类分类不利”,但对于二进制分类却不一样。
我们只考虑二进制分类。标签为MySubject
.Buffer(() => MySubject.Throttle(TimeSpan.FromSeconds(1))
.Subscribe(() => ... )
,一个预测为[1, 0]
,另一个预测为h1=[p, 1-p]
,因此他们的MSE为:
h2=[q, 1-q]
假设h1是错误分类,即L1 = 2*(1-p)^2, L2 = 2*(1-q)^2
,因此p<1-p
假设h2是正确分类,即0<p<0.5
,因此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
这意味着对于以MSE作为损失函数的二进制分类,错误分类肯定会带来比正确分类更大的损失。
答案 3 :(得分:0)
答案就在您的问题中。二元交叉熵损失的价值高于rmse损失。
假设您的模型预测了 1e-7,而实际标签为 1。
二元交叉熵损失将为 -log(1e-7) = 16.11。
均方根误差将为 (1-1e-7)^2 = 0.99。
假设您的模型预测为 0.94,而实际标签为 1。
二元交叉熵损失将为 -log(0.94) = 0.06。
均方根误差将为 (1-1e-7)^2 = 0.06。
在预测与现实相去甚远的情况 1 中,BCELoss 与 RMSE 相比具有更大的值。当损失值较大时,梯度值也较大,因此优化器将在与梯度相反的方向上迈出更大的一步。从而相对减少损失。