大家都知道AI(神经网络)连加减法这样简单的算术都做不了:但是现在,AI已经懂微积分了,它可以把爪子伸到你最喜欢的地方高数。它不仅可以求不定积分:还可以解常微分方程:一阶二阶都可以。这是Facebook发布的新模型。1秒给出的答案超过了Mathematica和Matlab这两款付费数学软件的30秒结果。团队表示,这是Seq2Seq和Transformer结合的结果。使用自然语言处理(NLP)来理解数学,它奏效了。这一成就在推特上已经获得了1700个赞。很多朋友表示惊喜,比如:谢谢!在我原本的想象中,这根本不可能!而且据说算法很快就会开源:付费软件呢?庞大数据集的生成姿势就是训练模型做微积分题。最重要的先决条件是要有一个大数据集。下面介绍积分数据集和常微分方程数据集的制作方法:函数,及其积分首先,需要制作一个数据对,比如“一个函数&它的微分”。该团队使用了三种方法:第一种是前向生成(Fwd),即生成随机函数(最多n个算子),然后使用现成的工具计算积分。丢弃工具找不到的功能。第二种是反向生成(Bwd),指的是生成一个随机函数,然后对函数求导。一些第一种方法收不到的函数被填上了,因为工具即使找不到积分,也一定能找到导数。第三种是使用分部积分(Ibp)的逆生成。前面的反向生成有个问题,就是不太可能覆盖f(x)=x3sin(x)的积分:F(x)=-x3cos(x)+3x2sin(x)+6xcos(x)-6sin(x)因为这个函数太长,随机生成比较难做。另外,逆向生成的乘积大多会是函数的积分比函数短,正向生成则相反。为了解决这个问题,团队采用了分部积分的方式:生成两个随机函数F和G,分别计算导数f和g。如果fG已经出现在前两种方法得到的训练集中,它的积分是已知的,可以用来求Fg:∫Fg=FG-∫fG,反之亦然。如果Fg已经在训练集中,则使用其积分求fG。每次集成新功能时,都会将其添加到训练集中。如果fG和Fg不在训练集中,则重新生成一对F和G。这样就可以在不借助外部集成工具的情况下轻松获得x10sin(x)等函数。一阶常微分方程及其解以二元函数F(x,y)开始。有一个方程F(x,y)=c,可以对y求解得到y=f(x,c)。也就是说,存在一个二元函数f,满足任意x和c:再对x求导,得到一个微分方程:fc表示x到f(x,c)的映射,就是这个的解微分方程。因此,对于任何常数c,fc是一阶微分方程的解。将fc换回y,就得到了一个整洁的微分方程:,其中有c的解的种类,然后求出它满足的微分方程F,例如:二阶常微分方程,其求解二阶的原理,是由一阶推广而来,只要f(x,c)变为f(x,c1,c2),它就有c2的解。微分方程F必须满足:如果从x求导,则得到:fc1,c2表示从x到f(x,c1,c2)的映射。如果这个方程有c1的解,可以推导出另一个三元函数G,它满足任意x:再对x求导,可以得到:最后,整理出令人耳目一新的微分方程:它的解为fc1,c2。至于生成过程,我给大家举个例子:现在有积分和求解微分方程两个训练集。那么问题来了,AI是如何理解这些复杂的公式,然后学会如何求解的呢?将数学视为自然语言积分方程和微分方程都可以看作是将一个表达式转换为另一个表达式,研究人员认为这是机器翻译的一个特例,可以用NLP方法解决。第一步是以树的形式表示数学表达式。运算符和函数是内部节点,数字、常量和变量是叶节点。例如,3x^2+cos(2x)-1可以表示为:另一个更复杂的例子,这样一个偏微分表达式:用树的形式表示,即:用树的形式,操作可以消除歧义,处理优先级和结合性,并省略括号。在缺少无意义的符号(如空格、标点符号和额外的括号)的情况下,不同的表达式会产生不同的树。表达式和树之间存在一一对应关系。第二步介绍seq2seq模型。seq2seq模型有两个重要的属性:输入和输出序列都可以是任意长度,并且它们可以是不同的长度。输入序列和输出序列中的单词之间不需要一一对应。因此seq2seq模型非常适合解决微积分问题。要使用seq2seq模型生成树,首先必须将树映射到序列。使用前缀表示法,将每个父节点写在其子节点之前,从左到右列出。比如2+3*(5+2),表示为一棵树:表示为一个序列就是[+2*3+52]。树和前缀序列之间也存在一对一的映射关系。第三步是生成随机表达式。要创建训练数据,需要生成随机数学表达式。上一篇已经介绍了数据集的生成策略,这里重点介绍随机表达式的生成算法。对具有n个内部节点的表达式进行统一采样并非易事。例如,递归等方法倾向于生成深树而不是宽树,生成左侧树而不是右侧树。事实上,不可能以相同的概率生成不同类型的树。因此,以一棵随机二叉树为例,具体做法是:从一个空的根节点开始,每一步确定空节点中下一个内部节点的位置。重复直到分配了所有内部节点。但是,一般情况下,一棵数学表达式树不一定是二叉树,一个内部节点可能只有一个子节点。这样就需要考虑根节点和下一个内部节点参数的二维概率分布,记为L(e,n)。接下来,对随机树进行采样,从可能的运算符和整数、变量、常量列表中随机选择内部节点和叶节点来“装饰”这棵树。最后,计算表达式的数量。通过前面的步骤可以看出,表达式实际上是由一组有限的变量、常量、整数和一系列运算符组成的。因此,问题可以概括为:一棵至多包含n个内部节点的树一组p1一元运算符(如cos、sin、exp、log)一组p2二元运算符(如+、-、×、pow)一组L叶值,其中包含变量(如x,y,z)、常量(如e,π)、整数(如{-10,...,10})如果p1=0,则表达式用二叉树表示。因此,具有n个内部节点的二叉树恰好有n+1个叶节点。每个节点和叶子可以分别取p1和L不同的值。具有n个二元运算符的表达式的数量可以表示为:如果p1>0,则表达式的数量为:可以看出,叶节点和二元运算符的数量可以显着影响问题空间的大小。△不同数算子和叶节点的表达数量优于商业软件在实验中,研究人员训练了seq2seq模型来预测给定问题的解。使用的模型是8个attentionheads,6层,512维的Transformer模型。研究人员评估了该模型在5,000个方程的数据集上求解微积分方程的准确性。结果表明,对于微分方程,束搜索解码可以大大提高模型的精度。新模型不仅速度更快,而且比最先进的商业科学计算软件更准确。在包含500个方程的测试集上,表现最好的商业软件是Mathematica。例如,在一阶微分方程中,Mathematica使用贪心搜索解码算法(bundlesize1)并不落后于新模型,但新方法通常求解方程的时间不到1秒,Mathematica的求解时间就长多了(限时30s,超过30s视为未解决)。当新方法执行大小为50的集束搜索时,模型的准确率从81.2%提高到97%,远优于Mathematica(77.2%)。而且,在一些Mathematica和Matlab无法解决的问题上,新模型给出了有效的解决方案。△商业科学计算软件没有找到方程的解,邀请AI参与IMO。这个可以解微积分的AI,引起了众多网友的关注,引发了热议。网友纷纷称赞:鹅妹子。有网友表示:这篇论文超级有意思的地方在于,可以解决复杂度远高于积分的问题。有网友认为这个研究很酷,模型可以泛化和集成一些sympy无法实现的功能。不过也有网友认为,与Mathematica相比,研究人员的实验设置不够严谨。默认情况下,Mathematica在复数领域执行计算,这使得它的操作更加困难。但作者将包含复数系数的表达式视为“无效”。所以他们在使用Mathematica时将设置调整为实数域?我很好奇Mathematica是否可以解决该系统无法解决的问题。30秒的时间限制对于计算机代数系统来说有点武断。但总之,面对越来越机智的AI,有人发起了邀请AI挑战IMO金牌的挑战。FacebookAI研究院出品的这篇论文有两位共同作者。GuillaumeLample,来自法国布雷斯特,是Facebook人工智能研究所和皮埃尔与玛丽居里大学的在读博士。他分别拥有EcolePolytechnique和CMU的数学和计算机科学以及人工智能硕士学位。2014年进入Facebook实习。Fran?oisCharton,Facebook人工智能研究院访问企业家,主要研究方向为数学和因果关系。
