优化与训练

提前停止(early stopping)

/ UR-lee STOP-ing /

提前停止,是一种「见好就收」的纪律。模型在训练时,它在训练数据上的误差会一路下降——但到了某个点,它就不再真正地学习,而开始死记那些具体的样本,连同其中的噪声。提前停止盯着一份单独的验证集,一旦那上面的表现不再改善,就立刻叫停训练,哪怕你若让它继续跑,训练误差还会接着降。

其做法既简单又廉价。你留出一份模型从不在上面训练的验证集,每过一个轮次就查一次验证损失。只要它还在降,就继续。等它触底、开始回升——这是过拟合露头的标志——你就停下,并保留验证表现最佳那一刻的模型版本,而不是最后那一版。通常会允许一小段宽限期(「耐心」),免得一次带噪声的小回升就触发过早的叫停。

它是现有最实用的正则化手段之一:几乎不花什么代价,无需改动模型,又直接对准过拟合——办法就是干脆不在收益递减的那个点之后继续训练。麻烦在于,它完全依赖一份靠得住的验证集——如果那份集子没有代表性,或者你针对它调得太过火,你就可能在错误的时刻停下,或者反过来悄悄地对验证数据过拟合。

在50个轮次里,训练损失自始至终稳步下降。验证损失则降到第18个轮次,之后开始悄悄回升。提前停止保留第18轮的模型,丢掉其余的——后面那些轮次只是在死记训练数据里的怪癖,那会损害真实世界的表现。

在验证损失触底时停下,而不是在训练损失触底时。

提前停止只有在你用验证表现来判定「最佳」时才管用,绝不能用训练损失来判——训练损失几乎总是一路下降,一直降过模型已经开始过拟合的那个点。

又称
early termination提前停止早停早期停止