为什么在损失函数中用平均值代替总和?

时间:2018-12-09 21:23:51

标签: tensorflow keras deep-learning loss-function

为什么在损失函数中用平均值代替总和?

即有什么理由为什么会优先使用

Sigma

对此

def mae_loss(y_true, y_pred):
    loss = tf.reduce_mean(tf.abs(y_true-y_pred))
    return loss

在Keras源代码中,还使用了均值变体:

https://github.com/keras-team/keras/blob/5a7a789ee9766b6a594bd4be8b9edb34e71d6500/keras/losses.py#L17

2 个答案:

答案 0 :(得分:2)

我们通常计算损失以与他人比较或尽量减少损失。如果只求和而不是求平均值,结果将根据数据数量而有所不同,那么很难发现它是否本能地很大。这就是为什么我们通常使用“均方误差”或“平均绝对误差”代替它们的总和。

答案 1 :(得分:0)

我想这主要是为了易于理解。当对损失的数据点取平均值时,您将对模型的实际运行情况有更好的了解。

例如,假设您有一项任务是预测两个大学班级(例如我们的批次)中30名学生的成绩。因此,每个班级(A和B)都有30名学生,他们的成绩是真实的标签。

如果要根据神经网络对该任务进行建模,您将拥有一个张量[2, 30]的张量,其中每个元素都是一个数字,假设介于0(最小)和20(最大)之间。最高)作为您的真理。您的网络还将输出具有与坡度预测相同形状(即[2,30])的张量。

在计算均方误差并减少mean时,您将得到一个肯定在0到20之间的数字,告诉您每个学生距他的距离有多远/她的真实分数(应该预测)平均。这种直觉更容易理解:将一个班级内所有学生甚至学院内所有学生的所有损失相加时,只需假定学院只有两个班级即可。

但是,如果您只是想知道它们将如何影响神经网络的学习过程,我想那应该没什么大不同。由于即使使用sum缩减,您的网络也会进行优化以最小化损失函数,从而在后续步骤中获得更低的数字(summean),