损失与准确性之间的关系

时间:2017-12-29 16:10:48

标签: machine-learning neural-network deep-learning keras conv-neural-network

在训练CNN模型时,每个时期是否有可能减少损失并降低准确度? 我在训练时得到以下结果。

enter image description here

有人可以解释发生这种情况的可能原因吗?

谢谢!

4 个答案:

答案 0 :(得分:10)

至少有5个可能导致此类行为的原因:

  1. 异常值:假设您有10张完全相同的图片,其中9张属于 A 类,其中一张属于 B < / strong>即可。在这种情况下,由于大多数示例,模型将开始为此示例分配类 A 的概率很高。但是 - 来自异常值的信号可能会破坏模型的稳定性并降低准确性。从理论上讲,模型应该稳定,将分数 90%分配给 A ,但它可能会持续很多时代。

    解决方案:为了处理这些示例,我建议您使用渐变剪辑(您可以在优化器中添加此选项)。如果您想检查是否发生这种现象 - 您可以检查您的损失分布(从训练集中丢失个别示例)并查找异常值。

  2. 偏见:现在假设您有10张完全相同的图片,但其中5张已分配了类 A 和5 - 类 B 。在这种情况下,模型将尝试在这两个类上分配大约 50%-50%分布。现在 - 你的模型在这里可以达到最多50%的准确度 - 选择两个有效的一个类。

    解决方案:尝试增加模型容量 - 通常你有一组非常相似的图像 - 增加表达能力可能有助于区分类似的例子。但要注意过度拟合。另一种解决方案是在培训中尝试this策略。如果要检查是否发生这种现象 - 请检查各个示例的损失分布。如果分布偏向更高的值 - 您可能会遭受偏见

  3. 课程失衡:现在假设您的图片的 90%属于 A 类。在训练的早期阶段,您的模型主要集中在为几乎所有示例分配此类。这可能会使个人损失达到非常高的价值,并通过使预测分布更不稳定来破坏您的模型。

    解决方案:再次 - 渐变裁剪。第二件事 - 耐心,试着让你的模型更多的时代。模型应该在进一步的培训阶段学到更多细微之处。当然 - 通过分配sample_weightsclass_weights来尝试课堂平衡。如果您想检查是否发生这种现象 - 请检查您的班级分布。

  4. 过于强烈的正规化:如果你将正则化设置得过于严格 - 培训过程主要集中在让你的权重比实际学习有趣的见解更小的规范。

    解决方案:添加categorical_crossentropy作为指标,并观察它是否也在减少。如果不是 - 那么这意味着你的正规化太严格了 - 试着减去重量惩罚。

  5. 糟糕的模型设计 - 此类行为可能是由错误的模型设计引起的。为了改进您的模型,有一些可能适用的良好实践:

    批量规范化 - 由于这种技术,您可以防止您的模型彻底改变内部网络激活。这使得培训更加稳定和高效。如果批量较小,这也可能是规范模型的真正方法。

    渐变剪辑 - 这使您的模型训练更加稳定和高效。

    降低瓶颈效应 - 阅读this精彩论文并检查您的模型是否可能遇到瓶颈问题

    添加辅助分类器 - 如果您从头开始训练您的网络 - 这应该使您的功能更有意义,您的培训更快更有效。

答案 1 :(得分:2)

有可能在降低精度的同时降低损失,但它远未被称为良好的模型。在模型的每个转换层使用批量规范化可以解决此问题。

答案 2 :(得分:2)

是的,这是可能的。

为了提供一个直观的例子说明为什么会发生这种情况,假设您的分类器输出的概率大致相同 A B ,并且类 A < / em>总体密度最高。在此设置中,最小化更改模型的参数可能会将 B 转换为最可能的类。这种效应会使cross-entropy loss变化最小,因为它直接取决于概率分布,但是准确性会明显注意到变化,因为它取决于输出概率的 argmax 分布。

总之,最小化交叉熵损失并不总是意味着提高准确性,主要是因为交叉熵是一个平滑函数,而精度是不平滑的。

答案 3 :(得分:0)

这是可能的,因为损失函数也说明了预测的可信度,而准确性仅说明了正确性。下面的excel表格显示了一个示例,左侧损失和准确度都很低,右侧准确度增加,同时损失也增加了

选中spreadsheet自己尝试

enter image description here

这与使用softmax函数的多类分类相同

  • softmax-交叉熵作为损失函数
    enter image description here

  • 如果出现正面反应的可能性很高,则损失会很小

  • 预测时,我们选择概率最高的类别
  • 因此,即使对于所选类别的置信度较低,模型也可以学习提高准确性,只要该概率大于其他类别的概率即可。这样做会增加损耗,但可以提高准确性。
  • 但是对于训练集,损失总是在下降的趋势(如果使用批次GD,波动可能会波动)

希望这可以清楚说明为什么可行。这是我的直觉,如果有人对此不正确,欢迎您反馈