本文来自微信公众号“CSDN”(ID:CSDNnews),作者:马超,36氪经授权发布。
近日,OpenAI带着他们最新、最神自动编码神器Codex霸榜各大科技媒体头条,我们知道OpenAI是微软投资的通用人工智能平台,而GitHub是微软旗下的代码托管平台,这样微软出算力、OpenAI出技术、GitHub出代码的AI编程铁三角就产生了,在发布了AI自动辅助编程工具Copilot之后,能够自动写代码的Codex也正式登场了。与Copilot一样,Codex也是在GPT-3的基础上构建而成,可以将英文的需求描述直接转换为代码。
虽然目前AI自动编码水平还更像一个华而不实的噱头,但这项技术的发展却给程序员们敲响了警钟,在未来,“我有个创意,就差个程序员”的说法是否会演变成“只要有创意,根本不需要什么程序员”,的确值得我们思考。
Codex要从GPT-3(论文地址:https://arxiv.org/abs/2005.14165)说起,GPT-3的出现充分证明大力就是能够出奇迹,这个训练集45TB,参数规模1750亿,预训练结果700G的AI模型一经问世就成为了大众瞩目的焦点。一时之间用GPT-3作诗、作曲乃至画画的应用层出不穷,而Codex的前身应该算是那个能够自动生成代码的网站debuid.co(https://debuild.co/)。
在debuild注册以后,用户只要用英语描述需求,相关前端的代码就会被自动生成出来了,笔者这种在IT界摸爬滚打十几年的老程序员,在一年前试用debuild时也惊得说不出话来,当然这个网站只是昙花一现,目前已经基本处于纯关闭状态。
不过这次的Codex明显是更猛的,它能准确Get到自然语言描述的需求,并生成有一定复杂逻辑代码,比如下面这个游戏。
说起OpenAI最源依靠AI游戏强化学习模型gym(https://github.com/openai/gym)在业界抱得大名,翻开OpenAI (https://www.openai.com/)的主页,你会发现他们除了做游戏AI,还做这种自动玩魔方的机器人。
不过在NLP领域OpenAI迎来了华丽的转身,虽然本次Codex论文的正式版还没发出,但是本质上讲Codex只是个编码专用版的GPT-3,OpenAI在GPT-3在论文开头就直接指出,通过对大量文本进行预训练,并且针对特定任务进行微调,模型的性能可以在许多NLP任务以及基准测试中获得显著提升。如图所示,X轴代码模型的参数数量级而纵轴代表准确率,可以看到,模型规模越大,准确率也会随之升高,尤其是在参数规模达到13亿以后,准确率提升的速度还会更快。简单讲也就是说GPT-3的决胜之道在于,其模型的训练集特别大,参数茫茫多。
GPT-3与GPT-2使用了相同的模型和架构,包括改进的初始设置、预归一化和 reversible tokenization。GPT-3最主要提升点在于其在transformer的各层上都使用了交替密集和局部带状稀疏的注意力模式,我们知道理解自然语言需要注意最相关的信息。例如,在阅读过程中,人们倾向于把注意力集中在最相关的部分来寻找问题的答案。然而,如果不相关的片段对阅读理解产生负面影响,就会阻碍理解的过程,而理解过程需要有效的注意力。这一原理同样适用于自然语言的计算系统。注意力一直是自然语言理解和自然语言生成模型的重要组成部分。因此,交替密集和局部带状稀疏的注意力模式只关注k个贡献最大的状态。通过显式选择,只关注少数几个元素,与传统的注意方法相比,对于与查询不高度相关的值将被归0。
由于代码规模远不如整体自然语言的规模大,因此Codex的规模仅有100多亿,比GPT-3的1750亿要少得多,不过正如我们上文演示中所展现的,它的效果还不错。
最新上线的代码Codex可能只是OpenAI的一次尝试而已,直接根据产品经理的需求描述,生成全套可执行的代码,似乎并不是GPT-3这种基于已有代码进行训练的模型所能达到的高度,本质上Codex不创造代码,而只是代码的搬运工,这也就决定了它只能对以往代码进行模仿,却很难有创造性的突破,因此想让AI独立完成编码任务似乎不太现实,未来AI与人类程序员配合,由人类程序员完成功能模块的一部分,再由AI帮助续写剩余代码,似乎才是合理选择。
因此笔者认为Copilot(https://t.co/eWPueAXTFt)也就是“程序员结对编程实践中的AI对手”,可能在未来的发展空间会更大,很多时候开发者只需要提供函数签名,Copilot就可以完成整个函数的代码编写了,有时甚至只需要一个简单的注释描述,Copilot就能把整个功能模块全写出来。
那么在这个AI自动编程的时代下,什么样的程序员会更受欢迎呢?
Ctrl+C/V式开发将迎末路,实力程序员将迎春天:根据OpenAI的官方说法Codex试图理解需求描述中的逻辑,并尽可能生成最好的代码,AI最擅长做的就是高度模仿之前大量存在过的类似代码,因此如果是简单的拷贝粘贴加修修补补式的开发方案,那么AI很可能比人类程序员做得更好。
因此这也要求人类程序员需要在更有创造力的领域继续发挥作用,这也会带来一个现象就是未来初级程序员的需求量会变少,而能与机器完美结对编程的大神级程序员会更加紧俏,不过问题也就随之而来,程序员都是慢慢成长的,很难有人起步就是大神,初级岗位变少是否意味程序员群体的断档也值得观察。
信息安全编程将更为紧俏专家:正如前文所说AI真正擅长的仅仅是对以往代码的高度模仿,不过这个技能造成的问题就是AI很可能会引用旧的类库或者软件包,从而带来安全隐患。因此即便AI生成的代码能够正常运行,也不能代表这些代码没有安全漏洞,这就很可能为黑客们创造各种可逞之机,同时也给信息安全领域的专家提供更大的空间。
不少的开源项目都是禁止将代码用于商业用途的,而用这部分不应用于商业的代码去训练收费AI模型,这种做法真的合适吗?正如前文所说GPT-3能够成功依靠就是海量的训练集,而Codex的训练代码由公开来源的英语注释及源代码而来,这其中包括了GitHub上公共存储库中的源代码及注释,而且种种迹象表明Codex的训练代码并没有按照不同的开源许可证进行区分对待。
如果AI最终给出的建议代码与原先训练集中的代码达到一定的相似度阈值,那就肯定会涉嫌侵权,但AI生成的代码与训练集代码的相似度如何界定才是问题关键,当然截止目前这还依旧是个开放性问题,业界尚未形成共识。
目前已经有消息称OpenAI已经开始关注GPT-3及Codex有可能引发的道德风险了,不过大的趋势不可阻挡,坦率讲,目前AI编码并没有迎来自己的阿尔法狗时刻,在现有模式下,AI编码最多只能达到初级程序员的水平,而没有任何创造性,不过笔者也不能排除未来AI会完全抛弃人类的编程方式,走出自己的风险甚至达到神之一手的水平的可能。因此AI程序员Codex的出现也给程序员们敲响了警钟,至少只会复制粘贴的话在未来就很难保住饭碗了,程序员还要尽快扩充自己的知识栈,尽快提升进步才是王道。
作者:马超,CSDN博客专家,阿里云MVP、华为云MVP,华为2020年技术社区开发者之星。