【问题标题】:Why mean used instead of sum in loss functions?为什么在损失函数中使用均值而不是总和?
【发布时间】:2019-05-10 19:55:54
【问题描述】:

为什么在损失函数中使用mean而不是sum?

即有什么理由首选这个

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

到这里

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

在 Keras 源代码中也使用了平均变体:

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

【问题讨论】:

  • 只是很好的做法,因为它出现在数学中。它们是等价的。

标签: tensorflow keras deep-learning loss-function


【解决方案1】:

我们通常计算损失以与其他人进行比较或尽可能减少损失。如果你只得到总和而不是平均值,结果将根据数据的数量而变化,那么很难本能地找到它是否很大。这就是为什么我们通常使用“均方误差”或“平均绝对误差”而不是它们的总和。

【讨论】:

    【解决方案2】:

    我想这主要是为了便于理解。当您对数据点的损失取平均值时,您将更好地了解模型的实际工作方式。

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

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

    在计算均方误差并减少 mean 时,您将得到一个绝对介于 0 和 20 之间的数字,告诉您每个学生离他/她有多远平均实际得分(应该预测)。这种直觉更容易理解,当将一个班级内所有学生的所有这些损失相加时,甚至是大学内所有学生的损失——假设学院只有两个班级。

    但是,如果您只是想知道它们将如何影响神经网络的学习过程,我会说这不会有太大区别。因为即使使用sum 减少,您的网络也会优化以最小化损失函数,以便在接下来的步骤中获得较小的数字(summean),

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-27
      • 2016-08-26
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      • 2022-01-07
      相关资源
      最近更新 更多