Grokking
探索深度学习中的 grokking 现象。了解 Ultralytics YOLO26 模型如何在长时间训练期间从记忆转向泛化。
Grokking 指的是深度学习中的一种令人着迷的现象:神经网络经过显著延长的训练后——通常是在看起来已经对训练数据过拟合很久之后——验证准确率会突然大幅提升。不同于性能逐步改善的标准学习曲线,grokking 包含一个“相变”过程,在此过程中,模型会从记忆特定示例转向理解可泛化的模式。这一概念挑战了传统的“早停”理念,表明对于某些复杂任务,尤其是大型语言模型(LLMs)和算法推理任务,坚持训练是释放真正智能的关键。
Grokking 的阶段#
Grokking 过程通常分为两个截然不同的阶段,这可能会让依赖标准实验跟踪指标的实践者感到困惑。起初,模型会快速降低训练数据上的损失,而在验证数据上的性能仍然很差或基本持平。这会形成较大的泛化差距,通常被解读为过拟合。然而,如果训练继续进行并显著超过这一阶段,网络最终会“顿悟”底层结构,使验证损失骤降、准确率飙升。
近期研究表明,这种延迟泛化的发生,是因为神经网络首先学习了“快速”但脆弱的相关性(记忆),之后才发现“缓慢”但稳健的特征(泛化)。这一行为与损失函数曲面的几何结构和优化动态密切相关,OpenAI 和Google DeepMind的研究人员已在相关论文中对此展开探讨。
Grokking 与过拟合的比较#
区分 grokking 与标准过拟合至关重要,因为它们在早期阶段表现相似,但最终结果不同。
- **过拟合:**模型记住了训练集中的噪声。随着训练进行,验证误差不断增加且不再恢复。标准的正则化技术或提前停止训练通常是解决方法。
- **Grokking:**模型最初会进行记忆,但最终会重构其内部的模型权重,以找到更简单、更通用的解决方案。经过长时间的平台期后,验证误差会大幅下降。
在训练Ultralytics YOLO26等现代架构时,理解这一差异至关重要;对于难度较高且模式密集的数据集,可能有必要禁用早停机制,以充分挖掘模型的性能。
实际应用#
虽然 grokking 最初是在小型算法数据集中观察到的,但它对实际 AI 开发具有重要影响。
- **算法推理:**在需要逻辑推导或数学运算(例如模加法)的任务中,模型通常要经历 grokking 阶段后才能实现泛化。这对于开发能够解决多步问题而不只是模仿文本的推理模型至关重要。
- **紧凑型模型训练:**为了创建适用于边缘 AI的高效模型,工程师通常会延长小型网络的训练时间。Grokking 能让这些紧凑型模型学习数据的压缩型高效表示,这与Ultralytics Platform的效率目标类似。
最佳实践与优化#
为了诱导 grokking,研究人员通常会采用特定的优化策略。较高的学习率和较大的权重衰减(一种 L2 正则化形式)已知能够促进相变。此外,数据量也会产生影响;当数据集大小恰好处于模型能力所能处理的阈值时,grokking 最为明显,这一概念与双下降现象有关。
使用PyTorch等高性能库时,确保这些长时间训练运行过程中的数值稳定性至关重要。该过程需要大量计算资源,因此在Ultralytics Platform上构建高效的训练流水线对于管理长时间实验非常有价值。
代码示例:启用延长训练#
为了允许潜在的 grokking,通常需要绕过标准的早停机制。以下示例演示了如何配置一次Ultralytics YOLO训练运行,延长训练周期并禁用 patience,从而为模型提供从记忆转向泛化所需的时间。
from ultralytics import YOLO
# Load the state-of-the-art YOLO26 model
model = YOLO("yolo26n.pt")
# Train for extended epochs to facilitate grokking
# Setting patience=0 disables early stopping, allowing training to continue
# even if validation performance plateaus temporarily.
model.train(data="coco8.yaml", epochs=1000, patience=0, weight_decay=0.01)








