为什么LLM(大语言模型)无法对数字进行准确运算?

LLM(大语言模型)无法对数字进行准确运算的底层原因是什么?先看下面,一本正经的胡说八道
)AI数字计算翻车示例:

图1- 智谱GLM-CodeGeeX

图2- 阿里-通义灵码

**为什么简单的数学计算问题,AI不会做呢?以下是从网络查阅到相关资料。
**

“LLM能通向AGI”这一观点的反对者经常提这个问题:你们整天吹LLM会达到AGI,可为啥大模型连最简单的“多位数加法”都做不好?这质疑对很多AGI信奉者来说是很扎心的,不好反驳,因为大模型做多位数加法这种简单数学确实有困难。不过,目前基本已能理清其主要原因,大部分也获得了解决,我归纳了下,有如下几点:

其一,LLM的 Tokenizer对数字切分问题

早期LLM的Tokenizer一般不会对数字进行特殊处理,经常把连续的若干数字切在一起形成一个Token,比如“13579”,可能被切成三个Token ,“13”是一个,“57”是一个,“9”是一个Token,类似这种。谁和谁被切在一起组成Token,这取决于做Tokenizer的数据集合里的统计情况,俗称看命。在这种不确定哪些数字片段组成一个Token的情况下,LLM要想做对多位数字数值计算,不说不可能,即使可能也是非常困难的。

不过,这个问题早已被解决掉了。我记忆中最早看到解决这个问题的公开文献是LLama-1的技术报告(23年2月),里面提到了每个数字会被单独切分成一个Token,之后这基本是个标准做法,目前绝大多数大模型应该都是这么做的。

把每个数字单独切开,这是必要条件,但是不充分,不是说这么做了之后LLM就能很好地做数学计算了。

其二,数字序列输入LLM的顺序问题

通常我们让LLM做数学题,都是正向输入的,比如要让LLM计算“13579+24680”,就按照这个顺序输入,高位在前,低位在后。但是………这么做从大模型的运行机制角度看,很明显是有点问题的(您可以想下为啥会有问题)。正确的做法应该是逆序输入,就是把“13579+24680”转成“97531+08642”,每个数值低位在前,高位在后。经过如此简单改造,LLM计算多位数加法效果提升非常明显(可参考下面的图2)。

这是为啥呢?其实好理解。我们知道,LLM是通过Next Token预测,一次输出下一个Token来生成结果的。如果你按照“13579+24680=”顺序输入给LLM,Next Token就要求先输出计算结果的最高位,这意味着LLM必须在内部把完全正确的加法结果38259算完,而且得找地方存起来,然后再先输出高位3,再输出次高位8(这种类似想好了再说)……这无疑人为给LLM增加了学习难度,不匹配LLM这种一次产生一个Token的模式(Next Token这种模式类似边说边想,而不是想好了再说,GPT在这方面确实有明显弱点)。即使是我们人类在计算多位数加法的时候,也是先把两个运算数值串中的各个数字由低位到高位一一对齐,然后从右到左,也就是先算低位两个数字加法,如果有进位则把进位往高位传。

从低位往高位算降低了学习难度,这等于把一个复杂的多步推理问题,分解为连续的两个单位数加法的简单问题。两个单位数加法的组合空间相当有限,仅有100种组合(10*10),再加上有没有进位的两种情况(有进位/没有进位),则两个单位数加法只有200种组合可能性,这个组合空间很小,要让LLM学会这个看上去难度不大,哪怕你硬记也记住了。

这是为何逆序输入数字能明显提升LLM数学计算能力的原因,一方面极大降低了学习难度,另一方面比较匹配LLM的Next Token这种“边说边想”的输出模式。

其三,LLM数字对齐问题

即使把数字逆序输入给LLM,整体效果虽然有明显提升,但仍然不足够好。前面提到过,人在计算多位数加法的时候,首先需要把两个数值串对应位的数字从低位到高位对齐,然后从低位到高位计算,这样学习任务就比较简单。现在我们逆序输入数值,可以保证让LLM由低位到高位顺序运算,但是为啥效果仍然不够好呢?问题出在数字对齐上。

目前研究发现,LLM在做数学运算的时候,经常对不齐相应位置的数字,比如“13579+24680”,3本来应该对齐4,但是LLM经常把3对到4附近的数字,比如2或者6上,这自然会产生运算错误。数字对不齐,这锅得Transformer里的Self Attention或者Position Embedding来背,说明相对位置编码(PE)或者检索字符(MHA)有问题。

目前解决数字对不齐有两种很有效的做法。一种是加入位置提示(Hint),比如“13579+24680”,每个位置加入提示字符,形成“a1b3c5d7e9+a2b4c6d8e0”这种输入形式,相同位置数字有个共同的提示字符,这很可能利用了Induction Head的作用(我猜的),可以有效帮助LLM对齐数字。

另外一种做法是对每个数字Chunk单独引入新的位置编码(Abacus Embedding),如下图所示:

图1: Abacus Embedding(from: Transformers Can Do Arithmetic with the Right Embeddings)

对于每个数字块,第一个字符引入位置编码1,后续数字依次递增。这样,因为相同位的数字有相同的位置编码,所以有利于解决LLM数字对不齐的问题。

其四,LLM长度外推能力弱

LLM长度外推能力弱的意思是:比如我们在训练LLM的时候,LLM见过的最长的数字串长度是10位,如果训练数据够多,LLM做10位数以内的加法问题不大,但实际使用的时候,若给出20位长度的数字要求做加法,就容易算错。“没在训练过程中见过类似长度的就做不好”,这就是LLM长度外推能力弱的表现。

长度外推能力弱这个责任,Transformer里的Position Embedding需要扛起来。目前研究结论是,起码对于数值运算来说,FIRE(Functional Interpolation for Relative Position Embeddings )是长度外推能力最强的相对位置编码。

图2:FIRE外推能力较强,即使不把数字逆序输入,外推能力也能达到很好的水准 (From:Transformers Can Achieve Length Generalization But Not Robustly)

增强数值计算长度外推,只用FIRE也不够,在训练过程中还要配合“Randomized Position Encodings”技巧,才能大幅增加LLM数学运算长度外推能力。所谓“Randomized Position Encodings”,我们拿Abacus Embedding做为例子来说明,比如训练数据中包含的数字最大长度为10,但是我想外推到100位的多位数加法。那么,在训练的时候,数值块中第一个数字的Abacus位置索引不要从1开始,而是在比如[0,100]之间随机取一个数值,后续数字位置索引在这个随机数基础上递增,以保持数字索引顺序。当然,同一个加法运算涉及到的两个数,都要采取相同的起始编号(随机抽一次,两个数同时用),这样才符合上面讲的解决数字对齐问题的思路。

训练时候随机抽,但在实际运用的时候,恢复从1开始的起始编号。这就是“Randomized Position Encodings”的具体含义与做法。它本质上做的是:在训练的时候,就把没有见过的[11,100]之间的外推位置,学到对应的Position Embedding,这样将来哪怕真碰见了这么长的位置编码也不怕。这么个思路。

FIRE结合“Randomized Position Encodings”,以及上面提到的逆序输入和数字对齐,最长的长度外推能力可以达到6倍左右,就是说训练时见过的最大数值长度如果是10位,那就能支持60位长度的外推运算能力。

其五,大模型幻觉(个人猜测,无依据)

采取上述一系列措施,大体能解决较长的数字加减法或乘法问题,比如100位长度加法准确率可以达到92%到97%之间。但是,仍然有不太低的错误率,而且随着长度加大,错误率会更高。

也就是说,看上去很容易的问题,LLM能解决得还不错,但不完美。这又是为啥呢?我个人猜测:这估计跟大模型幻觉脱不了干系。假设LLM输出Token有一个量化的幻觉衡量标准叫做“幻觉率”,就是说LLM输出100个Token,有多少是幻觉Token,如果有3个,那“幻觉率”就是3%。幻觉率并不好测量,因为有些幻觉Token你觉察不出来,比如生成创意问题,里面肯定有幻觉Token,但是你感知不到。只有输出答案每一个都有标准答案的场景,才能正确检测大模型的“幻觉率”(目前也有用事实性知识来量化测量大模型幻觉程度的)。

我觉得多位数加法可能是个检测大模型“幻觉率”的好的场景,因为输出结果每一Token都有标准答案,而且目前该做的改进也基本都做了,从错误分析来看很难再找出系统性的错误方向,那剩下的错误貌似只能靠幻觉来背了。之所以大模型仍然有3%到7%的加法运算错误,大概因为目前大模型的幻觉率在这两个数字之间,所以每输出100个数字Token,就会有相应比例的幻觉Token,导致计算错误 。

当然,个人猜测未必对。如果万里有一是对的,这意味着,如果幻觉问题不解决,LLM的长数字运算很难达到完美准确率,基本无解。当然你说可以用外挂计算器,那是另外的思路,不在这个主题的讨论范围。




零基础如何学习大模型 AI

领取方式在文末

为什么要学习大模型?

学习大模型课程的重要性在于它能够极大地促进个人在人工智能领域的专业发展。大模型技术,如自然语言处理和图像识别,正在推动着人工智能的新发展阶段。通过学习大模型课程,可以掌握设计和实现基于大模型的应用系统所需的基本原理和技术,从而提升自己在数据处理、分析和决策制定方面的能力。此外,大模型技术在多个行业中的应用日益增加,掌握这一技术将有助于提高就业竞争力,并为未来的创新创业提供坚实的基础。

大模型实际应用案例分享

①智能客服:某科技公司员工在学习了大模型课程后,成功开发了一套基于自然语言处理的大模型智能客服系统。该系统不仅提高了客户服务效率,还显著降低了人工成本。
②医疗影像分析:一位医学研究人员通过学习大模型课程,掌握了深度学习技术在医疗影像分析中的应用。他开发的算法能够准确识别肿瘤等病变,为医生提供了有力的诊断辅助。
③金融风险管理:一位金融分析师利用大模型课程中学到的知识,开发了一套信用评分模型。该模型帮助银行更准确地评估贷款申请者的信用风险,降低了不良贷款率。
④智能推荐系统:一位电商平台的工程师在学习大模型课程后,优化了平台的商品推荐算法。新算法提高了用户满意度和购买转化率,为公司带来了显著的增长。

这些案例表明,学习大模型课程不仅能够提升个人技能,还能为企业带来实际效益,推动行业创新发展。

学习资料领取

如果你对大模型感兴趣,可以看看我整合并且整理成了一份AI大模型资料包,需要的小伙伴文末免费领取哦,无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

在这里插入图片描述

部分资料展示

一、 AI大模型学习路线图

整个学习分为7个阶段
在这里插入图片描述

二、AI大模型实战案例

涵盖AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,皆可用。
在这里插入图片描述

三、视频和书籍PDF合集

从入门到进阶这里都有,跟着老师学习事半功倍。
在这里插入图片描述

在这里插入图片描述

如果二维码失效,可以点击下方链接,一样的哦
【CSDN大礼包】最新AI大模型资源包,这里全都有!无偿分享!!!

😝朋友们如果有需要的话,可以V扫描下方二维码联系领取~
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值