使用KAN模型进行未知函数拟合的技术实践
2025-05-14 14:04:58作者:姚月梅Lane
KAN(Kolmogorov-Arnold Networks)是一种新型的神经网络架构,它基于Kolmogorov-Arnold表示定理,能够有效地学习和表示复杂的非线性函数关系。本文将通过一个实际案例,详细介绍如何使用KAN模型对有限元分析数据集进行函数拟合和符号回归。
数据准备与预处理
在开始建模前,首先需要准备和预处理数据。本案例中使用的数据集来自有限元分析结果,包含3个输入特征和1个输出目标值。数据加载和分割的关键步骤如下:
- 使用pandas读取Excel格式的数据文件
- 将数据转换为NumPy数组格式
- 使用train_test_split将数据划分为训练集和测试集
- 将数据转换为PyTorch张量格式
特别需要注意的是,目标值的形状应为(N,1)而非(N,),这是一个常见的错误点。正确的处理方式是在索引时使用[:,[3]]而非[:,3],以确保维度正确。
KAN模型构建与训练
构建KAN模型时,我们选择了[3,3,1]的网络结构,即3个输入节点、3个隐藏节点和1个输出节点。训练过程分为几个关键阶段:
- 初始训练:使用较小的网格(grid=3)进行初步训练
- 网格细化:逐步增加网格精度(grids=[3,5,10]),通过initialize_from_another_model方法继承之前训练的参数
- 优化器选择:使用LBFGS优化器进行训练
- 正则化设置:设置lamb=0.0表示不使用正则化
训练过程中,我们发现使用torch.use_deterministic_algorithms(True)可以提高结果的可重复性,特别是在使用LBFGS优化器时。
符号回归与公式提取
在模型训练完成后,我们使用auto_symbolic方法自动识别各激活函数的数学表达式。提供的函数库包括:
- 多项式函数:x, x², x³, x⁴
- 超越函数:exp, log, sqrt, tanh, sin
- 其他函数:abs
自动符号回归的输出显示了每个激活函数的拟合优度(R²),大多数都达到了0.999以上的高精度。例如:
- (0,0,0)节点被识别为exp函数,R²=0.9999
- (0,0,1)节点被识别为x³函数,R²=0.99998
- (1,0,0)节点被识别为sin函数,R²=0.9971
模型验证与结果分析
为了验证模型的有效性,我们进行了以下验证步骤:
- 训练/测试损失曲线:观察RMSE随训练步骤的变化,确保没有过拟合
- 蒙特卡洛模拟:将KAN模型预测结果与原始有限元分析结果对比
- 符号公式验证:手动计算符号公式的输出,与模型预测值对比
结果显示,KAN模型能够很好地捕捉数据中的非线性关系,符号公式的预测精度与神经网络预测结果基本一致。
实践中的经验总结
- 数据维度:确保输入和输出的维度正确,特别是目标值应为二维数组
- 可重复性:设置随机种子和确定性算法可以提高结果的可重复性
- 网格细化:逐步增加网格精度可以获得更好的拟合效果
- 符号回归:auto_symbolic后的进一步训练可以优化仿射变换参数
- 工程判断:对于某些必须保留的输入特征,可能需要手动干预符号回归过程
KAN模型在函数拟合和符号回归方面展现出强大的能力,特别适用于从复杂数据中提取可解释的数学表达式。通过本案例的实践,我们验证了KAN在工程应用中的实用价值。
登录后查看全文
热门项目推荐
相关项目推荐
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
jiuwenclawJiuwenClaw 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0188- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
AtomGit城市坐标计划AtomGit 城市坐标计划开启!让开源有坐标,让城市有星火。致力于与城市合伙人共同构建并长期运营一个健康、活跃的本地开发者生态。01
awesome-zig一个关于 Zig 优秀库及资源的协作列表。Makefile00
项目优选
收起
deepin linux kernel
C
27
12
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
598
4.03 K
Ascend Extension for PyTorch
Python
440
531
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
920
768
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
368
247
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.46 K
822
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
112
168
暂无简介
Dart
844
204
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
69
21
昇腾LLM分布式训练框架
Python
130
156