科技行者 2026-11-08 01:35:38
你有没有想过一个问题:为什么现在的大语言模型,无论做什么任务,都得靠同一套参数来硬扛?
写诗要用它,算数学题也要用它,查资料还是要用它。这就好比让一个人既当公司的会计,又当保安,又当销售,还得兼职修电脑。他或许都能应付,但没有一样是精通的,而且每次换任务都得重新调整自己的整个大脑状态。
这篇来自独立研究者安德烈·博奇科夫(Andrey Bochkov)的论文,提出了一个听起来有点反常识的想法:语言模型的"记忆"、"计算"和"执行"这三件事,其实不需要挤在同一套参数里完成。它们可以像一家公司里的不同部门一样,各自独立运作,再通过一套明确的接口把结果汇总起来。
这篇论文的特别之处在于,它没有急着宣称自己造出了多厉害的新模型,而是老老实实地把成功的、失败的、半成功的实验全都摆出来,告诉你哪里行得通,哪里行不通,行得通的地方到底证明了什么,又没证明什么。这种诚实,在一个总爱吹牛的领域里,挺难得的。
**拆开来看:三套各管一摊的系统**
先说说这个架构到底长什么样。
论文给它起了个名字,叫 FEM-ASM。
有限元方法(FEM):工程学里用来求解复杂物理问题的一种数值方法,核心思路是把一个大问题拆成很多小块(有限元),分别求解后再拼接起来。残差装配(ASM):把多个独立计算出的结果汇总、比对、调和成一个统一状态的过程。
作者特意强调,这个名字只是"架构上的灵感来源",不是说语言真的服从什么物理偏微分方程。他们不是在说"语言模型是一个物理系统",而是借用了工程学里"先分后合"的思路。
具体来说,系统里有三类角色。第一类是"文档元素",负责存储某一篇具体文档的局部优化状态,有点像公司里专门负责某个客户档案的员工,只管自己那摊事,不插手别的。第二类是"可执行元素",专门干那种必须精确无误的活,比如加减乘除这种算术运算,这部分完全不依赖神经网络的"模糊直觉",而是用一个固定的虚拟机硬算出来。第三类是共享的"神经场",也就是语言模型的核心,它接收前两类角色传来的"提案",然后做出最终判断。
这里有个关键设计,叫残差装配算子。
残差:这里指"外部提案"和"当前神经网络状态"之间的差值,衡量两者有多不一致。
当文档元素或可执行元素想往神经网络里"塞"信息时,系统不是粗暴地直接覆盖,而是计算一个加权残差,再用一个很保守的更新步骤(论文里设定的更新系数不超过 1)把这个差值"掺"进去。这样设计的好处是,理论上可以证明,只要这些外部提案本身是固定不变的,这一步操作绝对不会让系统的"内部矛盾程度"(论文称为一致性能量)变得更糟,最多打平。
这就像公司开会时,不同部门提交报告,会议主持人不会直接把某个部门的意见当成最终决议照单全收,而是把所有意见加权平均一下,再和现状做个妥协式的调整。如果不这样做,直接让某个部门的意见完全覆盖会议结论,一旦这个部门的报告有偏差,整个公司的决策就会被带偏,而且没有任何缓冲余地。论文里用数学证明了,这种"保守掺入"的方式,在提案本身不变的前提下,确实能让系统状态逐步逼近一个更一致的平衡点,而不会越调越乱。
但作者也诚实地指出了这套机制的边界:这个"不会变糟"的保证,只对那套明确写死的更新规则成立,一旦后面接上了神经网络自己学出来的修正步骤,这个保证就不再适用了。换句话说,数学上严谨的部分只覆盖了整个流程的一小段,后面交给神经网络自由发挥的部分,没人能打包票。
**无注意力的 Multi-Mesh:能跑,但跑不快**
论文里实现的第一个具体系统叫 Multi-Mesh,它最大的特点是完全不用现在主流的注意力机制。
注意力机制:Transformer 架构的核心组件,让模型在处理每个词时,能够"回头看"句子里其他位置的词,并自动判断哪些位置更重要。
Multi-Mesh 用的是固定的二进制编码(叫 Binary16)加上视觉化的 Unicode 表示,把文字变成一种"看得见"的图案输入进去,而不是依赖传统的、需要反复训练调整的词嵌入表。这套输入方式借鉴了作者此前关于"冻结视觉 Unicode 表示"的研究。
测试结果怎么样?
说实话,不算亮眼。在 HellaSwag(常识推理测试)上只有 29% 的准确率,MMLU(多学科知识测试)五次示例下的准确率是 25.05%,这个数字非常接近四选一选择题"瞎蒙"的理论基线 25%。换句话说,这个模型在很多标准测试上,表现得和随机乱猜差不多。
论文作者对此毫不回避,直接写明"这些结果证明了原型能做因果语言建模,但不代表有竞争力的通用推理能力"。
这一点挺难得的。很多论文会想办法把一个平庸的结果包装得好看一点,但这篇论文直接把"MMLU 接近随机水平"这句大实话写进了正文,没有藏着掖着。
**52809 份"重构记忆":能记住,但记不全**
接下来是整篇论文里最有意思的部分,也是争议最大的部分:外部记忆系统。
研究团队构建了一个版本化的文档存储,里面包含 52809 个独立的"记忆元素",总共占用了接近 17 亿个浮点数值的存储空间。这个存储方式很特别,它不是直接存文字原文,而是存一种"重构状态":
重构记忆:不是把原始文本原封不动地存起来,而是训练一个局部参数,使得之后能够"解码"还原出接近原文的内容,类似于只存一份压缩过的草稿,用的时候再尝试还原成完整文章。
这里有个数据特别扎心:实际测试下来,逐个词元(token)的还原准确率是 74.97%,大约四分之三。但如果看"整段话完全还原"的比例,10000 个测试样本里,只有一个样本做到了完全精确还原,比例是 0.0344%。
这个巨大的落差是怎么回事?论文给了一个很直观的解释:假设每个词元的还原准确率是独立的 75%,那么一段八个词元的话要全部还原正确,概率就是 0.75 的 8 次方,约等于 10%。放大到更长的句子,完全正确的概率会指数级下降。
这就好比你让一个记性不太好的朋友复述一段话,他每个字都有四分之三的概率记对,听起来还不错对吧?但如果这段话有二十个字,每个字都得记对才算"复述成功",那整段话全对的概率会低到让你意外。这不是朋友记性特别差,而是"单字正确率"和"整句正确率"根本不是一回事,一步步累积下来,误差会被放大很多倍。
更有意思的是存储效率的问题。论文算了一笔账:每个 64 词元的文档块,用这套重构记忆方式存储要占用 1536 字节,而如果直接用 64 个 uint16 类型的词元 ID 存原文,只需要 128 字节。也就是说,这套"看起来很聪明"的重构记忆方式,实际存储开销是直接存原文的 12 倍,这还没算上额外的索引、缓存和元数据。
论文作者非常坦率地承认:"这不是相对于原始词元 ID 的存储压缩"。
**找得到,但答不对:检索系统的两难**
既然记忆存了,接下来的问题是怎么把需要的那部分"翻"出来。
论文做了两套对比实验。第一套是"学习型检索器",让模型自己学着根据问题去匹配记忆库里的相关文档,结果表现很差。第二套换成了"固定规则候选生成器",用前缀匹配、滑动窗口、词袋等固定规则去生成候选,再用一个打分器排序。这套改良后的系统在 533978 个任务、5296 个元素的测试集上,候选召回率达到 99.6%,重排序后的精确命中率达到 97.7%。
听起来很厉害对吧?但这里有个重要的限制条件,必须加黑强调:
这些检索实验用的查询线索,来自原始证据的词元范围和答案在文档里的存储位置偏移量,属于"受控的可寻址性协议",不是真正意义上的"只凭一个问题就能找到答案"的检索系统。
换句话说,这更像是在考试前先给了答案在第几页第几行,然后测试"能不能翻到那一页",而不是真正测试"能不能理解问题去找答案"。一个可以实际部署、只靠用户提出的问题去检索的系统,还没有被验证过。
而且更打脸的是,在这套"开卷"条件下,加入正确证据后,答案词元的损失值是 6.6930;加入错误证据后是 6.7726;完全不给证据是 7.2544。乍一看加入证据确实有帮助,但细看会发现,"错误证据"带来的提升幅度,已经占了"从无到有"这个总提升的大部分,正确证据相比错误证据带来的额外提升反而很小。更尴尬的是,在这轮测试里,自由生成的问答准确匹配率是零。
这意味着,检索系统找对了地方,但最后让模型"开口回答"这一步,彻底失败了。
**算术执行:外部计算器管用,但得喂对格式**
如果说前面的记忆系统表现喜忧参半,那可执行元素(也就是让模型去调用一个"计算器"做算术)这部分,倒是展现出了比较清晰的正面结果。
论文设计了一个受限的虚拟机,只支持加减乘除和取模五种运算。关键的实验对比在于:计算结果算出来之后,怎么"喂"给神经网络,让它正确地把答案说出来。
这里对比了两种喂法。第一种是把运算结果变成一个全局向量,重复贴在输出的每个位置上,这种做法效果很差,在范围内测试只有 8.59% 的准确率。第二种是给每个输出位置单独提供"这个位置应该是什么词元"的具体信息,这种做法准确率直接飙升到 100%(范围内)和 85.94%(超出训练范围)。
这中间的差距大到有点夸张,从不到一成直接跳到满分。
为什么会这样?可以这样想:如果你让一个人把"答案是 12345"这句话写出来,你只告诉他"答案是某个五位数",他可能写得驴唇不对马嘴;但如果你直接告诉他"第一位是1,第二位是2,第三位是3……",他照着抄肯定不会错。模型也是一样,给一个笼统的"全局结果",它得自己猜每个位置该填什么;给出每个位置的具体目标,它只需要做"复制粘贴"式的渲染工作,难度完全不在一个量级上。
论文还做了一个替换实验:故意篡改计算器返回的结果,观察模型的回答会不会跟着变。答案是会变,这说明模型确实在"听"外部计算结果的话,而不是自己瞎编一个数字糊弄过去。这是个挺重要的验证,证明了这套"外部执行、神经网络渲染"的接口是真实生效的,不是摆设。
不过论文也提醒,这套 100% 的准确率,测的是"模型能不能复述外部算好的答案",不是"模型自己会不会算数学",这是两件完全不同的事。
**一次"开卷"演示:证据给了,答案变好了,但这说明不了"大仓库"有用**
论文最后还做了一个比较朴素但很诚实的实验:固定住模型的所有权重不变,只改变"能不能看到关键证据"这一个变量,测量答案质量的变化。
结果显示,完全没有证据时,每个目标词元的损失是 6.5716,准确率只有 12.10%;给了关键证据之后,损失降到 2.8073,准确率涨到 58.72%。
这个对比确实证明了"有没有相关信息可用"这件事本身很重要。但论文非常谨慎地指出,这个实验只测了"证据覆盖率从 0 变到 1"的效果,没有测试"把整个几十亿数值的存储库都加载进来会怎样"的代价和收益,也没有测量这种大规模检索在真实场景下的延迟和内存开销。
这就好比你证明了"考试时带一张写满重点的小抄能提分",但这不等于证明了"带整个图书馆进考场"同样划算,甚至可能因为找不到想要的那页反而更慢。
**写在后面**
读完这篇论文,最打动我的其实不是任何一个具体的技术细节,而是作者处理"失败"的方式。
现在大多数论文的套路是把成功的部分放大,把失败的部分要么藏起来,要么轻描淡写一笔带过。但这篇论文反过来了,专门用了好几个段落去讲"学习型检索器为什么失败了","为什么重构记忆的存储开销比直接存文本还贵 12 倍","为什么自由问答的准确匹配率是零"。这种近乎自虐式的坦诚,其实给了读者一个更真实的技术全貌:不是所有看起来聪明的设计都管用,很多时候最朴素的方法(比如固定规则检索)反而比"学习型"的方法更靠谱。
另一个让我反复琢磨的细节是,论文反复强调"这个结果不能说明什么"。比如算术实验里 100% 的准确率,作者立刻补一句"这测的是渲染能力,不是算术能力";检索实验里 97.7% 的命中率,作者立刻说"这是受控场景,不是真实问答系统"。这种自我设限的写法,一开始读起来有点啰嗦,但多读几遍会发现,这恰恰是在教读者怎么正确解读一个实验结果,不要被一个漂亮的数字冲昏头,而是要先问这个数字到底测的是什么。
这篇论文留下的最大悬念,其实是它自己也承认没有解决的问题:如果不给"作弊式"的证据坐标,一个真正只凭问题去检索、去回答的系统,到底能做到什么程度?这个问题,论文没有答案,留给了未来。
Q&A
Q1:FEM-ASM 是什么?
A:FEM-ASM 是论文提出的一种语言模型组织架构,灵感来自工程学里的有限元方法,核心思路是把语言模型的记忆、执行和神经网络协调这三件事分开管理,而不是全部塞进同一套参数里,再通过一个叫残差装配的机制把各部分的结果汇总起来。
Q2:这套系统的记忆存储效果好不好?
A:喜忧参半。论文构建了 52809 个记忆元素,占用近 17 亿浮点数值,逐词元还原准确率约 75%,但完全精确还原整段话的比例只有 0.0344%,而且存储开销是直接存原文的 12 倍,作者自己也承认这不算存储压缩。
Q3:论文里的算术实验说明了什么?
A:说明外部计算器算出的结果,如果按每个输出位置单独提供具体答案(而不是一个笼统的全局结果),模型渲染准确率能从不到一成跳到 100%。这证明了接口设计很关键,但这测的是模型复述计算结果的能力,不是模型自己会不会算数学。
【版权声明】本文内容来源于科技行者,版权归原作者及原媒体所有。本站仅作信息分享,不构成任何商业用途;如涉版权问题,请联系本站删除。
发布时间:2026-11-06 09:04:10
(第1/1页/共6825字/3阅)