受柯尔莫哥洛夫-阿诺德表示定理的启发,作者提出柯尔莫哥洛夫-阿诺德网络(KAN)作为多层感知器(MLP)有前途的替代品。MLP 在节点(“神经元”)上具有固定的激活函数,而 KAN 在边(“权重”)上具有可学习的激活函数。KAN 没有线性权重----每个权重参数都被参数化为spline的单变量函数所取代。作者证明,这种看似简单的改变使得 KAN 在准确性和可解释性方面优于 MLP。就准确性而言,在数据拟合和 PDE 求解中,较小的 KAN 可以比较大的 MLP 获得可比或更好的准确性。从理论上和经验上来说,KAN 比 MLP 拥有更快的神经尺度法则(neural scaling laws:随着模型参数的增加,测试损失减小)。对于可解释性,KAN 可以直观地可视化,并且可以轻松地与人类交互。通过数学和物理领域的两个例子,KAN 被证明是有用的“合作者”,帮助科学家(重新)发现数学和物理定律。总之,KAN 是 MLP 的有前途的替代品,为进一步改进当今严重依赖 MLP 的深度学习模型提供了机会。
来自:KAN: Kolmogorov–Arnold Networks
目录
- 引言
- KAN
- Kolmogorov-Arnold表示理论
- KAN架构
- 实现细节
- 化简KAN使其可解释
- 思考
引言
多层感知器 MLP,也称为全连接前馈神经网络,是当今深度学习模型的基础构建块。MLP 的重要性怎么强调都不为过,因为它们是机器学习中用于逼近非线性函数的默认模型,MLP的表达能力由通用逼近定理保证。然而,MLP 是我们可以构建的最好的非线性回归器吗?尽管 MLP 被广泛使用,但它们也有明显的缺点。 例如,在 Transformer 中,MLP 占用几乎所有参数,并且在没有后期分析工具的情况下难以解释。
作者提出了一种有希望的MLP替代方案,称为Kolmogorov-Arnold网络 KANs。MLP受到通用近似定理的启发,而KAN则受到Kolmogorov-Arnold表示定理的启发。与MLP一样,KAN具有全连接的结构。然而,MLP将固定的激活函数放在节点(“神经元”)上,而KAN将可学习的激活函数放在边(“权重”)上,如图0.1所示。因此,KAN根本没有线性权重矩阵:取而代之的是,每个权重参数都被一个可学习的一维函数参数化为spline所取代。KAN的节点只是简单地对输入信号求和,而不应用任何非线性。
- 图0.1:MLP与KAN的比较。
有人可能会担心,由于每个MLP的权重参数都变成了KAN的spline,因此KAN的成本非常昂贵。幸运的是,KAN拥有比MLP更小的规模。比如:对于PDE solving,2层,每层宽度10的KAN比4层,每层宽度100的MLP精确100倍( 1 0 − 7 10^{−7} 10−7 vs 1 0 − 5 10^{−5} 10−5 MSE),参数效率高100倍( 1 0 2 10^{2} 102 vs 1 0 4 10^{4} 104参数)。
其实之前已经有很多研究使用Kolmogorov-Arnold表示定理构建神经网络。然而,大多数工作都坚持使用原始的depth-2 width-(2 n n n+1),并且没有利用更现代的技术,例如反向传播来训练网络。KAN的贡献在于将原始的Kolmogorov-Arnold表示推广到任意宽度和深度,并在今天的深度学习世界中重新激活它,以及使用广泛的实验来突出其作为AI+Science基础模型的优势,因为它的准确性和可解释性。
KAN是spline和MLP的组合,利用各自的优势并避免各自的弱点。spline对于低维函数是精确的,易于局部调整,并且能够在不同的分辨率之间切换。然而,spline曲线由于无法利用组合结构而存在严重的COD(维数诅咒)。另一方面,MLP由于其特征学习而较少受到COD的影响,但由于其无法优化单变量函数,因此在低维情况下不如spline曲线准确。
为了准确地学习一个函数,一个模型不仅要学习组成结构(外部自由度),而且要很好地近似单变量函数(内部自由度)。KAN是这样的模型,因为它们在外部有MLP,在内部有spline。因此,KAN不仅可以学习特征(由于它们与MLP的外部相似性),而且还可以以很高的精度优化这些学习到的特征(由于它们与spline的内部相似性)。比如,给定一个高维函数: f ( x 1 , . . . , x N ) = e x p ( 1 N ∑ i = 1 N s i n 2 ( x i ) ) f(x_{1},...,x_{N})=exp(\frac{1}{N}\sum_{i=1}^{N}sin^{2}(x_{i})) f(x1,...,xN)=exp(N1i=1∑Nsin2(xi))当 N N N较大时,由于COD的影响,spline失效;MLP可以潜在地学习广义加性结构,但它们对于用ReLU激活来近似指数函数和正弦函数是非常低效的。相比之下,KANs可以很好地学习组合结构和单变量函数,因此在很大程度上优于MLP(见图3.1)。
- 图3.1:用5个toy例子来比较KAN和MLP。KAN 几乎可以实现理论预测的最快缩放定律,而 MLP 的缩放定律很缓慢。
KAN
MLP的灵感来自于通用近似定理。本节组织形式为:
- 回顾Kolmogorov-Arnold定理
- Kolmogorov-Arnold网络的设计
- 提出简化技术以使KANs可解释
Kolmogorov-Arnold表示理论
Vladimir Arnold和Andrey Kolmogorov证明了如果 f f f是一个有界域上的多元连续函数,那么 f f f可以写成单变量连续函数的有限复合,更具体的,对于函数 f : [ 0 , 1 ] n → R f:[0,1]^{n}\rightarrow\mathbb{R} f:[0,1]n→R: f ( x ) = f ( x 1 , . . . , x n ) = ∑ q = 1 2 n + 1 Φ q ( ∑ p = 1 n ϕ q , p ( x p ) ) (2.1) f(\textbf{x})=f(x_{1},...,x_{n})=\sum_{q=1}^{2n+1}\Phi_{q}(\sum_{p=1}^{n}\phi_{q,p}(x_{p}))\tag{2.1} f(x)=f(x1,...,xn)=q=1∑2n+1Φq(p=1∑nϕq,p(xp))(2.1)其中, ϕ q , p : [ 0 , 1 ] → R \phi_{q,p}:[0,1]\rightarrow\mathbb{R} ϕq,p:[0,1]→R, Φ q : R → R \Phi_{q}:\mathbb{R}\rightarrow\mathbb{R} Φq:R→R。从某种意义上说,他们证明了唯一真正的多元函数是加法,因为所有其他函数都可以用一元函数与求和来表示。有人可能会天真地认为这对机器学习来说是个好消息:学习一个高维函数可以归结为学习一个多项式数量的一维函数。然而,这些一维函数可能是非平滑的,甚至是分形的,因此在实践中可能无法学习。由于这种病态的行为,Kolmogorov-Arnold表示定理在机器学习中基本上被判了死刑,被认为理论上是正确的,但实际上毫无用处。
然而,作者对Kolmogorov-Arnold定理在机器学习中的有用性更为乐观:
- 首先,不需要拘谨于原始的Eq.(2.1),它只有两层非线性和隐藏层中少量的项(2 n n n+1):作者将网络推广到任意的宽度和深度。
- 其次,科学和日常生活中的大多数函数通常是光滑的,并且具有稀疏的组成结构,这有助于光滑的Kolmogorov-Arnold表示。这里的哲学接近于物理学家的心态,他们通常更关心典型的情况,而不是最坏的情况。
KAN架构
假设我们有一个由输入输出对
{
x
i
,
y
i
}
\left\{\textbf{x}_{i},y_{i}\right\}
{xi,yi}组成的监督学习任务,我们想要找到一个
f
f
f对所有data point有
y
i
≈
f
(
x
i
)
y_{i}\approx f(\textbf{x}_{i})
yi≈f(xi)。Eq.(2.1)暗示,如果我们能找到合适的单变量函数
ϕ
q
,
p
\phi_{q,p}
ϕq,p和
Φ
q
\Phi_{q}
Φq,我们就完成了。这启发作者设计一个神经网络,显式参数化Eq.(2.1)。由于所有需要学习的函数都是单变量函数,我们可以将每个一维函数参数化为一条B-spline,以及具有局部B-spline基函数的可学习系数(见图2.2右)。
- 图2.2:左----流经网络的激活符号(从下往上前向计算)。右----激活函数被参数化为B-spline,它允许在粗粒度和细粒度网格之间切换。
现在我们有了一个KAN的原型,其计算图由Eq.(2.1)精确指定,如图0.1 b所示(输入维数 n n n=2),表现为一个两层神经网络,激活函数放置在边缘而不是节点上(对节点进行简单求和),中间层宽度为 2 n n n + 1。
如前所述,这样的网络被认为太简单,无法在实践中任意地用光滑spline近似任何函数!因此,作者希望将KAN扩展到更宽和更深。目前还不清楚如何使KAN更深,因为Kolmogorov-Arnold表示对应于两层的KAN。然而,目前还没有一个“一般化”版本的定理对应于更深层次的KAN。
作者注意到MLP和KAN之间的类比时,突破出现了。在MLP中,一旦定义了一个层(它由线性变换和非线性组成),我们就可以堆叠更多的层来使网络更深。为了建立更深的KAN,我们应该首先回答:什么是KAN layer?事实证明,具有 n i n n_{in} nin-dim输入和 n o u t n_{out} nout-dim输出的KAN层可以定义为一维函数的矩阵: Φ = { ϕ q , p } , p = 1 , 2 , . . . , n i n , q = 1 , 2 , . . . , n o u t (2.2) \Phi=\left\{\phi_{q,p}\right\},\thinspace\thinspace p=1,2,...,n_{in},\thinspace\thinspace q=1,2,...,n_{out}\tag{2.2} Φ={ϕq,p},p=1,2,...,nin,q=1,2,...,nout(2.2)其中 ϕ q , p \phi_{q,p} ϕq,p有可学习参数,在Kolmogov-Arnold定理中,内部函数形成一个 n i n = n , n o u t = 2 n + 1 n_{in}=n,n_{out}=2n+1 nin=n,nout=2n+1的KAN层,外部函数形成一个 n i n = 2 n + 1 , n o u t = n n_{in}=2n+1,n_{out}=n nin=2n+1,nout=n的KAN层。因此,Eq.(2.1)中的Kolmogov-Arnold表示只是两个KAN层的简单组合。现在很清楚拥有更深的Kolmogorov-Arnold表示意味着什么:简单地堆叠更多的KAN层!
作者引入一些符号。这段话有点技术性,但我们可以参考图2.2-左来获得具体的例子和直观的理解。KAN的形状由整数数组表示:
[
n
0
,
n
1
,
.
.
.
,
n
L
]
[n_{0},n_{1},...,n_{L}]
[n0,n1,...,nL]其中,
n
i
n_{i}
ni是计算图第
i
i
i层的节点数量。用
(
l
,
i
)
(l,i)
(l,i)表示第
l
l
l层的第
i
i
i个神经元,用
x
l
,
i
x_{l,i}
xl,i表示
(
l
,
i
)
(l,i)
(l,i)神经元的激活值。在第
l
l
l层和第
l
+
1
l+1
l+1层之间,有
n
l
n
l
+
1
n_{l}n_{l+1}
nlnl+1个激活函数:连接
(
l
,
j
)
(l, j)
(l,j)和
(
l
+
1
,
i
)
(l +1, i)
(l+1,i)的激活函数表示为
ϕ
l
,
i
,
j
,
l
=
0
,
.
.
.
,
L
−
1
,
i
=
1
,
.
.
.
,
n
l
+
1
,
j
=
1
,
.
.
.
,
n
l
\phi_{l,i,j},\thinspace\thinspace l=0,...,L-1,\thinspace\thinspace i=1,...,n_{l+1},\thinspace\thinspace j=1,...,n_{l}
ϕl,i,j,l=0,...,L−1,i=1,...,nl+1,j=1,...,nl其中,
ϕ
l
,
i
,
j
\phi_{l,i,j}
ϕl,i,j的激活之前是
x
l
,
i
x_{l,i}
xl,i,
ϕ
l
,
i
,
j
\phi_{l,i,j}
ϕl,i,j的激活之后被记为
x
~
l
,
i
,
j
=
ϕ
l
,
i
,
j
(
x
l
,
i
)
\widetilde{x}_{l,i,j}=\phi_{l,i,j}(x_{l,i})
x
l,i,j=ϕl,i,j(xl,i)。
(
l
+
1
,
j
)
(l + 1, j)
(l+1,j)神经元的激活值就是所有传入的后激活值之和:
x
l
+
1
,
j
=
∑
i
=
1
n
l
x
~
l
,
i
,
j
=
∑
i
=
1
n
l
ϕ
l
,
i
,
j
(
x
l
,
i
)
,
j
=
1
,
.
.
.
,
n
l
+
1
(2.5)
x_{l+1,j}=\sum_{i=1}^{n_{l}}\widetilde{x}_{l,i,j}=\sum_{i=1}^{n_{l}}\phi_{l,i,j}(x_{l,i}),\thinspace\thinspace j=1,...,n_{l+1}\tag{2.5}
xl+1,j=i=1∑nlx
l,i,j=i=1∑nlϕl,i,j(xl,i),j=1,...,nl+1(2.5)在矩阵形式中,有:
其中,
Φ
l
\Phi_{l}
Φl是第
l
l
l层KAN对应的函数矩阵。一般的KAN网络是
L
L
L层的组合:给定一个输入向量
x
0
∈
R
n
0
\textbf{x}_{0}\in\mathbb{R}^{n_{0}}
x0∈Rn0,KAN的输出为:
K
A
N
(
x
)
=
(
Φ
L
−
1
∘
Φ
L
−
2
∘
⋅
⋅
⋅
∘
Φ
1
∘
Φ
0
)
x
KAN(\textbf{x})=(\Phi_{L-1}\circ\Phi_{L-2}\circ\cdot\cdot\cdot\circ\Phi_{1}\circ\Phi_{0})\textbf{x}
KAN(x)=(ΦL−1∘ΦL−2∘⋅⋅⋅∘Φ1∘Φ0)x也可以重写上述方程,假设输出维数
n
L
=
1
n_{L}=1
nL=1,则有
f
(
x
)
=
K
A
N
(
x
)
f(\textbf{x})=KAN(\textbf{x})
f(x)=KAN(x):
原始Kolmogorov-Arnold表示Eq.(2.1)对应于形状为
[
n
,
2
n
+
1
,
1
]
[n, 2n + 1,1]
[n,2n+1,1]的2层KAN。所有的运算都是可微的,所以我们可以用反向传播来训练KAN。为了比较,一个MLP可以写成仿射变换
W
\textbf{W}
W和非线性
σ
σ
σ的交织:
M
L
P
(
x
)
=
(
W
L
−
1
∘
σ
∘
W
L
−
2
∘
σ
∘
⋅
⋅
⋅
∘
W
1
∘
σ
∘
W
0
)
x
MLP(\textbf{x})=(\textbf{W}_{L-1}\circ\sigma\circ\textbf{W}_{L-2}\circ\sigma\circ\cdot\cdot\cdot\circ\textbf{W}_{1}\circ\sigma\circ\textbf{W}_{0})\textbf{x}
MLP(x)=(WL−1∘σ∘WL−2∘σ∘⋅⋅⋅∘W1∘σ∘W0)x很明显,MLP将线性变换和非线性分别处理为
W
\textbf{W}
W和
σ
σ
σ,而KAN在
Φ
Φ
Φ中将它们一起处理。在图0.1 ©和(d)中,可视化了三层MLP和三层KAN,以澄清它们的区别。
实现细节
1.残差激活函数
我们包含一个基函数
b
(
x
)
b(x)
b(x)(类似于残差连接),使得激活函数
ϕ
(
x
)
\phi(x)
ϕ(x)是基函数
b
(
x
)
b(x)
b(x)和spline函数的和:
ϕ
(
x
)
=
w
(
b
(
x
)
+
s
p
l
i
n
e
(
x
)
)
\phi(x)=w(b(x)+spline(x))
ϕ(x)=w(b(x)+spline(x))设置
b
(
x
)
=
s
i
l
u
(
x
)
=
x
1
+
e
−
x
b(x)=silu(x)=\frac{x}{1+e^{-x}}
b(x)=silu(x)=1+e−xx在大部分情况下,spline函数被参数化为B-spline的线性组合:
s
p
l
i
n
e
(
x
)
=
∑
i
c
i
B
i
(
x
)
spline(x)=\sum_{i}c_{i}B_{i}(x)
spline(x)=i∑ciBi(x)其中,
c
i
c_{i}
ci是可学习的。原则上
w
w
w是多余的,因为它可以被吸收到
b
(
x
)
b(x)
b(x)和
s
p
l
i
n
e
(
x
)
spline(x)
spline(x)中。然而,我们仍然包括这个
w
w
w因子,以更好地控制激活函数的总体大小。
2.初始化scales
每个激活函数初始化为
s
p
l
i
n
e
(
x
)
≈
0
spline(x)\approx 0
spline(x)≈0
3.更新spline grids
作者根据输入激活动态更新每个网格。
化简KAN使其可解释
这个想法是从一个足够大的KAN开始,用稀疏性正则化训练它,然后进行修剪。作者将证明这些经过修剪的KAN比未经过修剪的KAN更易于解释。
1.稀疏化
对于MLP,线性权重的L1正则化用于支持稀疏性。KAN可以适应这个高层次的想法,但需要两个修改:
- 在KAN中没有线性的“权重”。线性权重被可学习的激活函数所取代,因此我们应该定义这些激活函数的L1范数。
- 实验发现L1不足以使KAN稀疏化;相反,一个额外的熵正则化是必要的。
定义激活函数 ϕ \phi ϕ的L1范数为在 N p N_{p} Np输入上的平均幅度: ∣ ϕ ∣ 1 = 1 N p ∑ s = 1 N p ∣ ϕ ( x ( s ) ) ∣ |\phi|_{1}=\frac{1}{N_{p}}\sum_{s=1}^{N_{p}}|\phi(x^{(s)})| ∣ϕ∣1=Np1s=1∑Np∣ϕ(x(s))∣然后对于输入 n i n n_{in} nin和输出 n o u t n_{out} nout的KAN layer Φ \Phi Φ,其L1范数为: ∣ Φ ∣ 1 = ∑ i = 1 n i n ∑ j = 1 n o u t ∣ ϕ i , j ∣ 1 |\Phi|_{1}=\sum_{i=1}^{n_{in}}\sum_{j=1}^{n_{out}}|\phi_{i,j}|_{1} ∣Φ∣1=i=1∑ninj=1∑nout∣ϕi,j∣1因此,训练目标为: l t o t a l = l p r e d + λ ∑ l = 0 L − 1 ∣ Φ l ∣ 1 l_{total}=l_{pred}+\lambda\sum_{l=0}^{L-1}|\Phi_{l}|_{1} ltotal=lpred+λl=0∑L−1∣Φl∣1
2.可视化
当可视化KAN时,将激活函数的透明度设置为与
t
a
n
h
(
β
A
l
,
i
,
j
)
tanh(β A_{l,i,j})
tanh(βAl,i,j)成比例,其中
β
=
3
β = 3
β=3。因此,贡献较小的函数会逐渐消失,让我们专注于重要的函数。
3.修剪
在使用稀疏化惩罚进行训练后,我们可能还希望将网络修剪成更小的子网。作者在节点级别(而不是在边缘级别)对KANs进行稀疏化。对于每个节点(假设是第1层的第
i
i
i个神经元),作者将其传入和传出的分数定义为:
I
l
,
i
=
m
a
x
k
(
∣
ϕ
l
−
1
,
k
,
i
∣
1
)
,
O
l
,
i
=
m
a
x
j
(
∣
ϕ
l
+
1
,
j
,
i
∣
1
)
I_{l,i}=max_{k}(|\phi_{l-1,k,i}|_{1}),O_{l,i}=max_{j}(|\phi_{l+1,j,i}|_{1})
Il,i=maxk(∣ϕl−1,k,i∣1),Ol,i=maxj(∣ϕl+1,j,i∣1)如果传入和传出的分数都大于阈值超参数
θ
=
1
0
−
2
\theta=10^{-2}
θ=10−2,则认为节点是重要的。不重要的节点被修剪。
4.符号化
在我们怀疑某些激活函数实际上是符号的情况下,例如,cos或log,作者提供了一个接口来将它们设置为指定的符号形式。
思考
KAN的设计看起来更像是为了求解物理公式,尤其是可解释性符号化部分的内容。在修剪的时候,我们可以发现保留的节点是随着输入动态改变的。尽管我一开始总在想KAN相比MLP有什么缺陷,但是现在我真的觉得KAN是代替MLP的一个未来方案。