在昨天 GPT4 的发布会的直播上,最吸引我的不是 Greg Brockman 直接上手测试 API 的场景,而是他身后方那一棵硕大的盆景。视频中静谧昏暗的光线和盆景散发的或有或无的神秘气韵,让我想起了银翼杀手 2049 里高司令第一次进入公司参观的时候——这是两个同样暗示性很强的场景,一种平静下面蕴藏着力量感的无可辩驳的炫耀,和在 chatgpt 那个简洁的聊天窗口一样。由于给 GPT 氪的金还没到期,我有机会在网页版里尝试了一下最新的 GPT4:多模态接口还没公开,所以就交互而言 GPT4 没有什么特别大的震撼,但是其对于长文本的处理有了明显的提升,现在它即使是用中文生成一次性生成几千字的文章也丝毫不在话下。不用说,我可以想象到推特和知乎上是一片怎样的光景了。

丑陋的 transformer 乱拳打死老师傅

在前几年前,处理文本序列内容最火的模型还是 RNN。由于 RNN 天然地适合处理序列数据,而且理论上其可以接受和生成无限长的序列,因此其可以用于进行翻译、总结、文本分类等各种任务。后来在 17,18 年左右,基于 attention mechanism 的 transformer 横空出世,用 KQV 的方式来处理序列数据。虽说这种方式能处理的总序列长度是固定的,但是对于这个范围内的序列其应用效果非常好。而序列长度的问题也可以被更大的模型,更多的参数解决。即使不能无限长,其只要和日常的使用进行匹配即可。而且哪怕是号称能处理无穷长文本的 RNN,由于反向传播也要在时间上进行截断,因此其表现在截断长度范围之外的样本上的结果也是要打折扣的。当时看了这个模型以后我第一反应就是:丑陋。对我来说,和 RNN 比起来,似乎这个模型增加了不必要的复杂性,是,任务上的表现是变好了,但是 transformer 对表现的 KQV 解释完全没法说服我,而且我也很难想到这个东西会在生物学上有什么对应。于是在草草读完论文以后我就再也没有跟进这个领域的新文章,直到过去的一两年,猛然发现基于 transformer 的模型已经完全占据了 NLP 领域,甚至开始在物体侦测这样的 CV 领域中大杀四方。一时间 transformer 风光无两,每个人都在讨论这个模型,而 RNN 已经成了明日黄花,只有一些三四流的机器学习文章和搞 neuroscience 的人还在用这类模型。再后来的故事大家就很熟悉了,所有人都适应了这种一个模型解决所有问题的范式,各种预训练模型开始释出,大大小小的库层出不穷,让这种模型快速进入了所有开发者的视野。与此同时,人们发现,只要采用这一种框架,然后不断地增大数据集规模和网络参数,效果就会越来越好,OpenAI 开始放出 GPT1,GPT2,然后是 GPT3,然后是彻底引爆舆论的 ChatGPT(基于 GPT3)和昨天的 GPT4.

我的使用体验

其实哪怕直到 ChatGPT 开始占据我的推特首页好一阵,我都没有太大尝试的想法,在我观念里,这似乎只是又一个公关技巧而已,背后并没有什么新技术。但是有一天读到一个人的发言,他说他的老师说现在的深度网络不过是多层感知机而已,没什么搞头。那一瞬间我想我得放下成见,试试 OpenAI 到底搞出什么东西来了。

这一尝试让我有点吃惊,首先是比起原始的 GPT3,这个模型在对话生成上要自然的多,和 ChatGPT 对话不会有过去和其他 bot 说话的那种生涩感。一些常见的问题它都能答对,并且采用的不是微软小冰那种取巧的法子。而对于一些比较复杂的问题,比如让它生成一段程序,其输出竟然也看上去有板有眼。但是这还是不能满足我,因为我知道这类模型的局限性自然很大,只要尽量制造一些 corner case,它一定会失败。果不其然,在问了一些连前提都是错误的问题之后,chatgpt 要么胡言乱语,要么干脆选择不回答了。我满意地关掉了窗口——果然又是一个公关事件而已。

但是几天之后,当我在写一段代码,其中包含大量的 boilerplate 部分时,我感到非常厌烦。此时鬼使神差地,我打开了 chatgpt 决定试试这东西能不能帮我节约这部分时间。结果只用一个简单的 prompt,chatgpt 就返回了一大段接近真实可用的代码。这下真让我坐不住了。震撼我的并不是生成的这段代码的正确程度,因为这段代码是有问题的不能直接插入我的程序跑,而是这个使用场景:我对日常工作感到厌烦,所以使用了这么一个机器人来帮我干重复工作,然后我只要对它稍作修改,就可以得到一个可用的成品了。

在这个基础上,我进一步想到,我不应该把这个东西当作一个有想法的个体,然后以制造 corner case 成为一个测试工程师为乐(没有任何的瞧不起测试的意思)。相反,我应该把这个东西当一个高级的搜索引擎来用。只是过去我朝 stackoverflow 要答案,现在我朝 chatgpt 要而已。

如果从这个角度出发的话,使用 chatgpt 有两个场景,其中每一个场景又能衍生出好几个子场景来:

  1. 搜索我知道别人肯定知道 / 实现过,但我不知道,没实现的东西
  2. 对我知道几乎没人知道的东西,用它混合的方式产生可能的解决方案

场景 1 其实非常普遍,它正是大多数时候我们使用搜索引擎的场景:对于某个我们很确定有人做过的东西,我需要一种方式将其从互联网的语料库中提取出来。只看客户端的话,在传统的搜索中,这个提取的过程涉及关键词的选取,不同的关键词得到的搜索结果天差地别。很多时候我们的问题在于,不知道要选择什么关键词。因此用搜索引擎来搜东西的前提是,你大概已经对这个东西的概念知道了个七七八八,你需要的只是具体的技术细节。但是如果使用 chatgpt,那么我可以在不知道关键词的前提下通过模糊地描述需求让 chatgpt 来产生关键词。这些关键词能帮我桥接 unknown unkown 和 known unknown,然后我就可以用其产生的关键词再去找传统的搜索引擎,这样一套下来我提取新信息的效率会高非常多。

甚至一些其他场景也可以归类到场景 1 下,比如翻译。翻译的前提是:1. 我知道我不会这种语言,2. 我知道肯定有人会,而且他们那个语言里也有类似的表达。那么一个翻译任务就是一个 known unknown 任务。实事上 chatgpt 做翻译,包括润色也确实是非常厉害,可以说是吊打 grammarly 等软件了。

但是更有意思的其实是场景 2. 如果说场景 1 是利用 chatgpt 的内插能力的话,场景 2 就是在利用其外推能力。因为场景 1 里我们是要提取其他人类的知识,这时候几乎可以确定,我们期待的输出一定在 chatgpt 的训练集中出现过。但是对于没人知道的东西,我们无法期待 chatgpt 能产生任何有意义的输出,因为这在训练集的分布外了。在这种场景下,chatgpt 更像是一个专注于掉书袋 name droping 的讨论伙伴,它浅薄又广博。你无法期待这样一个伙伴直接给你什么洞见,但是你可以透过他的言论放松自己固有的思考方式,从而可能产生之前根本不会产生的想法。在这个场景里,chatgpt 就像一个大锅一样,概念的原始汤在里面烹饪,我们负责观察和提取。

但是这个场景 2 的理想结果的概率是较低的,因为大多数时候,chatgpt 会倾向于把结果拽向它被训练过的地方。因此这时候场景 1 和 2 可以混合起来。我们问问题,然后 chatgpt 回答,我们再用推理和 google 去筛选一遍它的回答,1 和 2 就都可以得到了。这么看的话,这是使用 chatgpt 最完美的方式。从我后来一两个月的使用体验来看也确实如此。70% 的时间里我都在场景 1 下使用它,用来搜索新概念,其他人在某个领域内的想法等等,过去,如果我要完成同样的任务,得在 google scholar 上花起码三到五倍的时间。剩下的 30% 场景我会问一些 open question,不出意外地,大多数时候他的回答平庸而无趣,但是也有那么几个闪光点让我记下来并且准备推进实验。

GPT4,然后呢

上面介绍了我是如何使用这个模型的,但是在和朋友们的交流中我发现,这完全不是大众理解此类大语言模型 (LLM) 的方式。出于对“语言”这个概念直觉上的把握,大多数人将 LLM 视作水晶球,或者视作一个虎视耽耽的图灵测试对象。各种有趣的对话在网上传播,一些人和对自己家的狗说话一样对 chatgpt 说话,另一些人热衷于扮演测试工程师,不断用细微的语境突破模型的极限然后宣扬人类的荣耀。这是很自然的反应,尤其是考虑到媒体对这类模型“神力”的吹捧,无论是正面的还是散布恐慌的。各种言论也开始满天飞,什么失业啦,AIGC 啦,风口啦,报纸甚至开始报道有的公司开始招聘 35 万刀一年的 prompt(写提示词的)工程师。

但是冷静下来想,这些自然反应和基于这些反应产生的对社会冲击的想象合理吗?注意我在这里说的合理是,可能会发生吗?对这个问题,我们可以从两个例子来看一下。第一个,昨天 Greg Brockman 让 GPT4 写一个 python 的 discord bot,在他运行以后这个 bot 报错了,因为 GPT4 是基于过去的文档来写的,而 discord bot 的 API 在 2021 年以后有了一些变化,部分老 API 没法用了。Greg Brockman 解决这个问题的办法是:

  1. 把 console 的报错信息喂给 GPT4
  2. 把 discord bot 最新的相关文档页面直接复制粘贴也喂给 GPT4

这样操作下来,最后 GPT4 产生的 bot 确实可用。但是在这个例子中有个问题:如果使用者不是熟悉此类 bot 原来的写法的话,难以识别出这种错误的起因来。也就是说,如果 Greg Brockman 是个连 discord bot 是什么都不知道的人,他很难通过执行步骤 2 来解决问题。而一旦 Greg Brockman 知道问题在步骤 2,也就是 API 变化中,他完全可以自己快速定位问题然后解决掉。当然,这是一个 demo,所以挑的问题很简单。但是在真实的工作中,问题的复杂往往也意味着问题的起因不是一个文件一个接口这么简单,这一点做过稍微复杂一点工程的人都清楚。比方说,由一个数组 slicing 不对导致的问题可能根本不在当前函数上导致错误,而是经过若干个步骤以后在一个看起来完全不相关的函数里显现。要解决这样的问题,首先是要把整个程序喂给 GPT,这一点即使是现在大大扩展的 token 限制下也不容易做到。其次是这么做还要求 GPT 具有脑内模拟解释器 / 编译器的能力,恕我直言,目前来说这一点上它根本不合格。之前是有人做了那种让 GPT 模拟一个 linux 虚拟机的实验,但是那完全是 fake,没有任何实际意义。要测试 GPT 有没有模拟虚拟机的能力,根本不需要让它 VM 级别的模拟,只消看看这个东西能不能模拟计算器就可以了。对此我做了一个小实验,产生不同复杂程度的表达式让 GPT3.5 来求解(GPT4 的 API 内测资格我还没拿到),随着表达式复杂程度的提高,只要增加到包含几个括号的程度,其输出的平均数值误差就已经是不忍直视了。括号的使用是对逻辑层次的包裹,类似函数的嵌套调用,debugging 里面很多时候需要的就是这种能力。

因此,从上面这个例子来看,认为 gpt 能解决掉编程问题,甚至替代工程师的想法可以说是过于一相情愿。但是从效率提升的角度出发的话,它确实可能会对需要的工时进行压缩。不过同样地,这还是取决于问题的逻辑复杂性。如果说某个项目中 chatgpt 产生的代码节省的时间,超过了其引起的 bug 的解决时间,在这个项目中引入 chatgpt 就是不值得的。如果相反,那么就成立。这句话可以翻译为:chatgpt 或者同类的 LLM,解决的是脑力劳动中的体力成分。当我说体力成分时,说的是我们做脑力劳动中那些脑子一片空白的时刻。不要急着笑,这样的时刻存在且普遍存在。回想一下我们自己的工作过程,每天从打开 IDE/Word 开始,有多少时刻工作者是在高强度推理,思考问题的?没有太多,尤其是在写作的时候。这不是说写作不需要思考,而是因为写作需要面向读者,所以最终的文章成品里必然包含大量的“润滑”部分,也就是将裸露的逻辑包一层糖衣,让受众更容易下咽。这样的“润滑剂”部分,就是未来的 GPT 能解决的部分。从这个角度看,GPT 模型是一种信道,取决于其 encoding 的方式,其单位时间内能通过的信息量是有上限的。对于信息高度密集的文本,比如数学证明,暂时应该没有人敢用这个东西来生成 / 总结。因此,从上面的讨论我们可以看出,会消失的岗位会具有一个离散效应。思考密度低于某个值的脑力劳动会变的意义不大,即使这些人能保住这样的岗位,也一定是因为垄断或者其他非经济原因。一旦这个思考密度增大一点点,比如哪怕是对 excel 表格做一些高级操作,gpt 模型都很难替代。那么哪样的工作是低思考密度工作呢?在实际中肯定有大量的工作是混合的,但是有一类,就是 n 天入门这种课程级别的难度的工作,是绝对低思考密度的。也就是说,实际上会受影响的,是经过短期培训就可以上岗的脑力工作。我不知道目前的就业市场上这样的工作普遍不普遍,但是从我个人来说,不少脑力工作我都认为可以通过短期培训来制造合格工人。

GPT 之于智能是爬树登月吗

那么上面说了这一些,最终还是要触及一个只要讨论语言就无法避免的问题:GPT/ 其他 LLM 会产生智能吗?这个问题我真是一百个不愿意想,因为讨论它就和讨论如何制造燃素一样没有意义。在过去,有人嘲笑连接主义说从这个角度想得到智能和爬树来登月一样:的确更接近月亮了,可是永远别想上去。可智能不是月亮。智能是一个由否定性来定义的词汇,也就是说,我们是通过知道机械的过程来反向定义智能的。这也是图灵测试的聪明之处,从一开始就点破所谓智能的现象上的属性,并且根本就否认其存在本质主义的解释。那你可能说,现在的 GPT 系列现在应该还是通不过所有人的图灵测试的。可真是这样吗?实际上如果只允许进行有限轮的对话,你甚至不需要一个 LLM 就可以写出能通过图灵测试的程序来。因为对对话另一端的解释是无穷的。不少网上大家构建出来的嘲笑 GPT 的段子,都可以在一定的语境下合理化。

那么对这个问题更有意义的讨论是什么?我认为有两点。一个是模型在信息量增多的情况下对语境的掌握速度。比方说,如果只允许说一句话,那么要通过图灵测试很简单,但是如果提升到 5 句,就更难了,因为解的空间被压缩了,如果语境压缩的速度赶不上输入的增多速度,这时候模型就要露馅了。对应这一点的是,我们如何扩大模型的计算容量。当然,这里说的容量不一定是指更多的参数。另一个点是反向观察人的思考方式。就像我们前面说的,GPT 充当的是沟通的糖衣,那么这反向暗示了,人的语言产生机制中,应该存在着类似的润滑 / 侯选词机制。这个方面已经有一些早期的工作出来了,虽然我并不全部认同,但是这起码是一个目前看来有意义的方向。

版权问题-人工智能