An efficient KAN implementation in Chinese.
Project description
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。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ikan-1.3.0.tar.gz.
File metadata
- Download URL: ikan-1.3.0.tar.gz
- Upload date:
- Size: 1.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09c0cfa222dcfd9ef81e8d896c3a844454e6885db33a413a48a60b3947e1d59e
|
|
| MD5 |
575986aade07d901bbe11df90d023582
|
|
| BLAKE2b-256 |
4d9ffa5285a397b1df7579942237f2e0dec862a4ad78568a10a23ec652f08ee6
|
File details
Details for the file ikan-1.3.0-py3-none-any.whl.
File metadata
- Download URL: ikan-1.3.0-py3-none-any.whl
- Upload date:
- Size: 56.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36410283920ad44e52b99d29a854977362f7220f34a04bdf0e39373733725bfe
|
|
| MD5 |
a5b5f5cec61a8503a6ed3e46d732ce4d
|
|
| BLAKE2b-256 |
3247ad36d01b13ac1b2194887d1a692b2fba7c66bea35f30162d45d86257c306
|