摘要
历史经验表明,神经网络在解决统计或近似问题方面比在执行计算或处理符号数据方面更胜一筹。然而,在这篇论文中,我们展示了它们在数学推理这一更复杂的任务上的表现令人惊讶,例如符号积分和求解微分方程。我们提出了一种表示数学问题的语法,以及生成可用于训练序列到序列模型的大型数据集的方法。我们取得的结果优于商业计算机代数系统,如 Matlab 或 Mathematica。
1.介绍
机器学习的一个长期传统反对基于规则的推理来进行统计学习,而神经网络显然在统计方面具有很大优势。它们已被证明在统计模式识别方面极为有效,而且现在在计算机视觉、语音识别、自然语言处理 (NLP) 等领域的各种问题上都取得了最先进的性能。然而,神经网络对于符号计算的贡献仍然非常有限:将符号推理与连续表示相结合现在是机器学习的挑战之一。
只有少数研究调查了神经网络处理数学对象的能力,除了少数例外,这些工作大部分都集中在整数加法和乘法等算术任务上。在这些任务上,神经方法往往表现不佳,并且需要引入偏向于规则的组件。
在本文中,我们将数学,尤其是符号计算视为NLP模型的目标。更准确地说,我们在符号数学的两个问题上使用序列到序列模型 (seq2seq):函数积分和常微分方程 (ODE)。对于受过训练的人和计算机代数系统来说,两者都很困难。对于积分,人类被教导一组规则(按部分积分、变量的变化等),这些规则不能保证成功,而计算机代数系统使用复杂的算法探索大量的具体情况。例如,用于函数集成的Risch算法,其完整描述长达100多页。
然而,函数计算实际上是模式识别应该有用的一个例子:检测一个形式为
y
y
′
(
y
2
+
1
)
−
1
/
2
yy'(y^2+1)^{−1/2}
yy′(y2+1)−1/2的表达式,表明它的基元将包含
y
2
+
1
\sqrt{y^2+1}
y2+1
。检测这种模式可能对小表达式
y
y
y很容易,但随着
y
y
y中运算符数量的增加,这将变得更加困难。然而,据我们所知,还没有研究调查过神经网络检测数学表达式的能力。
我们首先提出了可以用于seq2seq模型的数学表达式和问题的表示,并讨论了由此产生的问题空间的大小和结构。然后,我们展示了如何为积分,一阶以及二阶微分方程的监督学习生成数据集。最后,我们将 seq2seq 模型应用于这些数据集,并表明它们比最先进的计算机代数系统(即 Matlab 和 Mathematica)实现了更好的性能。
2. MATHEMATICS AS A NATURAL LANGUAGE
2.1 EXPRESSIONS AS TREES
数学表达式可以表示为树,运算符和函数为内部节点,操作数为子节点,数字、常量和变量为叶节点。上图中的树结构分别表示了以下表达式:
2
+
3
×
(
5
+
2
)
2+3×(5+2)
2+3×(5+2)、
3
x
2
+
c
o
s
(
2
x
)
−
1
3x^2+cos(2x)−1
3x2+cos(2x)−1和
∂
2
ψ
∂
x
2
−
1
ν
2
∂
2
ψ
∂
t
2
\frac{∂^2ψ}{∂x^2}−\frac{1}{ν^2}\frac{∂^2ψ}{∂t^2}
∂x2∂2ψ−ν21∂t2∂2ψ:
树消除了操作顺序的歧义,处理了优先级和关联性并消除了对括号的需要。直到添加无意义的符号,如空格、标点符号或多余的括号,不同的表达式会导致不同的树。根据附录 A 部分中讨论的一些假设,表达式和树之间存在一对一的映射。
我们将表达式视为数学符号序列。
2
+
3
2+3
2+3和
3
+
2
3+2
3+2是不同的表达式,
4
x
\sqrt{4}x
4
x和
2
x
2x
2x也是,它们会用不同的树来表示。大多数表达式代表有意义的数学对象。
x
/
0
x/0
x/0、
−
2
\sqrt{−2}
−2
或
l
o
g
(
0
)
log(0)
log(0)也是合法的表达式,尽管它们不一定具有数学意义。
由于树和表达式之间存在一一对应关系,表达式之间的相等性将反映在它们关联的树上,例如:由于
2
+
3
=
5
=
12
−
7
=
1
×
5
2+3=5=12−7=1×5
2+3=5=12−7=1×5,因此对应这些表达式的四棵树也是等价的。
形式数学的许多问题都可以重新定义为对表达式或树的运算。例如,表达式简化相当于找到一棵树的更短的等效表示。在本文中,我们考虑两个问题:符号积分和微分方程。两者都归结为将表达式转换为另一个表达式,即,将方程的树映射到其解的树。我们认为这是机器翻译的一个特殊实例。
2.2 TREES AS SEQUENCES
机器翻译系统通常对序列进行操作。目前已经提出了基于树结构的序列模型,例如 Tree-LSTM或循环神经网络Grammars (RNNG)。然而,树到树模型在训练和推理方面都比 seq2seq 模型更复杂且要慢得多。为简单起见,我们使用 seq2seq模型,这些模型被证明在树结构方面也是有效的,例如 在constituency parsing的上下文中,任务是预测输入句子的句法解析树。
使用seq2seq模型处理树结构需要将树映射到序列。为此,我们使用前缀表示法(也称为普通波兰表示法),将每个节点写在其子节点之前,从左到右列出。例如,算术表达式
2
+
3
∗
(
5
+
2
)
2+ 3∗(5+2)
2+3∗(5+2)表示为序列
[
+
,
2
,
∗
,
3
,
+
,
5
,
2
]
[+,2,∗,3,+,5,2]
[+,2,∗,3,+,5,2]。与更常见的中缀符号
2
+
3
∗
(
5
+
2
)
2+3∗(5+2)
2+3∗(5+2)相比,前缀序列不需要括号,因此更短。在序列内部,运算符、函数或变量由特定的字符表示,整数由以符号开头的数字序列表示。就像表达式和树之间的情况一样,树和前缀序列之间存在一对一的映射。
2.3 GENERATING RANDOM EXPRESSIONS
为了创建训练数据,我们需要生成一组随机数学表达式。然而,对具有n个内部节点的表达式进行均匀采样并不是一项简单的任务。朴素的算法(例如递归方法或使用固定概率使节点成为叶子、一元或二元的技术)倾向于偏爱深树而不是宽树,或偏左偏右树。上述是我们希望以相同概率生成的不同树的示例。
在附录的C节中,我们提出了一种生成随机树和表达式的算法,其中上面的四个表达式树都是以相同的概率生成的。
2.4 COUNTING EXPRESSIONS
我们现在研究可能的表达式的数量。表达式是由一组有限的变量(即文字)、常量、整数和一系列运算符创建的,这些运算符可以是简单的函数(例如 cos 或 exp)或更复杂的运算符(例如微分或积分)。更准确地说,我们将问题空间定义为:
- 最多有 n n n个内部节点的树;
- 一组一元运算符 p 1 p_1 p1(例如cos、sin、exp、log)
- 一组二元运算符 p 2 p_2 p2(例如 +,−, ×, pow)
- 一组 L L L个叶子节点,包含变量(例如 x,y, z)、常数(例如 e, π)、整数(例如 {−10, . . . , 10})
如果
p
1
=
0
p_1=0
p1=0,则表达式由二叉树表示。具有
n
n
n个内部节点的二叉树的数量由第
n
n
n个卡特兰数
C
n
C_n
Cn给出。具有
n
n
n个内部节点的二叉树正好有
n
+
1
n+1
n+1个叶子节点。每个内部节点和叶子节点可以分别取
p
2
p_2
p2和
L
L
L个不同的值。因此,具有
n
n
n个二元运算符的表达式的数量可以表示为:
E
n
=
C
n
p
2
n
L
n
+
1
≈
4
n
n
π
n
p
2
n
L
n
+
1
w
i
t
h
C
n
=
1
n
+
1
(
2
n
n
)
E_n=C_np^n_2L^{n+1}\approx \frac{4^n}{n\sqrt{\pi n}}p^n_2L^{n+1}\quad with\quad C_n=\frac{1}{n+1}\begin{pmatrix}2n\\ n\end{pmatrix}
En=Cnp2nLn+1≈nπn
4np2nLn+1withCn=n+11(2nn)
如果
p
1
>
0
p_1>0
p1>0,则表达式为一元二叉树,具有
n
n
n个内部节点的树的数量为
n
n
n个施罗德数
S
n
S_n
Sn。可以使用以下等式通过递归计算:
(
n
+
1
)
S
n
=
3
(
2
n
−
1
)
S
n
−
1
−
(
n
−
2
)
S
n
−
2
(1)
(n+1)S_n=3(2n-1)S_{n-1}-(n-2)S_{n-2}\tag{1}
(n+1)Sn=3(2n−1)Sn−1−(n−2)Sn−2(1)
最后,具有
n
n
n个内部节点、
p
1
p_1
p1个一元运算符、
p
2
p_2
p2个二元运算符和
L
L
L个可能叶子的表达式的数量
E
n
E_n
En递归计算为:
n
+
1
)
E
n
=
(
p
1
+
2
L
p
2
)
(
2
n
−
1
)
E
n
−
1
−
p
1
(
n
−
2
)
E
n
−
2
(1)
n+1)E_n=(p_1+2Lp_2)(2n-1)E_{n-1}-p_1(n-2)E_{n-2}\tag{1}
n+1)En=(p1+2Lp2)(2n−1)En−1−p1(n−2)En−2(1)
如果
p
1
=
p
2
=
L
=
1
p_1=p_2=L=1
p1=p2=L=1,等式2则变为等式 1。如果
p
2
=
L
=
1
p_2=L=1
p2=L=1,
p
1
=
0
p_1=0
p1=0,我们有
(
n
+
1
)
E
n
=
2
(
2
n
−
1
)
E
n
−
1
(n+1)E_n=2(2n−1)E_{n−1}
(n+1)En=2(2n−1)En−1,这是卡特兰数满足的递归关系。附录的 B 部分提供了所有这些公式的推导和性质。
在图 1 中,我们展示了不同数量的内部节点的二叉树 (
C
n
C_n
Cn) 和一元二叉树 (
S
n
S_n
Sn) 的数量。我们还表示不同的运算符和叶子集和的可能表达式 (
E
n
E_n
En) 的数量。