概率回归的损失函数

数据挖掘 神经网络 回归 逻辑回归 损失函数 可能性
2021-10-03 13:09:07

我正在尝试使用神经网络预测概率,但无法确定哪个损失函数最好。交叉熵是我的第一个想法,但其他资源总是在标签所在的二进制分类问题的背景下谈论它{0,1},但在我的情况下,我有一个实际概率作为目标。这些选项之一显然是最好的,还是它们都有效,在极端 0/1 区域周围只有微小的差异?

假设 X 是我的模型最后一层的输出。

交叉熵:
目标*-日志(乙状结肠(X))+(1-目标)*-日志(1-乙状结肠(X))

Sigmoid 的均方误差:
(乙状结肠(X)-目标)2

钳位均方误差:
(X-目标)2

当我使用输出时,我将值限制在 [0,1].

3个回答

如果输出变量的域是离散的或连续的,而不是二元的,您还可以将 KL 散度视为计算预测概率分布与目标分布之间距离的损失,例如

这也很重要,因为在某些实现中,出于效率原因,交叉熵仅将索引作为目标变量而不是分布。pytorch 就是这种情况,例如看这个

如果目标是概率/比率(仅限于开区间 (0, 1) 的观察值),则 beta 回归是一个有用的模型。

Ferrari 和 Cribari-Neto 在他们的论文“建模率和比例的 Beta 回归”(2004 年)中对此进行了介绍。

鉴于您正在尝试预测标量概率值,您在问题中列出的交叉熵公式仅在目标变量是离散的情况下才有效。因此,如果您的问题是“预测从一副牌中抽出匹配牌的几率”,那就没问题了。

交叉熵和 MSE 之间的主要区别在于它们如何惩罚错误的预测。假设给定目标为 1,但预测为 0。在这种情况下,交叉熵实际上是未定义的,但随着预测接近 0,交叉熵损失呈指数级增长。另一方面,您的 MSE 只有 1。哪个更好,这取决于您的应用程序,如果您想避免较大的误差,似乎交叉熵更合适,反之亦然。

第二种和第三种方法的区别仅在于它们如何确保预测在 [0, 1] 范围内,一种使用 sigmoid 函数,另一种使用钳位。鉴于您使用的是神经网络,您应该避免使用钳位函数。钳位函数在钳位范围内与恒等函数相同,但在钳位范围外完全平坦。因此,该函数的梯度在钳位范围内为 1,但在钳位范围外为 0。正因为如此,当人们谈论“dead relu”时,你更有可能遇到同样的死神经问题。