分享

最近的一篇数学论文引起了轰动,利用神经网络发现发现新的物理!

 老胡说科学 2024-05-24 发布于江苏

第一届“欧洲基础物理人工智能会议”(EuCAIFCon)于2024年4月30日至5月3日在阿姆斯特丹举行。会议上许多讨论都集中在基础模型上,探讨是否可以利用人工智能发现潜在的新物理定律。令人惊讶的是,最近一篇名为KAN的论文在arXiv上发布,探讨了利用神经网络发现或重新发现物理和数学模型的可能性。

接下来我们将深入探讨构建KANs的数学公式和概念。以了解为什么这个网络会引起如此大的轰动!

KA表示定理

KAN或Kolmogorov-Arnold网络基于著名数学家Kolmogorov和Arnold的表示定理。首先,让我们先退几步来理解这个定理。

KA定理是由这些数学家提出的,用于解决希尔伯特的第13个问题:是否所有七次方程的解都可以用两个变量的代数函数来表达?这是什么意思呢?

假设有如下的七次多项式:

  • 方程1

希尔伯特问,其解x,被认为是三个变量a,b,c的函数,是否可以表示为有限数目的二元函数的组合:

KA表示定理指出,对于任何连续函数

存在一元连续函数g_q, ψ_{p,q},使得:

  • 方程2:KA表示定理

这意味着(2d+1)(d+1)个一元函数g_q, ψ_{p,q}足以精确表示一个d变量函数。这里的关键点是,唯一的真正多变量函数是加法,因为其他所有函数都可以使用一元函数和求和来表示。

我们需要记住,g_q, ψ_{p,q}都是一元函数。因此,任何多变量的连续函数都可以表示为一元函数的组合。哇!我之前不知道。太酷了!

思考KA定理和多层感知器(MLPs)

论文的作者指出,这些一维函数(之前定义的)可能是不光滑甚至是分形的,因此在实践中可能无法学习。为了构建KANs,作者们超越了KA表示定理的定义,但首先我们来思考MLPs。

多层感知器(MLPs)基于通用逼近定理,该定理指出任何连续函数f:[0, 1]ᵈ → [0, 1]都可以通过至少包含一个隐藏层的神经网络(权重、偏差和非线性激活函数)来任意精确地逼近。在反向传播过程中,网络学习优化权重和偏差以充当函数逼近器,而激活函数保持不变。

现在,我们能否根据上述KA表示定理构建一个基于神经网络的架构?

如果考虑一个监督学习问题,给定{x_i, y_i}对,我们想找到一个函数使得y_i ≈ f(x_i),那么KA表示定理告诉我们,需要找到方程2中的一元函数(g_q, ψ_{p,q)。

  • 图1:思考和构建KAN,摘自论文

在这里,作者们认为,由于我们只需要学习一元函数,我们可以将每个一维函数参数化为B样条曲线(见下文),其局部B样条基函数的系数是可学习的。这导致了KAN的原型,并在图1(b)中进行了说明,输入维度n=2表现为一个两层神经网络,激活函数放置在边上而不是节点上(在节点上进行简单的求和),中间层的宽度为2n+1。网络的构造,即激活数、节点数等,将很快清晰。鉴于方程2中的定义,原始KA表示定理可以被视为深度为2,每层包含(2d+1)项。

B样条:我们可以将B样条函数理解为由多个控制点控制的灵活带组成,用于创建平滑曲线。从数学角度更严格的定义是,p+1阶的B样条是由变量t中p阶的分段多项式函数B_{i, p}组成的集合。分段多项式相接处的t值被称为结点。

再次说明,B样条由分段多项式(基函数)构建,其阶数比其基多项式的度数多一。例如,二次B样条的多项式度数为2,阶数为3。这正是KAN论文中展示和使用的内容。

构建KAN层

已经提到,代表原始KA表示定理的两层网络太简单,无法任意精确地逼近任何函数。我们如何让KAN更宽、更深呢?

这里,作者提出了KAN和MLPs之间的绝佳类比以便更深入探讨。首先,我们需要了解什么是KAN层以及如何将它们堆叠起来构建深度神经网络。

首先,可以将KA表示以矩阵形式表达:

  • 方程3:以矩阵形式思考方程2

具有n_{in}维输入和n_{out}维输出的KAN层可以定义为一维函数的矩阵:

  • 方程4:设置矩阵的维度

在Kolmogov-Arnold定理(方程2)中,内部函数构成一个n_{in}=n和n_{out}=2n+1的KAN层,外部函数构成一个n_{in}=2n+1和n_{out}=1的KAN层。此时,我们可以将KA表示视为两个KAN层的组合。让我们尝试习惯于堆叠更多KAN层时的符号。

我们可以使用作者提供的示例图来讨论网络维度等内容:

  • 图2:思考KAN层:摘自论文

作者将n_i表示为KAN中第i层的节点数,第l层的第i个神经元由(l, i)表示,其中该神经元的激活由x_{l, i}给出。我们认为激活函数是位于网络图边缘的可学习函数,节点表示求和运算。因此,在第1层(0层)和第2层(1层)之间,我们看到有10个激活函数,分别由ϕ_{0,1,1}, ϕ_{0,1,2}等表示。激活函数的数量由0层和1层的节点数决定。

这里我们可以清楚地看到MLPs与KANs的区别。KANs的激活函数位于边缘,而MLPs的激活函数位于节点上。

在第0层,我们有两个节点x_{0,1}, x_{0,2},在第一层,有5个,所以激活函数的数量将是n_l × n_{l+1}。

n_l和n_{l+1}是根据方程4中定义的内部函数的输入和输出维度确定的。因此我们从两个输入n_{in}=2开始,所以n_{out}必须为2n+1=5。这反过来决定了隐藏层中激活函数的数量。

如果我们继续以节点数n_1=5和n_2=1(n_{out}),在该层有5个激活函数是合理的。这将是外部函数。重申一遍,KA表示由两个KAN层组成。

KAN层的矩阵形式

现在我们可以开始编写激活函数。让我们看看:连接第l层和l+1层两个节点的激活函数由ϕ_{l, j, i}表示,其中{j, i}分别代表那两层中的第j和第i个神经元。

因此,在第l层和l+1层之间的可学习激活函数:

  • 方程5:KAN边缘的可学习激活函数

我们可以再次检查图2,

  • 通过与图2比较来理解节点数量。

我们将ϕ_{l, j, i}的输入前激活表示为x_{l, i};然后在激活后有:

  • 激活前后的符号

第(l+1, j)神经元的激活值简单地是所有传入激活后的求和。

利用这些,我们可以定义激活的可学习变换矩阵:

  • 方程6:KAN不同层的完整可学习激活函数集

利用这个我们也可以编写变换规则:

  • 方程7:完整变换规则:给定激活矩阵的预激活和激活后。

再次检查我们的理解,因此与图2比较:

  • 方程8:鉴于图2,检查我们是否能理解变换矩阵的维度!

确实有5个输出x_{1,1}, x_{1,2}, x_{1,3}, x_{1,4}, x_{1,5}。

一旦我们准备好了变换矩阵,我们可以简单地将它们组合(堆叠层)以便更深入地探讨,如下所示:

  • 方程9:通过堆叠若干KAN层来组成一个KAN

此时我们也可以认识到,所有运算都是可微分的(假设1D函数也是),梯度可以通过网络流动,即我们可以进行反向传播!

我们还可以将KAN与MLP层进行比较,在MLP层中有权重矩阵(线性变换)和激活函数(非线性)分开:

  • 方程10:将KAN与MLP比较;权重(线性)和激活(非线性)。

权重矩阵中的值会更新,但一旦定义,MLP中的激活函数就是固定的。这是KAN与MLP层之间的关键区别,我们的激活函数是可学习的。

由于对于KAN来说,现在一切都归结为激活函数,作者定义了如何构建这些函数。

可学习的激活函数

为了构建激活函数ϕ(x),作者提议使用基函数(b(⋅))和样条函数,并将它们组合如下:

  • 方程11:将基函数和样条函数作为线性组合的可学习激活函数。

作者选择的基函数为SiLU:

  • 方程12:基函数b(⋅)的选择

对于样条函数,它是B样条的线性叠加:

  • 方程13:样条函数作为B样条的线性组合。

如果回顾第二张图,我们看到它是k=3的B样条的线性组合,即阶数为3,所以B样条中的多项式的度数为2。像这样定义样条的一个优势是,通过增加曲线的数量可以使其任意平滑。这也在图2中显示,作者增加了我们连接不同多项式的区间数量,从7增加到12。

B样条的权重,即c_i,是可训练的,作者认为方程11中的因子w的唯一用途是更好地控制激活函数的总体大小。

MLP与KAN的参数数量

作者还讨论了通常情况下,KAN比MLP运行较慢。为了理解这一点,我们可以简单地通过假设网络深度为L,每层都有相同数量的节点n_i=N,每个样条的阶数为k(通常为3)在G个区间上,来计算参数数量:

  • KAN与MLP的参数数量对比

然而,KAN所需的宽度即N比MLP中的小,且KAN是可解释的,我们将看到作者提出的一个例子。作者强调训练KAN比MLP慢的另一个原因是,由于激活函数是可学习的,不可能利用“批处理计算”,即大量数据通过相同的函数。这在MLP中不是问题,因为在训练和测试时间内激活是固定的。

结语

这篇论文中还有很多复杂的细节,但对我个人而言最突出的是KAN的可解释性。作者展示了KAN可以“发现”从简单的除法法则到结理论中的非平凡关系。这可能会进一步推动KAN在AI与科学的基础模型中的应用。

作者建议,KAN可能比符号回归更具“吸引力”;作者给出了一个例子,通过KAN学习非常曲折的20阶贝塞尔函数(J_{20}(x)),这通过符号回归在没有任何关于那个特殊函数(本例中为贝塞尔函数)的先验知识的情况下是不可能的。

通过KAN的“发现”示例

在作者提出的许多示例中,我喜欢一个相对简单但引人入胜的“自动可发现”特性的KAN。我们总是喜欢这类物理示例;比如,我们从相对论速度加法公式开始:

  • 两个相对论速度的加法

我们可以考虑KAN的深度,将每一层KAN视为发现一个数学运算;因此,看看上面的公式,首先我们考虑乘法;作者显示,学习的激活函数将是线性和二次的,所以:

  • 使用KAN学习乘法,将其视为线性和二次函数的组合

对(1+v_1 * v_2)的求逆将使用一层,而(v_1 + v_2)与(1/(1+v_1 * v_2))的乘法将需要另外两层;总共5层。

但研究人员发现,“自动发现”的KAN只有2层深,这可以通过速率技巧来解释。

在相对论中,我们可以通过速率技巧简化变换规则;可以定义速率为:

我们可以使用双曲正切加法公式:

使用这个,可以看到:

现在只有两层完全有意义。如果我们不知道速率技巧,试图理解这个2层的自动发现KAN可能会引导我们发现这个技巧。我们可以像这个例子中那样使用KAN来发现/重新发现一些基本的物理定律吗?

加载和运行KAN

让我们仔细看看上面的例子,作者在论文中也提到了这个例子,并且可以在GitHub上找到。我们将在Colab上运行它。

我们将开始本地安装并加载必要的库。

!pip install pykan
from kan import KAN, create_dataset

import torch

我们创建了包含两组速度的数据集,这些速度在训练和测试集中分开,并且有相应的回归值,即标签(f(v_1, v_2))。为了保险起见,我们可以使用matplotlib检查输入速度及其相应加成相对速度的分布。

f = lambda x: (x[:,[0]]+x[:,[1]])/(1+x[:,[0]]*x[:,[1]]) # dataset creation where x[:, [0]] represents v1, x[:, [1]]: v2dataset = create_dataset(f, n_var=2, ranges=[-0.9,0.9])#plot the distribution import matplotlib.pyplot as plt
### check train and test input distribution
fig = plt.figure(figsize=(10, 5))fig.add_subplot(131)plt.hist(dataset['train_input'][:, 0], bins=20, alpha=0.7, label=r'$v_1$-train', color='orange')plt.hist(dataset['train_input'][:, 1], bins=20, alpha=0.7, label=r'$v_2$-train', histtype='step')plt.legend(fontsize=12)fig.add_subplot(132)plt.hist(dataset['test_input'][:, 0], bins=20, alpha=0.7, label=r'$v_1$-test', color='orange')plt.hist(dataset['test_input'][:, 1], bins=20, alpha=0.7, label=r'$v_2$-test', histtype='step')plt.legend(fontsize=12)fig.add_subplot(133)plt.hist(dataset['train_label'].numpy(), bins=20, alpha=0.7, label=r'$\frac{v_1+v_2}{1+v_1\, v_2}$-train', color='orange')plt.hist(dataset['test_label'].numpy(), bins=20, alpha=0.7, label=r'$\frac{v_1+v_2}{1+v_1\, v_2}$-test', histtype='step')plt.legend(fontsize=12)plt.tight_layout()plt.show()

我们得到了数据和标签的这些直方图。

  • 图3:在[-1, 1]之间随机分布的速度及其相应的(相对论性)加和值。

  • 图4:具有学习到的激活函数的两层KAN

第一层的激活函数已经看起来像arctanh,第二层的激活函数看起来像tanh。这真的很酷!

尝试从模型中获取第一层激活函数的符号函数表示的建议,揭示了我们实际看到的内容:

model.suggest_symbolic(0, 1, 0)>>> function , r2arctanh , 0.9986623525619507tan , 0.9961022138595581arcsin , 0.968244731426239

第二层也一样:

model.suggest_symbolic(1, 0, 0)
>>> function , r2tanh , 0.9995558857917786arctan , 0.995667040348053gaussian , 0.9793974757194519

我们确实得到tanh作为符号函数的最佳建议。

我非常兴奋地看到基础AI、物理学和数学的研究者将如何合并KAN和MLP,或者修改KAN使其更快、更好、可能更具解释性(如果这是可能的);此外,发现/重新发现物理定律的可能性,可能在天体物理学、宇宙学领域,应该是使用KAN需要探索的另一个方面。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多