我们⼤多数⼈都是恐⻰,等待着流星的撞击。上世纪80年代,我⻓⼤了,开始在家中为Commodore VIC-20和Apple等个⼈电脑编程。我在⼤学⾥继续学习计算机科学 (CS),并最终在伯克利获得博⼠学位,我的⼤部分专业培训都植根于我称之为“经典”的CS:编程、算法、数据结构、系统、编程语⾔。在经典计算机科学中,最终⽬标是将⼀个想法简化为由Java、C++或Python等语⾔编写的程序。
经典计算机科学中的每⼀个思想——⽆论多么复杂,从数据库连接算法到令⼈难以置信⽽滑稽的Paxos共识协议——都可以表达为⼈类可读、可理解的程序。上世纪90年代初,当我还在上⼤学的时候,我们还处于AI寒冬的深处,AI作为⼀个领域同样被经典算法所主导。我在康奈尔⼤学的第⼀份研究⼯作是和Dan Huttenlocher⼀起⼯作,他是计算机视觉领域的领军⼈物(现在是麻省理⼯学院施瓦茨曼计算学院的院⻓)。
1995年前后,在Huttenlocher的计算机视觉的博⼠⽣课程中,我们从未讨论过任何类似于深度学习或神经⽹络的东⻄,⽽是经典算法,如Canny边缘检测、光流和Hausdorff距离。深度学习还处于起步阶段,还没有被认为是主流⼈⼯智能,更不⽤说主流计算机科学了。
当然,这是30年前的事情了,从那时起发⽣了很多变化,但有⼀件事没有真正改变——计算机科学是⼀⻔“数据结构、算法和编程”作为其核⼼的学科来教授的。如果再过30年,甚⾄10年,我们还在⽤这种⽅式研究计算机科学,我会感到惊讶的。事实上,我认为计算机科学作为⼀个领域正在经历⼀个巨⼤的变迁——我们中很少有⼈真正做好了准备。
编程将被淘汰,我相信“写程序”的传统观念正在⾛向消亡。事实上,除了⾮常专业的应⽤,我们所知道的⼤多数软件将被经过训练⽽不是编程的⼈⼯智能系统所取代。在需要⼀个“简单”程序的情况下(毕竟,并不是所有的程序都需要⼀个运⾏在GPU集群上、有数千亿个参数的⼤模型),这些程序本身将由⼈⼯智能⽣成,⽽不是⼿⼯编码。我不认为这个想法很疯狂。
毫⽆疑问,从(相对)原始的电⽓⼯程洞⽳中⾛出的最早的计算机科学先驱们坚信,所有未来的计算机科学家都需要对半导体、⼆进制算术和微处理器设计有深刻的理解才能理解软件。快进到今天,我敢打赌99%的编写软件的⼈⼏乎不知道CPU是如何⼯作的,更不⽤说晶体管设计的物理基础了。进⼀步地说,我相信未来的计算机科学家将远离“软件”的经典定义,他们将很难逆转链表或实现快速排序。
(⻅⻤,我不确定我是否还记得如何实现快速排序。)像CoPilot这样的AI编码助⼿只是触及了我所描述的内容的表⾯。在我看来,很明显,未来所有的程序最终都将由AI来编写,⽽⼈类充其量只能扮演监督的⻆⾊。任何怀疑这⼀预测的⼈只需看看AI内容⽣成的其他⽅⾯(如图像⽣成)正在取得的惊⼈进展。DALL-E v1和仅在15个⽉后宣布的DALL-E v2在质量和复杂性上的差异是惊⼈的。
如果说我在过去⼏年的⼈⼯智能⼯作中学到了什么,那就是,⼈们很容易低估⽇益庞⼤的⼈⼯智能模型的⼒量。⼏个⽉前还像是科幻⼩说的事情正在迅速成为现实。
所以,我不只是在谈论像Github的CoPilot[1]取代程序员,⽽要说的是,⽤训练模型取代编写程序的整个概念。在未来,计算机科学的学⽣将不需要学习诸如如何向⼆叉树添加节点或C++代码这样的平凡技能。这种教育将会过时,就像教⼯程专业的学⽣如何使⽤计算尺⼀样。
未来的⼯程师只需敲击⼏下键盘,就能启动⼀个包含400亿亿个参数(four-quintillion-parameter)的模型实例,这个模型已经对⼈类知识的全部范围(包括⼦集)进⾏了编码,并随时准备执⾏机器要求的任何任务。让机器做我们想做的事情的⼤部分脑⼒⼯作将是提出正确的示例、正确的训练数据和正确的⽅法来评估训练过程。
像基于⼩样本学习(few-shot learning)且能泛化的、这样强⼤的模型只需要执⾏任务的⼏个好的示例。在⼤多数情况下,⼤规模的、⼈⼯管理的数据集将不再是必要的,⼤多数⼈“训练”⼀个AI模型将不会在PyTorch中运⾏梯度下降循环(gradient descent loops)或类似的东⻄。他们只是教模型⼏个示例,机器将完成其余的⼯作。
在这⻔新的计算机科学中——如果我们还称之为计算机科学的话——机器将如此强⼤,并且已经知道如何做很多事情,这⼀领域将看起来不像⼀个⼯程领域,⽽更像⼀个教育领域。也就是说,如何最好地教育机器,就像如何最好地教育学校⾥的孩⼦⼀样。不过,与 (⼈类) 孩⼦不同的是,这些⼈⼯智能系统将驾驶我们的⻜机、运⾏我们的电⽹,甚⾄可能统治整个国家。
我认为,当我们的注意⼒转向教授智能机器⽽不是直接编程时,绝⼤多数经典CS就变得⽆关紧要了。传统意义上的编程实际上将会消亡。我认为CS作为⼀个领域正在经历⼀场相当⼤的剧变,我们中很少有⼈真正做好了准备。这⼀切将如何改变我们对计算机科学领域的看法?新的原⼦计算单元不再是处理器、内存和I/O系统,⽽是⼀个⼤规模的、预先训练过的、⾼度⾃适应的AI模型。
这对我们思考计算的⽅式来说是⼀个巨⼤的转变——不再是⼀个可预测的、静态的、受指令集、类型系统和可判定性概念⽀配的过程。基于⼈⼯智能的计算早已跨越了静态分析和形式证明的界限。我们正在迅速⾛向这样⼀个世界,在这个世界⾥,计算的基本构件是有⽓质的、神秘的、⾃适应的代理。没有⼈真正了解⼤型⼈⼯智能模型是如何⼯作的,这⼀事实突显了这种转变。
⼈们发表的研究论⽂实际上发现了现有⼤型模型的新⾏为,即使这些系统是由⼈类“设计”出来的。⼤型⼈⼯智能模型能够做⼀些它们没有受过明确训练的事情,这应该会把Nick Bostrom[2]和其他担⼼超级智能⼈⼯智能横⾏的⼈吓得魂⻜魄灭 (这是正确的)。除了实证研究,我们⽬前没有办法确定当前⼈⼯智能系统的局限性。⾄于未来更⼤更复杂的⼈⼯智能模型——祝我们好运!
对于任何读过现代机器学习论⽂的⼈来说,焦点从程序到模型的转变应该是显⽽易⻅的。这些论⽂⼏乎没有提到创新背后的代码或系统:⼈⼯智能系统的构建模块是更⾼层次的抽象,如注意⼒层(attention layers)、标记器(tokenizers)和数据集。
即使是20年前的时间旅⾏者,也很难理解GPT-3论⽂[3](描述为该模型构建的实际软件)的三句话(three sentences):“我们使⽤与GPT-2相同的模型和架构,包括其中描述的修改后的初始化、预归⼀化和可逆标记化,除了我们在Transformer Layer中使⽤交替的密集和局部稀疏注意⼒模式,类似于稀疏矩阵(Sparse Transformer)。
为了研究ML性能对模型⼤⼩的依赖关系,我们训练了8种不同⼤⼩的模型,从1.25亿个参数到1750亿个参数,范围超过三个数量级,最后⼀个是我们称之为GPT-3的模型。先前的⼯作表明,在⾜够的训练数据下,验证损失的缩放应该近似于⼀个平滑幂律(power law)作为规模的函数。许多不同规模的训练模型允许我们测试这个假设的验证损失(validation loss)和下游语⾔任务。”
计算基础定义的这种转变带来了巨⼤的机遇,也带来了巨⼤的⻛险。然⽽,我认为现在是时候接受这是⼀个很有可能的未来,并相应地发展我们的思想,⽽不是只是坐在这⾥等待流星撞击。