超级编程AI登上Science封面!AlphaCode编程大赛卷趴一半程序员(2)

简介: 超级编程AI登上Science封面!AlphaCode编程大赛卷趴一半程序员

就拿这个1553D问题来说,参赛者需要找到一种方法,使用一组有限的输入将一串随机重复的s和t字母转换成另一串相同的字母。

参赛者不能只是输入新的字母,而必须使用「退格」命令删除原始字符串中的几个字母。赛题具体如下:

对此,AlphaCode给出的解决方案如下:

并且,AlphaCode的「解题思路」也不再是黑箱,它还能显示代码和注意力高亮的位置。

AlphaCode的学习系统

参加编程比赛时,AlphaCode面临的主要挑战是:

(i)需要在巨大的程序空间中搜索,(ii)只能获得约13,000个用于训练的示例任务,以及(iii)每个问题的提交数量有限。为了应对这些问题,AlphaCode整个学习系统的构建分为三个环节,预训练、微调、采样与评估,如上图所示。预训练在预训练阶段,利用在GitHub收集的715GB人类码农的代码快照,对模型进行预训练,并使用交叉熵next-token预测损失。在预训练过程中,随机地将代码文件分成两部分,将第一部分作为编码器的输入,并训练模型去掉编码器生成第二部分。这种预训练为编码学习了一个强大的先验,使随后的特定任务的微调能够在一个更小的数据集上进行。微调在微调阶段,在一个2.6GB的竞争性编程问题数据集上对模型进行了微调和评估,数据集是DeepMind创建的,命名为CodeContests公开发布。CodeContests数据集中包括问题以及测试案例。训练集包含13,328个问题,每个问题平均有922.4个提交答案。验证集和测试集分别包含117个和165个问题。在微调过程中,将自然语言的问题陈述编码为程序注释,以使其看起来与预训练期间看到的文件更加相似(其中可以包括扩展的自然语言注释),并使用相同的next-token预测损失。采样为了选出10个最好的样本进行提交,采用过滤和聚类的方法,利用问题陈述中包含的例子测试来执行样本,并删除未能通过这些测试的样本。通过过滤筛除了近99%的模型样本,再对剩下的候选样本进行聚类,在一个单独的transformer模型生成的输入上执行这些样本,并将在生成的输入上产生相同输出的程序归为一类。然后,从10个最大的聚类中各挑选一个样本进行提交。直观地说,正确的程序行为相同,并形成大的聚类,而不正确的程序的失败方式是多种多样的。评估上图所示为在10@k指标上,模型性能是如何随着更多的样本量和计算量而变化的。从对采样结果的性能评估上看,研究人员得出了以下4点结论:1. 解决率随着更大的样本量而呈对数线性扩展;2. 更好的模型在比例曲线上有更高的斜率;3. 解决率与更多的计算量呈对数线性比例;4. 样本选择对解决率的扩展至关重要。

纯粹的「数据驱动」

毫无疑问,AlphaCode的提出,代表了机器学习模型在发展上已经迈出了实质性的一步。

有趣的是,AlphaCode并不包含关于计算机代码结构的明确的内置知识。相反,它依靠一种纯粹的「数据驱动」方法来编写代码,也就是通过简单地观察大量现有代码来学习计算机程序的结构。文章地址:https://www.science.org/doi/10.1126/science.add8258从根本上说,使AlphaCode在竞争性编程任务上胜过其他系统的原因归结为两个主要属性:1. 训练数据

2. 候选解决方案的后处理

但计算机代码是一个高度结构化的媒介,程序必须遵守定义的语法,并且必须在解决方案的不同部分中产生明确的前、后条件。而AlphaCode在生成代码时采用的方法,却和生成其他文本内容时完全一样——一次一个token,并且只在整个程序写完后检查程序的正确性。鉴于适当的数据和模型的复杂性,AlphaCode可以生成连贯的结构。然而,这个顺序生成程序的最终配方被深埋在LLM的参数中,难以捉摸。不过,无论AlphaCode是否真的能「理解」编程问题,它的确在代码竞赛方面达到了人类的平均水平。

「解决编程竞赛的问题是一件非常困难的事情,需要人类具有良好的编码技能和解决问题的创造力。AlphaCode能够在这一领域取得进展,给我留下了深刻的印象,我很高兴看到,该模型如何利用其语句理解来生成代码,并引导其随机探索以创建解决方案。」                  ——Petr Mitrichev,谷歌软件工程师和世界级竞技程序员

AlphaCode在编程竞赛中名列前54%,展示了深度学习模型在需要批判性思维的任务中的潜力。这些模型优雅地利用现代机器学习,将问题的解决方案表达为代码,这就回到几十年前AI的符号推理根源。而这,仅仅是一个开始。在未来,还会诞生更多解决问题的强大AI,或许这一天已经不远了。参考资料:https://www.science.org/doi/10.1126/science.add8258https://www.science.org/doi/10.1126/science.abq1158https://www.deepmind.com/blog/competitive-programming-with-alphacode

相关文章
|
9天前
|
人工智能 测试技术 开发者
AI 编码助手:编程路上的得力伙伴
在数字化浪潮中,AI编码助手成为开发者不可或缺的工具。它通过代码生成与补全、优化与规范、错误检测与调试等功能,大幅提升编程效率和代码质量。从需求分析到部署,AI助手全程助力,确保项目顺利进行。尽管不能替代开发者创造力,但它无疑是编程道路上的得力伙伴,推动软件开发不断创新。
45 12
|
1月前
|
人工智能 安全 JavaScript
Open Interpreter:AI 赋能终端!在终端中对话AI模型进行编程,通过运行代码来完成各种计算机操作任务
Open Interpreter 是一个让语言模型运行代码的强大工具,提供了一个类似 ChatGPT 的界面,支持多种编程语言和丰富的功能。
97 7
Open Interpreter:AI 赋能终端!在终端中对话AI模型进行编程,通过运行代码来完成各种计算机操作任务
|
23天前
|
人工智能
带上团队一起来做 AI 编程实践丨通义灵码联合TGO鲲鹏会开启 AI 大课
带上团队一起来做 AI 编程实践丨通义灵码联合TGO鲲鹏会开启 AI 大课
|
27天前
|
人工智能 并行计算 调度
【AI系统】CUDA 编程模式
本文介绍了英伟达GPU的CUDA编程模型及其SIMT执行模式,对比了SIMD和SIMT的特点,阐述了SIMT如何提高并行计算效率和编程灵活性。同时简要提及了AMD的GPU架构及编程模型,包括最新的MI300X和ROCm平台。
52 5
|
1月前
|
人工智能 供应链 新能源
推动AI与基础科学融合,第二届世界科学智能大赛圆满收官
推动AI与基础科学融合,第二届世界科学智能大赛圆满收官
39 5
|
1月前
|
机器学习/深度学习 人工智能 并行计算
【AI系统】芯片的编程体系
本文探讨了SIMD与SIMT的区别及联系,分析了SIMT与CUDA编程的关系,深入讨论了GPU在SIMT编程的本质及其与DSA架构的关系。文章还概述了AI芯片的并行分类与并行处理硬件架构,强调了理解AI芯片编程体系的重要性,旨在帮助开发者更高效地利用AI芯片算力,促进生态繁荣。
48 0
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术深度解析:从基础到应用的全面介绍
人工智能(AI)技术的迅猛发展,正在深刻改变着我们的生活和工作方式。从自然语言处理(NLP)到机器学习,从神经网络到大型语言模型(LLM),AI技术的每一次进步都带来了前所未有的机遇和挑战。本文将从背景、历史、业务场景、Python代码示例、流程图以及如何上手等多个方面,对AI技术中的关键组件进行深度解析,为读者呈现一个全面而深入的AI技术世界。
77 10
|
1天前
|
机器学习/深度学习 人工智能 自动驾驶
企业内训|AI大模型在汽车行业的前沿应用研修-某汽车集团
本课程是TsingtaoAI为某汽车集团高级项目经理设计研发,课程全面系统地解析AI的发展历程、技术基础及其在汽车行业的深度应用。通过深入浅出的理论讲解、丰富的行业案例分析以及实战项目训练,学员将全面掌握机器学习、深度学习、NLP与CV等核心技术,了解自动驾驶、智能制造、车联网与智能营销等关键应用场景,洞悉AI技术对企业战略布局的深远影响。
123 96
|
6天前
|
机器学习/深度学习 人工智能 物联网
AI赋能大学计划·大模型技术与应用实战学生训练营——湖南大学站圆满结营
12月14日,由中国软件行业校园招聘与实习公共服务平台携手魔搭社区共同举办的AI赋能大学计划·大模型技术与产业趋势高校行AIGC项目实战营·湖南大学站圆满结营。
AI赋能大学计划·大模型技术与应用实战学生训练营——湖南大学站圆满结营