在训练CNN模型时,在每个时代实际上是否有可能减少损失和降低准确度?我在训练时得到以下结果 .
有人可以解释为什么会发生这种情况的可能原因吗?
谢谢!
至少有5个可能导致此类行为的原因:
Solutions: 为了处理这些示例,我建议您使用渐变剪辑(您可以在优化器中添加此选项) . 如果您想检查是否发生这种现象 - 您可以检查您的损失分布(从训练集中丢失个别示例)并查找异常值 .
Solution: 尝试增加模型容量 - 通常你有一组非常相似的图像 - 增加表达能力可能有助于区分类似的例子 . 但要注意过度拟合 . 另一种解决方案是在训练中尝试this策略 . 如果要检查是否发生这种现象 - 请检查各个示例的损失分布 . 如果分布偏向更高的值 - 您可能会受到 bias 的影响 .
Solution: 再一次 - 渐变剪裁 . 第二件事 - 耐心,试着让你的模型更多的时代 . 模型应该在进一步的培训阶段学到更多细微之处 . 当然 - 尝试通过分配 sample_weights 或 class_weights 来进行课堂 balancer . 如果您想检查是否发生这种现象 - 请检查您的 class 分布 .
sample_weights
class_weights
Solution: 添加 categorical_crossentropy 作为指标,观察它是否也在减少 . 如果不是 - 那么这意味着你的正则化过于严格 - 试着分配更少的权重惩罚 .
categorical_crossentropy
Batch Normalization - 由于这种技术,您可以防止您的模型彻底改变内部网络激活 . 这使得培训更加稳定和高效 . 如果批量较小,这也可能是规范模型的真正方法 .
Gradient clipping - 这使您的模型训练更加稳定和高效 .
Reduce bottleneck effect - 阅读this精彩纸张并检查您的型号是否可能受到 bottleneck problem 的影响 .
Add auxiliary classifiers - 如果您从头开始培训您的网络 - 这应该使您的功能更有意义,您的培训 - 更快,更高效 .
有可能在降低精度的同时降低损失,但它远未被称为良好的模型 . 在模型的每个转换层使用 Batch normalization 可以解决这个问题 .
是的,这是可能的 .
为了提供可能发生这种情况的直观示例,假设您的分类器输出的类A和B的概率大致相同,而A类的总体密度最高 . 在此设置中,最小化更改模型的参数可能会将B转换为最可能的类 . 这种效应会使cross-entropy loss变化最小,因为它直接取决于概率分布,但是准确性会明显注意到变化,因为它取决于输出概率分布的argmax .
作为结论,最小化交叉熵损失并不总是意味着提高准确度,主要是因为交叉熵是平滑函数,而精度是非平滑的 .
3 回答
至少有5个可能导致此类行为的原因:
Solutions: 为了处理这些示例,我建议您使用渐变剪辑(您可以在优化器中添加此选项) . 如果您想检查是否发生这种现象 - 您可以检查您的损失分布(从训练集中丢失个别示例)并查找异常值 .
Solution: 尝试增加模型容量 - 通常你有一组非常相似的图像 - 增加表达能力可能有助于区分类似的例子 . 但要注意过度拟合 . 另一种解决方案是在训练中尝试this策略 . 如果要检查是否发生这种现象 - 请检查各个示例的损失分布 . 如果分布偏向更高的值 - 您可能会受到 bias 的影响 .
Solution: 再一次 - 渐变剪裁 . 第二件事 - 耐心,试着让你的模型更多的时代 . 模型应该在进一步的培训阶段学到更多细微之处 . 当然 - 尝试通过分配
sample_weights
或class_weights
来进行课堂 balancer . 如果您想检查是否发生这种现象 - 请检查您的 class 分布 .Solution: 添加
categorical_crossentropy
作为指标,观察它是否也在减少 . 如果不是 - 那么这意味着你的正则化过于严格 - 试着分配更少的权重惩罚 .Batch Normalization - 由于这种技术,您可以防止您的模型彻底改变内部网络激活 . 这使得培训更加稳定和高效 . 如果批量较小,这也可能是规范模型的真正方法 .
Gradient clipping - 这使您的模型训练更加稳定和高效 .
Reduce bottleneck effect - 阅读this精彩纸张并检查您的型号是否可能受到 bottleneck problem 的影响 .
Add auxiliary classifiers - 如果您从头开始培训您的网络 - 这应该使您的功能更有意义,您的培训 - 更快,更高效 .
有可能在降低精度的同时降低损失,但它远未被称为良好的模型 . 在模型的每个转换层使用 Batch normalization 可以解决这个问题 .
是的,这是可能的 .
为了提供可能发生这种情况的直观示例,假设您的分类器输出的类A和B的概率大致相同,而A类的总体密度最高 . 在此设置中,最小化更改模型的参数可能会将B转换为最可能的类 . 这种效应会使cross-entropy loss变化最小,因为它直接取决于概率分布,但是准确性会明显注意到变化,因为它取决于输出概率分布的argmax .
作为结论,最小化交叉熵损失并不总是意味着提高准确度,主要是因为交叉熵是平滑函数,而精度是非平滑的 .