理解不是渐进的,是突然的
少年被父亲送到山上,拜一位老师学数学。
老师每天交给他三百道算术题,第二天收回、批改、再交三百道新题。第一个月,少年从连加减都做不好,到能勉强做对一半——进步肉眼可见。他写信告诉父亲:我进步很快。
第二个月,正确率从一半升到七成。第三个月,七成八。少年很高兴。
第四个月,开始变慢。第六个月,停留在八成五左右,再也上不去。第七个月,八成五。第八个月,八成五。
一年过去,八成六。
少年开始怀疑自己。
他每天做三百道题,每天被批改。做的方式他已经烂熟——他背下了很多算式的答案,看到一道不太一样的题,他就去记忆里找最像的那道题的答案,套过来。这个方法在训练题里已经能让他做对八成多。可是老师每次都会出一些新的题,那些题他的"找最像的答案"方法就会失灵——他永远卡在那里。
第二年过去。还是八成六。
少年开始崩溃。他问老师:"是不是我根本没有这个天分?"老师没说什么,只说:"你每天继续做三百道题。"
第三年也过去了。正确率从八成六爬到八成七,再到八成八。少年已经麻木了。有一天他甚至想,也许我一辈子就到这了。
然后某个深秋的清晨,他醒来,像往常一样坐到书桌前,翻开老师今天给他的三百道题。
他没有去翻记忆。他盯着第一道题看了一秒,答案自己跳了出来——不是从记忆里找来的,是从题本身里读出来的。他看第二道,又是一秒,答案自己出来了。他翻到一道从来没见过的题型——五位数的除法——他从来没做过,但他盯着那道题,答案依然自己出来了。
他把三百道题全部做完了,用了平时不到一半的时间。他把题交给老师。
老师批改完,全对。不是"几乎全对",是全对。老师抬起头看了他很久,然后说:"从现在开始,你不是在算了。你是在看。"
少年问:"为什么是今天?"
老师想了想,说了一段话,他再也没忘过:
我等了三年。不是今天才发生的。每一天,你都在悄悄地改变——水面每天涨一指宽,一丝一毫,没人看得见,包括你自己。你以为那三年什么都没有发生,其实什么都在发生。只是直到今天早上,水面才恰好漫过堤坝。
如果你在昨天放弃,你会以为这件事永远学不会。事实是,昨天的你,和今天的你,只差一指宽。
寓言之外
这就是 Grokking(顿悟)——2022 年 OpenAI 的研究员在一个数学问题上意外观察到的神经网络训练现象。
他们让一个小型 Transformer 学一个模运算的任务(类似 a + b mod 97)。训练过程如下:
前期——训练损失快速下降,测试损失也下降。这是"学会"的阶段。 中期——训练损失继续下降,模型在训练集上做到近乎完美。但测试损失稳在一个糟糕的水平。模型在死记硬背训练题。 然后——看起来什么都没发生的漫长中期。训练损失已经很低了;测试损失没有任何变化。这个阶段持续得非常久——比"学会"阶段长几十倍甚至几百倍。很多人在这里会停训,认为模型已经极限了。 最后——突然,测试损失在几步之内断崖式下跌,降到和训练损失差不多的水平。模型从"死记硬背"状态瞬间跳到"真正理解"状态。
这种现象被叫做 Grokking——英语里表示"领悟、顿悟"的那种词。
为什么会这样?后续研究给出了一些解释。机制可解释性(Mechanistic Interpretability)的人拆开了 Grokking 中的模型,发现:
在那段看起来什么都没发生的漫长中期,模型内部在悄悄地重组它的表示。
具体来说,模型一开始学会了一些专门记住训练题答案的电路——这些电路能让训练损失下降到 0,但它们的本质是查表。这些电路是杂乱的、低效的,它们各自记住一小块训练集。然后,在正则化(weight decay)的压力下,模型开始寻找更简洁的方式去解释训练数据——因为死记硬背需要大量参数能量,而一个真正理解了规律的电路只需要很少的参数。
所以在那段漫长的中期,模型内部在做的事情是:慢慢地,把死记硬背的电路拆掉,慢慢地,组装出一个真正解决问题的电路。拆和组装是同时进行的,而且在相当长的时间里新电路还不够好——它还没有完全组装起来,所以测试表现还是差的。但是那一刻——新电路的最后一个部件被接上了——它一下子就解决了整个问题,不只是训练集,包括所有从未见过的样本。
这就是水面漫过堤坝的瞬间。
Grokking 揭示了一件很深的事情:神经网络的"理解"不是连续的,是相变式的。从表面看,训练是一个平滑的曲线;实际上,在那平滑背后,内部可能在发生着拓扑意义上的突变——从一种解决方式换到另一种解决方式。你的损失曲线看不到这个切换,但模型真的从一个世界跳到了另一个世界。
这个现象和更大规模下 LLM 表现出的 Emergent Capabilities(涌现能力) 有相似之处——GPT-3 学到了某些小模型完全没有的能力(做数学题、多步推理),不是渐进地学到,而是在参数量跨过某个临界点之后,突然就有了。有争议的解释认为这是 Grokking 式相变的大型版本——模型的某个内部电路在参数量够大、训练够久时才有条件被组装出来,一旦组装完,能力就整个出现了。
对工程实践的启示很直接:
训练早停要谨慎——你眼里的"停滞期"可能不是极限,可能是模型正在内部重组。如果你是在追求泛化而非训练拟合,对测试损失长时间不动的模型,不要急着砍掉它。
正则化是引擎,不是限制——Grokking 的出现离不开 weight decay。没有这个"压缩压力",模型就会永远停在死记硬背阶段,不会自发地去寻找更简洁的理解。正则化的真正作用不是防止过拟合,是逼模型去发现数据中真正的结构。
学习的本质不一定是渐进的——这一点人类自己早就知道了。你读一本书,前一百页每一页都让你困惑,第一百零一页突然全部想通了。你练一门手艺,练了三年没什么进步,第三年某个早上突然就会了。这不是"灵感",也不是"天分"——这是漫长的内部重组,最后一刻的相变完成。
少年不是在那个清晨突然变聪明的。他是在三年里每一天都在变,只是没人看得见。神经网络也是一样。
有时候,学不会和还差一点就学会之间的距离,是零。
版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。
(采用 CC BY-NC-SA 4.0 许可协议进行授权)
本文标题:05. 学了三年突然顿悟的少年
本文链接:https://www.sshipanoo.com/blog/ai/ai-fables/05-学了三年突然顿悟的少年/
本文最后一次更新为 天前,文章中的某些内容可能已过时!
目录