先给一句人话版答案:
Grokking 是一种很反直觉的训练现象:模型一开始像是在死记硬背训练题,考试题完全不会;但继续训练很久之后,它突然像“开窍”一样,开始在没见过的题上也答对。
它最早让人震惊的地方就在这里:按普通直觉,模型已经把训练集背熟了,测试集还不会,那就叫过拟合,应该停了。但 Grokking 说:
有些情况下,模型过拟合之后继续训练,并不只是更严重地背答案;它可能在更慢地学出真正规则。
这篇不默认你知道机器学习。我们把复杂词一路拆到底:
- 先讲训练集和测试集。
- 再讲“死记硬背”和“真懂了”的区别。
- 再讲准确率、损失、过拟合、泛化。
- 再用一个小学生也能算的“取余数加法”例子解释 Grokking。
- 最后再讲为什么它看起来像“相变”,以及它和大模型涌现有什么关系。
如果只想先抓主线,记住这句话:
Grokking = 训练表现早就满分,测试表现长期像随机猜,后来测试表现突然跳到接近满分。
先把“训练”和“考试”讲清楚
机器学习里的训练集和测试集,可以先理解成作业和考试。
训练集就是模型做过的题。 测试集就是模型没做过的新题。
如果一个学生把作业答案全背下来了,他在作业上当然满分。但你换几道同类型新题,他可能立刻不会。
这叫:
会背作业,不等于真会解题。
模型也是一样。
假设我们让模型学习一个规则:
输入两个数,输出它们相加后的结果。
训练集可能有这些题:
| 输入 | 答案 |
|---|---|
| 1 + 2 | 3 |
| 2 + 3 | 5 |
| 4 + 1 | 5 |
测试集可能是这些没见过的题:
| 输入 | 答案 |
|---|---|
| 3 + 3 | 6 |
| 5 + 2 | 7 |
如果模型只是背表,它可能只会训练集里的三道题。 如果模型学会了“加法规则”,它就能做没见过的新题。
这就是泛化。
泛化:不是记住答案,而是学会规则
泛化这个词很重要。先别想深。
泛化就是:在没见过的新题上也能做对。
背答案不是泛化。学规则才是泛化。
再换一个生活例子。
如果你背下来:
- 北京到上海坐高铁大约 4 到 6 小时。
- 北京到广州坐飞机大约 3 小时。
- 上海到杭州坐高铁大约 1 小时。
这叫记忆。
但如果你理解了:
- 距离越远,通常时间越长。
- 高铁、飞机速度不同。
- 出发和到达城市决定路线。
那你遇到“深圳到长沙大概要多久”时,即使没背过,也能估算。
这叫泛化。
机器学习最想要的不是训练集满分,而是泛化好。因为真实世界永远会给模型新题。
过拟合:作业满分,考试不会
过拟合就是模型太贴着训练集学,学到了训练集里的偶然细节,却没学到真正规律。
人话版:
模型把作业背熟了,但没学会解题方法。
过拟合有一个典型现象:
- 训练集表现很好。
- 测试集表现不好。
比如:
| 阶段 | 训练题正确率 | 测试题正确率 |
|---|---|---|
| 刚开始 | 10% | 10% |
| 学了一阵 | 100% | 12% |
这就很像死记硬背。作业全对,考试基本靠猜。
传统机器学习课会告诉你:看到这种情况要小心,可能该早停了。
早停就是提前停止训练。它的直觉是:继续训练可能只会让模型更死记硬背。
但 Grokking 让这件事变复杂了。
Grokking 的反直觉点
Grokking 的训练曲线大概长这样:
| 阶段 | 训练正确率 | 测试正确率 | 看起来像什么 |
|---|---|---|---|
| 刚开始 | 很低 | 很低 | 什么都不会 |
| 中期 | 接近 100% | 很低 | 背熟作业,但考试不会 |
| 很久以后 | 接近 100% | 突然升到很高 | 像突然真懂了 |
用图表示:
flowchart LR
A["刚开始:训练和测试都差"] --> B["先背熟训练集"]
B --> C["长时间测试集仍然差"]
C --> D["突然泛化:测试集也变好"]
最奇怪的是中间那段。
模型已经会做训练题了,训练正确率已经很高了。按“答对题目”这个标准,它好像已经没什么可学了。
但如果继续训练,它内部还在变。
这就像一个学生:
- 先把题库答案背熟,所以作业满分。
- 继续刷很久,看起来没进步,因为考试还是不会。
- 某一刻,解题套路连起来了,考试成绩突然上去。
Grokking 这个词本身就有“深刻理解、突然领悟”的味道。放到机器学习里,它不是说模型有人的意识,而是说训练曲线上出现了这种“延迟开窍”的形状。
最小数学地基:准确率和损失不是一回事
理解 Grokking,必须先拆两个指标:
- 准确率。
- 损失。
准确率很好懂:答对多少题。
10 道题答对 8 道,准确率就是 80%。
但准确率有个缺点:它只看对错,不看信心。
比如两次都答对了:
- 模型 A:觉得正确答案概率是 51%。
- 模型 B:觉得正确答案概率是 99%。
准确率看起来一样,都是答对。 但模型 B 明显更有信心。
这时候就需要损失。
损失可以先理解成:
模型为自己的错误和不确定付出的罚分。
如果模型答错了,损失大。 如果模型答对但很不自信,损失也不够小。 如果模型答对而且很自信,损失才小。
所以出现一个重要现象:
训练准确率已经 100% 了,训练损失仍然可以继续下降。
这句话是 Grokking 的关键之一。
模型在训练集上已经全答对,并不代表训练已经“完全结束”。它还可以继续把正确答案的概率推高,继续改变内部表示,继续被正则化影响。
再拆“正则化”:别让模型用太复杂的作弊方法
Grokking 里经常出现一个词:正则化。
先别想公式。
正则化就是训练时给模型加一点约束,别让它用太复杂、太极端、太脆弱的方式解决问题。
最常见的一种正则化叫 weight decay,中文常译作权重衰减。
先拆“权重”:
权重就是模型内部可以调整的数字,也就是参数。
再拆“衰减”:
衰减就是让某些东西慢慢变小。
weight decay 的直觉是:
如果两个解法都能做对训练题,那就偏向参数更小、更朴素的那个。
这有点像考试。
一个学生可以用两种方式拿作业满分:
- 背下所有题和答案。
- 学会通用规则。
如果题目很多很杂,背答案可能需要非常复杂的记忆。学规则反而更简洁。
weight decay 有时就像在说:
别把脑子塞满一堆很大的特殊记忆,尽量找更省、更简单的表示。
这不是永远成立的万能解释,但它是理解很多 Grokking 实验的重要入口。
用一个小例子看 Grokking:模 7 加法
Grokking 最经典的实验之一,是让小 Transformer 学“模加法”。
“模加法”听起来难,其实就是取余数。
我们先拆“取余数”。
如果你算:
7 只能完整放进 11 一次,剩下 4。 所以 11 除以 7 的余数是 4。
写成数学符号:
这里的 就是“取余数”。
所以“模 7 加法”就是:
两个数先相加,再看除以 7 余几。
比如:
再比如:
为什么研究者喜欢用这种任务?
因为它有一个清楚规则,而且所有题可以穷举出来。比如数字只在 0 到 6 之间,那么一共有 道题。
你可以拿其中一部分当训练集,剩下当测试集。
于是模型有两种路:
- 记忆路线:把见过的输入输出背下来。
- 规则路线:学会“绕着 7 个数字组成的圈做加法”。
如果走记忆路线,训练集很快满分,测试集仍然差。 如果走规则路线,没见过的题也能答对。
Grokking 的神奇点是:模型先走了很像记忆的路线,后来又慢慢转向规则路线。
为什么它不是“突然从 0 学到 100”
肉眼看测试准确率,Grokking 像是突然发生的。
但后来的机制解释工作给了一个更细的画面:突然变化的背后,可能有一些连续进展。
先拆“机制解释”。
机制解释就是不只看模型输入输出,还想打开模型内部,看看它到底用什么步骤算出答案。
这有点像你看学生解题:
- 只看答案:你知道他答对了。
- 看草稿纸:你知道他是背的,还是按规则推的。
Neel Nanda 等人的工作研究了小 Transformer 在模加法任务上的 Grokking。他们发现,模型学到的可泛化算法和圆、正弦、余弦、傅里叶结构有关。
这句话很硬,我们小白版不用深入傅里叶。先抓直觉:
模型不是只背“3+4=0、5+6=4”这些表项,而是慢慢形成了一套可以绕圈做加法的内部结构。
他们把训练过程分成类似三段:
- 记忆阶段:先把训练题记住。
- 电路形成阶段:内部慢慢长出能泛化的算法结构。
- 清理阶段:正则化逐渐清掉记忆成分,让泛化结构主导输出。
这里的“电路”不是电子电路,而是模型内部一组配合完成某个功能的神经元、注意力头和权重连接。
所以 Grokking 看起来像突然开窍,不一定代表内部真的完全突然。更可能是:
内部进展一直在发生,只是外部指标在某个门槛前看不出来;一旦跨过门槛,测试准确率就突然跳上去。
这和人学东西很像。
你学一个概念时,可能前面几天都像没懂。但大脑里其实在积累碎片:一个例子、一个图像、一个公式、一句解释。某天这些碎片连起来,外部表现就像“突然懂了”。
“相变”是什么意思
截图里有一个关键词:相变。
相变最常见的例子是水变冰。
水温从 10 度降到 5 度,再降到 1 度,看起来还是水。 到了 0 度附近,状态突然变了,开始结冰。
这叫相变。
注意两个层次:
- 温度变化是连续的。
- 物质状态变化看起来是突然的。
Grokking 里的“相变”也是类似比喻:
- 模型内部的某些结构可能在连续变化。
- 测试准确率这个外部指标可能突然跳变。
为什么指标会突然?
因为很多任务有门槛效应。
假设模型要做一道题,需要三块能力同时到位:
- 能识别输入里的两个数。
- 能在内部表示“绕圈”。
- 能把结果读出来。
前两块都学到 80%,第三块没连上,题还是错。 三块终于连上,答案突然大量变对。
这就像造桥。
桥修到 90%,车还是过不去。 桥修到 100%,车突然能过了。
所以“突然”不一定表示没有过程。它可能只是因为我们看的指标太粗。
“训练动力学”是什么意思
截图里还有一个词:训练动力学。
先拆“动力学”。
动力学不是玄学,它关心的是:
一个系统如何随时间变化。
训练动力学就是:
模型在训练过程中,参数、损失、准确率、内部表示如何一步步变化。
普通看法只问:
最后模型准不准?
训练动力学会问:
它是怎么变准的?先学了什么?后学了什么?为什么卡住很久?为什么后来突然跳?
Grokking 重要,不只是因为它有趣,而是因为它提醒我们:
看最终结果不够,看训练过程也很重要。
同样是最后测试集满分,两个模型可能走了完全不同的路:
- 一个一开始就学规则。
- 一个先背题,后来才学规则。
- 一个一直背题,只是测试集太像训练集,所以看起来也还行。
如果只看最终准确率,这三者可能分不清。
为什么继续训练可能有用
前面说过,训练准确率 100% 之后,损失还可以继续下降。
现在再深入一点。
模型在训练集上全答对后,仍然可能存在很多不同的“全答对解法”:
- 复杂记忆解法:训练题都记住,但测试题不会。
- 简洁规则解法:学会真正规律,测试题也会。
- 混合解法:一部分靠背,一部分靠规则。
训练不是只在“会不会答对”这个维度上移动。它还在参数空间里继续移动。
先拆“参数空间”。
模型有很多参数。每一组参数就是一个位置。参数空间就是所有可能参数位置组成的巨大空间。
如果模型有两个参数,你可以把参数空间想成一张平面地图。 如果模型有几百亿个参数,就画不出来,但数学上仍然可以理解成一个超高维地图。
训练就是模型在这张地图上走。
即使训练准确率已经满分,模型也可能还在从一个“复杂记忆位置”慢慢走向一个“简洁规则位置”。
weight decay 等正则化会持续施加力量,把模型往某些更简单的区域推。这个过程可能很慢,所以测试集迟迟没有变化。等可泛化结构终于压过记忆结构,测试准确率就跳起来。
为什么小数据更容易看到 Grokking
原始 Grokking 论文里有一个关键观察:较小的数据集可能需要更多优化步骤才能泛化。
这也符合直觉。
如果训练题太少,背下来很容易。模型很快可以用记忆路线拿训练集满分。
但题少也意味着规则信号弱。模型要从少量例子里推出背后的规则,需要更久。
用学生类比:
- 老师只给你 5 道例题,你很容易背答案,但不容易总结规律。
- 老师给你 500 道覆盖充分的例题,规律反而更容易显出来。
所以小数据场景下,模型可能更容易先走向记忆解法,然后需要更长时间才走到规则解法。
这也是 Grokking 不应该被简单理解成:
多训练就一定更好。
更准确是:
在某些任务、数据规模、模型容量、优化器和正则化条件下,继续训练可能让模型从记忆解法转向泛化解法。
条件很重要。
Omnigrok:Grokking 不只在玩具算法里吗
原始 Grokking 现象主要来自小型算法任务,比如模加法。
后来有一篇叫 Omnigrok 的工作尝试把视角扩展到算法数据之外。它从损失景观和权重范数角度解释 Grokking,并展示可以在图像、语言、分子等任务上诱导类似现象。
先拆两个词。
损失景观:
把每组参数对应的损失值想成一张地形图,高处损失大,低处损失小。
权重范数:
粗略理解成模型参数整体有多大。
Omnigrok 的一个直觉是:训练损失和测试损失可能喜欢不同的参数规模。模型沿着训练方向移动时,可能先进入训练集很好但测试集不好的区域,后来在正则化等力量影响下,走到测试集也好的区域。
这不是 Grokking 的最终统一答案,但它扩大了讨论范围:Grokking 不是只能在“模加法玩具题”里讲故事,它可能反映了更一般的训练现象。
2025 的数值稳定性视角:这事还没完全定论
到这里还有一个重要提醒:
Grokking 的机制不是已经被一句话彻底解决了。
2025 年有工作从数值稳定性角度继续研究 Grokking。他们关注 softmax、logits、浮点误差和一种叫 naive loss minimization 的方向。
这些词比较硬,我们拆最必要的。
logits:
模型在变成概率之前的原始分数。
比如模型给三个答案打分:
| 答案 | 原始分数 |
|---|---|
| A | 10 |
| B | 2 |
| C | -1 |
这些原始分数还不是概率。
softmax:
把原始分数变成概率的一种函数。
分数越高,概率越大。
浮点误差:
计算机存小数不是无限精确的,极端数字可能带来误差。
这类研究提醒我们:训练曲线里的“延迟泛化”可能和优化方向、正则化、数值稳定性都有关系。不同任务和设置下,主因不一定完全一样。
所以本文不会给出“Grokking 唯一机制就是 X”的结论。更稳妥的说法是:
Grokking 是一个现象;它背后可能有多种机制。记忆与规则竞争、正则化、表示形成、损失景观、数值稳定性,都可能参与解释。
它和大模型涌现有什么关系
现在终于接到大模型。
大模型里常说“涌现能力”:模型小的时候不会,规模变大或训练变久后,某些能力突然出现。
Grokking 和涌现有相似之处:
- 外部指标看起来突然跳变。
- 内部可能有更平滑的积累过程。
- 某个能力可能需要多个子结构同时到位。
- 只看最终指标,容易误判训练过程中发生了什么。
但也要谨慎。
Grokking 经典实验是小模型、小数据、算法任务。 大语言模型是巨大模型、巨大数据、复杂任务。
所以不能直接说:
GPT 的所有涌现能力都是 Grokking。
这太粗暴。
更好的连接是:
Grokking 给了我们一个可研究的小窗口:所谓“突然出现”的能力,可能背后有连续的内部进展;只是我们平时看的指标太粗,直到跨过门槛才显出来。
这对理解大模型很有启发。
比如一个模型做多步推理,可能需要:
- 读懂题目。
- 抽出变量。
- 选择公式。
- 做中间计算。
- 输出格式正确。
前四步都在变好,但第五步不稳,最终答案还是错。 等第五步也稳了,测试分数可能突然跳。
外面看像“突然会推理了”。 里面可能是很多小部件逐渐对齐。
它和人类“突然开窍”像不像
像,但只能当类比,不能当证明。
人学东西时,经常有这种体验:
- 刚开始完全不会。
- 刷了很多题,像是在机械模仿。
- 很久没明显进步。
- 某一天突然理解了,“原来是这么回事”。
Grokking 给这个体验提供了一个机器学习版本的画面:
外部表现可能长时间不变,但内部结构可能一直在重组。
这也是为什么学习时“没有立刻提高”不一定等于没学进去。你可能还在电路形成阶段。
但别过度类比。
人有动机、注意力、记忆策略、语言理解、元认知。神经网络训练则是参数、梯度、损失、优化器。两者不能简单画等号。
可复用的启发是:
有些理解需要多个碎片连成结构;结构没连上前,看起来像没进步。
Grokking 对学习 AI 有什么用
我觉得 Grokking 至少给初学者三个很重要的观念。
第一,训练集好不代表真会。
这就是泛化问题。模型在见过的数据上表现好,只能说明它会处理见过的数据。真正要看的是没见过的数据。
第二,外部指标突然,不代表内部没有过程。
测试准确率可能突然跳,但内部表示、进度指标、子电路可能早就在慢慢变化。
第三,过拟合之后不一定只有坏事,但也不能盲目多训。
Grokking 告诉我们,在某些条件下,过拟合之后继续训练可能泛化。但这不等于所有训练都该无限继续。任务、数据、模型、正则化、优化器都会影响结果。
用一句话重新解释截图
截图里那几句话可以这样翻译:
Grokking 研究的是模型训练中的延迟泛化:模型先用记忆路线解决训练集,所以像死记硬背;继续训练很久后,内部可泛化结构逐渐形成并压过记忆成分,测试表现突然跳升,所以外面看起来像“真懂了”。这个跳升像相变,但背后可能有连续的训练动力学过程。
如果再压缩成一句:
Grokking 不是“模型突然有灵魂了”,而是“泛化结构晚于记忆结构被训练出来,并在某个门槛后突然显现在测试指标上”。
小白自测
1. Grokking 是什么?
模型先把训练集学到接近满分,但测试集长期很差;继续训练很久后,测试集表现突然大幅提升。
2. 它为什么反直觉?
因为传统直觉认为训练集满分、测试集不好就是过拟合,继续训练只会更糟。但 Grokking 里继续训练可能带来延迟泛化。
3. 泛化和记忆有什么区别?
记忆是见过的题会做。泛化是没见过的新题也会做。
4. 为什么训练准确率 100% 后模型还在变?
因为准确率只看对错,损失还会继续看信心和参数状态。模型内部表示、权重规模、记忆成分和规则成分都可能继续变化。
5. 相变是不是说明模型真的一瞬间学会?
不一定。外部指标可能突然跳,但内部可能已经连续积累很久,只是没跨过能让测试题大量答对的门槛。
6. Grokking 能直接解释所有大模型涌现吗?
不能直接画等号。它主要来自可控的小模型实验,但它提供了一个重要启发:看起来突然的能力,背后可能有连续的内部进展。
参考与继续读
- Alethea Power 等人的原始论文:Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets。这篇提出并系统展示了“过拟合之后很久才泛化”的现象。
- Neel Nanda 等人的机制解释工作:Progress measures for grokking via mechanistic interpretability。这篇把模加法 Transformer 的训练过程拆成记忆、电路形成、清理等阶段,并讨论“突然相变”背后的连续进展。
- Ziming Liu、Eric J. Michaud、Max Tegmark 的 Omnigrok: Grokking Beyond Algorithmic Data。这篇从损失景观和权重范数角度解释 Grokking,并尝试把现象扩展到算法数据之外。
- Lucas Prieto 等人的 Grokking at the Edge of Numerical Stability。这篇从 softmax、logits、数值稳定性和梯度方向角度补充解释,提醒我们 Grokking 的机制仍在研究中。
最后只记一件事:
Grokking 让我们看到:模型“会背”和“会规律”可以是两条不同路线,而真正的泛化有时会在很长的沉默训练之后才显出来。