【发布时间】:2018-12-15 04:50:58
【问题描述】:
我在单层 CNN、二元分类模型中观察到以下模式:
- 随着步数的增加,训练损失减少,而开发损失增加
- 训练精度会随着步数的增加而提高,而开发精度会随着步数的增加而降低
根据过去的 SO 问题和文献回顾,这些模式似乎表明过度拟合(模型在训练中表现良好,但无法推广到新示例)。
下图说明了与训练步数有关的损失和准确率。
在两者中,
- 橙色线表示开发集性能的总结。
- 蓝色线表示训练集性能的总结。
我考虑过的传统疗法,以及我对它们的观察:
- 添加 L2 正则化:我尝试了许多 L2 正则化系数——从 0.0 到 4.5;在第 5000 步时,所有这些测试在损失和准确率方面都产生了相似的模式。
- 交叉验证 :交叉验证的作用似乎在网上被广泛误解。正如this 回答所述,交叉验证是用于模型检查,而不是模型构建。事实上,交叉验证将是一种检查模型是否泛化良好的方法。实际上,我展示的图表来自 4 折交叉验证中的一个。如果我在所有折叠中观察到类似的损失/准确性模式,那么除了确认模型不能很好地泛化之外,交叉验证还能提供什么其他见解?
- 提前停止:这似乎是最直观的,但损失图似乎表明只有在观察到开发集损失的分歧后损失才会趋于平稳;那么,这个早停的起点似乎并不容易决定。
- 数据:我可用的标记数据量是有限的,因此目前无法针对更多数据进行训练。
说了这么多,我要问的是:
- 如果在损失和准确率中观察到的模式确实表明过度拟合,是否还有其他方法可以抵消我没有考虑过的过度拟合?
- 如果这些模式不表示过度拟合,它们还意味着什么?
谢谢 - 任何见解将不胜感激。
【问题讨论】:
标签: python tensorflow machine-learning neural-network deep-learning