0

0

陶哲轩看了都直呼内行!谷歌等用LLM自动证明定理拿顶会杰出论文,上下文越全证得越好

WBOY

WBOY

发布时间:2024-02-04 09:30:47

|

1162人浏览过

|

来源于51CTO.COM

转载

Transformer的技能树是越来越厉害了。

来自马萨诸塞大学、谷歌和伊利诺伊大学厄巴纳-香槟分校(UIUC)的研究人员,最近发表了一篇论文,他们通过使用大型语言模型,成功地实现了自动生成完整定理证明的目标。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

陶哲轩看了都直呼内行!谷歌等用LLM自动证明定理拿顶会杰出论文,上下文越全证得越好

论文地址:https://arxiv.org/pdf/2303.04910.pdf

这篇工作以Baldur(北欧神话中雷神Thor的兄弟)命名,首次证明了Transformer可以生成全证明,还表明在为模型提供额外上下文时,可以改进模型先前的证明。

该论文在2023年12月的ESEC/FSE(ACM欧洲软件工程联合会议和软件工程基础研讨会)上发表,并荣获杰出论文奖。

陶哲轩看了都直呼内行!谷歌等用LLM自动证明定理拿顶会杰出论文,上下文越全证得越好

众所周知,软件中不可避免地存在着bug,这对一般应用程序或网站来说可能不会带来太大问题。然而,对于关键系统背后的软件,如加密协议、医疗设备和航天飞机,我们必须确保没有任何错误。

——一般的代码审查和测试并不能给出这个保证,这需要形式验证(formal verification)。

对于formal verification,ScienceDirect给出的解释为:

the process of mathematically checking that the behavior of a system, described using a formal model, satisfies a given property, also described using a formal model

Tellers AI
Tellers AI

Tellers是一款自动视频编辑工具,可以将文本、文章或故事转换为视频。

下载

指的是从数学上检查,使用形式模型描述的系统行为,是否满足给定属性的过程。

简单来说就是,利用数学分析的方法,通过算法引擎建立模型,对待测设计的状态空间进行穷尽分析的验证。

陶哲轩看了都直呼内行!谷歌等用LLM自动证明定理拿顶会杰出论文,上下文越全证得越好

形式化软件验证,对于软件工程师来说是最具挑战性的任务之一。例如CompCert,使用Coq交互式定理证明器验证的C编译器,是无处不在的GCC和LLVM等使用的唯一编译器。

然而,手动形式验证(编写证明)的成本却相当巨大,——C编译器的证明是编译器代码本身的三倍以上。

所以,形式验证本身是一项“劳动密集型”的任务,研究人员也在探索自动化的方法。

比如Coq和Isabelle等证明助手,通过训练一个模型来一次预测一个证明步骤,并使用模型搜索可能的证明空间。

而本文的Baldur首次在这个领域引入了大语言模型的能力,在自然语言文本和代码上训练,并在证明上进行微调,

Baldur可以一次就生成定理的完整证明,而不是一次一个步骤。

陶哲轩看了都直呼内行!谷歌等用LLM自动证明定理拿顶会杰出论文,上下文越全证得越好

如上图所示,仅使用定理语句作为证明生成模型的输入,然后从模型中抽取证明尝试,并使用Isabelle执行证明检查。

如果Isabelle接受了证明尝试而没有错误,就说明证明成功;否则从证明生成模型中抽取另一个证明尝试。

Baldur在6336个Isabelle/HOL定理及其证明的基准上进行评估,从经验上证明了完整证明生成、修复和添加上下文的有效性。

另外,这个工具之所以叫Baldur,可能是因为当前最好的自动证明生成工具叫做Thor。

Thor的证明率更高(57%),它使用较小的语言模型结合搜索可能证明空间的方法预测证明的下一步,而Baldur的优势在于它能够生成完整的证明。

陶哲轩看了都直呼内行!谷歌等用LLM自动证明定理拿顶会杰出论文,上下文越全证得越好

不过Thor和Baldur两兄弟也可以一起工作,这样可能把证明率提升到接近66%。

自动生成完整证明

Baldur由Google的大语言模型Minerva提供支持,Minerva在科学论文和包含数学表达式的网页上进行训练,并对有关证明和定理的数据进行了微调。

Baldur可以与定理证明助手Isabelle合作,Isabelle对证明结果进行检查。当给定一个定理陈述时,Baldur几乎在41%的时间内能够生成一个完整的证明。

陶哲轩看了都直呼内行!谷歌等用LLM自动证明定理拿顶会杰出论文,上下文越全证得越好

为了进一步提高Baldur的性能,研究人员向模型提供了额外的上下文信息(比如其他定义、或理论文件中的定理陈述),这使证明率提高到47.5%。

这意味着Baldur能够获取上下文,并使用它来预测新的正确证明,——类似于程序员,当了解了相关方法和代码之后,他们更有可能修复程序中的错误。

陶哲轩看了都直呼内行!谷歌等用LLM自动证明定理拿顶会杰出论文,上下文越全证得越好

下面举个例子(fun_sum_commute定理):

陶哲轩看了都直呼内行!谷歌等用LLM自动证明定理拿顶会杰出论文,上下文越全证得越好

这个定理来自形式证明档案中一个名为多项式的项目。

当人工编写证明的时候,会区分两种情况:集合是有限的或者不是有限的:

陶哲轩看了都直呼内行!谷歌等用LLM自动证明定理拿顶会杰出论文,上下文越全证得越好

所以,对于模型来说,输入是定理陈述,而目标输出是这个人工编写的证明。

Baldur认识到这里需要归纳,并应用了一种特殊的归纳法则,称为infinite_finite_induct,遵循与人类书面证明相同的总体方法,但更简洁。

而因为需要归纳,Isabelle使用的Sledgehammer默认无法证明这个定理。

训练

为了训练证明生成模型,研究人员构建了一个新的证明生成数据集。

现有数据集包含单个证明步骤的示例,每个训练示例包括证明状态(输入)和要应用的下一个证明步骤(目标)。

给定一个包含单个证明步骤的数据集,这里需要创建一个新数据集,以便训练模型一次预测整个证明。

研究人员从数据集中提取每个定理的证明步骤,并将它们连接起来以重建原始证明。

证明修复

还是以上面的fun_sum_commute为例,

陶哲轩看了都直呼内行!谷歌等用LLM自动证明定理拿顶会杰出论文,上下文越全证得越好

Baldur首次生成的证明尝试,在证明检查器中失败。

Baldur试图应用归纳法,但未能首先将证明分解为两种情况(有限集与无限集)。Isabelle返回以下错误消息:

陶哲轩看了都直呼内行!谷歌等用LLM自动证明定理拿顶会杰出论文,上下文越全证得越好

为了从这些字符串中派生出一个证明修复训练示例,这里将定理陈述、失败的证明尝试和错误消息连接起来作为输入,并使用正确的人工编写的证明作为目标。

陶哲轩看了都直呼内行!谷歌等用LLM自动证明定理拿顶会杰出论文,上下文越全证得越好

上图详细介绍了训练数据的创建过程。

使用证明生成模型,针对原始训练集中的每个问题,对温度为0的证明进行采样。

使用校对助手,记录所有失败的校样及其错误消息,然后,继续构建新的证明修复训练集。

对于每个原始训练示例,将定理语句、证明生成模型生成的(不正确的)候选证明以及相应的错误消息连接起来,以获得新训练示例的输入序列。

添加上下文

在定理陈述之前添加理论文件的行,作为额外的上下文。比如下图这样:

陶哲轩看了都直呼内行!谷歌等用LLM自动证明定理拿顶会杰出论文,上下文越全证得越好

Baldur中带有上下文的证明生成模型,可以利用这些附加信息。出现在fun_sum_commute定理语句中的字符串,在这个上下文中再次出现,因此围绕它们的附加信息可以帮助模型做出更好的预测。

上下文可以是陈述(定理、定义、证明),还可以是自然语言注释。

为了利用LLM的可用输入长度,研究人员首先从同一个理论文件中添加多达50个语句。

在训练过程中,首先对所有这些语句进行标记化,然后截断序列的左侧以适应输入长度。

陶哲轩看了都直呼内行!谷歌等用LLM自动证明定理拿顶会杰出论文,上下文越全证得越好

上图展示了有上下文和无上下文的生成模型的证明成功率与证明尝试次数的关系图。我们可以看出,具有上下文的证明生成模型始终优于普通生成模型。

陶哲轩看了都直呼内行!谷歌等用LLM自动证明定理拿顶会杰出论文,上下文越全证得越好

上图展示了不同尺寸和温度模型的已验证定理与推理成本之比。

我们可以看到生成模型的证明成功率,以及8B模型和62B模型的上下文与证明尝试次数的关系。

具有上下文的62B证明生成模型优于具有上下文的8B模型。

不过,作者在这里强调,由于这些实验的成本较高,他们也无法调整超参数,62B模型如果经过优化可能会表现得更好。

相关文章

谷歌浏览器
谷歌浏览器

谷歌浏览器Google Chrome是一款可让您更快速、轻松且安全地使用网络的浏览器。Google Chrome的设计超级简洁,使用起来得心应手。这里提供了谷歌浏览器纯净安装包,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

258

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

208

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1465

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

619

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

550

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

545

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

162

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

81

2025.08.07

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

72

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号