神经网络中的非对称成本函数

机器算法验证 r 深度学习 损失函数
2022-03-27 01:07:08

我正在尝试建立一个基于不对称损失函数的深度神经网络,以惩罚低估时间序列。最好使用 LINEX 损失函数(Varian 1975): La,b(y,y^)=b(ea(yy^)+a(yy^)1),with a0 and b>0

但是我找不到任何这样做的研究论文,而且关于其他不对称损失函数的论文也很少。

该函数是可微的,并且对于 a 的值给出合理的结果0使用neuralnet(),其损失函数近似于平方误差函数,但对于增加 a 值的结果非常差。

这或许可以解释为什么在神经网络中关于不对称损失函数的论文并不多,但为什么当不对称变大时它的表现如此糟糕?

编辑

对于不对称损失函数,我的意思是有偏差的损失函数,并且对于负误差和正误差具有不同的斜率。下面给出例子。 一些非对称损失函数的例子

关于我的网络:我使用neuralnet()包测试了几个选项和 1 个隐藏层,用于 sigmoid 和 tanh 激活函数。最后我使用了一个身份函数。在上述 LINEX 损失函数中,y 是期望的输出,并且y^来自网络的激活输出。我已经对所有 8 个输入和输出 y 进行了最小最大归一化。

随着声明

如果一个0,损失函数近似于平方误差函数 我的意思是 LINEX 损失函数的形式看起来类似于平方误差函数(对称),请参见下图 LINEX 损失的示例,其中 b = 1 和 a = 0.001 在此处输入图像描述

重申我的问题:是否有更多研究适用于神经网络(最好是 LINEX)中的不对称损失函数?如果不是,为什么?因为它被广泛用于其他模型类型。

3个回答

这或许可以解释为什么关于不对称损失函数的论文并不多。

这不是真的。交叉熵在大多数分类问题(以及非标准分类问题,例如自动编码器训练和分割问题)中用作损失函数,并且它不是对称的。

很少有论文使用不对称损失函数是不正确的。例如,交叉熵损失是不对称的,并且有大量论文使用具有交叉熵损失的神经网络。铰链损失也是如此。

如果使用非对称损失函数,神经网络必然表现不佳是不正确的。

神经网络性能不佳的原因有很多。如果您想测试您的损失是否是导致问题的原因,您可以将不对称损失替换为与感兴趣的制度大致相等的对称损失。例如,函数的泰勒级数逼近f(x)=b(eax+ax1)f(x)=b+2abx+12a2bx2+O(x3),因此您可以尝试使用对称损失函数训练您的网络g(y,y^)=b+12a2b(yy^)2看看效果如何。我猜想它会表现得差不多,但这是你可以凭经验测试的。

对网络的输出进行最小-最大归一化是不寻常的。我什至不确定这会涉及什么。此外,如果您使用的是 sigmoid 激活函数,那么您的输出应该已经标准化到 -1..1 以内,因此不清楚为什么要对它们进行标准化。

众所周知,sigmoid 和 tanh 激活函数通常不能很好地工作。训练可能非常缓慢,或者您可能会遇到死神经元的问题。现代网络通常使用不同的激活函数,例如 ReLu。

基于初始化、优化算法、学习率、网络架构等,有效地训练神经网络有很多细节。我认为您没有任何理由得出结论认为您观察到的糟糕表现必然与您的损失函数的不对称性有关。而且这里的问题可能不是调试网络的最佳方式(当然,这里提供的信息还不足以做到这一点,而且这样的问题将来不太可能引起其他人的兴趣)。

有一些使用非对称成本函数/损失函数的研究论文的例子。一个例子是发表在 International Journal for Forecasting 上的“Residual value predicting using asymmetric cost functions”。使用并比较了考虑非对称成本的各种估计方法——包括神经网络。

https://www.sciencedirect.com/science/article/abs/pii/S0169207018300335