从数学定理到物理发现:PyKAN实现拉格朗日神经网络的完整路径
【免费下载链接】pykan Kolmogorov Arnold Networks 项目地址: https://gitcode.com/GitHub_Trending/pyk/pykan
Kolmogorov-Arnold网络(KAN)作为一种基于数学理论的新型神经网络架构,正在改变传统机器学习的建模范式。本文将以拉格朗日力学建模为例,详细展示如何通过PyKAN将学术论文中的理论转化为可执行代码,涵盖从模型构建到物理规律发现的全流程。
理论基础:从数学定理到神经网络架构
KAN的理论基础源于Kolmogorov-Arnold表示定理(KART),该定理证明任何多元连续函数都可表示为一元函数的有限组合与加法运算。其数学表达式为:
[ f(x) = \sum_{q=1}^{2n+1}\Phi_q(\sum_{p=1}^n \phi_{q,p}(x_p)) ]
PyKAN将这一理论工程化为可训练的神经网络,核心实现位于kan/KANLayer.py。与传统多层感知机(MLP)不同,KAN在网络层间引入了自适应基函数,通过kan/spline.py实现的样条插值技术,使模型能够自动学习输入空间的非线性表示。
初始化KAN模型的基础代码如下:
from kan import KAN
# 创建2输入1输出的KAN模型,包含5个隐藏神经元
model = KAN(width=[2,5,1], grid=5, k=3, seed=0)
初始化后的KAN网络结构可通过model.plot()可视化,显示各层神经元间的连接权重分布:
案例实现:拉格朗日力学系统建模
物理问题定义
拉格朗日力学通过系统能量描述运动规律,核心方程为:
[ \frac{d}{dt}\left(\frac{\partial L}{\partial \dot{q}}\right) - \frac{\partial L}{\partial q} = 0 ]
其中( L = T - V )为拉格朗日量(动能减势能)。本案例以相对论质量问题为研究对象,其解析解为:
[ qdd = (1 - qd^2)^{3/2} ]
完整实现代码位于docs/Physics/Physics_1_Lagrangian.rst,数据生成部分关键代码:
n_sample = 10000
q = torch.rand(size=(n_sample,1)) * 4 - 2 # 位置
qd = torch.rand(size=(n_sample,1)) * 2 - 1 # 速度
qdd = (1 - qd**2)**(3/2) # 加速度(理论解)
x = torch.cat([q, qd], dim=1) # 输入特征
模型构建与训练
使用PyKAN的编译器模块kan/compiler.py构建符号化模型:
from kan.compiler import kanpiler
from sympy import symbols
# 定义输入变量和初始表达式
symbol_x, symbol_vx = symbols('x v_x')
expr = symbol_vx ** 2 # 初始假设动能项
model = kanpiler(input_variables, expr, grid=20)
训练过程采用拉格朗日方程约束,通过自动微分计算二阶导数:
def closure():
optimizer.zero_grad()
jacobian = batch_jacobian(model, x, create_graph=True)
hessian = batch_hessian(model, x, create_graph=True)
# 拉格朗日方程求解加速度
Lqdqd = hessian[:,d:,d:]
Lq = jacobian[:,:d]
qdd_pred = torch.einsum('ijk,ik->ij', torch.linalg.inv(Lqdqd), Lq)
loss = torch.mean((qdd - qdd_pred)**2)
loss.backward()
return loss
经过20步LBFGS优化后,模型损失下降至5.03e-05:
符号化提取与物理规律发现
训练完成后,通过auto_symbolic()方法从神经网络中提取解析表达式:
model.auto_symbolic(lib=['x','x^2','sqrt','sin','exp'])
formula = model.symbolic_formula()[0][0]
最终得到的符号化结果与理论解高度吻合:
[ 1.19 - 1.08 \sqrt{1 - 1.0 x_{1}^{2}} ]
该结果验证了KAN从数据中发现物理规律的能力,完整推导过程可参考docs/Physics/Physics_1_Lagrangian.rst。
模型优化技术:网格细化与稀疏正则化
网格自适应优化
KAN通过网格细化(Grid Refinement)技术提升拟合精度。在函数拟合案例中,逐步将网格数量从3增加到100,训练损失呈现阶梯式下降:
grids = np.array([3,10,20,50,100])
for i in range(grids.shape[0]):
if i != 0:
model = model.refine(grids[i]) # 网格细化
model.fit(dataset, steps=200)
稀疏性正则化
通过L1正则化修剪冗余连接,提高模型可解释性:
model.train(dataset, opt="LBFGS", steps=20, lamb=0.01, lamb_entropy=10.)
model.prune() # 修剪权重小于阈值的连接
修剪后的模型结构更加稀疏,同时保持预测精度:
学术应用扩展
PyKAN在科学计算领域有广泛应用,社区贡献的案例包括:
-
物理知情KAN:结合领域知识的模型构建,案例见docs/Community/Community_1_physics_informed_kan.rst
-
蛋白质序列分类:生物信息学应用,使用docs/Community/Community_2_protein_sequence_classification.rst
-
偏微分方程求解:高维PDE数值解法,实现代码位于docs/Example/Example_6_PDE_interpretation.rst
总结与学术价值
PyKAN通过将Kolmogorov-Arnold定理与神经网络结合,为科学发现提供了全新范式:
-
可解释性突破:相比黑箱神经网络,KAN能输出符号化数学表达式,符合科学研究可解释性要求
-
数据效率提升:通过物理先验知识融入,降低对标注数据的依赖,适合小样本科学问题
-
跨学科适用性:已在力学、电磁学、量子物理等领域验证有效性,相关案例见docs/Physics/目录
研究者可通过hellokan.ipynb快速入门,或参考docs/index.rst获取完整API文档。该项目源码托管于https://gitcode.com/GitHub_Trending/pyk/pykan,欢迎学术合作与贡献。
【免费下载链接】pykan Kolmogorov Arnold Networks 项目地址: https://gitcode.com/GitHub_Trending/pyk/pykan
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考







