深度学习/CNN中为何用验证集实现early stopping而非训练/测试集?
关于Early Stopping选用验证集的原因分析
为什么不能用训练集?
训练集是模型更新参数的直接数据来源,训练过程中模型会不断拟合训练集的所有细节——包括数据里的噪声。用训练集指标做早停判断的话,模型会一直训练到训练集性能不再提升,这时候模型大概率已经严重过拟合,只能在训练集上表现良好,面对新数据完全失效。
为什么不能用测试集?
测试集的唯一作用是最终评估模型的真实泛化能力,它必须完全独立于训练流程。如果把测试集拿来做早停判断,相当于让模型在训练过程中间接“学习”了测试集的特征,最后用测试集评估的结果会失真,没法反映模型在未知数据上的真实表现,本质是一种数据泄露的作弊行为。
为什么选验证集?
验证集是从原始训练数据中拆分出来的、训练时不会用来更新模型参数的子集。它既能模拟“未知数据”的分布,又不会泄露测试集的信息。早停的核心目标是在模型过拟合前及时停止:当训练集的性能还在提升,但验证集的性能开始停滞甚至下降时,说明模型已经开始记住训练集的噪声,泛化能力开始下滑,这时候停止训练就能保留泛化能力最优的模型状态。
和验证集指标的关联
当然有关联,早停的判断逻辑完全依赖验证集的指标(比如损失值、准确率)。常见的实现逻辑是:连续若干个epoch里,验证集的目标指标(比如损失不再降低、准确率不再提升)没有改善,就触发停止训练,同时保存验证集表现最好的那版模型参数。
内容的提问来源于stack exchange,提问作者PrertoQuebas
相关产品推荐
相关产品推荐

