图版 46 · 人工智能
先背答案,再学会规律
把钟点加法的一半题目拿给一个神经网络练习,它很快就能把这些题全部答对,但也只会这些:另一半它没见过的题,它答对的机会和瞎猜差不多。接着练下去,哪怕练习题早已没什么可学,奇怪的事会发生。研究者把它叫作“顿悟”(grokking)。
向下滚动
钟点加法
晚上 8 点,再过 7 个小时是凌晨 3 点:在 24 小时制的钟上,20 + 7 = 3。数学家把这叫作“模 24 的加法”,它是最简单的规则之一。这类题目全都放得进一张 24 × 24 的板子:竖着一个钟点,横着一个钟点,答案写在两者相交的格子里。按答案给每格涂上颜色,板子上就排满了斜斜的彩色条纹。
2022 年,OpenAI 的研究者拿这样的表格训练小型神经网络,只给它们看一部分格子,想知道它们会找到规律,还是只会记住答案。这里,一个比他们的小得多的网络做同样的事,就在你的浏览器里,在你读的时候。
钟点加法的全部 576 道题 · 后面的钟盘显示每个钟点在网络里存放的位置
死记硬背
网络一开始只是一堆随机的数:每个钟点 8 个,另外还有约 2600 个把它们连起来,中间是 64 个“神经元”。给它看板子的一半,288 格;另一半标着浅色小圈,留着考它。答错的格子颜色暗下来。
大约一百步训练之后,练习的格子它全答对了。留着考它的那些,它答对的比例和瞎猜差不多。它把答案背了下来,就像一个学生背熟了去年考卷的答案,却没弄懂这门课。
一步步往下走
它到底是怎么学的?每做一轮,用一个数给它打分,看错得有多厉害。训练会算出,它的 2776 个数里,每一个往哪边轻轻挪一点能让这个分数变小,然后把它们都朝那边挪一点。好比一个人在雾里下山,用脚探着坡往下走:每一步训练,就是往下迈一步。旁边的图记录着全过程:橙色线是练习题,蓝色线是留着考它的题。
还有一条规矩,叫“权重衰减”:每一步,每个数都会被往零的方向缩一点,数越大,代价越大。图上的虚线是网络所有数加起来有多大。背答案的时候,它一直在变大。
突然跳上去
训练继续。练习题已经全对,几乎没什么可学了,留着考它的格子在大约一千步里一直是错的。然后,在短短几百步里,它们几乎全部变对,板子上排满了整齐的条纹。
OpenAI 团队把这种现象叫作“grokking”。在他们的一个实验里,网络答对没见过的题,要比背熟练习题多花一千倍的训练步数。我们这个网络快得多:练习题大约 100 步就全对了,没见过的题大约在 1400 步时学会。
里面长出了钟
变化发生在哪里?每个钟点在网络里存成一串 8 个数;后面的钟盘把它们压平,只留它们变化最大的两个方向。一开始,钟点在盘面上乱撒一气。到跳上去的时候,它们已经沿着圆圈排开,间隔均匀,像钟面上的刻度。每个钟盘上,钟点每加一,指针就转过同样大的一格,两个钟盘转的格子大小不同。
要把两个钟点相加,网络实际上是把它们的角度相加,就像钟的指针转两次,答案就在指针停下的地方。2023 年,尼尔·南达等人在一个学模 113 加法的小型 Transformer 里发现了同样的办法;安德烈·格罗莫夫则亲手写出了这类网络需要的波形。没有人告诉网络钟是什么,是训练找到了它们。
为什么要等这么久
死记答案需要很多、很大的数,每一道练习题各占一块。几只钟用更少、更小的数就能完成,而且对每一道题都管用。权重衰减一直在为“大”收费,所以哪怕练习题早已全对,训练还在一点点滑向这个更省的解。钟在跳上去之前很久就在慢慢成形;所谓跳上去,是它们终于占了上风。之后,网络甩掉了用来死记的那些数,虚线随之回落。
把权重衰减关掉,同一个网络在这次训练里始终答不对没见过的题(红色点线)。南达的团队在他们的 Transformer 里也看到了这一点,不过别的网络在没有权重衰减时也出现过顿悟。2024 年,一个团队把训练每一步里缓慢、稳定的那部分放大,让顿悟快了 50 倍以上。
你来试试
调权重衰减,调网络能拿来练习的格子占多少,看它训练。试试把权重衰减关掉。按“训练一个新网络”从头开始:每个网络都会找到自己的钟。
试一试把权重衰减关掉再训练:没见过的题后来答对了吗?
模型省略了什么
这里的网络是真的,在你的浏览器里训练:两层,每个钟点 8 个数,64 个把输入平方的神经元(格罗莫夫研究过的那类网络),用 AdamW 优化器,每一步看全部练习题。OpenAI 的实验用的是小型 Transformer;南达的团队用单层 Transformer 学 12769 道模 113 的加法,训练 4 万轮,大约 1 万轮后才学会没见过的题。大语言模型比这大几百万倍,它们里面是否也发生类似顿悟的事,还在研究之中。钟盘只显示每个钟点 8 个数里变化最大的 4 个方向,其余的数带着较小、较乱的部分。每次训练都不一样,实验室里可以看到。
一个常见的误解
顿悟看起来像灵光一闪,但网络里没有什么东西“闪”了一下。底下的变化是渐进的:在分数动起来之前,钟已经慢慢长了一千步。网络也不像你那样懂得钟:它只是找到了一组让算术结果对得上的数,换一道别的问题,它会照样自信地答错。
资料来源
- Power 等(2022):Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets,arXiv:2201.02177
- Nanda 等(2023):Progress measures for grokking via mechanistic interpretability,ICLR 2023,arXiv:2301.05217
- Gromov(2023):Grokking modular arithmetic,arXiv:2301.02679
- Lee 等(2024):Grokfast: Accelerated Grokking by Amplifying Slow Gradients,arXiv:2405.20233
- Loshchilov & Hutter(2019):Decoupled Weight Decay Regularization(AdamW),arXiv:1711.05101

