一开始,我对ChatGPT是没什么关注的,无非就是有更大的数据集,完成了更大规模的计算,所以能够回答更多的问题。
但后来了解到几个案例,开始觉得这个事情并不简单。我先分别列举出来,具体解读在文末说明。
1)ChatGPT能够进行数学运算,但大数运算和复杂运算,基本都会出错。
2)ChatGPT能够解读出最新的网站内容。(已知训练集停留在了2021年)
个人认为,“算法的研究,本质上是在还原人类的思维”。将算法原理和人类思维过程进行对比,能够更好的理解ChatGPT是什么,以及为什么能够做到现在的效果。
受到造物者的馈赠,大脑能够完成复杂的思维运算。但不幸的是,这个思维过程仍然是黑盒的。
给出一张图片,如果问题是这张图片是什么色调,你能够通过统计像素点色度的分布,给出准确答案;如果问题是这张图片是谁,你同样能够给出答案,但无法描述过程。
你工作中处理的各类问题,属于那种类型?
Anyway,不论思维过程多么复杂,它的框架是通用的:
传统机器学习,是在学习人脑是如何进行“运算”的。比如:“1”,“3”,“5”是单数,“2”,“4”,“6”是双数;算法可以帮你得出 x/2=1 是单数,x/2=0是双数。
(个人认为)深度学习,则开始学习“从编码特征到运算”这一整个过程。
显然,解决的问题越复杂,需要的数据量越多。但人脑并不需要这么多数据,我认为核心差距是,算法目前并不善于“总结归纳”中间过程。
于是,Encoder-Decoder结构就诞生了:
传统机器学习的训练模式是,人工对输入数据进行清洗,转化为特征向量(中间编码),然后基于特征和标签,训练模型(Decoder)。
但在复杂问题中,特征工程也变成了一个“不可描述”的过程。于是开始弱化特征工程的作用,直接用最原始的数据去进行训练,企图让算法解决整个黑盒过程。也因此开始强调数据量的大小,因为过渡黑盒,需要足够多的数据训练,大力出奇迹。
而Encoder-Decoder则是做了一层提炼,同时训练两个模型,一个用于学习编码过程,一个用于学习运算过程。各司其职,大幅提升了整体的效率和可控性。
和常见的分类、打标任务不同,语言是有序的。需要相应的上下文和描述语句,才能正确理解。比如,高考经典病句“三个学校的老师”,到底是来自三个不同学校的老师,还是同一个学校的三个老师,是会产生歧义的。
因此,基于Encoder-Decoder,设计了如下的RNN结构:
从信息流的层面理解,所有信息通过编码,逐单元向前传递。解码过程,也是逐单元进行信息提取,同时把已提取的信息也作为补充输入。
跟背课文的过程很像。先背第一段,再带着第一段的记忆,背第二段。全部背完后,先默写第一段,然后带着已默写的第一段,默写第二段。
RNN的设计模式,把语言的有序性很好的体现了出来。但同样存在一个问题,编码和解码的过程是单向的,信息会逐渐丢失,越靠前的信息丢失的越厉害。
同样以背课文为例。RNN就像是只允许你背一遍,背完第一段就不允许再看第一段。那么必然最后一段记忆清晰,第一段则记不住多少。
为了弥补这个问题,于是设计了Attention机制。相当于,尽管只允许你背一遍,但会在默写的时候,给你提示,帮助你正确的默写出来。
一种最简单的全局Attention机制如下(相当于提供了一个大纲):
而目前最流行的Attention机制是Self-Attention(相当于给划了重点):
上图中,之所以会将three给到school,正是因为在Attention中,明确指出了“三个”是用来修饰“学校”的。
RNN的结构虽然非常精妙的表达出了语言的有序性,但和人脑的思维仍然存在差异:人会从全局视角去接收输入,而不是单向处理。
你在背课文的时候,显然不会局限自己只背一遍。而是通篇反复阅读,没有顺序,直到全部背下来。
因此,Transformer打破了RNN的单向传递机制,同时输入全部信息,并完全基于Attention去实现。其中涉及到了几个关键点:
Positional Encoding:虽然顺序输入不重要,但仍然需要知道每个字的位置是什么,因此设计了Positional Encoding。相当于你可以随意阅读,并且仍然知道第几段是第几段。
Multi-Head Attention:原理上仍然和Self Attention接近,但是增加了多个并行的维度。相当于用不同的角度去解读重点是什么,增加了信息传递的丰富性。相当于从多个角度去划重点。
encoder层数和decoder层数:出现神经网络中堆叠层数的效果。本质是通过全局传递的模式,增大了信息传递效率,堆层数有利于增强学习能力。(RNN中的encoder和decoder单元也存在层数的概念,但是不属于核心设计,因此通常不体现。)
个人理解的效果如下所示:
下面这个动图也比较形象
上述的模型结构,不论怎么优化,本质过程都还是“使用大量数据进行训练,生成模型后进行预测”的过程。而问题的复杂度越高,需要的数据量越大,训练的计算成本也越高。不管结构如何精妙,仍然会存在一个效率带来的瓶颈。
而ChatGPT的核心优势,就是突破了效率瓶颈。其训练过程如下:
1)输入“问题”和“正确答案”,训练初始的NLP模型。
2)输入“问题”、“初始模型的答案”和“正确的分数”,训练奖励模型。(实际上提供的是“正确的排序”,这里用“分数”为了更好的理解。)
3)输入“问题”,不提供“正确答案”,用奖励模型去训练初始的NLP模型。
之所以能够提效,就是第三步已经剔除了“人工打标”这个成本最高的工作,两个模型自身就构成了训练体系。
传统的训练过程,相当于告诉你一堆问题和答案,你去寻找其中的规律;而ChatGPT的训练过程,相当于教你判断善恶,建立三观,你自己再基于三观,去寻找最正确的答案。
OpenAI没有完全公开其实现逻辑,但是通过一些有意思的问答表现,能够推断包含哪些细节因素。
不论算法多么复杂,它仍然是符合“因果论”的,不是“混沌”的。这就意味着,给特定输入就会返回特定的输出,具备一一对应的关系。
但在ChatGPT的问答过程中,并不符合这个效果。对于同一个问题,不论是整体内容,还是细节措辞,都会存在差异。
又基本可以断定,ChatGPT不是一个实时更新的模型,仍然依赖人工去进行周期性的迭代调优。因此,ChatGPT一定在某个环节中加入了“随机因素”,可能的位置在:
输入:假设把时间、环境等因素一并加入到输入中去,那么输出结果会发生改变。ChatGPT是否有在考虑基于这些因素,产生个性化的对话风格?
预测:在常规算法训练中,往往也会加入随机因素,以避免陷入“局部最优解”。ChatGPT目前应该是处于公测,收集训练集的阶段,是否特意加上随机因素,来扩大样本丰富性?
排序:算法本质上是在输出概率最大的解,但也可能是在TOP中选一个。应该也能实现扩大样本丰富性的效果。
我更倾向于是为了收集样本。因为从AI的商业化应用角度来说,随机性并不是个有利因素,人们更需要可靠可信的对话机器人。
问题的复杂度,会影响训练的时间,因为算法需要更多的数据和计算来推导因果关系。但一旦训练完成,模型就固定了下来,运算的过程不会因为输入的改变而改变。
但实际体验过程中,ChatGPT对于复杂性的问题,明显表现出了更长的运算时间(不论是开始响应的时间,还是逐字吐出的速度。因为还包含网络因素,不确定这个现象是否客观)
如果这个命题成立的话,有两种实现可能:
有多种模型实习:ChatGPT背后同时训练了多个不同复杂度的模型。在实际执行的时候,它会先判断问题的复杂度,再去选择用哪个模型来生成答案。
具备运算优化能力:ChatGPT模型自带的编码能力,会对运算复杂度进行优化。比如对于简单的问题,引入更多的乘0操作,从而大幅提升运算速度。
直觉判断,后者的概率更高。这也意味着ChatGPT的表现力更贴近人类的思维了:同样一个人,对复杂问题会思考的时间更长。
回到一开始的漏洞分析场景。
从原理上来说,ChatGPT是不支持发起请求的。但当输入url的时候,ChatGPT仍然能够作出回答。
经过一些测试,可以很明确的发现,ChatGPT是基于domain、url中的信息去做的内容匹配。一个典型表现是,当你输入相似但并不存在的url时,ChatGPT仍然能够作出回答。
这个过程依靠的就是路径相似性。ChatGPT并不认为url是个一一对应的关键词,而是认为url中包含一定的逻辑。因此它会通过domain、path等文字,去推断网页的真实内容,并进行回答。(通过"Apache HTTP"、"2.4.0"、"2.4.49"这几个关键词,也并没有找到完全匹配的漏洞,应当是进行了一定的杜撰。)
换一句话说,ChatGPT的模型结构会让它认为万事均由潜在逻辑关系。但也有很多场景是强加的匹配规则,并没有逻辑,而ChatGPT强行计算出了一种逻辑。
总结一下,ChatGPT擅长逻辑(尤其是语言逻辑),但缺乏专业知识的积累。
基于此,可以推导一下ChatGPT适用的场景:
本质工作,不多描述
可以将ChatGPT视为一个“语言艺术家”,擅长基于一些关键点,去做逻辑串联,生成完整的答案。
因此,大部分只需要逻辑,不需要事实的场景,ChatGPT都能应付的来。
ChatGPT在代码领域表现相当优秀,但显然没有人告诉它各种编程语言的语法。个人推测,是因为代码本身是以语言为基础的,所以ChatGPT能够很顺利的掌握。
而编写代码的过程,其本质上是一种“翻译”流程:程序员将脑海中的逻辑,编写成特定的编程语言。
“语言”和“翻译”,本就是ChatGPT的老本行,表现优异自不在话下。
逆向本质上也是一种“翻译”:将加密、编码过的汇编代码,还原为可读的代码,甚至还原为清晰的逻辑。
目前ChatGPT的训练集主要来源于互联完上搜集的信息。如果能够喂给它大量的源码和汇编代码,以及相关的分析报告,应当能够在逆向领域表现出优异的成绩。
我对下一个“科技奇异点”的定义是:机器具备人类的思维,并可以替代人类完成推理和研究工作,从而大幅提升生产力。
而基于上述对ChatGPT的研究,我认为已经接近这个临界点,因为这是我认知内,机器第一次开始理解人类世界。
对“理解”这个词,我再展开说明一下。过往的机器学习,都是在特定领域下完成某一项特定的工作任务(包括去年爆火的AIGC)。这也就意味着机器并不理解问题,只是执行人们给它安排好的算式。
对话式机器人其实很早就有了(Siri、小爱同学、小度小度等),但其核心是“功能库”。这些机器人的工作模式是“接受对话->提取关键词->匹配功能库->执行特定功能”,而ChatGPT是在没有“功能库”的情况下,实现的各种问答。
换言之,传统机器学习是某种工具,而ChatGPT则是一个“被灌输了大量知识的婴幼儿”(国外有测试表明ChatGPT符合9岁小孩的“心智”)。
我过去没有重视过NLP领域的算法发展,觉得和传统搜广推并没有本质区别。依靠海量训练集进行总结记忆,然后回答学习过的内容,不会进行推理和创造。但在ChatGPT表现出惊人的知识储备后(回答从没见过的问题,做从未见过的运算),确实引起了一些思考。
显然,ChatGPT在特定专业领域的能力并不强,甚至经常会杜撰一些内容,你也许会嘲笑ChatGPT在一本正经的胡说八道。但我看到的却是,ChatGPT仅依靠语言能力,就推理出了很多的专业能力。
换位思考一下,假设没有人告诉你99乘法表,也没人告诉你“乘号”的含义。只告诉你“1*1=1”,“2*2=4”,你要如何计算出“9*9=81”呢?
从这个现象,可以引申出一个哲学思考:语言和知识的关系。ChatGPT本质上还是一个NLP模型,它计算的是字与字之间的概率关系。而ChatGPT正是基于这种文字之间的概率空间,总结出了各种各样的公式定理。也许,我们高估了“知识的复杂度”。
对比人类的思维,我认为ChatGPT目前缺少两个关键能力:1)没有记忆;2)无法直接学习知识;
1)没有记忆
回顾一下ChatGPT的训练过程:先训练一个初始模型,再训练一个奖励模型。类比下来,第一个过程获得的是原始信息的积累,即记忆,第二个过程获得的是知识的迭代。
而目前对于ChatGPT的各项优化工作,都集中在后面这个过程。换而言之,ChatGPT的知识在不断完善,但记忆并没有更新。而显然,对于人类思维来说,这两者都是不可或缺的。
尽管有一些对话会让ChatGPT看起来能够记忆内容,比如“先告诉ChatGPT你的名字,然后让ChatGPT复述一遍”。但这个效果本质上是因为ChatGPT可以基于整个对话去回答问题,因此能够把对话的历史信息包含进来,并没有“记住”这个信息。
2)无法直接学习知识
ChatGPT非常擅长讲故事,处理比较纯粹的语言类问题。但专业领域的明确任务,却处理不好。我认为ChatGPT目前差的是“已知经验的输入”。
在人类的教育过程中,是有老师在告诉你,乘法应该怎么计算的。因此你不用从头开始去推导和总结,直接应用即可。这个过程大幅度提高了学习的效率。而ChatGPT需要从0开始推导这个东西,那他要经历的,是人类从远古时期至今的迭代过程,显然存在巨大的挑战。如果ChatGPT能够接受到构造好的经验输入,那就可以省略掉很多的工作,让算法也“站在巨人的肩膀上”。
不幸的是,这两项能力目前都没有解,因为其算法性质仍然是黑盒的。上面我们提到了,现有的算法框架结构已经对人类的思维方式做了粗力度的抽象,因此取得了如今的成就。但更近一步的核心(比如,信息是如何被编码和计算的)目前仍然黑盒,也就限制了对其进行更深度的交互和优化。
但随着人们对思维模式和算法的研究深入,相信能够发明出更完善的架构来。到那个时候,算法高度还原人类思维,离“科技奇异点”应该就相当接近了。
随着对话式算法的诞生,Prompt Engineering这个概念也随之而来:人们发现,有时候之所以得不到理想的答案,与其去优化模型,不如去优化提问。
这个概念是最新才了解到,在此不作展开。
我更想借这个话题,再次提一个观点,“算法的研究,本质上是在还原人类的思维”。你如何设计合理的Prompt,来得到理想的答案,和你在现实中如何提问,是同样的场景。只不过,你目前面对的是一个“心智只有9岁小孩”的AI模型,所以提问时,需要更多的引导和提示。
因此,保持对AI技术的关注,实际上也能够帮助你解读自己是如何思考问题的。
继续回应上面的话题,“算法的研究,本质上是在还原人类的思维”。而ChatGPT,实际上把培养人才的过程,已经进行了抽象。
将算法的演变过程,转化成现实场景,其实是如下的效果:
1)在相对简单的场景下,会直接告诉你解决方案。把对应的模型确定好,按照这个逻辑跑就行,能够快速得到想要的结果。
2)随着场景逐渐复杂,解决方案本身变得“只可意会”了。这个时候,会尝试甩给你大量的case,让你自己琢磨出解决方案来。
3)但喂case积攒经验是个很耗精力的事情。所以,为了提高效率,在喂case的同时,会告诉你方法论。只要用这个方法论,配合一定的实战case,大概率能得出想要的解决方案和结果来。
在AIGC年爆火之后,设计从业人员就开始担忧起自己的工作。同样,ChatGPT可预见的也会对很多行业带来冲击,比如教育。AI是否会最终取代人类的话题,似乎也从“遥不可及”,变得“忧心忡忡”。
我认为,AI一定会取代部分人,但不会取代所有人,也不会凌驾于人类之上。
正如工业时代的到来,取代了体力工作者;AI时代的到来,也会取代脑力工作者。而所谓的“专业”能力,往往会在这个浪潮下,被快速取代。(想想当年的“八级技工”,技术再厉害,也比不过新的机器。)
同样的,不论工业时代,还是AI时代,对于整个人类来说,都是一种进步。它意味着生产力大幅提升,意味着有更多的精力被释放出来,可以往更深的领域去探索。而这个世界足够复杂,远没有到被穷举干净的地步。
事实上,历史上每次有这种想法的时候,都会打开一片新的天地。比如19世纪末,物理学家说“物理学的大厦已经落成”,但随之而来就出现了“相对论”和“量子力学”。
身处这个时代,我们需要考虑的,不是如何阻止AI的到来。而是从自身出发,去考虑如何发挥人类的思维优势,利用好AI,从而去造福更多的人类。