Efficient-KAN-in-Chinese
本仓库收集并整理了多种基于 Kolmogorov-Arnold 网络(KAN)的高效实现,包括 FourierKAN、ChebyKAN、JacobiKAN、TaylorKAN 和 WaveletKAN 等。这些实现旨在提供对不同类型 KAN 模型的深入理解和便捷使用。为了方便观看、阅读和修改,本人基于 Efficient-KAN 仓库的写法对变种 KAN 进行重构。
目录
重要须知
2025-04-09
他妈的这次是真可以了。1.3.0版本可包外调用 GroupKAN
2025-03-25
他妈的那个GroupKAN的仓库依赖一直说某个folder不存在,请大家暂且不要使用 pip install ikan 安装,而是使用 git clone https://github.com/lgy112112/Efficient-KAN-in-Chinese.git 和 pip install -e . 安装。
他妈的终于给我修复了路径问题,现在 ikan==1.2.10 版本可以舒畅地使用
from ikan.GroupKAN import GroupKAN, GroupKANLinear
此外,如果你是windows开发者,恰好没有triton且安装报错,请
pip install triton-windows
windows开发无罪!
重大更新
1. 各类KAN默认参数调整
在深入研究各种KAN变体的性能后,我对默认参数进行了关键调整,主要针对初始化方式和缩放系数:
- 所有KAN:
scale_base从1.0降至0.5以下 - ChebyKAN:
scale_cheby从1.0降至0.5 - FourierKAN:将
scale_fourier从1.0降至0.3 - JacobiKAN:将
scale_jacobi从1.0降至0.4 - TaylorKAN:将
scale_taylor从1.0降至0.5 - WaveletKAN:将
scale_wavelet从1.0降至0.5
通过 KAN.ipynb可以测试,在相同迭代次数下超越传统MLP。测试结果显示,参数调整后的KAN模型不仅训练速度更快,收敛性更好,而且在拟合复杂函数时的精度也明显提高。
2. GroupKAN
本项目新增基于Kolmogorov-Arnold Transformer (KAT)的GroupKAN实现,这是KAN的一种高效变体。我在源代码基础上修复了CPU无法训练的bug,并修复了不支持2D tensor的bug:
- KAT (Kolmogorov-Arnold Transformer) - 由Xingyi Yang和Xinchao Wang开发,GroupKAN基于此实现
- rational_kat_cu - KAT的CUDA/Triton实现,为GroupKAN提供了底层支持
- 实现原理:使用了KAT_Group作为激活函数,替代了传统KAN中的B样条函数
- 性能优势:相比原始KAN,GroupKAN具有更快的训练速度和更高的计算效率
- CUDA支持:底层使用CUDA/Triton实现的Rational函数,提供了卓越的性能
- 简化结构:采用"先激活后线性变换"的结构设计,这符合Kolmogorov-Arnold定理的核心思想
你可以使用以下代码创建并测试GroupKAN模型:
from ikan.GroupKAN import GroupKAN
# 定义网络层结构(确保每层特征数是num_groups的倍数)
layers_hidden = [64, 128, 64, 32]
# 创建模型
model = GroupKAN(
layers_hidden=layers_hidden,
act_mode="swish", # 可选: "gelu", "swish", "identity"
drop=0.1,
num_groups=8
)
# 使用torchinfo查看模型结构
from torchinfo import summary
summary(model, input_size=(16, 64))
安装
从 PyPI 安装
可以直接通过 PyPI 使用 pip 进行安装:
pip install ikan
随后请不要忘记重启一下IDE以保证安装完整。
从 GitHub 安装(开发版本)
若需要安装最新的开发版本,可以从 GitHub 仓库直接安装:
pip install git+https://github.com/lgy112112/Efficient-KAN-in-Chinese.git
随后请不要忘记重启一下IDE以保证安装完整。
从源码安装
你也可以从源码安装:
- 克隆项目仓库:
git clone https://github.com/lgy112112/Efficient-KAN-in-Chinese.git
- 进入项目目录:
cd Efficient-KAN-in-Chinese
- 使用可编辑模式安装:
pip install -e .
随后请不要忘记重启一下IDE以保证安装完整。
依赖
本项目依赖以下 Python 库:
torch>=1.9.0torchinfonumpy
通过 pip 安装时会自动安装这些依赖。
使用示例
以下是如何使用本项目的一个简单示例:
from ikan.ChebyKAN import ChebyKAN
model = ChebyKAN(
layers_hidden=layers_hidden,
degree=5,
scale_base=1.0,
scale_cheby=1.0,
base_activation=torch.nn.SiLU,
use_bias=True,
)
summary(model, input_size=(64,))
简介
Kolmogorov-Arnold 网络(KAN)是一类基于 Kolmogorov-Arnold 表示定理的神经网络架构,具有强大的非线性表达能力。本仓库对多种 KAN 的变体进行了实现,包括使用不同基函数(如傅里叶级数、Chebyshev 多项式、Jacobi 多项式、泰勒级数和小波变换)的方法。
实现
KAN
基础的 KAN 实现,使用了 B 样条作为基函数,提供了对 KAN 模型的基本理解。
- 源代码:KAN.py
FourierKAN
使用傅里叶级数作为基函数的 KAN 实现,能够捕捉输入数据的周期性特征。
- 源代码:FourierKAN.py
ChebyKAN
使用 Chebyshev 多项式作为基函数的 KAN 实现,具有良好的数值稳定性和逼近能力。
- 源代码:ChebyKAN.py
JacobiKAN
使用 Jacobi 多项式作为基函数的 KAN 实现,通过调整参数 ( a ) 和 ( b ),可以灵活地适应不同的数据分布。
- 源代码:JacobiKAN.py
TaylorKAN
使用泰勒级数展开作为基函数的 KAN 实现,适用于需要高阶非线性特征的任务。
- 源代码:TaylorKAN.py
WaveletKAN
使用小波变换作为基函数的 KAN 实现,能够捕捉数据的局部特征或频域特征。
- 源代码:WaveletKAN.py
应用实例
以下是本人使用 KAN 进行的项目,欢迎大家复现并探讨:
-
MIMI-MNIST 教程:在 MNIST 数据集上应用 KAN 模型的教程,展示了如何构建和训练 KAN 来处理手写数字识别任务。
- 项目地址:MIMI-MNIST-Tutorial
-
股票预测教程:使用 KAN 模型进行股票价格预测的教程,包括数据预处理、模型构建和结果分析。
- 项目地址:Stocks_Prediction_Tutorial
- 项目地址:KAN_Stocks
-
KAN 与 VGG 在 CIFAR-10 上的比较:比较了 KAN 模型和 VGG 网络在 CIFAR-10 数据集上的分类性能,展示了 KAN 的潜力。
- 项目地址:KANvsVGGonCIFAR10
参考资料
特别感谢以下开源项目对本仓库的支持和贡献:
- EfficientKAN
- JacobiKAN
- TaylorKAN
- Wav-KAN
- ChebyKAN
- FourierKAN
- KAT (Kolmogorov-Arnold Transformer) - 由Xingyi Yang和Xinchao Wang开发,GroupKAN基于此实现
- rational_kat_cu - KAT的CUDA/Triton实现,为GroupKAN提供了底层支持
许可证
本项目采用 MIT 许可证 开源。
Star History
欢迎大家提出建议和改进,共同完善本仓库。如有任何问题,请提交 Issue 或 Pull Request。
Metadata
Release files for ikan 1.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ikan-1.3.0.tar.gz | 1.9 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ikan-1.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 2.0 MB
Release files / ikan-1.3.0.tar.gz
| Download URL | ikan-1.3.0.tar.gz |
|---|---|
| Size | 1.9 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
09c0cfa222dcfd9ef81e8d896c3a844454e6885db33a413a48a60b3947e1d59e
|
|
BLAKE2b-256 checksum How to use checksums |
4d9ffa5285a397b1df7579942237f2e0dec862a4ad78568a10a23ec652f08ee6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.11
|
Release files / ikan-1.3.0-py3-none-any.whl
| Download URL | ikan-1.3.0-py3-none-any.whl |
|---|---|
| Size | 56.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
36410283920ad44e52b99d29a854977362f7220f34a04bdf0e39373733725bfe
|
|
BLAKE2b-256 checksum How to use checksums |
3247ad36d01b13ac1b2194887d1a692b2fba7c66bea35f30162d45d86257c306
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.11
|