AI未来指北作者 郝博阳
编辑 郑可君
今年七月,“9.11和9.9谁更大”这个简单的问题,竟让大多数最先进的大模型都翻了车。根据机器之心的测试,15个主流大模型里,有超过一半都没答对。连GPT-4o和Claude 3.5 Sonnet这两个顶尖模型都是一通操作猛如虎,结论全是不靠谱。
这件事,引发了AI圈内关于AI符号理解能力的大讨论。
到了十月,苹果发表的一篇论文,更是认为大语言模型缺乏解决数理问题的逻辑推理能力。
在论文中,苹果的研究者发现,只要稍稍更改现有测试集里的数字或词,大语言模型的正确率就会显著下降。如果再加上一些新信息,比如多增加一个条件(把小明花100买苹果,拆成花100买苹果和梨),模型的性能则下降地更为明显。
所以他们得到了一个结论:大语言模型更像复杂的模式匹配,而不是真正的逻辑推理。
但是,用修改测试集的方法去证明大模型不会算数,还是有点隔靴搔痒。
还好,近期的两篇论文用更底层的角度去拆解了它背后的模式匹配:大模型绕过了计算规则,在用一种全新方法学数学。这种学习方法和人类基于原理和公式计算的逻辑推理完全不同,更像是AI自己寻找出了某种规律和模式。
更重要的是,研究大语言模型如何处理算术这一最基础的逻辑运算,能帮我们判断AI是否真的具备推理能力。这是生成式AI这波浪潮中最引人注意的一个核心问题,它很可能规定了AI的上限。
在本文中,我们还会根据另外的研究,去探讨行业内找到的最新推理解药COT(思维链),是否能够承担起逻辑推理的能力,拯救AI不会算乘法的困境。
大模型理解的数学模式是对应,而非算法
想要看大语言模型到底有没有学会数学规律,更直接的方法是教给它规律,看它会不会用。
莱斯大学十月发表的一篇论文就用了这种方法。他们选择教给语言模型乘法法则,看看效果如何。
按照数学的计算逻辑,乘法一般是通过将运算过程拆成“部分积”,并通过规律加和得出结论的。
比如13 × 24 = 312这个公式,就可以拆成 10×20 = 200、10×4 = 40、3×20 = 50、 3×4 = 12,最后加在一起等于312。除了这种方法外,在历史上的乘法计算还主要会运用到重复加法、格子计算法和埃及乘法三种方法。
也就是说,如果模型是按我们理解的计算方法做题的话,它一定是沿着这几种部分积的方式去解决乘法问题。
那事实确实如此吗?
作者对此做了个实验。挑选了两个小开源模型Gemma-22B和 Llama-3.1-8B,先用完整的乘法任务训练模型(如 13 × 34 = 442),然后测试模型是否能识别各个部分积(如 13 × 30 = 390)。结果发现,经过训练的模型对除了重复加法之外的“部分积”识别能力都有增强。
(黄色的是学之前的计算正确率,棕色的是学之后的计算正确率)
看起来效果不错,但仔细想想其实并不合理。如果模型真是按照部分积的计算规则去计算,它应该也只会用其中一种部分积方法计算,不可能每种方法的识别能力都大幅提升。就像我们在上学时候学了一种计算的方法,一般都会习惯性的沿用这种方法,不太会去用其他的解决方法。
为了继续验证,文章作者先把“部分积“这部分教给模型,再让它做对应的完整乘法题。按照上面的理论,如果模型真的学会了乘法计算,那应该做完整题目的正确率也大幅上升。结果不但没有,正确率还比训练之前低了。
(上面一列是先教完整的,去识别部分积,结果都是增加;下面一列是先教部分积,让模型再算完整的乘法,结果都是减少)
这就证明了,模型确实没有用我们人类常用的计算方法(部分积)的方法在做乘法题。因为,如果模型真的在使用部分积计算,那它会选择一种特定的计算方法。而教给它部分积,它应该能更好地完成计算。
那大模型到底是按什么逻辑在做题呢?
它有一套自己的底层逻辑进行数学运算,叫自回归预测。
自回归预测就是每一步预测都只预测一个位置,并依赖前面的结果。算 13 × 34 = 442,它要先得出个位的2,再得出第二位4,最后得出百位的1。
而在数学中,有一种方法的操作逻辑和这个很像,叫子群法(Subgroup)。它就是把计算中的每个位数都拆成一种对结果某个位数的映射关系。
比如,在两位数乘法 A₁A₂ × B₁B₂ = C₁C₂C₃C₄ 中,可以把任意的A₁,A₂,B₁,B₂的子集和C₁,C₂,C₃,C₄的子集建立起一些对应的映射关系。(A₁,B₁) → C₁ 就是其中一个子群。这个映射会单独的推出C₁,C₂,C₃,C₄的每个数,和自回归非常相似。
(在本图右边,通过A1、A2推C1,用B1,B2推C4,这就是两个子群)
这种方法基本上就是找数字对应的一种规律,而非计算。在本质上还是统计性的规律。就是根据每位数字符号在子集中出现的位置,去寻找它对应的数字出现的规律。
而当一个乘法计算可以拆出来的子群越简单的时候,你越容易找到映射中的对应规律。所以作者只要证明,子群越复杂,大语言模型越不容易算对就可以证明它就是用这种方法去做数学题的。
作者用了三个维度去定义子群的复杂度:
一番实验下来,作者发现,如果不改变空间熵,单纯在训练时把乘法计算的结果都乘2,或者都加一个数,子群复杂度没提升,模型的性能也基本没变化。
但如果采用Moduler的方法(具体见下方解释),让模型只计算最后一位、或者两位来减少空间熵,降低子群复杂度,则模型计算的正确率就会大幅上升。
这种子群复杂度越低,模型的正确率越高的情况,就说明了模型确实是很有可能按照子群的逻辑去算算数的。
之后,作者还给了另一个更关键的证据。
在过去业界的推测中,模型进行算术运算时,准确率从右到左会逐渐降低。因为模型是从右向左一个个预测数字,如果出现错误会累加导致结果数位越大,越容易出错。但作者发现并非如此:模型在做计算时,其准确率是呈U形分布的,两端高、中间低。头尾两个数字的准确率能达到95%以上,而中间数字连10%都不到,而且数位越多,准确率越低。
虽然传统方法解释不通,但按子群的逻辑,这就是完全合理的。
因为首位(C₁)主要由参与乘法的两个数中最高位数字决定,末位(C₅)则是主要由个位数字决定,这两位映射关系简单。越靠中间位置的数字越需要考虑多个输入位的组合,映射关系复杂,子群质量低。因此,其正确率就是按U型分布的。
这一套证明下来,基本可以断定:大模型在数学运算中并没有用到我们熟知的计算规则,而是在自行发现一些符号上对应的统计学规则。论文作者将其称为“符号学习者”,而非“逻辑学习者”。
那大语言模型的这种“新数学方法”,在不断学习符号概率时,到底学到了什么规则呢?
模型找到的数学规律是什么样的?
另一篇同样发表在10月末的论文就在试图更进一步找到这些语言模型运算的规则。
论文作者通过对激活神经元的探测,发现了处理数学计算的一些核心神经元:多层感知器。它就是注意力头确认token之后负责进行数据预测的计算部分。当计算时,MLP层被激活较多,而只有少量的注意力头被激活。而就算是激活较多的MLP层神经元,也大概只占总神经元数量的1.5%。它们就是计算过程中的模式识别器。
那这些MLP层在进行着怎么样的数据预测呢?作者举了个例子,针对226 - 68 = 158这个减法运算而言,它一共经过了三个可识别的神经元。第一个是检测第二个数68是否在模50余[5,25]的范围内(就是指把一个数除以50后,余数是否在5到25之间);第二个是检测这个答案是否在[150,180]的范围内;第三个则是检测检测这个减法过程结果除以10的余数是否为8。最后,满足这三个条件的数只有158。
这套计算方法看起来和我们的正常逻辑完全不一样,就算是统计规则也是一套非常绕弯子的规则,完全不按套路出牌。但这就是大模型在做数学计算时运用的一系列规则。
论文作者把它们称为”启发式规则“,因为它们最多能启发大模型去找答案,而不是给出一套严格的算法去计算出答案。
论文作者一共发现了5个可识别的“启发式规则”类型,包括:
实际上这五个种类的“启发式”可以被简单理解成两种模式。
一种是通过之前的训练直接预测结果,可以说是“直接启发式”,但它不是给定结果,而是给一个范围。这一方面可能是训练数据本身不足以给出直接结果,另一个是直接给出结果的模式在数据上容易形成过拟合。
另一种则是找到一些对于结果的规律,间接去猜测结果数的属性。这可以被称为“间接启发式”。它是用之前的训练去预测结果可能具有的一些数学属性,比如模式启发式、取模启发式都是这种。
但无论哪种,都还是一种模式识别,而非对真正运算规则的掌握。
作者在这个过程中测试了一共四种模型,最大的是Llama3-70B。虽然这个模型确实展现出了最复杂和成熟的启发式规则系统,但其依然仅仅是启发式的。因为这就是由自回归模型的本质决定的。
至此,现阶段基于Transfomer架构的自回归模型学不会逻辑推理和规则这件事,基本上可以下个结论了。
这一倾向其实不光在语言模型和算术领域出现,在字节最新的一篇论文中,他们测试了图像生成模型是否能理解物理规律,结果依然是否定的。
他们发现,模型采用的仍然是“基于案例”的学习方式,而非抽象物理规则,并且其理解的优先级也非常倾向于表征特征,而非规律特征。是以颜色 > 尺寸 > 速度 > 形状排列的。
最后,他们对模型进行了Scaling Up,拓展了其大小,结果表明单纯扩展规模并不能实现模型对基础物理规则的发现。
其本质根源也许正是在于自回归模型的自身限制。
所以,也许杨立昆说的是对的?
别急,这不是还有OpenAI-o1呢吗?这个号称在推理方面做出了范式级转变的新模型,是不是就能补足Transformer仅能作为“模式识别者”的不足呢?
OpenAI-o1能让大模型学会真正的逻辑吗?
想回答这个问题,我们得知道OpenAI-o1在推理能力的核心提升。
根据o1的官方文档,其提升推理能力的秘诀就在于将COT(思维链)这项技术融入了其中。
根据23年一篇北大的论文,COT技术对推理的提升主要来源于在对复杂问题的拆解能力。
比如说一道数学题,通过COT可以把它拆解成一步步的简单步骤。这样就可以把一个复杂的运算拆成数个简单的运算,一步步进行下去了。如此,大语言模型就能完成比较复杂的数学计算,如四则运算了。
它的训练也非常简单,就是在后训练阶段加入人工合成的示例集微调,其中对于每个问题,
这相当于降低了之前论文提到的子群的复杂性,这样里面解题的每个步骤都在Transfomer模型本身的模式识别范围内。
从论文给出的例子中,比如在处理3x+3y+12z=6这个公式时,模型会先对所有数都除以3,得到x+1y+4z=2,再将它与其他多项式相减。它对步骤的拆解非常接近我们“按照数学计算规则”的做题流程了。
作者还尝试了长度外推(length extrapolation)实验,去测试模型的这种步骤拆解是否有泛化能力。他发现,即使仅有3层的Transformer架构模型,在长达18个数的运算序列上仍然保持了相当高的准确率(虽然有所下降)。而在训练之中用到的数据最多只有15个数之间的运算。这说明模型并不是单纯记忆,而是学会了其中的某些规律,并组合这些规律去求解更难的问题了。
作者由此乐观的判断说,模型通过COT是真正的学会了数学规则。只要在训练过程中给出的多项式长度足够丰富,Transformer+COT这个组合应该可以理解所有的数学规则。
但是否真是如此呢?
就论文给出的证据来看,我们完全可以将COT训练过程,理解为模型学习识别和模仿特定的"问题拆解模式"。在训练数据中,模型接触到大量按照特定格式展示的分步计算过程,从而学会了如何将复杂计算分解成一系列简单步骤。
然而,这种模式识别能力与真正理解数学计算规则是有本质区别的。如果一个模型真正掌握了数学运算规则,它应该能够处理任何符合这些规则的计算,而不受训练数据模式的限制。虽然实验显示模型能够处理比训练数据更长的算式,表现出了一定的泛化能力,但随着长度增加准确率逐渐下降的现象,恰恰说明模型更可能是在进行模式匹配和应用,而非真正理解了数学运算的本质规则。
另一篇由COT论文作者,前OpenAI研究员姚顺雨参与的论文也显示:即使是当下最先进的经COT加持的模型OpenAI-o1,也还是逃不过自回归模型所表现出的概率偏好。
在针对四个任务的实验中,虽然o1-preview的波动表现比起其他模型要小,但依然训练数据越多,输出概率越高时,模型的表现越好。
(横轴表示输出的对数概率,数值越大(越接近0)输出概率越高。 纵轴表示准确率)
但无论如何,在COT的加持之下,模型确实在思维模式上更接近我们人类推理的“形式”,能用我们熟悉的方法做数学了。
但这条路能否真正通向对于规律的理解,至少当下还不明确。