DEEP LEARNING FOR SYMBOLIC MATHEMATICS-深度学习在符号计算上的应用总结

过去神经网络方面的工作很少是研究数学方面的应用,而本文则是神经网络在数学方面的应用,特别是符号计算、积分计算、常微分方程的计算。本文还提出了一种表示数学问题的语法,生成数据集用于训练seq2seq模型。

在本文中,我们将数学问题特别是符号计算当做NPL模型。也就是将积分、ODE方程用seq2seq模型处理。作者认为解微分方程的过程可以看做是一个模式识别的过程,然而截止到目前还没有一个神经网络可以做到对数学表达式进行识别的能力。

将表达式转换成自然语言

我们将运算符及函数作为内部节点,操作数当做叶节点。例如2+3×(2+5)2+3\times(2+5)3x2+cos(2x)13 x^{2}+\cos (2 x)-12ψx21ν22ψt2\frac{\partial^{2} \psi}{\partial x^{2}}-\frac{1}{\nu^{2}} \frac{\partial^{2} \psi}{\partial t^{2}}表示成树结构为

DEEP LEARNING FOR SYMBOLIC MATHEMATICS-深度学习在符号计算上的应用总结

因为树的映射是一一对应的,所以表达成树的好处有很多,比如可以省去括号,消除操作优先级的歧义等。

同时将2+3与3+2视作不同的表达式;对于在数学上的无意义的式子我们也视作是合法的表达式,例如x/0,2,log(0)x/0,\sqrt{-2},log(0);将2+3=5=127=1×52+3=5=12-7=1\times5这4个树对应的表达式,视作等价的。

在本文中我们考虑的两种问题积分与微分方程的求解,都可以看做是将方程的树映射到其解的树。这就与机器翻译的模式极其相似,可以认为是它的一种特殊形式。

由于要使用seq2seq模型先要将树转换成序列,这里采用前缀表示法将表达式转换为序列。

定义问题空间

  • 树有n个内结点
  • p1p_1表示一元运算符(cos,sin,exp,log)
  • p2p_2表示一元运算符(+,-,×\times,pow)
  • LL表示叶节点,变量(x,y,zx,y,z),常量(e,πe,\pi),整数({10,,10}\{-10,\dots,10\}

生成训练集

训练集方程的生成方法(积分、一阶二阶常微分方程)

对于积分问题,文中提出了三种生成训练集的方法:正向生成Forward generation (FWD),反向生成 Backward generation (BWD),使用分部积分的反向生成Backward generation with integration by parts (IBP)。

正向生成(FWD)模式是利用计算机代数系统求解积分,将不能求解的方程丢弃,显然这种方法得到的训练集只是问题空间的一个子集且求解非常耗时

既然正向生成的方式比较复杂,那我们就求微分。反向生成(BWD)就是对生成的方程ff求导 ,得到的ff'ff一起加入到训练集。但是这种方法生成的简单函数积分的数量较少(因为短的函数一求导就会变得很长),且积分(问题的解)往往比被积函数(问题)短。

为了克服BWD的缺点,作者提出了分部积分的方法,随机生成两个函数FFGG利用分部积分公式Fg=FGfG\int F g=F G-\int f G,如果已知fGfG在数据集中,那我们就可以得到FgFg的积分,同理已知FgFg 就可以求得fGfG。如果fG,FgfG,Fg都未知,那我们就生成两个新的FFGG,按照BWD的方式求解对应的微分fgfg。不断迭代,从而获得数据集。

对以上三种数据集生成方法在方程长度上的比较如下

DEEP LEARNING FOR SYMBOLIC MATHEMATICS-深度学习在符号计算上的应用总结

对于一阶常微分方程的生成方法

  • 生成一个随机函数:f(x)=xlog(c/x)f(x)=x\log(c/x)

  • 反解ccc=xef(x)x=F(x,f(x))c=x e^{\frac{f(x)}{x}}=F(x, f(x))

  • 上式两边对xx求导:ef(x)x(1+f(x)f(x)x)=0e^{\frac{f(x)}{x}}(1+f'(x)-\frac{f(x)}{x})=0

  • 化简整理:xyy+x=0xy'-y+x=0

对于二阶常微分方程的生成方法

  • 生成一个随机函数:f(x)=c1ex+c2xxf(x)=c_1e^x+c_2x^{-x}

  • 反解c2c_2c2=f(x)exc1e2x=F(x,f(x),c1)c_2=f(x)e^x-c_1e^{2x}=F(x,f(x),c_1)

  • 上式两边对xx求导:ex(f(x)+f(x))2c1e2x=0e^{x}\left(f^{\prime}(x)+f(x)\right)-2 c_{1} e^{2 x}=0

  • 反解c1c_1c1=12ex(f(x)+f(x))=G(x,f(x),f(x))c_{1}=\frac{1}{2} e^{-x}\left(f^{\prime}(x)+f(x)\right)=G\left(x, f(x), f^{\prime}(x)\right)

  • 上式两边对xx求导:0=12ex(f(x)f(x))0=\frac{1}{2}e^{-x}(f''(x)-f(x))

  • 化简:yy=0y''-y=0

清洗数据集上,我们合并如log(ex+3)\log(e^{x+3})x+3x+3这样的等价的方程;化简系数,如log(x2)+clog(x)\log(x^2)+c\log(x)可化简为clog(x)c\log(x)只是系数cc的不同;剔除无效的表达式,像2,log(0)\sqrt{-2},\log(0)这种。

实验验证

实验采用的数据集具有以下特点

  • 表达式最多15个内结点
  • 叶节点L=11L=11,取值为{x}{5,,5}\{0}\{x\} \cup\{-5, \ldots, 5\} \backslash\{0\}
  • 二元算子p2=4p_2=4+,,×,÷+,-,\times,\div
  • 一元算子p1=15p_1=15:exp, log, sqrt, sqrt, sin, cos, tan, sin1,cos1,tan1,sinh,\sin ^{-1}, \cos ^{-1}, \tan ^{-1}, \sinh , cosh, tanh,sinh1,cosh1,tanh1\sinh ^{-1}, \cosh ^{-1}, \tanh ^{-1}

训练模型使用seq2seq模型,BLEU评价算法对结果进行评估。当求得预测方程后,我们带入到原方程来检验其正确性

下表描述了使用文中所给的三种函数生成方法作为训练集得到的结果的分数

DEEP LEARNING FOR SYMBOLIC MATHEMATICS-深度学习在符号计算上的应用总结

可以看出,当我们使用集束越大,得到的结果就越精确。这和传统的机器翻译的结果是不同的。传统的机器翻译增大集束的数量不一定可以提高准确率。

集束是在NLP中的一个概念,我的理解是增大集束数就可以得到积分、微分方程更多的解。对应机器翻译中的一句话可以有多种翻译。

整篇文章阅读下来还是十分有趣的,作者提供了一种全新的思路来应对积分、微分方程问题。但是感觉提出的方法的限制比较多,比如说生成的训练集局限性都很强,不清楚对于训练集中不存在的函数,解的效果如何。这还要进一步复现文中的方法才可以得到结论。