大家都知道,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,就有了整洁的微分方程:

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

再举一个复杂一点的例子,这样一个偏微分表达式:

用树的形式表示,就是:

采用树的形式,就能消除运算顺序的歧义,照顾优先级和关联性,并且省去了括号。在没有空格、标点符号、多余的括号这样的无意义符号的情况下,不同的表达式会生成不同的树。表达式和树之间是一一对应的。

第二步,引入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,π),整数(如 {-10,…,10})

如果p1 = 0,则表达式用二叉树表示。

这样,具有n个内部节点的二叉树恰好具有n + 1个叶子节点。每个节点和叶子可以分别取p1和L个不同的值。

具有n个二进制运算符的表达式数量就可以表示为:

如果p1 > 0,表达式数量则为:

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

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

胜过商业软件

实验中,研究人员训练seq2seq模型预测给定问题的解决方案。采用的模型,是8个注意力头(attention head),6层,512维的Transformer模型。

研究人员在一个拥有5000个方程的数据集中,对模型求解微积分方程的准确率进行了评估。

结果表明,对于微分方程,波束搜索解码能大大提高模型的准确率。

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

在包含500个方程的测试集上,商业软件中表现最好的是Mathematica。

比如,在一阶微分方程中,与使用贪婪搜索解码算法(集束大小为1)的新模型相比,Mathematica不落下风,但新方法通常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金牌。

Facebook AI研究院出品

这篇论文有两位共同一作。

Guillaume Lample,来自法国布雷斯特,是Facebook AI研究院、皮埃尔和玛丽·居里大学在读博士。

他曾于巴黎综合理工学院和CMU分别获得数学与计算机科学和人工智能硕士学位。2014年进入Facebook实习。

François Charton,Facebook AI研究院的客座企业家(Visiting entrepreneur),主要研究方向是数学和因果关系。

传送门

https://arxiv.org/abs/1912.01412

https://news.ycombinator.com/item?id=21084748

————

编辑 ∑Gemini

来源:新浪科技

☞马克思的数学手稿

☞刚刚,Science发布2019十大科学突破!

☞越南71岁的工程师,给全世界的机械人送了一份大礼

☞《庆余年》范闲殿前背诗合集:中华诗词真是太美了!

☞线性代数拾遗(六):特征值与特征向量

☞这回真要涨工资了!国务院教育督导办:2020年把义务教育教师平均工资收入水平不低于当地公务员作为督导检查重点

算法数学之美微信公众号欢迎赐稿

稿件涉及数学、物理、算法、计算机、编程等相关领域,经采用我们将奉上稿酬。

投稿邮箱:math_alg@163.com

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

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

    作者:栗子 鱼羊 来源:量子位(QbitAI) 大家都知道,AI (神经网络) 连加减法这样的简单算术都做不好: 可现在,AI已经懂得微积分,把魔爪伸向你最爱的高数了. 它不光会求不定积分: 还能解常 ...

  2. AI攻破高数核心,1秒内精确求解微分方程、不定积分,性能远超Matlab

    栗子 鱼羊 发自 海边边  量子位 报道 | 公众号 QbitAI 大家都知道,AI (神经网络) 连加减法这样的简单算术都做不好: 可现在,AI已经懂得微积分,把魔爪伸向你最爱的高数了. 它不光会求 ...

  3. 用AI生成高数题?学霸听了都流泪|一周AI新闻

    家人们,一周一会 又来带你沉浸式体验 AI 的世界啦 从会出高数题的算法模型 到 MIT 开源最强虚拟角色生成器 AI 让生活更精彩- - 我用 AI 技术制作的视频回答你 ✨ 点击丨AI 创作的智能 ...

  4. 可构建AI的“AI”诞生:几分之一秒内,就能预测新网络的参数

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 作者:Anil Ananthaswamy 译者:刘媛媛 原文出处:quantamaga ...

  5. 当AI学会高数:解题、出题、评分样样都行

    来源:AI科技评论 "高等数学里程碑式的研究",114页论文让AI文理双修,也许不久后机器出的高数试卷就会走进高校课堂,这下可以说"高数题不是人出的了". 人工 ...

  6. AI学高数达到MIT本科水平,学了微积分线性代数概率论等6门课,不光能做题还能出题...

    梦晨 发自 凹非寺 量子位 报道 | 公众号 QbitAI 让语言模型做数学题,有多难? 强如GPT-3,在9-12岁的小学数学上,第一次才考20多分. 去年底GPT-3用上新方法努力了很久终于拿到5 ...

  7. AI生成高数题,难出新高度:MIT提出首个可出题、做题、评分的算法模型

    你的考卷,也有可能是机器生成的. 前段时间,DeepMind 的一项研究登上<Nature>封面,通过引导直觉解决了两大数学难题:之后,OpenAI 教 GPT-3 学会了上网,能够使用基 ...

  8. 考研[*高数*]学习笔记汇总(全)

    文章目录:​​​​​​​ A:其他资源 B:预备知识 C:考试题型分值范围 一:高等数学 1.基础笔记 2.强化笔记 3.17堂课笔记 4.冲刺笔记 5.数学8小时填空方法速成 6.考前 二:线性代数 ...

  9. 【ChatGPT与网络安全攻击】AI密码破解器可在60秒内攻破50%以上普通密码

    研究表明,ChatGPT等功能强大AI工具已经被用于网络攻击者实施犯罪活动,例如开发恶意软件和生成钓鱼邮件等.如果人们的密码从数据库泄露或被破坏,那么网络攻击者采用AI密码破解器猜出密码是概率几乎是1 ...

最新文章

  1. VIM 多行注释与取消
  2. JS学习记录(BOM部分)
  3. 【链表】【树形DP】最大利润(jzoj 1487)
  4. Ruby on rails3新手谈(1):Ruby on rails环境搭建
  5. GIS中常用的高程系
  6. 离散数学 习题篇 —— 集合相等与子集关系判断
  7. Roboware (ROS IDE)字体设置
  8. 遗传算法(geatpy)
  9. 英特尔神经计算棒二代(NCS2)安装、配置及使用
  10. 布同:基于JQuery的五子棋人机对战游戏设计与制作
  11. python编程大赛队名_同行——团队展示
  12. 用spark分析北京积分落户数据,按用户身份证所在省份城市分析
  13. CVPR2020 | 即插即用!将双边超分辨率用于语义分割网络,提升图像分辨率的有效策略...
  14. 停!别盲目跟风学Python了!网友:我太难了...
  15. append()与prepend()的区别
  16. Linux(ubuntu)安装JLink 驱动
  17. 500 - 内部服务器错误。 您查找的资源存在问题,因而无法显示。
  18. 【python】猫眼爬虫Top100电影信息
  19. 3D 目标检测——IA-SSD
  20. Early Depth testing

热门文章

  1. Spring Data JPA 从入门到精通~方法的查询策略设置
  2. 指针数组下标JAVA_C语言中下标与指针的转换以及指向指针的指针的例子
  3. 使用javafx百行代码搞定多边形面积计算(可下载)
  4. linux 第三章红帽子,红帽子 Linux_命令全解
  5. 软件工程讲义 0 微博上的软件工程
  6. python ide在哪个文件夹_Python IDE使用汇总
  7. 为什么代码正确却没有爬虫的信息_为什么敷面膜没有效果?原来这才是敷面膜的正确步骤...
  8. c++ 二维数组_【技术篇】C指针与二维数组深度辨析
  9. python银行系统模拟演练_python多线程实现代码(模拟银行服务操作流程)
  10. 自动补足算法是什么_数据、算法岗的几点经验分享!