Skip to main content

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.gitpip install -e . 安装。

他妈的终于给我修复了路径问题,现在 ikan==1.2.10 版本可以舒畅地使用

from ikan.GroupKAN import GroupKAN, GroupKANLinear

此外,如果你是windows开发者,恰好没有triton且安装报错,请 pip install triton-windows

windows开发无罪!

重大更新

1. 各类KAN默认参数调整

在深入研究各种KAN变体的性能后,我对默认参数进行了关键调整,主要针对初始化方式和缩放系数:

  • 所有KANscale_base从1.0降至0.5以下
  • ChebyKANscale_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以保证安装完整。

从源码安装

你也可以从源码安装:

  1. 克隆项目仓库:
    git clone https://github.com/lgy112112/Efficient-KAN-in-Chinese.git
    
  2. 进入项目目录:
    cd Efficient-KAN-in-Chinese
    
  3. 使用可编辑模式安装:
    pip install -e .
    

随后请不要忘记重启一下IDE以保证安装完整。


依赖

本项目依赖以下 Python 库:

  • torch>=1.9.0
  • torchinfo
  • numpy

通过 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 模型的基本理解。

FourierKAN

使用傅里叶级数作为基函数的 KAN 实现,能够捕捉输入数据的周期性特征。

ChebyKAN

使用 Chebyshev 多项式作为基函数的 KAN 实现,具有良好的数值稳定性和逼近能力。

JacobiKAN

使用 Jacobi 多项式作为基函数的 KAN 实现,通过调整参数 ( a ) 和 ( b ),可以灵活地适应不同的数据分布。

TaylorKAN

使用泰勒级数展开作为基函数的 KAN 实现,适用于需要高阶非线性特征的任务。

WaveletKAN

使用小波变换作为基函数的 KAN 实现,能够捕捉数据的局部特征或频域特征。

应用实例

以下是本人使用 KAN 进行的项目,欢迎大家复现并探讨:

  • MIMI-MNIST 教程:在 MNIST 数据集上应用 KAN 模型的教程,展示了如何构建和训练 KAN 来处理手写数字识别任务。

  • 股票预测教程:使用 KAN 模型进行股票价格预测的教程,包括数据预处理、模型构建和结果分析。

  • KAN 与 VGG 在 CIFAR-10 上的比较:比较了 KAN 模型和 VGG 网络在 CIFAR-10 数据集上的分类性能,展示了 KAN 的潜力。

参考资料

特别感谢以下开源项目对本仓库的支持和贡献:

许可证

本项目采用 MIT 许可证 开源。

Star History

Star History Chart


欢迎大家提出建议和改进,共同完善本仓库。如有任何问题,请提交 IssuePull Request

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ikan-1.3.0.tar.gz (1.9 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ikan-1.3.0-py3-none-any.whl (56.8 kB view details)

Uploaded Python 3

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

Hashes for ikan-1.3.0.tar.gz
Algorithm Hash digest
SHA256 09c0cfa222dcfd9ef81e8d896c3a844454e6885db33a413a48a60b3947e1d59e
MD5 575986aade07d901bbe11df90d023582
BLAKE2b-256 4d9ffa5285a397b1df7579942237f2e0dec862a4ad78568a10a23ec652f08ee6

See more details on using hashes here.

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

Hashes for ikan-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 36410283920ad44e52b99d29a854977362f7220f34a04bdf0e39373733725bfe
MD5 a5b5f5cec61a8503a6ed3e46d732ce4d
BLAKE2b-256 3247ad36d01b13ac1b2194887d1a692b2fba7c66bea35f30162d45d86257c306

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page