从记忆的角度重新发明 Transformer:64、2700、100 万
大模型为什么能记住那么多知识?Alex Wang 的一篇长文给出了一个漂亮的第一性原理解释:把神经网络的每一层都看作一个「联想记忆库」,线性层大约能存 64 条记忆,MLP 能存 2700 条,而自注意力能存超过 100 万条。这篇文章在 HN 上拿到 500 多分,我们把它讲清楚。
大模型为什么能记住那么多知识?Alex Wang 的一篇长文《You could have invented transformers from memory》给出了一个漂亮的第一性原理解释:把神经网络的每一层都看作一个「联想记忆库」,你会发现线性层大约能存 64 条记忆,MLP 能存 2700 条,而自注意力能存超过 100 万条。Transformer 不是被发明出来的,而是从「怎么存更多记忆」这个问题里自然长出来的。这篇文章在 HN 上拿到 500 多分,值得一聊。

本文基于 Alex Wang 的博客文章整理,原文带有可交互的演示,建议搭配阅读。
小听: 「每一层都是记忆库」是什么意思?
方迟: 把一个记忆库想象成一个函数:你存进去很多「键值对」,查询时给一个输入,它找出键最相似的那条,返回对应的值。这和查字典一样,只不过「相似」是向量点积。关键洞察是:一个线性层 y = Wx 干的就是这件事——权重 W 可以写成所有记忆的外积之和,查询 x 乘上 W,等于拿 x 和每个键算相似度,再按相似度加权求和所有的值。甚至连梯度下降都是在「写记忆」:每一步更新就是往 W 里加一条新的键值对。
小听: 那问题出在哪?
方迟: 干扰。你查询某条记忆时,其他记忆的键和你的查询也有一点点相似,它们会混进结果里。作者用一个指标衡量:干扰信号比。假设键是 64 维的随机单位向量,每条其他记忆贡献的干扰大约是 1/√64,M 条记忆的干扰像随机游走一样累加,干扰信号比约为 √(M/64)。当 M 接近 64 时,干扰就和信号一样大了——你想取的那条记忆被淹没了。所以线性记忆库的容量大约就是键的维度:64 维存 64 条。

目标记忆是那根红柱,其他记忆每根都往召回结果里掺一点噪声。
小听: 64 条也太少了吧,怎么改进?
方迟: 两条路。第一条是「存得更聪明」:外积记忆库写每条记忆时完全不看其他记忆,如果改成最小二乘求解——让 W 一次性拟合所有记忆——等于给键做了白化,抵消掉键之间的相关性,容量能翻倍。第二条路更有意思:「取得更挑剔」。线性库里每条记忆都贡献干扰,哪怕相似度很低。如果加一个非线性,把低相似度的记忆压掉,干扰就小得多。
小听: 这就是 MLP 和注意力的由来?
方迟: 对。给相似度加 ReLU,负的直接清零,容量就上去了;加 ReLU²,相似度被平方,差距拉得更开,64 维键大约能存 2700 条。而 softmax 是指数级的挑剔——相似度差一点,权重就差 e 的几次方倍。64 维键的 softmax 记忆库,容量超过 100 万条,理论上也几乎不设上限。而 softmax 加键值查询,正是自注意力。

64 → 2700 → 100 万,三次「挑剔程度」的跃迁。
小听: 所以 Transformer 的注意力本质上是一个超大容量的记忆库?
方迟: 可以这么理解,而且这个视角解释了很多经验现象。比如为什么增大模型能记住更多知识——记忆容量跟着维度涨;为什么上下文检索比参数记忆更准确——注意力是「取得最挑剔」的那一层;也解释了为什么梯度下降训练出的网络天然就是记忆机器。作者还提到 Schmidhuber 团队的工作:用梯度下降训练的线性层,数学上等价于对所有训练输入做注意力。
小听: 对普通读者,这篇文章的价值是什么?
方迟: 它把「注意力机制」从一堆公式变成了一个直觉:记忆存得越多,互相干扰越大,想要更大的容量,就得在取的时候更挑剔。从这个直觉出发,你几乎可以重新发明 Transformer——这正是标题的意思。下次看到新架构论文,也可以问一句:它把记忆存得更聪明了,还是取得更挑剔了?
原文:Alex Wang – You could have invented transformers from memory。嘉宾「方迟」为虚构的大模型架构研究者人设,观点基于原文整理。