为什么我会选择与我的指标不同的损失函数?
Why would I choose a loss-function differing from my metrics?
当我浏览 Internet 上的教程或在 SO 上发布的模型时,我经常看到损失函数与用于评估模型的指标不同。这可能看起来像:
model.compile(loss='mse', optimizer='adadelta', metrics=['mae', 'mape'])
无论如何,按照这个例子,当我什至不关心 'mse'
时,为什么我不优化 'mae'
或 'mape'
而不是 'mse'
作为损失在我的指标中(假设这将是我的模型)?
这是个很好的问题。
了解您的建模,您应该使用方便的损失函数来最小化以实现您的目标。
但是为了评估您的模型,您将使用指标来报告您使用某些指标的泛化质量。
由于多种原因,评估部分可能与优化标准不同。
举个例子,在生成对抗网络中,许多论文表明 mse 损失最小化会导致更多模糊图像,尽管 mae有助于获得更清晰的输出。您可能想在您的评估中跟踪它们两者,以了解它如何真正改变事情。
另一种可能的情况是当你有一个自定义的损失,但你仍然想报告基于准确性的评估。
我能想到可能的情况,您可以将损失函数设置为收敛得更快、更好等,但您也可以使用其他一些指标来衡量模型的质量。
希望对您有所帮助。
在许多情况下,您感兴趣的指标可能不可微分,因此您不能将其用作损失,例如,准确性就是这种情况,使用交叉熵损失代替,因为它是可微分的。
对于已经可区分的指标,您只想从学习过程中获取额外的信息,因为每个指标衡量的是不同的东西。例如,MSE 的尺度是 data/predictions 尺度的平方,因此要获得相同的尺度,您必须使用 RMSE 或 MAE。 MAPE 为您提供相对(而非绝对)误差,因此所有这些指标衡量的都是不同的东西,您可能会感兴趣。
在准确性方面,使用此指标是因为它很容易被人类解释,而交叉熵损失的解释则不太直观。
当我遇到一个使用 mae 作为损失的 GAN 实现时,我刚刚问了自己这个问题。我已经知道有些指标是不可微分的,并且认为 mae 是一个例子,尽管只是在 x=0 处。那么是否存在像假设斜率为 0 这样的例外情况?这对我来说很有意义。
我还想补充一点,我学会了使用 mae 而不是 mae,因为较小的误差在平方时会保持较小,而较大的误差会增加相对幅度。因此,更大的 mse 受到更多的惩罚。
当我浏览 Internet 上的教程或在 SO 上发布的模型时,我经常看到损失函数与用于评估模型的指标不同。这可能看起来像:
model.compile(loss='mse', optimizer='adadelta', metrics=['mae', 'mape'])
无论如何,按照这个例子,当我什至不关心 'mse'
时,为什么我不优化 'mae'
或 'mape'
而不是 'mse'
作为损失在我的指标中(假设这将是我的模型)?
这是个很好的问题。
了解您的建模,您应该使用方便的损失函数来最小化以实现您的目标。 但是为了评估您的模型,您将使用指标来报告您使用某些指标的泛化质量。
由于多种原因,评估部分可能与优化标准不同。
举个例子,在生成对抗网络中,许多论文表明 mse 损失最小化会导致更多模糊图像,尽管 mae有助于获得更清晰的输出。您可能想在您的评估中跟踪它们两者,以了解它如何真正改变事情。
另一种可能的情况是当你有一个自定义的损失,但你仍然想报告基于准确性的评估。
我能想到可能的情况,您可以将损失函数设置为收敛得更快、更好等,但您也可以使用其他一些指标来衡量模型的质量。
希望对您有所帮助。
在许多情况下,您感兴趣的指标可能不可微分,因此您不能将其用作损失,例如,准确性就是这种情况,使用交叉熵损失代替,因为它是可微分的。
对于已经可区分的指标,您只想从学习过程中获取额外的信息,因为每个指标衡量的是不同的东西。例如,MSE 的尺度是 data/predictions 尺度的平方,因此要获得相同的尺度,您必须使用 RMSE 或 MAE。 MAPE 为您提供相对(而非绝对)误差,因此所有这些指标衡量的都是不同的东西,您可能会感兴趣。
在准确性方面,使用此指标是因为它很容易被人类解释,而交叉熵损失的解释则不太直观。
当我遇到一个使用 mae 作为损失的 GAN 实现时,我刚刚问了自己这个问题。我已经知道有些指标是不可微分的,并且认为 mae 是一个例子,尽管只是在 x=0 处。那么是否存在像假设斜率为 0 这样的例外情况?这对我来说很有意义。
我还想补充一点,我学会了使用 mae 而不是 mae,因为较小的误差在平方时会保持较小,而较大的误差会增加相对幅度。因此,更大的 mse 受到更多的惩罚。