草庐IT

神经符号回归:从数据中提取科学

李睿 2023-03-29 原文


译者 | 李睿

审校 | 孙淑娟

宇宙是嘈杂而混乱的,复杂到让人们的预测变得困难。人类的智慧和直觉有助于对周围世界的一些活动有着基本的了解,并且足以从个人和小团体的有限视角在宏观空间和时间尺度上对各个事件有一些基本的理解。

人类史前和古代的自然哲学家大多局限于常识合理化和猜测检验。这些方法具有很大的局限性,特别是对于太大或太复杂的事情,因此导致迷信或魔法思维的盛行。

这并不是贬低猜测和检查(这是现代科学方法的基础),而是要看到人类调查和理解能力的变化是由将物理现象提炼成数学表达式的愿望和工具所引发的。

这在牛顿和其他科学家领导启蒙运动之后尤其明显,尽管在古代也有分析还原论的痕迹。从观察到数学方程(以及这些方程做出的预测)的能力是科学探索和进步不可或缺的一部分。

深度学习从根本上讲也是关于学习与输入-输出观察相关的转换,就像人类科学家试图以数学表达式的形式学习输入和输出之间的函数关系一样。

当然,不同之处在于深度神经网络学习的输入-输出关系(通用逼近定理的结果)由一个不可解释的数值参数“黑盒”组成,主要是权重、偏差和它们连接的节点。

通用逼近定理指出,满足非常宽松标准的神经网络应该能够非常接近任何表现良好的函数。在实践中,神经网络是一个脆弱而有漏洞的抽象概念,它代表了由简单而精确的基础方程产生的输入输出关系。

除非特别注意训练模型(或模型集成)以预测不确定性,否则神经网络在其训练的分布之外进行预测时往往表现非常差。

深度学习预测在做出可证伪的预测方面也表现不佳,即开箱即用的构成科学方法基础的假设。因此,虽然深度学习是一种经过充分验证的工具,擅长拟合数据,但它在人类最重要的追求之一的实用性受到限制,这个追求就是通过科学方法探索人们周围的宇宙。

尽管深度学习在人类的科学努力中存在着各种的缺点,但不能忽视深度学习在科学学科中的巨大拟合能力和众多成功之处。

现代科学产生了大量的数据,个人(甚至是团队)无法观察这些数据的输出,也无法从嘈杂的数据直观地转换为清晰的数学方程。

为此,可以求助于符号回归,这是一种将数据简化为方程的自动化或半自动化方法。

当前的黄金标准:进化方法

在进入将现代深度学习应用于符号回归的一些令人兴奋的最新研究之前,必须首先了解将数据集转化为方程的进化方法的当前状态。最常提到的符号回归软件包是基于遗传算法的Eureqa。

Eureqa最初是作为康奈尔大学HodLipson团队的一个研究项目开发的,并作为Nutonian的专有软件提供,后来被DataRobot公司收购。Eureqa已经集成到Datarobot平台中,由Eureqa的合著者兼Datarobot Michael Schmidt公司的首席技术官负责。

Eureqa和类似的符号回归工具使用遗传算法同时优化方程组,以实现准确性和简单性。

TuringBot是一个基于模拟退火的替代符号回归包。模拟退火是一种优化算法,类似于用于改变金属物理性质的冶金退火。

在模拟退火中,选择优化问题的候选解决方案时会降低“温度”,其中较高的温度对应于接受较差的解决方案,并用于促进早期探索,从而能够搜索全局最优值,并提供能量来逃避局部最优值。

TuringBot是基于模拟退火的另一种符号回归包。模拟退火是一种优化算法,类似于用于改变金属物理性质的冶金退火。

在模拟退火中,选择优化问题的候选解决方案时会降低“温度”,其中较高的温度对应于接受较差的解决方案,并用于促进早期探索,从而能够搜索全局最优值,并提供能量来逃避局部最优值。

TuringBot是一个免费版本,但在数据集大小和复杂性方面有很大的限制,并且代码不允许修改。

虽然商业符号回归软件(尤其是Eureqa)在开发符号回归的新工具时提供了重要的比较基准,但闭源程序的作用是有限的。

另一个名为PySR的开源替代方案在Apache 2.0许可下发布,由普林斯顿大学博士生Miles Cranmer领导,并分享了准确性和简约性(简单性)的优化目标,以及Eureqa和TuringBot使用的组合方法。

除了提供用于执行符号回归的免费且可自由修改的软件库之外,PySR从软件的角度来看也很有趣:它是用Python编写的,但使用Julia编程语言作为快速后端。

虽然遗传算法通常被认为是符号回归的当前最先进技术,但在过去几年中,新的符号回归策略出现了令人兴奋的爆炸式增长。

其中许多新的发展利用了现代深度学习模型,或者作为多步骤过程中的函数近似组件,或者以基于大型Transformer模型的端到端方式,最初是为自然语言处理开发的,以及介于两者之间的任何内容。

除了基于深度学习的新符号回归工具之外,概率和统计方法也在复苏,尤其是贝叶斯统计方法。

结合现代计算能力,新一代符号回归软件不仅本身是一项有趣的研究,而且为包括大数据集和综合实验在内的科学学科提供了真正的实用性和贡献。

以深度神经网络作为函数逼近器的符号回归

由于Cybenko和Hornik在上世纪80年代末/90年代初描述和研究的通用逼近定理,可以预期具有至少一个非线性激活隐藏层的神经网络能够逼近任何表现良好的数学函数。

在实践中,倾向于在更复杂的问题上使用更深层次的神经网络获得更好的性能。然而,原则上,需要一个隐藏层来逼近各种函数。

受物理学启发的AI Feynman算法将通用逼近定理作为一个更复杂难题的一部分。

AI Feynman(及其继任者AI Feynman 2.0)是由物理学家Silviu-Marian Udrescu和Max Tegmark(以及一些同事)开发的。AI Feynman利用了许多物理方程中的函数特性,例如平滑度、对称性和组合性以及其他一些特性。

神经网络作为函数逼近器发挥作用,学习数据集中表示的输入-输出变换对,并通过在相同的函数变换下生成合成数据来促进对这些特性的研究。

AI Feynman用来解决问题的函数特性在物理学方程中很常见,但并不能任意应用于所有可能的数学函数的空间。但是,它们仍然是在与现实世界相对应的各种函数中寻找的合理假设。

与前面描述的遗传算法和模拟退火方法一样,AI Feynman从头开始拟合每个新数据集。不涉及泛化或预训练,深度神经网络仅构成一个更大的、物理信息丰富的系统中精心编排的一部分。

AI Feynman符号回归在破译Feynman物理学讲座中的100个方程(或谜团)方面表现出色,但缺乏泛化意味着每个新数据集(对应于一个新方程)都需要大量的计算预算。

用于符号回归的一组新的深度学习策略利用了非常成功的Transformer模型系列,最初由Vaswani等人作为自然语言模型引入。这些新方法并不完美,但使用预训练可以在推理时节省大量计算时间。

基于自然语言模型的第一代符号回归

鉴于基于注意力的超大型Transformer模型在计算机视觉、音频、强化学习、推荐系统和许多其他领域(除了基于文本的自然语言处理的原始角色)的各种任务上取得了巨大成功,因此Transformer模型最终也将应用于符号回归也就不足为奇了。

虽然数字输入-输出对到符号序列的领域需要一些仔细的工程,但数学表达式基于序列的性质自然适用于Transformer方法。

至关重要的是,使用Transformer生成数学表达式使他们能够利用对数百万个自动生成的方程的结构和数值含义进行预训练。

这也为通过扩大规模来改进模型奠定了基础。缩放是深度学习的主要优势之一,其中更大的模型和更多的数据继续提高模型性能,远远超出过拟合的经典统计学习限制。

缩放是Biggio等人在主题为“可缩放的神经符号回归”的论文中提及的主要优势,其名称为NSRTS。NSRTS Transformer模型使用专用编码器将每个输入输出对数据集转换为一个潜在空间。编码的潜在空间具有固定大小,而与编码器的输入大小无关。

NSRTS解码器构建一个令牌序列来表示一个方程,其条件是编码的潜在空间和到目前为止生成的符号。至关重要的是,解码器仅输出数字常量的占位符,但在其他方面使用与预训练方程数据集相同的词汇表。

NSRTS使用PyTorch和PyTorch Lightning,并拥有许可的开放源码MIT许可证。

在生成无常数方程(称为方程骨架)之后,NSRTS使用梯度下降来优化常数。这种方法在序列生成之上分层了一个通用优化算法,由Valipour等人同时开发的所谓的“SymbolicGPT”共享。

Valipour等人没有像NSRTS方法中那样使用基于注意力的编码器。而是使用基于斯坦福点云模型PointNet的模型来生成一个固定维特征集,供Transformer解码器用于生成方程。与NSRT一样,Symbolic GPT使用BFGS来查找Transformer解码器生成的方程骨架的数值常数。

基于自然语言模型的第二代符号回归

虽然最近的一些文章描述了使用自然语言处理(NLP)Transformer来实现符号回归的泛化和可扩展性,但上述模型并不是真正的端到端,因为它们不估计数值常数。

这可能是一个严重的缺陷:想象一个模型可以生成具有1000个不同频率的正弦基的方程。使用BFGS优化每个项的系数可能会非常适合大多数输入数据集,但实际上,它只是执行傅里叶分析的一种缓慢而迂回的方式。

就在2022年春季,第二代基于Transformer的符号回归模型已在ArXiv上由Vastl等人在SymFormer上发布,而另一个端到端Transformer由Kamienny及其同事发布。

这些和以前基于Transformer的符号回归模型之间的重要区别在于它们预测数字常数以及符号数学序列。

SymFormer利用双头Transformer解码器来完成端到端的符号回归。一个头产生数学符号,第二个头学习数值回归任务,即估计方程中出现的数值常数。

Kamienny和Vastl的端到端模型在细节上有所不同,例如数值估计的精度,但两组的解决方案仍然依赖于后续的优化步骤进行细化。

即便如此,根据作者的说法,它们比以前的方法具有更快的推理时间,并产生更准确的结果,产生更好的方程骨架,并为优化步骤提供了良好的起点和估计常数。

象征性回归的时代来临

在大多数情况下,符号回归一直是一种精巧且计算密集型的机器学习方法,在过去十年的时间里,它得到的关注远远低于一般的深度学习。

这在一定程度上是由于遗传或概率方法的“即用即失”方法,对于每个新数据集,它们必须从头开始,这一特征与深度学习到符号回归的中间应用(如AI Feynman)是相同的。

在符号回归中使用Transformer作为整体组件,使得最近的模型能够利用大规模的预训练,从而减少推理时的能量、时间和计算硬件需求。

这一趋势得到了进一步的扩展,新的模型可以估计数值常数和预测数学符号,从而实现更快的推理和更高的准确性。

生成符号表达式的任务反过来可以用来生成可测试的假设,这是一项非常人性化的任务,并且是科学的核心。在过去的二十年中,符号回归的自动化方法继续取得令人感兴趣的技术进步,但真正的考验是它们是否对从事真正科学的研究人员有用。

符号回归开始在技术演示之外产生越来越多的可发表的科学结果。贝叶斯符号回归方法产生了一个新的预测细胞分裂的数学模型。

另一个研究小组使用稀疏回归模型生成了海洋湍流的合理方程,为改进多尺度气候模型铺平了道路。

一个将图神经网络和符号回归与Eureqa的遗传算法相结合的项目概括了描述多体引力的表达式,并从传统的模拟器中推导出了一个描述暗物质分布的新方程。

符号回归算法的未来发展

符号回归正在成为科学家工具箱中的一个强大工具。基于Transformer方法的泛化、可扩展性仍然是热门话题,还没有渗透到一般的科学实践中。随着越来越多的研究人员适应和改进模型,它有望进一步推动科学发现。

这些项目中有许多是在开放源码许可下进行的,因此可以预期它们将在几年内产生影响,而且它们的应用可能比Eureqa和TuringBot等专有软件更广泛。

符号回归是对深度学习模型输出的一种自然补充,深度学习模型的输出往往神秘且难以解释,而数学语言中更易于理解的输出可以帮助产生新的可验证假设,并推动直观的飞跃。

这些特征和最新一代符号回归算法的直接能力有望为获得重大发现的时刻提供更多的机会。

有关神经符号回归:从数据中提取科学的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  3. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  4. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  5. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  6. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  7. ruby-on-rails - 创建 ruby​​ 数据库时惰性符号绑定(bind)失败 - 2

    我正在尝试在Rails上安装ruby​​,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf

  8. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  9. SPI接收数据异常问题总结 - 2

    SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手

  10. 微信小程序通过字典表匹配对应数据 - 2

    前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立

随机推荐