在神经网络中,为什么loss都是正数?

如果我有一个金额预测的神经网络,在普遍使用MSE或者L1损失的情况下:
假设 真实值为 2:
我的预测值为1或者为3, loss都是1,那网络为什么可以往2去预测呢?而不是往0或者4那边预测呢?

感谢

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7427642
  • 除此之外, 这篇博客: 【深度学习基础知识 - 02】交叉熵中的 为什么使用交叉熵而不是MSE等损失函数作为分类loss 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 最主要原因是交叉熵的梯度较为友好。如果用MSE计算loss,则输出的loss曲线是波动的,有很多局部的极值点,任务会演变成非凸优化问题,简单来说就是模型参数很容易进入到一个局部极值点出不来。使用交叉熵作为损失函数可以保证任务依然是凸优化问题,在求导梯度时候有很好的收敛特性。
  • 以下回答由chatgpt基于相关博客总结生成:

    答案:

    神经网络中使用MSE损失函数时,预测值与实际值的误差越大,在反向传播训练的过程中,各种参数调整的幅度就要更大,从而使训练更快收敛。但是当误差很大时,参数的梯度就会又减小了,而且MSE的梯度与sigmoid函数对z的偏导有关系,当sigmoid函数的偏导数接近于0的时候,w、b的梯度不会发生变化,即梯度消失,所以MSE在分类问题中不适用。

    提示可以考虑使用交叉熵损失函数,交叉熵的梯度中不再含有sigmoid的导数,有的是sigmoid的值和实际值之间的差,也就满足了误差越大下降的越快的要求。

    具体实现上可以直接使用tensorflow中的tf.keras.losses.CategoricalCrossentropy或者tf.keras.losses.BinaryCrossentropy损失函数。例如:

    import tensorflow as tf
    model.compile(optimizer='adam', loss=tf.keras.losses.BinaryCrossentropy())
    

    参考资料中还提到了交叉熵和均方误差在梯度计算中的区别,均方误差的梯度跟激活函数的梯度成正比,激活函数的梯度越大,误差越大参数的梯度就越大,训练收敛得就越快。但是交叉熵的梯度没有这个关系,而是满足了误差越大下降越快的要求。因此,在分类问题中广泛使用交叉熵损失函数,而在回归问题中使用均方误差损失函数。

    关于为什么神经网络的损失值总是正数,可以看作是损失函数设计的一种正则化约束,通过限制损失函数的取值范围,使得神经网络可以更好地完成任务。比如,线性回归模型的损失函数为MSE,它是所有误差平方的平均值,因此总是大于等于0。

    但是应该注意到,在一些特殊的情况下,神经网络的损失值可以为负数,比如在对某些指标进行最大化时,可以使用负对数似然损失函数,而对于某些任务例如异常检测等,需要最小化神经网络的重构误差,则可以使用负重构误差作为损失函数。

因为mse的计算公式里有平方,而L1是绝对值,所以loss值为正数。
至于为什么往2而不是往偏离的方向预测,可能是因为深度学习追求的是loss的最小化,所以会往真实值的方向进行预测。