结论:
ChatGPT4不具备基本的推理能力,其“推理能力”更接近于代换和图检索能力。复现这一点可以通过打断其图检索的关键节点来实现。例如给出一个全新的游戏(可以是成熟游戏的简单版),在数学计算中利用第n个素数等不可计算的函数等方法。
在测试中给出的命题都是信息完全,并且基于一到两步推理即可得到答案的简单问题。ChatGPT4在这些问题上的回答要远远弱于人类的智力水平,难以说能够通过图灵测试。
测试命题:
-
给出一个可以放大自然数的函数F(N),令第K个素数为S(K),判断F(S(K))与K的大小关系。K为一个不可计算S(K)的大数,例如1000000。
-
F(N)的具体定义为“代码积”,如果数字N以10进制表示,我们统计N中各种数码A出现的次数B,F(N)为所有(10+A)^B的积。例如F(1)=11;F(12)=11*12;F(1200)=11*12*10^2。
-
-
将五子棋游戏转变成为两子或者三子即可取胜,请问谁会获胜。能否给出先手获胜的必胜策略。
-
对于狼抓羊的小游戏,如果我们把棋盘改成一个线性的1-2-3的网格,谁会获胜。
-
狼抓羊小游戏为,两方分别有一些棋子在棋盘上,每轮两方分别运动自己的棋子(棋子不可重叠,不可吃掉),如有一方在任意一步中,无法运动,即游戏结束。
-
一些可能的解决方案:
-
在训练过程中,我们越过了将物理现实抽象为符号逻辑的过程,这使得模型可能对于这些过程比较陌生。恢复模型关于抽象能力的锻炼是一种可行的手段。
-
将数字处理成为字符而非具体的数字会有助于训练。(很多模型应该已经做到这一点)
-
在此基础上,可以生成一些数学题用于模型训练。
-
进一步的,数学题中应该使用一些常见的算式填空,污渍猜数,用未知数代替具体的数字等方式来避免模型直接调用自身已经成熟的关于 具体数字 的运算能力。
-
录入一些小孩子在幼儿阶段关于数据的吹牛语言,可能可以避免模型跨越幼儿的抽象能力学习阶段。
-
-
逻辑能力的缺乏可以通过确定的程序代码来补足。在测试过程中,模型事实上给出了关于判断问题答案的代码。但是它不能够运行代码,也就不能做到进行归纳和总结。大语言程序运行确定的代码存在成本问题,而低成本的编译器可以补足这一点。但这种方式要考虑梯度下降具体如何完成的问题。
思考——大模型的优与劣:
做这个测试的出发点是想搞清楚为什么大模型在语言能力上能够有大幅度的进步。对于机器学习的过程,我们可以认为机器学习就是一种拟合函数,在训练过程中,模型会调整自己的训练参数以贴近于某种函数模式,与之相对应的正交的函数模式则被舍弃掉。大模型因为拥有海量的数据,可以注意到这些不被人类理解的函数模式,故而表现出了卓越的能力。
举一个简单的例子,在图像识别算法中,我们训练如何去区分猫和狗的算法,因此算法一定会注意到猫和狗的差别。但是,由于我们抛给算法的数据全都是真实的猫和狗的图片,算法一定会舍弃判断图片是否符合物理实际的判断能力。过去的深度学习被称之为炼丹,就是因为大量的,未被人类所能够完全理解的基础模式不被注意到,无法被提取出来帮我我们训练。
从这一点出发,能够得到一个简单的推论是,现在的大模型并不会真正具备数理逻辑能力(符号逻辑)。很显然,互联网上不可能有如何将自然物理实际抽象成为符号的资料(一开始训练就是用已经抽象好的语言来训练);对于符号逻辑之间的演绎语料也不会如自然语言那么多。故而大模型能够学习到的,只是关于人类语言的基础模式,而数理逻辑则成为了被忽视的那部分函数模式。简单一点来说,可以认为现在的大模型只是一个文科生。
大模型关于数理逻辑的缺陷只是一个工程问题,提高时间和算力这些问题会在短期内被解决。如果解决了这些问题,是不是有大模型就可以了,不需要其他的小模型?有这样一种观念是说,神经网络能够拟合一切函数,因此我们只需要扩大网络规模,增加样本数量就可以解决一切问题。
如果持有此种观念,建议他们不要用卷积神经网络,也不要用什么词嵌入向量,也不要做特征的筛选,也不要用Encoder,不要做网络结构设计,直接拿内存中保存的二进制数据进行训练就好了,反正模型也能够解决一切问题。不要去学什么神经网络,去研究计算机硬件不是更好?用理论上的无限来指导实际工程,不用考虑现实中的计算量的问题?不用考虑时时刻刻都有竞争对手在做同样的事情?
用先验经验来指导机器学习是必然需要研究的一条路,如果我们把机器学习要解决的问题抽象成为拟合某种函数,那实际上我们基于先验知识来做这件事情的历史和广度要远远的超过只基于样本的研究模式。我们现在震惊于不需要先验知识就可以拟合某种函数,恰恰是因为我们过于地熟悉如何利用先验知识来拟合某种函数(牛顿力学不也可以视为对相对论的一种模拟),以至于我们根本没有意识到其实我们是在描述,拟合某个函数。物理学对于现实的描述,是不是通过函数来实现的?代码编程是不是对我们设计的代码库的一种行为实现?我们仅仅是在图片识别,语言学习,模式识别,自动化推理等一小片领域尚未完全掌握相应的研究方法与工具,所以机器学习才看起来是不需要先验知识的。
按照我们对知识掌握的划分,拟合函数这件事可以有三种模式:
-
完全掌握知识:演绎,编码,推导。
-
掌握部分知识:尚待研究。
-
掌握很少知识:机器学习,启发式算法。
对于掌握完全知识,和掌握很少知识的研究都有很多人做了。很多问题我们掌握了部分的知识,如何让我们掌握的部分知识参与函数拟合,是一个需要研究的问题。这是一个抽象的问题,我们可以把这个问题更加具象化:
-
具体化一点,怎么根据先验知识生成特征处理方法,神经网络结构或是其他的机器学习算法?
-
再具体一点,Pytorch中的Forward只能支持可微分的函数,且结构固定。这个限制能否放开一点?例如掩码就是一个很好的解决相关问题的例子。
-
给定一个函数类,其中的参数待定,如何判断这个函数类可否用神经拟合?
-
一个函数是用Flink CEP中的模式识别来实现的,现在我们有一些样本,如何用神经网络拟合CEP中的具体代码?大部分时候,LSTM可以完成这个任务,为什么LSTM能够完成这个任务?(这里的实现指的是,在 有限的网络单元数目 下,可以 完全无误差地 实现相应函数的功能)
附录,测试截图: