AI攻破高数核心,1秒内精确求解微分方程、不定积分

发布时间:2019-12-19 作者:admin
 

  欢迎关注“创事记”微信订阅号:sinachuangshiji

  文/栗子 鱼羊

  来源:量子位(ID:QbitAI)

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

  可现在,AI已经懂得微积分,把魔爪伸向你最爱的高数了。

  它不光会求不定积分:

  还能解常微分方程:

  一阶二阶都可以。

  这是Facebook发表的新模型,1秒给出的答案,超越了Mathematica和Matlab这两只付费数学软件30秒的成绩。

  团队说,这是Seq2SeqTransformer搭配食用的结果。

  用自然语言处理 (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,就有了整洁的微分方程: