我应该怎么做?高数解

众所周知,AI(神经网络)连加减法这样的简单算术都做不好:

但现在,AI已经懂了微积分,把爪子伸向了你喜欢的高数。它不仅能发现不定积分:

也可以解常微分方程:

第一份订单或第二份订单都可以。

这是脸书公布的新模型,1秒给出的答案超过了Mathematica和Matlab 30秒的结果。该团队表示,这是Seq2Seq和Transformer结合的结果。用自然语言处理(NLP)来理解数学确实是可行的。这一成绩在推特上获得了1700个赞。很多朋友表示惊讶,比如:“谢谢!在我最初的想象中,这是完全不可能的!”

而且,据说算法很快就会开源:

那么付费软件呢?

产生庞大数据集最重要的前提是训练模型做微积分题,要有很大很大的数据集。下面是制作积分数据集和常微分方程数据集的方法:函数,它的积分,首先是制作“一个函数&;它的差分”这样一个数据对。团队用了三种方法:第一种方法是正向生成(Fwd),即生成随机函数(最多n个算子),然后用现成的工具求积分。扔掉工具找不到的功能。第二种类型是逆向生成(Bwd),即生成一个随机函数,然后导出该函数。它填补了第一种方法无法收集的一些函数,因为即使工具找不到积分,也一定能找到导数。第三种是使用部分积分的逆生成(Ibp)。之前的逆向生成有一个问题,就是不太可能覆盖f(x)= x3sin(x):f(x)=-x3cos(x)+3 x2 sin(x)+6 xcos(x)-6s在(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=f(x,c)。也就是说,存在一个满足任意x和c的二元函数f:

然后对x求导,得到一个微分方程:

Fc代表x到f(x,c)的映射,是这个微分方程的解。这样,对于任意常数c,fc就是一阶微分方程的解。用y代替fc,你就有了一个简洁的微分方程:

这样,我想做出一个“一阶常微分方程&;解”对数据集,只要生成一个f(x,c),那种对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 3x^2+cos(2x)-1+0可以表示为:

让我们举一个更复杂的例子,这样一个偏微分表达式:

以树的形式表示,即:

使用树的形式可以消除操作顺序的歧义,照顾优先级和相关性,省略括号。没有空格、标点符号、多余括号等无意义的符号,不同的表达式会生成不同的树。表达式和树是一一对应的。第二步,介绍seq2seq模型。seq2seq模型有两个重要特征:输入和输出序列可以有任意长度,长度可以不同。输入序列和输出序列中的单词不需要彼此对应。所以seq2seq模型非常适合解决微积分问题。要使用seq2seq模型生成树,首先,应该将树映射到一个序列。使用前缀表示法,将每个父节点写在其子节点之前,并从左到右列出它们。例如,2+3 * (5+2)意味着树是:

表示为序列的是[+2 * 3+5 ^ 2]。树和前缀序列之间也有一对一的映射。第三步是生成一个随机表达式。为了创建训练数据,有必要生成随机的数学表达式。数据集的生成策略在上一篇文章中已经介绍过,这里重点介绍随机表达式的生成算法。使用n个内部节点对表达式进行统一采样并不容易。例如,递归方法倾向于生成深树而不是宽树,生成左树而不是右树。事实上,不可能以相同的概率生成不同种类的树。所以以随机二叉树为例,具体的方法是从一个空的根节点开始,确定每一步空节点中下一个内部节点的位置。重复此操作,直到分配完所有内部节点。

但一般情况下,数学表达式树不一定是二叉树,内部节点可能只有1个子节点。这样就需要考虑根节点和下一个内部节点的参数个数的二维概率分布,记为L(e,n)。

接下来,对随机树进行采样,从可能的运算符和整数、变量和常数列表中随机选择内部节点和叶节点来装饰树。最后,计算表达式的个数。通过前面的步骤,我们可以看到,表达式实际上是由有限的一组变量、常数、整数和一系列运算符组成的。所以问题可以概括为:一棵最多有N个内部节点的树,一组p1一元运算符(如cos,sin,exp,log),一组p2二元运算符(如+,-,×,pow)和一组L叶值,其中包含变量(如X,Y,Z)和常数(如E,π)。这样,有n个内部节点的二叉树正好有n+1个叶节点。每个节点和叶子可以分别取p1和L个不同的值。具有n个二元运算符的表达式的数量可以表示为:

如果p 1 >;0,表达式的数量为:

可以观察到,叶节点和二元算子的数量会明显影响问题空间的大小。

△不同数量的运算符和叶节点的表达式数量

在商业软件实验中,研究人员训练seq2seq模型来预测给定问题的解决方案。采用的模型是变压器模型,8个注意头,6层,512维。在一个有5000个方程的数据集中,研究人员评估了模型在求解微积分方程时的准确性。结果表明,波束搜索解码可以大大提高微分方程模型的精度。

与最先进的商业科学计算软件相比,新模型不仅更快,而且更准确。

在包含500个方程的测试集上,Mathematica是最好的商业软件。比如一阶微分方程,Mathematica使用贪婪搜索解码算法(集群规模为1)并不逊色于新模型,但新方法通常可以在1秒内求解方程,Mathematica的解题时间要长得多(时限为30s,超过30s则视为无解)。

当使用新方法搜索大小为50的光束时,模型的准确率从81.2%提高到97%,远优于Mathematica的77.2%。此外,新模型有效地解决了一些Mathematica和Matlab无法解决的问题。

△商业科学计算软件没有找到解的方程。

邀请AI参加IMO,一个会解微积分的AI,吸引了众多网友的关注,引发热议。网友们纷纷点赞:鹅妹。有网友表示:这篇论文超级有趣的地方在于,它可能解决了复杂度远高于积分的问题。

有网友认为这个研究太酷了,模型可以总结整合一些sympy无法实现的功能。

但也有网友认为,与Mathematica相比,研究人员的实验设置不够严谨。Mathematica默认是在复数域计算,这样会增加其运算难度。但作者认为含有复系数的表达式是“无效的”。所以他们在使用Mathematica时把设置调整为实数域?

很好奇Mathematica能不能解决这个系统解决不了的问题。30s的时间限制对于计算机代数系统来说有点武断。

但总之,面对越来越机智的AI,有人发起了挑战,邀请AI挑战IMO金牌。

本文由脸书人工智能研究所完成。来自布列斯特的Guillaume Lample是脸书AI学院和皮埃尔和玛丽·居里大学的博士生。他分别获得巴黎综合理工学院和CMU大学的数学、计算机科学和人工智能硕士学位。2014,我进入了脸书实习。弗朗索瓦·查顿是脸书人工智能研究所的客座企业家,主要研究数学和因果关系。

门户binator.com/item? id = 21084748

————

编辑∑双子座

来源:新浪科技