model.train() 已更改为 model.fit()./tutorials 中的笔记本可在 CPU 上运行,所以请参考这些教程了解更新/新功能。文档尚未更新,但很快会更新。对于 pypi 用户,这是最新版本 0.2.1。
新功能包括(稍后会有文档):
这是论文"KAN: Kolmogorov-Arnold Networks"的 GitHub 仓库。文档可以在这里找到。这里是作者对当前 KAN 热潮的回应。
Kolmogorov-Arnold 网络(KAN)是多层感知器(MLP)的有前景的替代方案。KAN 和 MLP 一样具有坚实的数学基础:MLP 基于通用近似定理,而 KAN 基于 Kolmogorov-Arnold 表示定理。KAN 和 MLP 是对偶的:KAN 在边上有激活函数, 而 MLP 在节点上有激活函数。这个简单的改变使 KAN 在模型精度和可解释性方面比 MLP 更好(有时甚至好得多!)。KAN 的简介可以在这里找到。
<img width="1163" alt="mlp_kan_compare" src="https://github.com/KindXiaoming/pykan/assets/23551623/695adc2d-0d0b-4e4b-bcff-db2c8070f841">KAN 的扩展速度比 MLP 更快。KAN 以更少的参数实现了比 MLP 更好的精度。
如果你需要高精度,请设置 torch.set_default_dtype(torch.float64)。
示例 1:拟合符号公式 <img width="1824" alt="Screenshot 2024-04-30 at 10 55 30" src="https://github.com/KindXiaoming/pykan/assets/23551623/e1fc3dcc-c1f6-49d5-b58e-79ff7b98a49b">
示例 2:拟合特殊函数 <img width="1544" alt="Screenshot 2024-04-30 at 11 07 20" src="https://github.com/KindXiaoming/pykan/assets/23551623/b2124337-cabf-4e00-9690-938e84058a91">
示例 3:PDE 求解 <img width="1665" alt="Screenshot 2024-04-30 at 10 57 25" src="https://github.com/KindXiaoming/pykan/assets/23551623/5da94412-c409-45d1-9a60-9086e11d6ccc">
示例 4:避免灾难性遗忘 <img width="1652" alt="Screenshot 2024-04-30 at 11 04 36" src="https://github.com/KindXiaoming/pykan/assets/23551623/57d81de6-7cff-4e55-b8f9-c4768ace2c77">
KAN 可以直观地可视化。KAN 提供了 MLP 无法提供的可解释性和交互性。我们可以使用 KAN 潜在地发现新的科学定律。
示例 1:符号公式 <img width="1510" alt="Screenshot 2024-04-30 at 11 04 56" src="https://github.com/KindXiaoming/pykan/assets/23551623/3cfd1ca2-cd3e-4396-845e-ef8f3a7c55ef">
示例 2:发现结的数学定律 <img width="1443" alt="Screenshot 2024-04-30 at 11 05 25" src="https://github.com/KindXiaoming/pykan/assets/23551623/80451ac2-c5fd-45b9-89a7-1637ba8145af">
示例 3:发现安德森局域化的物理定律 <img width="1295" alt="Screenshot 2024-04-30 at 11 05 53" src="https://github.com/KindXiaoming/pykan/assets/23551623/8ee507a0-d194-44a9-8837-15d7f5984301">
示例 4:三层 KAN 的训练
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。在某些情况下它们可能是正相关的,但在其他情况下可能会显示一些权衡。所以最好不要贪心,一次只瞄准一个目标。然而,如果你有强烈的理由相信剪枝(可解释性)也可以帮助提高精度,你可能想提前计划,即使你的最终目标是精度,你也想首先推动可解释性。
一旦你得到一个相当好的结果,尝试增加数据大小并进行最后一次运行,这应该会给你更好的结果! 免责声明:首先尝试最简单的方法是物理学家的思维方式,这可能带有个人偏见,但我发现这种思维方式相当有效,能让我很好地控制事物。此外,我倾向于先选择小数据集的原因是为了在调试阶段获得更快的反馈(毕竟我的初始实现速度很慢)。隐含的假设是小数据集在质量上与大数据集行为相似,这在一般情况下不一定成立,但在我尝试过的小规模问题中通常是成立的。要了解你的数据是否足够,请参阅下一段。
另一个需要牢记的是,请持续检查你的模型是处于欠拟合还是过拟合状态。如果训练和测试损失之间存在较大差距,你可能需要增加数据或减少模型规模(grid比width更重要,所以先尝试减小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()玩起来很有趣:)。
对于对科学发现和科学计算感兴趣的用户(最初的目标用户),我很高兴听到你们的应用并进行合作。这个仓库将继续主要为此目的服务,可能不会有显著的效率更新。事实上,已经有像efficientkan或fouierkan这样的实现,看起来在提高效率方面很有前景。
对于专注于机器学习的用户,我必须坦诚地说,KAN可能还不是一个可以开箱即用的简单插件。需要调整超参数,并引入更多特定于你的应用的技巧。例如,GraphKAN建议KAN最好在潜在空间中使用(需要在输入后和输出前添加嵌入和解嵌入的线性层)。KANRL建议在强化学习中最好固定一些可训练参数以增加训练稳定性。
最近我被问到最多的问题是KAN是否会成为下一代大语言模型。对此我没有很好的直觉。KAN是为那些关 心高精度和/或可解释性的应用而设计的。我们当然关心大语言模型的可解释性,但对于大语言模型和科学来说,可解释性可能意味着完全不同的东西。我们是否关心大语言模型的高精度?我不确定,扩展定律似乎暗示了这一点,但可能不需要太高的精度。此外,对于大语言模型和科学来说,精度也可能意味着不同的东西。这种微妙之处使得很难直接将我们论文中的结论转移到大语言模型或一般的机器学习任务中。然而,如果你喜欢这个高层次的想法(边上的可学习激活函数,或与AI互动进行科学发现),我会非常高兴。这不一定是"未来",但希望能启发并影响"许多可能的未来"。作为一个物理学家,我想传达的信息不是"KAN很棒",而更多的是"试着批判性地思考当前的架构,寻求根本不同的替代方案,这些替代方案可以做一些有趣和/或有用的事情"。
我欢迎人们对KAN持批评态度,但也希望对批评本身保持批判。实践是检验真理的唯一标准。在真正尝试并证明成功或失败之前,我们事先并不知道很多事情。我既愿意看到KAN的成功模式,也同样好奇KAN的失败模式,以更好地理解其边界。KAN和MLP无法相互取代(据我所知);它们各自在某些设置中有优势,在其他设置中有局限性。我会对一个能够包含两者并可能建议新的替代方案的理论框架感兴趣(对不起,物理学家喜欢统一理论:)。


最适合小白的AI自动化工作流平台
无需编码,轻松生成可复用、可变现的AI自动化工作流

大模型驱动的Excel数据处理工具
基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


AI论文写作指导平台
AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。