Double Descent
了解双重下降如何导致模型误差随着模型容量增大而先下降、再上升、最后再次下降。探索插值阈值、真实案例和评估策略。
双重下降是机器学习中的一种模式:随着模型容量增大,模型在未见数据上的误差先下降、再上升,然后再次下降。直观来说,模型可能会先变差,再变好:中等复杂度的模型可能难以泛化,而大得多的模型则可以拟合训练样本,同时准确预测新样本。
双重下降的原理#
我们熟悉的偏差-方差权衡预示着一条 U 形误差曲线。简单模型由于无法捕捉重要模式而欠拟合。起初,增加复杂度会改善预测,但灵活性过高可能会让预测结果对具体训练样本过于敏感。双重下降在误差峰值之后又出现了第二次改善;这并不否定偏差与方差之间的基本区别。(scikit-learn.org)
转折点是插值阈值:模型能够拟合所有训练样本,或将训练误差降至近乎为零的那个点。在阈值附近,拟合带噪声或错误标签可能会导致预测不稳定。超过阈值后,过参数化模型的灵活性超过拟合样本所需的程度,从而产生多个可能的解。其中一些解的泛化能力更好。(openai.com)
想象一下,将分散的测量点连接起来。一条曲线穿过每个点,但在点与点之间急剧弯曲;另一条曲线也拟合了所有点,在其他位置的走势却更加平滑。这种双重下降的直观解释说明了为什么相同的训练表现可能掩盖截然不同的预测行为。更大的模型容量有助于找到更好的解,但不能保证训练过程一定能找到这些解。(mlu-explain.github.io)
变化形式和相关概念#
模型维度的双重下降关注模型容量的变化,例如增加网络宽度。轮次维度的双重下降关注训练时长:留出数据上的误差先改善、再恶化,之后又再次改善。一个训练轮次是指遍历一次训练数据集。深度双重下降的解释还表明,改变数据集大小会移动插值阈值,有时会导致固定模型规模下的性能暂时变差。这并不意味着应该丢弃有用数据。(openai.com)
双重下降不同于过拟合。过拟合是指模型拟合了训练数据特有的细节,却牺牲了泛化能力。过拟合可以解释曲线上升的部分;双重下降描述的则是更广泛的先下降、再上升、然后再下降的模式。训练准确率达到 100% 本身既不能证明泛化能力好,也不能证明泛化能力差。(scikit-learn.org)
双重下降也不同于正则化,正则化是一种限制学习所得解的训练策略。例如,L2 正则化会惩罚较大的权重。因此,参数数量无法完全描述模型的有效复杂度。标签噪声、优化方法和训练设置都会影响双重下降曲线是否明显。(developers.google.com)
实际应用#
以下示例说明了这一现象为何重要,但并不假设每个生产模型都会呈现这种现象:
- 制造业缺陷检测:一个团队比较用于识别零部件划痕的网络。中等规模的网络产生的误报可能比更小和更大的网络都多。如果多次评估都发现了双重下降,那么在性能首次变差时就停止比较,可能会错过更好的检测系统。
- 零售库存识别:货架图像分类器遇到不一致的产品标签。训练过程中,验证误差可能先上升再下降。如果每次实验都在误差首次上升时结束,就可能错过后续的改善;盲目延长训练时间则可能浪费资源。比较检查点有助于区分这两种情况。
实用的评估与训练#
通过受控比较来寻找这种模式,而不要只看一次不理想的运行结果。分别改变模型容量或训练时长,保持数据划分具有可比性,并使用不同的随机种子重复实验。按照验证曲线的基本原理,同时绘制训练误差和留出数据误差。如果绘制的是准确率而不是误差,曲线的方向则相反。(scikit-learn.org)
适当时使用交叉验证,并保留一组未经使用的测试集用于最终评估。避免数据泄漏,即评估数据中的信息进入训练过程或模型选择过程。早停仍然有用,但其耐心值——即允许在没有改善的情况下进行多少次评估——应根据实验目标设定,而不是假设曲线一定呈现某种形状。(scikit-learn.org)
如需实践 Ultralytics YOLO 评估工作流,请使用 ultralytics 安装 pip install ultralytics。此示例使用 YOLO26、文档介绍的训练模式和验证模式。(docs.ultralytics.com)
from ultralytics import YOLO
if __name__ == "__main__":
model = YOLO("yolo26n.pt")
# A small dataset keeps this workflow demonstration lightweight.
model.train(data="coco8.yaml", epochs=3)
# Evaluate images held out from training.
metrics = model.val(data="coco8.yaml")
print(f"Validation mAP50-95: {metrics.box.map:.3f}")输出是跨检测重叠阈值计算的平均精度均值;数值越高越好。COCO8是用于检查工作流的数据集,不能作为双重下降的证据。要确认这一现象,需要在有代表性的数据上开展更广泛的受控实验。实际经验是:要测量泛化能力,而不是假设更大的模型或更长的训练时间一定有帮助或有害。(docs.ultralytics.com)









