前言:
这篇论文是Facebook AI Research在2019年发表的一篇paper。文章创新的地方在于将函数积分和常微分方程的解的求解试图当作两个符号序列相匹配的问题,即通过利用最新的自然语言处理技术训练模型最终得到一个输入为一个函数或常微分方程可以直接输出解的序列的模型。
篇章结构:
首先文章提出了函数或数学问题(常微分方程)的一种可以应用seq2seq模型的表示方法,并且分析了表示空间的“容量”,之后作者给出了生成函数积分、一阶二阶偏微分方程的监督数据集的方法。最后,作者利用这些数据集训练seq2seq模型,并且取得了较matlab更好地性能。
数学运算->自然语言。
表达式转化为二叉树:
文章指出数学上的表达式以及常微分方程(ODE)都可以转换成二叉树进行表示(操作符和函数名作为内部结点,变量、常量等作为叶子结点),因此本文解决的问题可以看做两个tree之间的map问题,如何根据问题对应的树(函数或ODE)得到解对应的树(原函数或ODE对应的解析解)。
树的序列化:
文章指出当前机器翻译系统采用的是序列到序列之间映射的方法,当前也有一个树与树之间映射的模型,但这些模型效率都如seq2seq模型高。因此我们将表达式树map到序列利用序列构建seq2seq模型。可以利用树的前序序列代替树作为模型的输入。前序序列的一个好处是不需要表示表达式中的括号,使得待解决的问题对应的样本的表示更加短。
这里有一个问题,将表达式转换为树在转换为前序序列是否必要?直接将表达式序列作为样本输入模型训练是否也可?
生成随机表达式:
给定固定为n的树的内部结点(非叶子结点)通过相关迭代算法可以构造出一系列表达式或常微分方程。作者通过限制双目操作符和单目操作符的数量以及变量常量的范围系统的证明了可以得到的表达式空间的size。
生成数据集:
三种方法生成函数和其相应的积分:
1:前向生成(Forward generation(FWD)):
这种方法先随机生成函数,之后通过计算代数系统求函数的原函数(不能求出积分的函数舍弃),将函数和其原函数作为数据集。这种方法的弊端是对求不出积分的函数需要舍弃,某些函数的积分求出的表达式很长,求解相当耗时,如:
f ( x ) = x 3 sin ( x ) f(x)=x^3\sin(x) f(x)=x