Project Icon

pykan

实现了Kolmogorov-Arnold网络,提升神经网络准确性和可解释性

pykan项目实现了Kolmogorov-Arnold网络(KAN),这是一种在边缘应用激活函数的创新神经网络架构。KAN在多项任务中表现优于多层感知器(MLP),提高了模型准确性、参数效率和可解释性。项目提供详细教程和示例,涵盖从函数拟合到PDE求解的应用,为科学发现和数学定律探索开辟新途径。

kan_plot

!! 2024年7月14日重大更新

  • model.train() 已更改为 model.fit()
  • 一些其他小功能也有变化(例如,create_dataset 已移至 kan.utils)。我已更新并检查了 ./tutorials 中的笔记本可在 CPU 上运行,所以请参考这些教程了解更新/新功能。文档尚未更新,但很快会更新。

对于 pypi 用户,这是最新版本 0.2.1。

新功能包括(稍后会有文档):

  • 在 KAN 中包含乘法。教程
  • 速度模式。如果你从不使用符号功能,可以使用 model = model.speed() 加速你的 KAN。教程
  • 将符号公式编译成 KAN。教程
  • 特征归因和输入剪枝。教程

Kolmogorov-Arnold 网络(KAN)

这是论文"KAN: Kolmogorov-Arnold Networks"的 GitHub 仓库。文档可以在这里找到。这里是作者对当前 KAN 热潮的回应

Kolmogorov-Arnold 网络(KAN)是多层感知器(MLP)的有前景的替代方案。KAN 和 MLP 一样具有坚实的数学基础:MLP 基于通用近似定理,而 KAN 基于 Kolmogorov-Arnold 表示定理。KAN 和 MLP 是对偶的:KAN 在边上有激活函数,而 MLP 在节点上有激活函数。这个简单的改变使 KAN 在模型精度可解释性方面比 MLP 更好(有时甚至好得多!)。KAN 的简介可以在这里找到。

mlp_kan_compare

精度

KAN 的扩展速度比 MLP 更快。KAN 以更少的参数实现了比 MLP 更好的精度。

如果你需要高精度,请设置 torch.set_default_dtype(torch.float64)

示例 1:拟合符号公式 Screenshot 2024-04-30 at 10 55 30

示例 2:拟合特殊函数 Screenshot 2024-04-30 at 11 07 20

示例 3:PDE 求解 Screenshot 2024-04-30 at 10 57 25

示例 4:避免灾难性遗忘 Screenshot 2024-04-30 at 11 04 36

可解释性

KAN 可以直观地可视化。KAN 提供了 MLP 无法提供的可解释性和交互性。我们可以使用 KAN 潜在地发现新的科学定律。

示例 1:符号公式 Screenshot 2024-04-30 at 11 04 56

示例 2:发现结的数学定律 Screenshot 2024-04-30 at 11 05 25

示例 3:发现安德森局域化的物理定律 Screenshot 2024-04-30 at 11 05 53

示例 4:三层 KAN 的训练

kan_training_low_res

安装

Pykan 可以通过 PyPI 或直接从 GitHub 安装。

前提条件:

Python 3.9.7 或更高版本
pip

对于开发者

git clone https://github.com/KindXiaoming/pykan.git
cd pykan
pip install -e .

通过 GitHub 安装

pip install git+https://github.com/KindXiaoming/pykan.git

通过 PyPI 安装:

pip install pykan

要求

# python==3.9.7
matplotlib==3.6.2
numpy==1.24.4
scikit_learn==1.1.3
setuptools==65.5.0
sympy==1.11.1
torch==2.2.2
tqdm==4.66.2

激活虚拟环境后,你可以按如下方式安装特定的包要求:

pip install -r requirements.txt

可选:Conda 环境设置 对于喜欢使用 Conda 的人:

conda create --name pykan-env python=3.9.7
conda activate pykan-env
pip install git+https://github.com/KindXiaoming/pykan.git  # GitHub 安装
# 或
pip install pykan  # PyPI 安装

计算要求

教程中的示例通常可在单个 CPU 上在 10 分钟内运行完成。论文中的所有示例都可以在单个 CPU 上在一天内运行完成。训练 PDE 的 KAN 最为耗时,可能需要几小时到几天的时间在单个 CPU 上完成。我们使用 CPU 来训练我们的模型,因为我们进行了参数扫描(对 MLP 和 KAN 都进行了),以获得帕累托前沿。有成千上万个小模型,这就是为什么我们使用 CPU 而不是 GPU 的原因。诚然,我们的问题规模比典型的机器学习任务小,但对于与科学相关的任务来说是典型的。如果你的任务规模很大,建议使用 GPU。

文档

文档可以在这里找到。

教程

快速开始

hellokan.ipynb 笔记本开始。

更多演示

更多笔记本教程可以在 tutorials 中找到。

超参数调优建议

许多关于 MLP 和其他网络的直觉可能不能直接转移到 KAN 上。那么如何有效地调整超参数呢?以下是我基于在论文中报告的问题上的经验给出的一般建议。由于这些问题相对小规模且面向科学,我的建议可能不适合你的情况。但我至少想分享我的经验,让用户能更好地知道从哪里开始以及从调整超参数中可以期待什么。

  • 从简单的设置开始(小的 KAN 形状,小的网格大小,小数据,无正则化 lamb=0)。这与 MLP 文献很不同,在 MLP 文献中,人们默认使用 O(10^2) 或更高阶的宽度。例如,如果你有一个有 5 个输入和 1 个输出的任务,我会尝试像 KAN(width=[5,1,1], grid=3, k=3) 这样简单的设置。如果不行,我会逐渐首先增加宽度。如果还是不行,我会考虑增加深度。你不需要这么极端,如果你对任务的复杂性有更好的理解的话。

  • 一旦达到可接受的性能,你就可以尝试优化你的 KAN(更精确或更可解释)。

  • 如果你关心精度,尝试网格扩展技术。一个例子在这里。但要注意过拟合,见下文。

  • 如果你关心可解释性,尝试使用例如 model.train(lamb=0.01) 来稀疏化网络。建议也逐渐增加 lamb。在稀疏化训练后,绘制图表,如果你看到一些明显无用的神经元,你可以调用 pruned_model = model.prune() 来获得剪枝后的模型。然后你可以进一步训练(无论是为了提高精度还是鼓励稀疏性),或进行符号回归。

  • 我还想强调,精度和可解释性(以及参数效率)不一定是矛盾的,例如我们论文中的图 2.3。在某些情况下它们可能是正相关的,但在其他情况下可能会显示一些权衡。所以最好不要贪心,一次只瞄准一个目标。然而,如果你有强烈的理由相信剪枝(可解释性)也可以帮助提高精度,你可能想提前计划,即使你的最终目标是精度,你也想首先推动可解释性。

  • 一旦你得到一个相当好的结果,尝试增加数据大小并进行最后一次运行,这应该会给你更好的结果! 免责声明:首先尝试最简单的方法是物理学家的思维方式,这可能带有个人偏见,但我发现这种思维方式相当有效,能让我很好地控制事物。此外,我倾向于先选择小数据集的原因是为了在调试阶段获得更快的反馈(毕竟我的初始实现速度很慢)。隐含的假设是小数据集在质量上与大数据集行为相似,这在一般情况下不一定成立,但在我尝试过的小规模问题中通常是成立的。要了解你的数据是否足够,请参阅下一段。

另一个需要牢记的是,请持续检查你的模型是处于欠拟合还是过拟合状态。如果训练和测试损失之间存在较大差距,你可能需要增加数据或减少模型规模(gridwidth更重要,所以先尝试减小grid,然后是width)。这也是为什么我喜欢从简单模型开始,确保模型首先处于欠拟合状态,然后逐步扩展到"黄金地带"。

引用

@article{liu2024kan,
  title={KAN: Kolmogorov-Arnold Networks},
  author={Liu, Ziming and Wang, Yixuan and Vaidya, Sachin and Ruehle, Fabian and Halverson, James and Solja{\v{c}}i{\'c}, Marin and Hou, Thomas Y and Tegmark, Max},
  journal={arXiv preprint arXiv:2404.19756},
  year={2024}
}

联系方式

如有任何问题,请联系zmliu@mit.edu

作者说明

我要感谢所有对KAN感兴趣的人。当我设计KAN并编写代码时,我主要考虑的是数学和物理示例(规模相当小!),因此没有过多考虑效率或可重用性的优化。能够收到这种意料之外的关注,我感到非常荣幸,这远远超出了我的预期。因此,我接受任何关于代码效率和可重用性的批评,对此我深表歉意。我唯一的希望是你们能觉得model.plot()玩起来很有趣:)。

对于对科学发现和科学计算感兴趣的用户(最初的目标用户),我很高兴听到你们的应用并进行合作。这个仓库将继续主要为此目的服务,可能不会有显著的效率更新。事实上,已经有像efficientkanfouierkan这样的实现,看起来在提高效率方面很有前景。

对于专注于机器学习的用户,我必须坦诚地说,KAN可能还不是一个可以开箱即用的简单插件。需要调整超参数,并引入更多特定于你的应用的技巧。例如,GraphKAN建议KAN最好在潜在空间中使用(需要在输入后和输出前添加嵌入和解嵌入的线性层)。KANRL建议在强化学习中最好固定一些可训练参数以增加训练稳定性。

最近我被问到最多的问题是KAN是否会成为下一代大语言模型。对此我没有很好的直觉。KAN是为那些关心高精度和/或可解释性的应用而设计的。我们当然关心大语言模型的可解释性,但对于大语言模型和科学来说,可解释性可能意味着完全不同的东西。我们是否关心大语言模型的高精度?我不确定,扩展定律似乎暗示了这一点,但可能不需要太高的精度。此外,对于大语言模型和科学来说,精度也可能意味着不同的东西。这种微妙之处使得很难直接将我们论文中的结论转移到大语言模型或一般的机器学习任务中。然而,如果你喜欢这个高层次的想法(边上的可学习激活函数,或与AI互动进行科学发现),我会非常高兴。这不一定是"未来",但希望能启发并影响"许多可能的未来"。作为一个物理学家,我想传达的信息不是"KAN很棒",而更多的是"试着批判性地思考当前的架构,寻求根本不同的替代方案,这些替代方案可以做一些有趣和/或有用的事情"。

我欢迎人们对KAN持批评态度,但也希望对批评本身保持批判。实践是检验真理的唯一标准。在真正尝试并证明成功或失败之前,我们事先并不知道很多事情。我既愿意看到KAN的成功模式,也同样好奇KAN的失败模式,以更好地理解其边界。KAN和MLP无法相互取代(据我所知);它们各自在某些设置中有优势,在其他设置中有局限性。我会对一个能够包含两者并可能建议新的替代方案的理论框架感兴趣(对不起,物理学家喜欢统一理论:)。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号