主要观点总结
本文介绍了大语言模型在算术处理上的研究和探讨,包括空间基数、标签空间熵和子群质量等维度的研究,以及大模型在数学运算中的底层逻辑和启发式规则的发现。同时,文章还探讨了OpenAI-o1模型在推理能力上的提升以及COT技术在其中的作用。
关键观点总结
关键观点1: 大语言模型在处理算术时的独特方法
大语言模型在进行算术运算时并没有采用我们熟知的计算规则,而是自行发现一些符号上的统计规律。这种独特的模式识别方法被称为“符号学习者”,而非“逻辑学习者”。
关键观点2: 大模型数学运算的底层逻辑
大模型在进行数学运算时,通过自回归预测的方式,利用子群逻辑去计算。子群复杂度越低,模型的正确率越高。这种底层逻辑体现在模型的准确率呈U形分布,即头尾数字的准确率远高于中间数字。
关键观点3: 启发式规则的发现
通过探测激活神经元,研究者发现了处理数学计算的核心神经元——多层感知器(MLP)。这些神经元在进行数据预测时会被激活,它们通过一些启发式规则来识别计算结果。这些规则包括范围启发式、取模启发式、模式启发式等。
关键观点4: OpenAI-o1模型在推理能力上的提升
OpenAI-o1模型通过融入COT(思维链)技术,提升了其推理能力。COT技术能够将复杂问题拆解成简单步骤,使得大语言模型能够完成更复杂的数学计算。然而,这种提升是否真正意味着模型学会了数学规则,还是仅仅进行了模式匹配,仍需进一步探讨。
正文
×
16
=
20813
×
8
=
104
最终:
208
+
104
=
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,这就是两个子群)
这种方法基本上就是找数字对应的一种规律,而非计算。在本质上还是统计性的规律。就是根据每位数学符号在子集中出现的位置,去寻找它对应的数字出现的规律。
而当一个乘法计算可以拆出来的子群越简单的时候,你越容易找到映射中的对应规律。所以作者只要证明,子群越复杂,大语言模型越不容易算对就可以证明它就是用这种方法去做数学题的。
作者用了三个维度去定义子群的复杂度:
●
对两位数相乘:第一个数可以是10-99,第二个数可以是10-99,所以总共可能的映射数就是 90 × 90 = 8100
●
比如在24X17=408这个乘法运算中:最后一位8相对容易预测(只需看24和17的个位就能得出来),因此熵高,而中间的0比较难预测(需要考虑进位等多个因素),因此熵低。
●
还是看24X17=408:最后一位8有明确规律:7×4=(2)8,子群质量就高;但中间的0需要考虑:2×1和7×4的和再加进位,子群质量就低。
●
子群质量越低,子群越复杂
一番实验下来,作者发现,如果不改变空间熵,单纯在训练时把乘法计算的结果都乘2,或者都加一个数,子群复杂度没提升,模型的性能也基本没变化。