首页 文章

损失与准确性之间的关系

提问于
浏览
4

在训练CNN模型时,在每个时代实际上是否有可能减少损失和降低准确度?我在训练时得到以下结果 .

enter image description here

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

谢谢!

3 回答

  • 2

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

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

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

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

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

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

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

    • Too strong regularization: 如果您将正则化设置得过于严格 - 培训过程主要集中在使您的权重具有比实际学习有趣见解更小的规范 .

    Solution: 添加 categorical_crossentropy 作为指标,观察它是否也在减少 . 如果不是 - 那么这意味着你的正则化过于严格 - 试着分配更少的权重惩罚 .

    • Bad model design - 这种行为可能是由错误的模型设计引起的 . 为了改进您的模型,有一些可能适用的良好实践:

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

    Gradient clipping - 这使您的模型训练更加稳定和高效 .

    Reduce bottleneck effect - 阅读this精彩纸张并检查您的型号是否可能受到 bottleneck problem 的影响 .

    Add auxiliary classifiers - 如果您从头开始培训您的网络 - 这应该使您的功能更有意义,您的培训 - 更快,更高效 .

  • 8

    有可能在降低精度的同时降低损失,但它远未被称为良好的模型 . 在模型的每个转换层使用 Batch normalization 可以解决这个问题 .

  • 2

    是的,这是可能的 .

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

    作为结论,最小化交叉熵损失并不总是意味着提高准确度,主要是因为交叉熵是平滑函数,而精度是非平滑的 .

相关问题