md_files/科研/KAN.md

168 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## KAN
### Kolmogorov-Arnold表示定理
该定理表明,任何多元连续函数都可以表示为有限个单变量函数的组合。
对于任意一个定义在$[0,1]^n$上的**连续多元函数**
$$ f(x_1, x_2, \ldots, x_n), $$
存在**单变量连续函数** $\phi_{q}$ 和 $\psi_{q,p}$(其中 $q = 1, 2, \ldots, 2n+1$$p = 1, 2, \ldots, n$),使得:
$$
f(x_1, \ldots, x_n) = \sum_{q=1}^{2n+1} \phi_{q}\left( \sum_{p=1}^{n} \psi_{q,p}(x_p) \right).
$$
即,$f$可以表示为$2n+1$个“外层函数”$\phi_{q}$和$n \times (2n+1)$个“内层函数”$\psi_{q,p}$的组合。
![image-20250327114742397](https://pic.bitday.top/i/2025/03/27/iz5i9u-0.png)
![c35995ca0cecfbd642a0bb62cd1896b](https://pic.bitday.top/i/2025/03/27/j1f1vc-0.png)
#### **和MLP的联系**
| **Kolmogorov-Arnold定理** | **神经网络MLP** |
| -------------------------------- | ---------------------------------------------------- |
| 外层函数 $\phi_q$ 的叠加 | 输出层的加权求和(线性组合) + 激活函数 |
| 内层函数 $\psi_{q,p}$ 的线性组合 | 隐藏层的加权求和 + 非线性激活函数 |
| 固定 $2n+1$ 个“隐藏单元” | 隐藏层神经元数量可以自由设计,依赖于网络的深度和宽度 |
| 严格的数学构造(存在性证明) | 通过数据驱动的学习(基于梯度下降等方法)来优化参数 |
#### **和MLP的差异**
浅层结构(一个隐藏层)的数学表达与模型设计
| **模型** | **数学公式** | **模型设计** |
| -------- | ------------------------------------------------------------ | ---------------------------------------------------------- |
| **MLP** | $f(x) \approx \sum_{i=1}^{N} a_i \sigma(w_i \cdot x + b_i)$ | 线性变换后再跟非线性激活函数(RELU) |
| **KAN** | $f(x) = \sum_{q=1}^{2n+1} \Phi_q \left( \sum_{p=1}^n \phi_{q,p}(x_p) \right)$ | **可学习激活函数**(如样条)在边上,**求和操作**在神经元上 |
边上的可学习函数: $\phi_{q,p}(x_p)$如B样条
求和操作:$\sum_{p=1}^n \phi_{q,p}(x_p)$
![image-20250327130008821](https://pic.bitday.top/i/2025/03/27/li1i17-0.png)
深层结构的数学表达与模型设计
| **模型** | **数学公式** | **模型设计** |
| -------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| **MLP** | $\text{MLP}(x) = (W_3 \circ \sigma_2 \circ W_2 \circ \sigma_1 \circ W_1)(x)$ | 交替的线性层($W_i$)和固定非线性激活函数($\sigma_i$)。 |
| **KAN** | $\text{KAN}(x) = (\Phi_3 \circ \Phi_2 \circ \Phi_1)(x)$ | 每一层都是单变量函数的组合($\Phi_i$),每一层的激活函数都可以进行学习 |
### 传统MLP的缺陷
1. **梯度消失和梯度爆炸**
与其他传统的激活函数(如 Sigmoid 或 Tanh一样MLP 在进行反向传播时有时就会遇到梯度消失/爆炸的问题,尤其当网络层数过深时。当它非常小或为负大,网络会退化;连续乘积会使得梯度慢慢变为 0梯度消失或变得异常大梯度爆炸从而阻碍学习过程。
2. **参数效率**
MLP 常使用全连接层,每层的每个神经元都与上一层的所有神经元相连。尤其是对于大规模输入来说,这不仅增加了计算和存储开销,也增加了过拟合的风险。效率不高也不够灵活。
3. **处理高维数据能力有限**MLP 没有利用数据的内在结构例如图像中的局部空间相关性或文本数据的语义信息。例如在图像处理中MLP 无法有效地利用像素之间的局部空间联系这很典型在图像识别等任务上的性能不如卷积神经网络CNN
4. **长依赖问题**
虽然 MLP 理论上可以逼近任何函数,但在实际应用中,它们很难捕捉到序列中的长依赖关系(例如句子跨度很长)。这让人困惑:如何把前后序列的信息互相处理?而自注意力(如 transformer在这类任务中表现更好。
但无论CNN/RNN/transformer怎么改进都躲不掉MLP这个基础模型根上的硬伤即线性组合+激活函数的模式。
### KAN网络
#### **主要贡献:**
过去的类似想法受限于原始的Kolmogorov-Arnold表示定理两层网络宽度为2n+12*n*+1未能利用现代技术如反向传播进行训练。
KAN通过推广到**任意宽度和深度**的架构解决了这一限制同时通过实验验证了KAN在“AI + 科学”任务中的有效性,兼具**高精度**和**可解释性**。
#### **B样条B-spline**
是一种通过分段多项式函数的线性组合构造的光滑曲线,其核心思想是利用**局部基函数**称为B样条基函数来表示整个曲线。
形式上一个B样条函数通常表示为基函数的线性组合
$$
S(t) = \sum_{i=0}^{n} c_i \cdot B_i(t)
$$
其中:
- $B_i(t)$ 是 **B样条基函数**basis functions
- $c_i$ 是 **控制点** 或系数(可以来自数据、拟合、插值等);
- $S(t)$ 是最终的 **B样条曲线** 或函数。
每个基函数只在某个局部区间内非零,改变一个控制点只会影响曲线的局部形状。
**示例:基函数定义**
$B_0(t)$ - 支撑区间[0,1]
$$
B_0(t) =
\begin{cases}
1 - t, & 0 \leq t < 1,\\
0, & \text{其他区间}.
\end{cases}
$$
$B_1(t)$ - 支撑区间[0,2]
$$
B_1(t) =
\begin{cases}
t, & 0 \leq t < 1, \\
2 - t, & 1 \leq t < 2, \\
0, & \text{其他区间}.
\end{cases}
$$
$B_2(t)$ - 支撑区间[1,3]
$$
B_2(t) =
\begin{cases}
t - 1, & 1 \leq t < 2, \\
3 - t, & 2 \leq t < 3, \\
0, & \text{其他区间}.
\end{cases}
$$
$B_3(t)$ - 支撑区间[2,4]
$$
B_3(t) =
\begin{cases}
t - 2, & 2 \leq t < 3, \\
4 - t, & 3 \leq t \leq 4, \\
0, & \text{其他区间}.
\end{cases}
$$
<img src="https://pic.bitday.top/i/2025/03/27/ngzlqp-0.png" alt="image-20250327141925257" style="zoom:80%;" />
假设用该基函数对$f(t) = \sin\left(\dfrac{\pi t}{4}\right)$在[0,4]区间上拟合
$$
S(t) = 0 \cdot B_0(t) + 0.7071 \cdot B_1(t) + 1 \cdot B_2(t) + 0.7071 \cdot B_3(t)
$$
<img src="https://pic.bitday.top/i/2025/03/27/npyud0-0.png" alt="image-20250327143432551" style="zoom: 80%;" />
#### **网络结构:**
![image-20250327132108215](https://pic.bitday.top/i/2025/03/27/lujmuj-0.png)
左图:
- 节点(如$x_{l,i}$)表示第$l$层第$i$个神经元的**输入值**
- 边(如$\phi_{l,j,i}$)表示**可学习的激活函数**(权重)
- 下一层节点的值计算:
$$x_{l+1,j} = \sum_i \phi_{l,j,i}(x_{l,i})$$
右图: