Early Stopping | but when?

早停策略是防止过拟合的一种有效手段,通常基于验证集误差进行决策。然而,实际操作中,训练停止往往依赖于非系统的判断或者交互方式。文章讨论了验证集误差曲线的复杂性,提出了一系列停止标准,如超过阈值、验证损失与进度的比值、连续strip的增高等。研究表明,较晚停止的策略可能获得更好的泛化能力,但所需训练时间更长。选择停止策略时,需平衡效率、效果和鲁棒性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://page.mi.fu-berlin.de/prechelt/Biblio/stop_tricks1997.pdf

  1. 摘要
    1. early stop应该是validation-based,但实际中,总是基于an ad-hoc fashion或是training is stopped interactively
      1. 基于临时的策略或是交互的方式停止训练,交互的方式个人理解就是工程师观察loss等指标变化,人为的决定训练是否停止
    2. validation-based early stop
    3. 文章提出了a systematic fashion的标准
    4. 训练时间和泛化能力之间的trade-off
  2. early stop 不简单
    1. 为什么early stop
      1. 两个方法防止过拟合:
        1. 减少参数空间维度
          1. greedy constructive learning 不知道什么意思
          2. pruning 剪枝
          3. weight sharing 参数共享
        2. 减少每一维的有效size
          1. regularization 归一化
            1. weight decay
            2. early stop,reported 比归一化方法要好
    2. basic
    3. The uglyness of reality
      1. 实际中的验证集error变化曲线不是平滑的,可能是先上升后下降的,并且局部最小值也不止一个,figure2中的变化曲线就有16个局部最小点
      2. 400个epoch以后结束训练(过拟合开始显现)和45个epoch以后结束训练(到达第一个局部最小值)相比,训练时间长了7倍,但是验证集的error只下降了1.1%。1.1%还是在验证集数据是相当具有代表性的情况下。
      3. 所有validation error曲线的变化都不一样,唯一有共性的是第一个局部最优点和全局最优点的差值不大。
        1. Unfortunately, the above or any other validation error curve is not typical in the sense that all curves share the same qualitative behavior. Other curves might never reach a better minimum than the first, or than, say, the third; the mou
### Early Stopping 技术概述 Early stopping 是一种用于防止过拟合的有效技术,在训练过程中通过监控验证集上的性能来决定何时终止训练。这种方法可以显著提升模型的泛化能力,确保模型不仅在训练数据上表现良好,也能更好地处理未见过的数据[^1]。 ### 实现原理 具体来说,early stopping 的工作方式是在每次epoch结束时评估模型的表现,并记录最佳状态下的参数。如果经过一定数量的连续 epochs 后,指定的监测指标(通常是验证损失)不再改善,则认为模型已经开始过拟合,此时应立即停止训练并恢复到之前保存的最佳权重[^2]。 ### 使用 TensorFlow/Keras 进行实现 以下是利用 Keras 中内置 `tf.keras.callbacks.EarlyStopping` 类的一个简单例子: ```python from tensorflow import keras model = ... # 定义好自己的模型结构 callback = tf.keras.callbacks.EarlyStopping( monitor='val_loss', # 需要监视的量 min_delta=0, # 被定义为改进的最小变化 patience=5, # 当patience个epoch过去而模型性能不提升时,停止训练 verbose=1, mode='auto', baseline=None, restore_best_weights=True # 是否在训练结束后自动加载最优权值 ) history = model.fit(X_train, y_train, validation_data=(X_val, y_val), callbacks=[callback], epochs=100) ``` 这段代码展示了如何配置 early stopping 来监控验证集上的损失函数 (`val_loss`) 并设置耐心期 (即允许多少次无进展之后才中断),以及是否要在最终结果中保留最好的一组权重[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值