损失函数选择

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了损失函数选择相关的知识,希望对你有一定的参考价值。

参考技术A

机器学习算法主要解决 分类问题 回归问题 两大类,因此损失函数主要也可以分成这两大类别。

hinge loss通常被用于最大间隔算法(Maximum margin),例如SVM支持向量机算法。

当样本被正确分类( )时,损失函数的值为0,否则损失函数值为 。

而 的绝对值表示的是样本距离决策边界的远近程度,绝对值越大,表示样本距离决策越远。

hinge损失函数表示分类器不仅需要正确分类,而且需要确信度足够高时,损失才会是0,即hinge loss对学习的要求更高。

交叉熵刻画两个概率分布之间的距离,因此将交叉熵作为损失函数可以很好的刻画真实数据集和训练测试集之间的相似性。

现在有一个样本集中两个概率分布p,q,其中p为真实分布,q为非真实分布。假如,按照真实分布p来衡量识别一个样本所需要的编码长度的期望为:

但是,如果采用错误的分布q来表示来自真实分布p的平均编码长度,则应该是:

此时就将 称之为交叉熵。

交叉熵损失函数为:

当实际标签为 1时,函数的只剩前半部分,而当实际标签是为 0 时,函数只剩后半部分,即我们只是把对真实值类别的实际预测概率的对数相乘。

均方误差(MSE)是最常用的回归损失函数。MSE是目标变量与预测值之间距离平方之和。

平均绝对误差(MAE)是另一种用于回归模型的损失函数。MAE是目标变量和预测变量之间差异绝对值之和。

为啥我要选择与我的指标不同的损失函数?

【中文标题】为啥我要选择与我的指标不同的损失函数?【英文标题】:Why would I choose a loss-function differing from my metrics?为什么我要选择与我的指标不同的损失函数? 【发布时间】:2019-10-31 06:19:30 【问题描述】:

当我浏览互联网上的教程或在 SO 上发布的模型时,我经常看到损失函数与用于评估模型的指标不同。这可能看起来像:

model.compile(loss='mse', optimizer='adadelta', metrics=['mae', 'mape'])

无论如何,按照这个例子,我为什么不优化 'mae''mape' 作为损失而不是 'mse' 当我什至不关心我的指标中的 'mse' 时(假设这会是我的模型)?

【问题讨论】:

这个answer 可能会有所帮助。 【参考方案1】:

这是一个很好的问题。

了解您的建模后,您应该使用便利损失函数来最小化以实现您的目标。 但是为了评估您的模型,您将使用指标来报告使用某些指标的泛化质量。

由于许多原因,评估部分可能与优化标准不同。

举个例子,在生成对抗网络中,许多论文表明 mse 损失最小化会导致更模糊的图像,尽管 ma​​e 有助于获得更清晰的输出。您可能希望在评估中跟踪它们,以了解它如何真正改变事物。

另一种可能的情况是当您有自定义损失,但您仍希望根据准确性报告评估。

我可以想到可能的情况,您可以将损失函数设置为收敛得更快、更好等,但您也可以使用其他一些指标来衡量模型的质量。

希望这能有所帮助。

【讨论】:

【参考方案2】:

在许多情况下,您感兴趣的指标可能不可微,因此您不能将其用作损失,例如准确性就是这种情况,使用交叉熵损失代替,因为它是可微的。

对于已经可区分的指标,您只想从学习过程中获得更多信息,因为每个指标衡量的东西都不同。例如,MSE 的比例是数据/预测比例的平方,因此要获得相同的比例,您必须使用 RMSE 或 MAE。 MAPE 会为您提供相对(而非绝对)误差,因此所有这些指标都会衡量可能感兴趣的不同内容。

在准确度方面,使用此指标是因为它很容易被人类解释,而交叉熵损失则不太直观。

【讨论】:

争论可微分很有帮助,谢谢!在我将此作为正确答案之前,我想问您是否也可以对手头的示例(在问题中)提供一些见解:当度量和损失都是可微的时,为什么我要选择第三个选项作为损失?我并不是说在每个指标都表达不同的东西的情况下。我的意思是:当我选择 mae 作为指标时,因为它表达了我想要的,为什么不优化 mae 作为损失呢? @Markus 在这种情况下,没有什么能阻止您将 mae 优化为损失 @MatiasValdenegro 实际上还应该考虑与输出激活函数的兼容性。例如,使用带有 sigmoid/softmax 的交叉熵损失函数作为输出激活函数效果很好,因为它可以平滑梯度。您可以在 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 所著的 Deep Learning Ch.6.2 一书中查看它。或者在线搜索。【参考方案3】:

当我遇到一个使用 mae 作为损失的 GAN 实现时,我刚刚问了自己这个问题。我已经知道某些指标是不可微的,并认为 mae 是一个 ecample,尽管仅在 x=0 时。那么是否有一个例外,比如假设斜率为 0?这对我来说很有意义。

我还想补充一点,我学会了使用 mae 而不是 mae,因为小的误差在平方时会保持较小,而较大的误差会在相对幅度上增加。因此,mse 会受到更大的惩罚。

【讨论】:

以上是关于损失函数选择的主要内容,如果未能解决你的问题,请参考以下文章

机器学习大牛是如何选择回归损失函数的?

为啥我要选择与我的指标不同的损失函数?

机器学习中常见的损失函数

交叉熵函数(Cross Entropy)与均方误差损失函数(MSE)对比?为什么选择交叉熵函数?

损失函数MSECross entropyHinge Loss-杂记

损失函数MSECross entropyHinge Loss-杂记