前阵子在公众号上看到一篇文章,讲的是在 LLM 中嵌入一台计算机,以执行计算。觉得这篇文章很有意思 ,在此记录一下。原文 《Can LLMs Be Computers?》,中文版(36氪),建议读一读原文,体验很好。阅读本文需要一些大模型基础知识。

问题

  1. 怎么用 transformer 做计算:它如何精确性地执行指令?如何模拟计算机的?如何处理浮点?
  2. 计算机部分和语言模型权重部分如何连接?

以一个最简单的 Wasm 操作 i32.add(两个 32 位整数相加)为例,要计算 3 + 5。在 Wasm 的栈式架构中,这需要三条指令:将 3 压入栈,将 5 压入栈,然后调用加法指令。在模拟这个过程时,Transformer 会输出一系列代表执行轨迹的 token。

第一步,模型生成代表 i32.const 3 的 token。紧接着,它会生成一个名为 commit 的元数据 token,其中包含了状态更新信息。这个 commit token 会标记:当前的栈指针(Stack Pointer)增加了 1,且当前栈顶的值是 3。第二步,模型继续生成 i32.const 5 及其对应的 commit token。此时,KV Cache 中已经存储了两个状态快照。对于 Transformer 来说,它并不需要像传统电脑那样去“擦写”内存,它只需要在生成下一步时,“回看”之前的轨迹。

当模型需要执行 i32.add 指令时,它的内部权重(这些权重是按照 Wasm 解释器的逻辑预先设计好的,而不是通过随机数据训练出来的)会引导注意力头去寻找之前的状态。具体来说,加法指令需要两个操作数。模型会利用一种“二维几何查询”的方法,在成千上万的历史 token 中,精准地定位到“栈深度为当前值减 1”和“栈深度为当前值减 2”的那两个 commit token。

这种检索之所以是精确的,是因为研究人员使用了“Hard-max”注意力。不同于普通 LLM 使用 Softmax 得到的模糊概率分布,这种特定的电路设计只允许权重最高(即完全匹配)的一个历史 token 贡献信息。一旦定位到了 3 和 5 这两个数值,Transformer 的前馈网络(FFN)——也就是那些线性层和激活函数——就会充当“算术逻辑单元(ALU)”。通过精心构造的矩阵乘法,这些网络层可以在高维向量空间中完成加法运算,并输出结果 8。

二维注意力头是什么?凸包顶点是什么?

未来:在llm中嵌入任意逻辑。

补充:旧的方法如何做计算? 外部工具,RL