有人在X上转发一条论文解读贴时,顺手加了一句吐槽:
"Why can LLMs solve Olympiad-level math but miss 17 + 28?"
「为什么大模型能解出奥赛难度的题目,却会栽在17加28这种题上?」
这句话戳中了不少人。有工程师留言说,自己训练的模型乘除都还凑合,一涉及进位就是噩梦;也有人说这是个老熟人问题,每次以为修好了,换一批数字又翻车。
大多数时候,大家把这归咎于同一个理由:"AI压根不懂算术,只是在背题型。"
南京大学一支团队用一篇被ICML 2026接收的论文,把这个说法整个掀了桌子。论文题目叫《The Shape of Addition》(加法的形状),团队打开了大模型做加法时的内部活动,发现一件挺反直觉的事:模型很多时候,其实已经算对了。
错误发生在最后一步,把心里已经算好的答案,变成嘴上吐出的那个数字。就在这一步,模型像是手滑了一下,说出了隔壁的数字。
一条推文,掀开一个悖论
带火这篇论文的,是机器之心在X上发的一条论文解读贴。配图用的就是论文Figure 1:输入一道"三个十位数相加"的题,模型从高位到低位一个数字一个数字往外吐,右侧摆着一整排探针面板,实时读取模型脑子里在想什么。



▲ 机器之心发布的论文解读,配图为论文原始Figure 1:左侧是模型逐位生成答案的过程,右侧是六个探针同时读取的Ground Truth(真值)、Model Output(模型输出)、Correctness(对错)、Input Carry(输入进位)、Raw Sum(原始和)、Carry Potential(进位势)。这条帖子发布于2026年6月28日,收获61赞、7转发、3595次浏览。
先把矛盾摆清楚。同一个模型,你让它证明一道复杂不等式,拆解一道竞赛应用题,它常常能一步步写得头头是道。换成三个十位数相加,它却可能在某一位上出错,该输出6,写成了5。
更古怪的是:南大团队用一种叫探针(probe)的小工具伸进模型内部一查,就在模型准备说错的那一刻,它的内部激活里,同时能读出"正确答案是6"和"即将输出5"两个信号。
正确答案和错误输出,挤在同一段向量里。
这就是论文要回答的问题:两套互相矛盾的信息,怎么能在同一个空间里共存?
▲ 论文arXiv页面:Wen等人,《The Shape of Addition: Geometric Structures of Arithmetic in Large Language Models》,标注Accepted by ICML 2026,提交于2026年5月29日。
两个背景知识:高速公路和探针
要理解答案,得先弄清两个词。
Transformer每一层,可以想象成一条高速公路,术语叫残差流(residual stream)。信息从头到尾在这条路上流动,每一层负责往上面贴几张便条,供后面的层参考。
探针就是训练一个极简单的小模型,去问这条高速公路:便条上有没有写着"这一位该是几""进位是多少""这题算对了没"?如果探针能高精度读出答案,说明这段信息确实存在于激活里,不代表模型一定会拿它去做正确的事。
这也是多位数加法比看上去难的地方。每一位的正确输出,不只取决于这一列数字本身加起来是多少(原始和),还取决于右边更低位有没有进位过来。原始和是局部信息,容易算;进位却要一路累积右边所有列的信息,是个长程信号,更容易在传递中失真。
南大团队的实验设置说来简单:让Qwen3-4B(36层)做一万道"三个十位数相加"的题,把模型最后一层的隐藏状态一层层抠出来看。
内心的地图:数字住在盆地里,进位排成轨道
把最终层的激活丢进降维工具UMAP里可视化,会看到一幅相当规整的地图。
十个数字锚点,像十座孤岛。 模型准备输出6的时候,激活点稳稳落在6号岛附近;准备输出3,就落在3号岛附近。论文把这十个聚集区叫数字盆地(digit basin)。
放大看每座岛内部,还有更细的纹理。同样落在"3"这座岛上的点,会按真实进位,0、1、还是2,再分成几条平行的细线。模型不只记得"这是个3",还记得这个3是没有进位凑出来的,还是靠进位1凑出来的。它记得每个数字的来路。
而错误的点,几乎全挤在盆地和盆地的交界处,朝相邻的岛屿探头探脑。几何上的邻居恰好是数值上的邻居,这解释了一个业内早就注意到、却一直说不清的现象:大模型算加法出错,几乎永远是差一位,很少见到离谱的大数偏差。
▲ 科技行者的中文解读标题写道:"大模型做加法为何频频算错?它的'内心'其实已经知道正确答案。"这句话后面藏着的,正是数字盆地与进位纤维这套几何结构。
论文给这套结构起了个学名:等本位和轨迹(Iso-Raw-Sum Trajectory,IRST),只要某一列本身的和相同,不管进位怎么变,对应的内部状态会被一根连续曲线串起来。举个论文里的例子,原始和r=1时:进位0对应输出1,进位1对应输出2,进位2对应输出3。这三个状态,是三颗珠子串在同一根线上。
也就是说,加法在模型内部沿着一条条平行轨道滑动。挑哪条轨道,由这一列本身的和决定;滑到轨道上的哪个位置,由右边涌来多少进位压力决定。
手滑的机制:一个连续压力被取整的瞬间
进位这个东西,论文没把它当成非0即1的开关,而是提升成一个连续量,叫进位势(Carry Potential,Φ)。
算法说来简单:把右边每一列的原始和,按十进制位权折算成压力,一路加到当前位。比如右边第一列原始和是14,第二列是11:
Φ = 1.4 + 0.11 = 1.51,进位 c = ⌊1.51⌋ = 1
这个连续压力值,最后要取整才变成离散的进位0或1。麻烦就出在这一步。
模型对Φ的内部估计并不绝对精确,会带一点噪声,论文管它叫认知噪声水平(σ),概括了注意力被稀释、精度被压缩等各种误差来源。当Φ卡在整数附近,比如0.99或1.01,一点点噪声就能把它推过或拽回整数门槛,进位就此判反。反过来,Φ落在半整数附近,比如1.5,离两边门槛都远,再抖也抖不过去,几乎不出错。
论文把这个规律画成一条周期浴盆曲线:错误率在整数刻度附近尖峰,在半整数附近趋近于零,用真实数据拟合出R²≈0.80的吻合度。主设定下σ约等于0.05;随着要加的数字变多,三个数变四个、五个,σ也跟着涨(中文报道转述的数据大致是0.05、0.12、0.25)。"题目变难"这件事,第一次被换算成了一个可以拟合、可以追踪的噪声参数。
不止是好看的图:因果实验和读心纠错
光有一张漂亮的地图不够,团队接着做了两组实验,证明这条轨道真的在支配结果,不只是可视化凑出来的巧合。
第一组是沿轨道推动(steering):在同一条轨道上找两个相邻的稳定点,算出连接它们的方向,人为把模型激活朝这个方向推一把。结果是,越靠近盆地边界的状态,越小的推力就能把输出整个翻转;越是稳稳落在盆地深处的状态,需要越大的力气才能撼动。这条曲线呈现出类似相变的形状,说明进位压力握着方向盘,真正决定的是最终输出。
第二组更有实用价值,叫双流一致性检查:同一份激活,一路探针专门读"这一列本身加起来是多少",另一路专门读"进位压力有多大"。如果模型最终吐出的数字,跟这两路信号都对不上,系统就判定它滑出了轨道,按公式重新算一遍,覆盖模型自己的输出。
效果是:原始逐位准确率86.26%,套上双流纠错后升到89.56%。更能说明问题的是消融实验,把"进位"换成真实值,准确率能冲到96.0%;但只把"原始和"换成真值、进位仍靠模型自己猜,准确率才勉强到90.5%。瓶颈几乎全压在进位这一环,原始的列加法,模型很少出错。
这不止是南大一家在说
把镜头拉远一点,会发现类似的结论不止一家在讲。
2025年3月,Anthropic在一篇追踪Claude内部机制的文章里,观察过它做心算的路径。发现的是两条并行赛道:一条负责估算大概的总和,另一条专门钉死最后一位的精确数字,两条汇合才拼出答案。更耐人寻味的是,当你问Claude"你是怎么算的",它嘴上会一板一眼地讲标准的列式进位法,跟显微镜底下看到的真实路径对不上。
▲ Anthropic在2025年3月发布的《Tracing the thoughts of a large language model》,开篇写道:"我们不知道模型如何完成大多数事情。"这篇文章也发现,Claude嘴上讲的算法和它内部实际的运算路径,是两回事。
2026年5月,另一支团队Goodfire在Llama 3.1 8B里找到了一个类似的几何计算器:数字在网络第18层,是以一组圆周(模运算的傅里叶特征)表示的,加法被拆成好几个小模运算并行处理,同一套电路同时服务"7+9"和"周五之后两天是周几"这类共享加法结构的问题。
▲ Goodfire的研究《A Geometric Calculator Inside a Neural Network》:Llama 3.1 8B内部存在一个跨任务复用的通用加法模块,数字以圆形几何表示。
两边拼起来看,图景就完整了。Goodfire说的是数字本身长什么样,一个圆;南大说的是数字之间怎么滑动出错,一条轨道。计算被安放在流形上完成,无需查表或机械记忆。
这也是为什么开头那句吐槽的作者,后来又补了一句被反复引用的话。他的ID是@jaykrishAGI:
"Sometimes the model doesn't lack reasoning. It just crosses the wrong boundary."
「有时候模型并非缺推理能力,它只是跨过了一条错误的边界。」


▲ @jaykrishAGI在引用机器之心原帖时留下的这句话,精确概括了整篇论文想说的事:卡壳的地方,出在从连续状态转成具体数字的最后一步。
工程师的共鸣
这条推文下面的公开回复不算多,但每一条都戳在点子上。
一位常年跟自家模型死磕算术的工程师@xentryx留言:乘法除法都还凑合,一碰到进位就是噩梦。这条回复几乎是把论文的结论提前剧透了,瓶颈几乎全压在进位这一环,原始的列加法反倒少出问题。
▲ @xentryx的回复:长期在自家模型上被算术进位问题折磨,乘除法反倒算是省心的部分。
另一位回复者则认可了"进位势"这个框架本身,以及推理时做一致性检查的工程价值,这恰好是论文双流纠错方法想要落地的方向。
别把"内心知道答案"听成拟人化
有必要先纠正一个容易被过度解读的说法。"模型内心知道正确答案",不代表它有自我意识,揣着明白装糊涂。拆开来讲:内部表征里存在一个可以被线性探针解码出来的分量,跟正确答案高度相关,这属于几何上的可分性,是一项可以复现的工程事实。
但这个发现对做产品的人,有几条能落地的启示。
关键数字别信模型心算。涉及金额、库存、坐标这类不能错的字段,该强制走计算器或代码执行,就别指望模型自己数对位数。
评测该多报一项指标。现在的公开榜单大多只看"完全正确率",论文的建议是单独统计"差一位"的比例,这类错误在几何上是可预测的,跟"压根不会做"的错误性质完全不同,混在一起统计会掩盖问题的真实形状。
也别只看模型嘴上怎么解释。Claude会说自己是按进位算的,内部其实走了另一条近似路径;这次的论文同样提醒,模型吐出的思维链,可能只是事后拼凑的一套说辞,跟真正驱动输出的机制未必对得上。
论文和数据集已经开源,感兴趣的人可以自己跑一遍num3len10数据抽激活、画UMAP,亲眼看看那些红点是怎么挤在盆地边缘的。
写在最后
三个十位数加起来,对一台上世纪的计算器毫无难度;对一个能证明微积分定理的大模型,却可能在某一位上打滑。
这次的反差不再只是拿来当段子讲。南京大学团队把它拆到了神经元级别:模型心里有一条清晰的轨道,轨道上串着正确答案的所有零件,原始和、进位、乃至最终该报出的那个数字。问题出在把连续的内部状态压缩成一个离散数字符号的最后一瞬间,一点点噪声就能把答案推过边界,滑到隔壁。
高等数学题考验的更像是语言化的模式复用;三个数字相加,考验的是一套精密的数值状态机能不能扛住噪声。两种能力调用的是完全不同的资源,一个在模型里已经练得很扎实,另一个还没有。
下次你的AI助手又把简单加法算错,不必急着断言它什么都不懂,它大概率已经算对了,只是在报数字的那一刻,手滑了一下。