通往AGI之路:ChatGPT背后的逻辑,压缩即智能
我思,故我在
上个月在山海坞 women code camp,我作为讲师分享了一期《通往 AGI 之路:压缩即智能》,发现大家对AIGC 和大模型都非常感兴趣,但是当时很多小伙伴反应没听懂,所以写了这一篇白话讲解。希望能够对 AIGC 感兴趣的您有所帮助。如果您需要更深入的了解,请在阅读完本文后参考Jack Rae(OpenAI 团队核心成员)在斯坦福的主题演讲:Compression for AGI(https://www.youtube.com/watch?v=dO4TPJkeaaU),这也是本文的主要参考文献。
1 从机器学习说起
机器学习(Machine learning),对于非计算机背景的朋友来说或许有些陌生。但是我们生活的方方面面都已经被机器学习覆盖。比如,当我们打开知乎、抖音、小红书等软件的时候,系统会自动推荐我们可能感兴趣的内容;当我刚和朋友聊到想买一某品牌的裙子时,打开淘宝就发现搜索推荐已经变成了该品牌;邮件系统会帮我们自动屏蔽垃圾邮件;交通摄像头拍摄司机的行驶照片来推断是否有违规行为。这些都得益于机器学习。
那么机器学习到底是什么?机器学习的最早由贝叶斯在1783年发表的同名定理中提出。贝叶斯定理是从训练数据中学习,以便对新的、未见过的数据做出尽可能好的预测。说白了就是我们俗话说的"举一反三"。
它是让计算机在没有明确编程的情况下进行自我学习的一门学科(Arthur, 1959),属于人工智能的子领域。有些事情我们通过明确的编程就可以完成,比如计算188的12次方,或者 a 到 b 的最短距离。但是有一些问题,明确的编程就无法帮到我们。
例如我们希望计算机能够成为一个优秀的围棋选手,可以给计算机编程,让计算机自己与自己下棋,对弈一万次以后,计算机就可以通过观察,在一个残局中,落子在某个位置的胜率大于其他位置,那就是程序会选择的位置。因为计算机强大的算力,它可以在短时间内完成无数次的对弈局数,所以会越来越知道怎样能取得胜利,最终成为超过人类的棋手。让机器自己去学习找到最佳方案,就是机器学习的过程,但是机器到底学到了什么?这是一个黑盒,我们只能通过输入获得一个输出结果。
机器学习算法按照学习方式可以分为四种:监督学习(Supervised learning),无监督学习(Unsupervised learning), 半监督学习(Semi-supervised Learning)和强化学习(Reinforcement learning)。其中使用最多的是监督学习,但是 ChatGPT 却选择了强化学习作为核心算法。
2 强化学习VS监督学习
既然监督学习是主流算法,为什么 OpenAI 却选择了强化学习?这里首先跟大家介绍一下两者的概念。
监督学习是指学习输入到输出之间映射的算法,它可通过用户提供的例子来学习。例如,我们经常发现有些邮件被自动拦截进入垃圾箱,那么系统是如何判断一封邮件是否是垃圾邮件呢?这就用到了监督学习,首先工程师们需要给算法投喂大量带有标签的数据,这个例子中一封邮件可作为输入,对应的输出结果有两类,是垃圾邮件和不是垃圾邮件(Yes/No,即标签)。假设我们喂了10万条数据,算法就会根据这十万条数据自己学习垃圾邮件的特征。这时候当我们给它输入一条全新的邮件时,它就会根据之前训练的模型判断新邮件是否符合垃圾邮件的特征,从而决定需不需要进行拦截。
强化学习更像是一种奖励反馈机制。在强化学习中,我们为模型提供输入,但并不提供正确答案。模型需要自己生成答案。然后请真人读取生成的答案,并给出答案的得分(比如1-100分得80分)。模型的目标是如何回答以获得高分。另一种机制是模型生成多个答案,评分机制告诉模型哪个答案最好。模型的目标是学习生成高分的答案,而不是低分的答案。在这两种情况下,模型都是通过生成答案并接收反馈来学习。
相比之下,监督学习只允许正反馈(我们向模型输入一系列问题及其正确答案),而强化学习允许负反馈(模型可以生成错误的答案并得到反馈说"这个回答不好,下次不要这样了")。正如真人在学习过程中发现的,相比正反馈,负反馈也同样重要。这很可能是 OpenAI选择RLHF训练(即基于人类反馈的强化学习训练)的原因。
仔细想想,这是不是和人类的学习方式非常像,我们学习的时候也是通过获取大量的知识,然后考试来检测学习的情况,最终将获取的知识应用在新的场景(迁移学习,这也是 GPT 的底座之一)。因此,这一轮的 AIGC 也被认为已经无限接近接近 AGI(通用人工智能)。
3通往 AGI 之路
简单来说,AGI 就是是具备与人类同等智能、或超越人类的人工智能。是不是觉得ChatGPT已经有那味了。但是怎么去判断人工智能的智能程度呢?
1980年,John Searle提出了一个著名的思想实验《中文房间》。实验过程可以表述如下:
将一个对中文毫无了解,只会说英语的人关在一个只有一个小窗的封闭房间里。房间里有一本记录着中英文翻译的手册。房间里还有足够的稿纸、铅笔。同时,写着中文的纸片通过小窗口被送入房间中。房间中的人可以使用他的书来翻译这些文字并用中文回复。虽然他完全不会中文,但通过这个过程,房间里的人可以让任何房间外的人以为他会说流利的中文。
这样一个庞大的手册显然代表着非常低的智能水平,因为一旦遇到手册中没有的词汇,这个人就无法应对了。如果我们能够从大量的数据中提取出一些语法和规则,那么手册可能会变得更加精简,但是系统的智能水平将会更高(泛化能力更强)。
手册越厚,智能越弱;手册越薄,智能越强。就好像公司雇一个人好像能力越强的人,你需要解释得越少,能力越弱,你需要解释得越多。
上面这个例子就很好的解释了为什么压缩即智能:想要提高 AI 的智能程度,可以通过泛化提取规则,提取出需要的有效信息。这样你就可以理解 NLP 研究者们经常说的一句话:GPT 的训练过程是对数据的无损压缩。
4 压缩即智能
2月28日,OpenAI 的核心研发人员 Jack Rae 在参加 Stanford MLSys Seminar 的访谈时进行了一个名为 Compression for AGI 的主题分享,其核心观点为:AGI 基础模型的目标是实现对有效信息最大限度的无损压缩。并同时给出了为什么这个目标是合理的逻辑分析,以及 OpenAI 是如何在这个目标下创造了 ChatGPT。
泛化就是从已知推到未知的过程。如图所示,我们关心的核心问题是如何从已有数据中(黄色),了解到未知数据的规律并做出预测(灰色)。一个模型越能够准确预测灰色部分,它的泛化能力就越强。
想象一个电脑软件需要把英文翻译成中文,如果它是通过查找字典把所有可能的词组翻译成中文,那么我们可以认为它对翻译任务有着最差的理解,因为任何出现在字典之外的词组它都无法翻译。但如果将字典提炼为较小的规则集(例如一些语法或基本的词汇),那它将会有更好的理解能力,因此我们可以根据规则集的压缩程度对其进行评分。实际上,如果我们可以把它压缩到最小描述长度,那么我们可以说它对翻译任务有着最好的理解。
对于给定的数据集 D,我们可以使用生成模型 f 对其进行压缩,图中 | D | 表示数据集 D 的无损压缩,无损压缩的大小可以表示为对 D 评估的生成模型的负对数似然加上估计函数的最小描述长度。
那么大模型是如何实现无损压缩的呢?我们需要先了解 GPT 的本质。GPT 其实就是基于 Transformer 的大字典,本质是就是 Next Token Prediction(下文推理)。简单说就是预测一个给定的文本序列后最后可能出现的词或词组。比如说我现在说:"你昨晚睡得",话没说完,这个时候你就知道我大概率要说:"你昨晚睡得好吗?"推理出我要接着说"好吗 "的过程就是下文推理。
你可能会说很明显这样学到的不就是单词之间的表层统计关系吗?怎么就产生了智能?
假设你需要将一些数据从遥远的半人马座星系传输回地球,但是带宽非常珍贵,你需要用最少的带宽来传输数据,并且保证另一端可以无损地恢复你的数据。你可以采用这个方法:
首先,准备一个语言模型的训练代码,每次运行时都会生成相同的神经网络模型。
其次,在N条数据上运行训练程序,在t时刻,将在所有token概率分布Pt下的,Xt的概率取出,并使用算术编码将其转换为二进制小数,记为Zt。以此类推,得到一个由Z1,Z2,Z3,…,Zn构成的列表。
如果要在另一端无损地还原这N条数据,只需传输以下两个内容:Z1-Zn的列表和语言模型训练代码。
在接收端进行解码时,我们使用收到的训练代码初始化网络。在时间戳t时刻,模型使用Pt对Zt进行算术解码得到Xt。需要注意的是,t时刻的token概率分布Pt在发送端和接收端是完全一致的。
整个过程是一个无损的数据压缩过程,基于语言模型的训练代码,我们将N条数据压缩成了Z1-Zn的一串数字,每个压缩后的数据大小为-logp(x)。需要注意的是,在整个过程中,我们不需要发送整个神经网络(几百上千亿参数)。
因此,使用语言模型来压缩数据集D的总比特数可以表示为以下公式:
一个基于transformer模型的描述长度大概在100kb ~ 1MB之间(所有必要的代码大小)。模型的参数不属于模型的描述长度。
我们常常觉得chatgpt在关于事实性问题上错误百出,比如说问他刘慈欣是哪个城市的,模型还是会答错。这是因为在训练过程中,模型慢慢地记住了一些训练数据,模型的参数可以近似看成是一个对于训练数据的有损数据压缩,这也是特德·姜在《ChatGPT是网上所有文本模糊的图片》的意思。LLM是对于原始数据集的无损压缩,这是非常具体的数学上可以严格证明的。特德·姜说的有损压缩,是一种非常抽象的文学上的类比。
还记得这张图吗,我们关心的不是黄圈里面的内容,而是外面灰色的部分,因为我们关心如何用更少的内容来获取更多的知识,也就是泛化能力。相比于堆参数量,泛化才是智能!