编程的终结:经典计算机领域正迎来剧变

4f71a111884c768cc61459f7ff522509.jpeg

我们大多数人都是恐龙,等待着流星的撞击。

撰文 | Matt Welsh

本文作者Matt Welsh (mdw@mdw.la)是一家最近成立的初创公司Fixie.ai(致力于开发人工智能功能来支持软件开发团队)的首席执行官和联合创始人。他曾是哈佛大学计算机科学教授、谷歌的工程总监、苹果的工程主管,以及OctoML的工程高级副总裁。他在加州大学伯克利分校获得博士学位的时候,人工智能还不太会下国际象棋。
本文The End of Programming发表于 JANUARY 2023 | VOL. 66 | NO. 1 | COMMUNICATIONS OF THE ACM(《美国计算机协会通讯》),本文只代表着其中一种观点,但由权威刊出,说明这种观点值得关注。

上世纪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在质量和复杂性上的差异是惊人的。如果说我在过去几年的人工智能工作中学到了什么,那就是,人们很容易低估日益庞大的人工智能模型的力量。几个月前还像是科幻小说的事情正在迅速成为现实。

f980b2f77a70be4f218aef875edbccc2.jpeg

(创造出令人惊艳的图像, https://openai.com/dall-e-2/)

所以,我不只是在谈论像Github的CoPilot[1]取代程序员,而要说的是,用训练模型取代编写程序的整个概念。在未来,计算机科学的学生将不需要学习诸如如何向二叉树添加节点或C++代码这样的平凡技能。这种教育将会过时,就像教工程专业的学生如何使用计算尺一样。

未来的工程师只需敲击几下键盘,就能启动一个包含400亿亿个参数(
four-quintillion-parameter)的模型实例,这个模型已经对人类知识的全部范围(包括子集)进行了编码,并随时准备执行机器要求的任何任务。让机器做我们想做的事情的大部分脑力工作将是提出正确的示例、正确的训练数据和正确的方法来评估训练过程。像基于小样本学习(few-shot learning)且能泛化的、这样强大的模型只需要执行任务的几个好的示例。在大多数情况下,大规模的、人工管理的数据集将不再是必要的,大多数人“训练”一个AI模型将不会在PyTorch中运行梯度下降循环(gradient descent loops)或类似的东西。他们只是教模型几个示例,机器将完成其余的工作。

9472168274da6eb304af50b3c4851c54.jpeg

在这门新的计算机科学中——如果我们还称之为计算机科学的话——机器将如此强大,并且已经知道如何做很多事情,这一领域将看起来不像一个工程领域,而更像一个教育领域。也就是说,如何最好地教育机器,就像如何最好地教育学校里的孩子一样。不过,与(人类)孩子不同的是,这些人工智能系统将驾驶我们的飞机、运行我们的电网,甚至可能统治整个国家。我认为,当我们的注意力转向教授智能机器而不是直接编程时,绝大多数经典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)和下游语言任务。”

计算基础定义的这种转变带来了巨大的机遇,也带来了巨大的风险。然而,我认为现在是时候接受这是一个很有可能的未来,并相应地发展我们的思想,而不是只是坐在这里等待流星撞击。

大师兄:虽然目前大模型的AI技术听起来很强大,但还不能完全替代我们,总之,我们别高估AI技术的短期影响,也别低估AI技术的长期影响。自动化是人类发展原动力,AI就是自动化终结形态,人类必然会走上AI发展道路,AI发展是大势所趋,不以人的意志为转移,所以我们需要去了解一下,对新技术保持敬畏。

a8947ff0cb94e5d858db26612b1fe790.png

大师兄: 编程本身是物理世界到计算机世界映射,这个映射本身是可以被机器替代的,我们人类未来可做为监督员或者领域专家,在AI还没有产生意识之前,AI只能执行,不能思考,所以软件还得需要我们来设计,但写代码的活可能用AI来替代,以后我们专注系统设计,问题解决等能力。从目前实际情况来看,大部分公司已经把AI工具纳入研发体系,和cicd 流水线, 自动化测试一样,属于提效工具,各个大厂已经接入或正在接入,未来程序员主要负责系统设计和解决程序问题,其实对程序员要求更高了,需要非常扎实基础,才能判断AI给东西是否正确,大部分初级程序员的活(比如具体coding工作)会交给AI来执行,人类其实已经进入AI-dev时代,预测未来研发形态,在AI没有意识之前AI+高级/专家程序员组合

参考文献

[1] Berger, E. Coping with copilot. SIGPLAN PL Perspectives Blog, 2022; https://bit.ly/3XbJv5J

[2]Bostrom, N. Superintelligence: Paths, Dangers, Strategies. Oxford University Press, 2014.

[3]Brown, T. et al. Language models are few-shot learners. 2020; https://bit.ly/3Eh1DT5

[4]Kojima, T. et al. Large language models are zero-shot reasoners. 2022; https://bit.ly/3Ohmlqo

[5]Nye, M. et al. Show your work: Scratchpads for intermediate computation with language models. 2021; https://bit.ly/3TLnfMY

欢迎大家加入极客星球圈子:

全网独家最专业的技术学习提升圈子:

  • 修炼基本功:直播分享多年工作经验和基础技术深度理解(深入理解系列,基础概念的深入理解等等);

  • 扩展视野:真正的分享海内外技术发展,大厂技术内幕,业界解决方案;

  • 找工作系列:面试问题,简历修改,问题答疑,各类大厂(芯片,自动驾驶,嵌入式,互联网等)制定学习路线和指导;

  • 职场普升:可以分享各种不同公司宝贵的职场工作经验, 项目经验,做事经验,普升经验,少走弯路;

  • 专属VIP群:问题答疑,任何技术问题,任何疑难杂症,都可以咨询,讨论,交流!

    d83b7b498355b4fa24ef4ed5c4deeda4.png

c683d3b96465f14bd4cbdde5d50297d6.png

扫码进入!

还有更多的精彩分享:

  • 深入理解计算机系统

  • 深入理解操作系统(调度,内存,网络,IO)

  • 深入理解并发技术全景指南

  • 深入理解编程语言

  • 深入理解算法与数据结构

  • 深入理解网络协议

  • 深入理解网络编程

  • 深入理解性能优化

  • 深入理解分布式技术

  • 深入理解数据库

  • 深入理解代码设计

  • 深入理解系统架构设计

...

c2f7353cf9f5fdf50bef7e57784f25aa.jpeg

深入理解Linux网络子系统

5273a998841e99ab84fff8788880e1b9.jpeg

TCP/IP协议精华指南pdf

77ebb55057ecc2544443f120d6603ed4.jpeg

深入理解并发/并行技术


6212741dc183d45d2c159c2d16f833a7.jpeg

如何才能掌握所有的编程语言


643db771056cce700972b10f1c0fd6e6.jpeg

一文掌握网络编程精华

793214ef1bf6fd8b536bba224c8435a7.jpeg

掌握性能优化神功心法,进阶高薪


感谢一键三连
在看转发点赞

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值