Grokking
探索深度学习中的“顿悟”(Grokking) 现象。了解 Ultralytics YOLO26 模型在长时间训练过程中如何从记忆转向泛化。
Grokking 指的是深度学习中的一个迷人现象:神经网络在经过长时间的训练后(通常远在它似乎已经对训练数据过拟合之后),验证准确率突然大幅提升。与性能逐渐提升的标准学习曲线不同,grokking 包含一个“相变”过程,模型从死记硬背特定样本转变为理解可泛化的模式。这一概念对传统的“早停”经验提出了挑战,表明对于某些复杂任务(尤其是在大语言模型 (LLMs) 和算法推理中),坚持训练是解锁真正智能的关键。
Grokking 的阶段#
grokking 的过程通常分为两个截然不同的阶段,这可能会让依赖标准实验跟踪指标的从业者感到困惑。最初,模型迅速最小化训练数据上的损失,而验证数据上的性能却依然很差或保持平稳。这会产生一个巨大的泛化差距,通常被解释为过拟合。然而,如果训练在这个点之后继续进行很长时间,网络最终会“grok”其底层结构,从而导致验证损失骤降、准确率飙升。
最新研究表明,这种延迟泛化之所以发生,是因为神经网络首先学习的是“快”但脆弱的相关性(记忆),之后才发现“慢”但稳健的特征(泛化)。正如 OpenAI 和 Google DeepMind 研究人员的论文所探讨的那样,这种行为与损失函数地形的几何形状及优化动力学密切相关。
Grokking 与过拟合#
将 Grokking 与标准过拟合区分开来至关重要,因为它们在早期阶段表现相似,但结果却截然不同。
- **过拟合:**模型记住了训练集中的噪声。随着训练的进行,验证误差增加且无法恢复。标准的正则化技术或提早停止训练是通常的补救措施。
- **Grokking:**模型最初会进行记忆,但最终会重构其内部模型权重,以找到更简单、更通用的解决方案。在经历了一个漫长的平台期后,验证误差会急剧下降。
在训练诸如 Ultralytics YOLO26 等现代架构时,理解这种区别至关重要,因为可能需要禁用早停机制来榨取困难、重模式数据集上的最大性能。
实际应用#
虽然最初是在小型算法数据集中观察到的,但 Grokking 对实际的 AI 开发具有重大影响。
- **算法推理:**在需要逻辑推理或数学运算(如模加法)的任务中,模型通常无法泛化,直到经历 grokking 阶段。这对于开发能够解决多步骤问题而不仅仅是模仿文本的推理模型至关重要。
- **紧凑模型训练:**为了针对边缘 AI创建高效模型,工程师通常会延长较小网络的训练时间。Grokking 允许这些紧凑模型学习数据的压缩、高效表示,这类似于Ultralytics Platform的高效目标。
最佳实践与优化#
为了诱发 grokking,研究人员通常会利用特定的优化策略。高学习率和大量的权重衰减(L2 正则化的一种形式)已知可以促进相变。此外,数据量也起到了一定作用;当数据集大小恰好处于模型处理能力的临界点时,grokking 最为明显,这一概念与双重下降现象有关。
当使用诸如 PyTorch 的高性能库时,确保这些延长训练运行期间的数值稳定性至关重要。该过程需要大量的计算资源,这使得 Ultralytics Platform 上的高效训练管道对于管理长期实验极有价值。
代码示例:启用长期训练#
为了留出可能出现 grokking 的空间,必须经常绕过标准的早停机制。下面的示例演示了如何配置具有扩展 epoch 且禁用 patience 的 Ultralytics YOLO 训练运行,从而给模型留出从记忆过渡到泛化的时间。
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)





