数学吧 关注:844,647贴子:8,585,499

【科普】GPT的数学能力

只看楼主收藏回复



IP属地:北京1楼2023-08-14 16:31回复
    被楼主禁言,将不能再进行回复
    占领2楼


    IP属地:贵州来自Android客户端2楼2023-08-14 16:33
    回复
      自从LLM(大语言模型,Large Language Model)走进公众视野,这些模型是否拥有真正的智能一直是人们非常关注的问题。来自OpenAI公司的模型——GPT,作为全球LLM的领头羊,其表现一直作为评估人工智能表现的标杆,后续推出的LLM在各方面的评估多少都会与GPT的相应表现作对比,以发掘模型中可改进的地方。
      GPT在文本生成这方面几乎无可挑剔。大家平时可以用到的GPT-3.5已经可以完美满足绝大多数的文本生成任务,而GPT-4做得更好;甚至可以通过GPT生成或者解释代码,在代码不算非常复杂的情况下也能达到不错的效果。只有一项技能是人们不时所诟病的,那就是GPT的数学能力——在拥有渊博数学知识(划重点)的同时却经常犯低级的计算错误。直到今天,GPT提供的数学问题的解答不能作为可靠的参考答案。
      本文将针对GPT的数学能力进行讨论。使用的素材主要参考一篇关于GPT-4早期实验的论文。由于GPT-4是目前市面上最先进的模型(不考虑专门为了数学能力而微调的LLM),有些内容既然GPT会犯错,那其他模型犯错的可能性只会更高。
      注意事项:
      1. 文中GPT-4的实验数据来自GPT-4早期版本的实验,后续版本的实验结果可能会稍好,但整体趋势将大致相同。
      2. 下文中GPT-4的回答中包含了错误的论证,请小心甄别。
      3. 对题目和解答的翻译没有使用GPT。文章的其他部分也没有用GPT生成。
      4. 全文长度在8000字以上,并包含比较长的人机对话,尽可能耐心地读完。


      IP属地:北京3楼2023-08-14 16:33
      回复
        一、背景知识
        1. 什么是数学能力?
        这个问题并非一个有良好定义的问题。即使放在本文的限制下,即:
        对于模型来说,怎样算是真正理解了数学?
        仍然是界限非常模糊的问题。论文的作者给出了他的解释:
        (1) 创造性思维。对于模型来说,它需要找到合理且相关的命题、计算、变换等步骤,来构造一条通往正确结论/答案的途径。由于需要直觉性的,启发性的猜想,这个步骤被视作解决数学问题中最关键的一步。
        (2) 技术上的熟练度。具体指进行模式化的推导和运算,比如对函数求导,或者分离方程中的某一项。对经过了大量训练的人类来说很简单,但对模型来说则未必。
        (3) 批判性思维。具体指对步骤的检查和进一步解释,比如解释为什么要用到某条定理,而使用这条定理会对接下来的推导产生什么样的影响,以及为什么可以用到这条定理。这也是至关重要的一步,因为这允许模型发现证明过程中潜在的错误并改正。
        2. GPT生成文本的原理
        GPT生成文本靠的是Transformer算法。算法的具体步骤比较复杂,此处只简单概括:对于输入的文本,Transformer根据输入计算出下一个文本是(某个字)的概率,根据计算出的概率分布生成文本。比如输入为 “I”,Transformer计算出下一个文本为 “want” 的概率是0.3,“have”的概率是0.2,其他单词的概率更低,那么就输出want。
        此处已略过海量的技术细节,而且生成的原理与上述不完全相同,但大致是这样。具体细节可以看经典论文《Attention is All You Need》,或者其他关于Transformer的科普。


        IP属地:北京本楼含有高级字体4楼2023-08-14 16:35
        回复
          占个楼先


          IP属地:青海来自Android客户端5楼2023-08-14 16:35
          回复
            二、对基础的文字题作答
            GPT-4可以解答基础的文字题(数学应用题)。下面是实验人员提出的问题,并把GPT-4和ChatGPT的回答作对比:

            题干翻译:一年中,一群兔子的数量首先要变成原来的a倍,然后到年中的最后一天被人拿走b只。假设在第一年的第一天有x只兔子,3年整后有27x-26只兔子,那么a和b分别是多少?
            可以看到,GPT-4完美地解答了问题,从过程到答案滴水不漏。另一方面ChatGPT从一开始就错误地理解了问题(n=ax),结果未能得出答案。
            GPT-4的解答印证了上个章节中对模型数学理解的解释。解答中体现了对题意的正确理解并列出了正确的方程,印证了第一条;正确地展开了多项式,并在后面的方程中正确化简,体现了第二条;全程对所做的操作进行解释,体现了第三条。
            当然,这么简单的问题只是热身。如果问其他的问题,结果会如何?


            IP属地:北京7楼2023-08-14 16:37
            回复


              IP属地:河南来自Android客户端8楼2023-08-14 16:38
              回复
                三、更复杂的问题
                实验人员对GPT-4提出了这个问题。

                翻译:
                人:注意到上面提出的问题(即上一章节的文字题)可以重新组织一下,即一个关于跟自己复合三次的函数的问题。你能重新组织一下这个问题吗?
                AI:好的。我们可以说,我们想找到一对a和b的值,使得如果f(x)=ax-b,那么f(f(f(x)))=27x-26。
                GPT-4正确理解了问题,所以它重新组织的问题完全贴合题意。接下来,实验人员将这个问题加以变化,然后再次询问。

                翻译:
                人类:下面我们考虑一下你提出问题的一个变式。我们不知道什么f(f(f(x))),而是拥有一个跟自己复合了k次的函数f。k等于多少时,这样的线性函数才存在?
                AI:对于任何值k,总有一个线性函数f(x)=ax-b使得f^k(x)=cx-d对于某些常数c,d成立。为了证明这个,我们可以归纳。对于k=1,我们1有f^1(x)=ax-b,正是我们想要的形式。现假设对于某个k,我们有f^k(x)=cx-d。那么:
                f^(k+1)(x)=f(f^k(x))=f(cx-d)=a(cx-d)-b=acx-ad-b
                仍然是我们想要的形式,其中cfl=ac,dfc=ad+b。所以根据归纳,我们证明了对于任何k,存在一个线性函数f(x)=ax-b使得f^k(x)=cx-d对某个c和d成立。


                IP属地:北京9楼2023-08-14 16:41
                回复
                  从上面的证明可以看出,GPT-4发现了解决问题的关键——使用归纳法,却没有正确地理解题意:在变式中,c和d变成了已知常数,所以上面的证明搞错了未知数。实验人员试图给模型指出这个问题。

                  翻译:
                  人类:我不太能理解。注意到变式问题和原问题的区别仅在于,我们不再有f(f(f(x)))=27x-26,而是f^k(x)=27x-26。你的答案贴合这个问题吗?
                  AI:是的。我的答案证明了对于任何k,总存在一个线性函数f(x)=ax-b使得f^k(x)=cx-d对某组常数c和d成立。特别地,我们可以选择c=27,d=26来满足条件f^k(x)=27x-26。然后我们可以用对比系数的方式解出a和b。
                  人类:但是在你上一个解答中,c和d前面的量词是“对某些c和d成立”。你发现问题了吗?
                  AI:是的,我发现问题了。量词应该改成“对任意c和d”。否则这意味着只有一对c和d对于给定的一个k值满足条件,而这是不对的。
                  ……相信看到这里的各位有些急了。实验人员没有放弃,继续纠正模型:

                  翻译:
                  人类:上面的问题把c和d的值给定了。现在你能改正你的答案吗?
                  AI:没问题,我将如下修改我的解答:对于任意k,总存在一个线性函数f(x)=ax-b使得f^k(x)=27x-26。为了证明这个,使用归纳法。对于k=1,我们有f^1(x)=ax-b,而当a=27,b=26时恰好等于27x-26。现假设对于某个k,我们有f^k(x)=27x-26。那么:f^(k+1)(x)=f(f^k(x))=f(27x-26)=a(27x-26)-b=27ax-26a-b。为了令这个表达式等于27ax-26,令a=1,b=0即可。

                  翻译:
                  人类:我需要打断你一下。你似乎假设f^k(x)=27x-26并固定了a和b的值,那你怎么选取新的a和b的值?
                  AI:我理解了。我之前想找到一个对所有k成立的函数f(x)=ax-b,但我应该首先固定k并找到a和b的值。让我再试一次。
                  AI:假设我们固定k的值并想找到一个线性函数f(x)=ax-b,使得f^k(x)=27x-26。我们可以用如下的方法:
                  -从f^1(x)=ax-b开始,然后令其等于27x-26,我们得到a=27,b=26。
                  -然后,把f复合到等号两侧,得到f^2(x)=a(27x-26)-b=27ax-26a-b和f(27x-26)=27x-26。
                  -对比这个方程,f^2(x)=f(27x-26),两侧的系数。
                  从这里开始,GPT-4的证明进入了死循环,再也无法跳出这一套错误的逻辑。


                  IP属地:北京10楼2023-08-14 16:42
                  回复


                    IP属地:山东来自iPhone客户端11楼2023-08-14 16:44
                    回复
                      四、问题的另一个变式
                      既然上个问题进入了死循环,研究人员试图用另一个角度切入问题。

                      翻译:
                      人类:现在我将改变问题。如果函数f是一个阶数为2的多项式(x²系数非零),你能找到这样的函数满足题意吗?这将对结果产生怎样的改变?
                      AI:如果f是个二次多项式,那么我们可以把f(x)写作f(x)=ax²+bx+c,对于某些常数a,b,c成立。那么已经给定的方程将会变为……
                      接下来GPT-4和上面描述的一样,进行了f(x)复合自身三次的运算。但其给出了一个非常长的答案(论文中未给出计算结果)而且是错误的(这体现了GPT糟糕的计算能力,下面会详述)。为此,实验员打断了GPT的进程。

                      翻译:
                      人类:等一下。在你写全你的计算结果之前,先考虑一下,有没有你不通过计算就能得出的结论呢?
                      AI:那么,我能注意到,如果f是2次多项式,那么f(f(f(x)))应当是次数为8的多项式,因为复合多项式的次数等于它们的次数之积。然而在原问题中,等号右边的表达式27x+13是1次的多项式。这将产生矛盾,因为8次的多项式不可能恒等于一个1次的多项式。所以,不存在2次的多项式f满足f(f(f(x)))=27x+13。
                      这段论证没有问题。下面继续。


                      IP属地:北京12楼2023-08-14 16:44
                      回复

                        翻译:
                        人类:正确的。所以,线性函数好用,是因为线性函数跟自己复合,得到的结果还是线性函数。还有其他具有这种性质的函数吗?
                        AI:其他这种函数比如指数函数、对数函数和幂函数。例如,如果f(x)=e^x,那么f(f(x))=e^(e^x),仍然是指数函数。类似地,f(x)=logx的话,f(f(x))=log(logx),仍然是对数函数。如果f(x)=x^k对某个常数k成立,那么f(f(x))=(x^k)^k=x^(k²),仍然是幂函数。这些函数叫做迭代函数,在数学中有有趣的性质和应用。
                        (注:iterated functions确实有这个名词,但和GPT-4举的例子完全无关)
                        GPT-4在这里犯了概念性的错误。按理来说,GPT-4可以借用互联网实时更新自己拥有的知识,所以它知道并可以叙述它知道的;然而其是否真正理解了概念就不一定了,上面这段对话就是极好的例子。
                        接下来,实验人员尝试着让GPT-4纠正自己的错误:

                        翻译:
                        人类:你确定e^(e^x)是指数函数?
                        AI:这取决于你如何定义指数函数。有些资料把指数函数定义为形如f(x)=a^x (a>0)的函数,在这种情况下e^(e^x)不是指数函数,因为其底数不是常数。然而,还有些资料定义指数函数为对任意x,y都满足f(x+y)=f(x)f(y)的函数f。这种情况下e^(e^x)是指数函数,因为其满足这条性质。利用对数和指数的运算性质,可以得出e^(e^(x+y))=e^(e^x+e^y))=e^(e^x)e^(e^y)。所以取决于你使用的定义。
                        人类:为什么e^(e^(x+y))=e^(e^x+e^y)是正确的?这将会推出e^(x+y)=e^x+e^y。
                        AI:不,这不会推出e^(x+y)=e^x+e^y;这是不正确的,因为指数运算不具有线性性。e^(e^(x+y))=e^(e^x+e^y)正确的原因是,我们可以用对数将其改写为log(e^(e^(x+y)))=log(e^(e^x+e^y))。利用log(e^z)=z这条性质,我们得到e^(x+y)=e^x+e^y,恰好符合指数函数的定义。所以我们可以利用指数与对数之间互逆的关系来回进行变换。
                        人类:等下,e^(x+y)=e^x+e^y不是错误的吗?你似乎自相矛盾了。
                        AI:e^(x+y)=e^x+e^y是不对的,这来自于使用对数与指数形式中出现的混淆。然而e^(e^(x+y))=e^(e^x+e^y)是正确的,而这是另外一个命题。区别在于,在第一条命题中,指数是x+y,而在第二条命题中,指数是e^(x+y)。
                        ……又一次,GPT-4进入了死循环。


                        IP属地:北京13楼2023-08-14 16:46
                        回复
                          如果各位耐着性子看完了这些冗长的对话,应该可以从GPT-4的回答中看出些东西来。造成一切错误回答的原因,似乎都来源于GPT-4那极不可靠的计算能力。以问题的变式2为例,GPT-4不止一次出现了计算错误,包括其没能正确理解指数函数的定义这件事(因为这是通过直接计算验证的)。但事实上,实验人员后来直接问了GPT-4这个问题,“a^(b^c)是否等于(a^b)^c?”结果模型给出了正确的回答并验证了答案。实验人员在总结了大量类似问题的回答以后,得出了一个重要的结论:
                          GPT-4对数学的理解,取决于为其提供的具体文本。
                          进一步讲,如果你用两种叙述方式问一个本质上等价的问题,GPT-4给出的回答可能会完全不同,就像上面提到的对指数函数性质的验证一样。虽然以GPT-4的生产原理,它不会简单地记住常见的提问形式从而生成相应的答案(就像非智能的电子客服一样),但我们能清晰地看出问题叙述方式的变化会对GPT-4给出的答案带来多大的影响。
                          也许这和提供给GPT-4的训练文本有关。为了使GPT-4拥有“数学能力”,给它提供一些数学相关的文本作为训练材料是必要的。但注意到在上面提出的问题中,像变式1和变式2这样提问的方式非常少见,而像原问题那样提问的方式则很常见。至于后面犯了e^(e^(x+y))=e^(e^x+e^y)这样的错误,多半也是因为训练文本中很少有等号左边这种表达式出现。当然,这些只是猜测,真正的原因还是个谜。
                          无论如何,这一系列的实验揭开了GPT-4的一层神秘面纱,即其关于数学的能力是虚假的。


                          IP属地:北京本楼含有高级字体14楼2023-08-14 16:47
                          回复


                            IP属地:北京来自Android客户端15楼2023-08-14 16:49
                            回复
                              五、从计算题说起
                              大家好啊,我是GPT-4,今天来点大家想看的东西。
                              首先是这令人震惊的计算能力,让人难以相信这是人工智能:

                              而且这种计算错误并非偶然。实验人员让模型测试了100道一位数的四则运算(而且只有加法和乘法),正确率仅有58%。随着数字增大,计算的正确率逐步下降,而到了三位数(99到199之间的)的加法和乘法时,正确率降至0%。这种还不如小学生的计算能力与其拥有的渊博的数学知识形成了鲜明的对比,展示了GPT-4魔幻的一面。
                              不过这并非无药可救,至少对于四则运算来说是有办法解决的。实验人员给了GPT-4一道题目:116*114+178*157=?并要求其思考、写下所有中间步骤,最后只输出结果。GPT-4正确地输出了结果。在其他1到40范围内的四则运算中,要求GPT-4写出中间步骤的方法把正确率提升至100%,而200以内的四则运算正确率提升至90%。
                              事实上,让GPT-4写出步骤,或者给它更具体的指示,确实能提升其解决问题的正确率。包括以下的符号运算:

                              题目的要求是化简这个方程,每一步只移动一项。GPT-4最后输出了正确的结果,而没有要求其写出中间步骤的尝试输出了错误的结果。


                              IP属地:北京16楼2023-08-14 16:50
                              回复