KAN网络深度解析:从MLP瓶颈到可学习B样条与可解释函数拟合

📅 发布时间:2026/10/17 12:02:48
KAN网络深度解析:从MLP瓶颈到可学习B样条与可解释函数拟合
1. 先泼盆冷水KAN到底解决了什么问题这几年深度学习圈子每隔几个月就会冒出一个新架构KANKolmogorov-Arnold Network科尔莫戈罗夫-阿尔诺德网络就是其中一个热度很高的名字。我第一次读到KAN的论文时第一反应是“又来一个挑战Transformer的”——但真正把论文和后续的社区讨论看完之后我的结论完全变了KAN的野心不在于取代哪个主流大模型而是想回答一个更基础的问题——我们手里的神经网络参数到底花得值不值简单说KAN是一种把“固定激活函数”换成“可学习激活函数”的网络结构。传统MLP多层感知机把线性和非线性分开处理先做矩阵乘法再套一个固定的ReLU或者GELU。KAN直接把这两个步骤揉在一起——每一层、每一个连接上都是一条可以被训练调整的曲线。这个改动听起来不大但它把整个网络的表达方式从“线性组合固定非线性”变成了“函数叠加”模型的可解释性和拟合效率从根本上发生了变化。这篇内容适合谁看如果你正在做科学计算、符号回归、小样本拟合或者对“神经网络为什么能拟合函数”背后的数学结构感兴趣那KAN值得你花一个下午去搞明白。如果你只是为了跑大模型、做图像分类KAN短期内对你的帮助有限——它现在最大的舞台是那些“数据量不大但精度要求极高、还希望看得到模型内部逻辑”的科研场景。这篇文章我不打算堆公式而是把KAN的“为什么”和“怎么做”用工程视角拆开来讲包括我自己在复现和调参过程中碰到的坑。2. 为什么是KAN模型结构与MLP的先天瓶颈2.1 MLP的结构性短板参数浪费在哪里MLP的工作方式可以概括成一句话把输入向量通过一系列线性变换加非线性激活逐层映射到输出。这个过程有一个默认假设——每个神经元对输入的“响应形状”是固定的ReLU就是ReLU换谁都不会变。问题也出在这里。举个例子你想拟合一个复杂的物理函数比如某个材料的热导率随温度和压强变化的曲面。MLP的做法是靠多个神经元堆出不同的“台阶”再用线性加权拼出曲面。每个神经元只会贡献一段斜线想拼出光滑的曲面就得用大量神经元去逼近最终参数量变得非常大而其中很多参数只是用来做“形状微调”。用行话说MLP的表示效率在低维复杂函数面前并不高。KAN的思路是把“神经元的响应形状”本身变成可学习的。每个连接上挂一个基函数这个基函数的形状可以由训练数据决定于是网络不需要靠数量去补质量而是靠“每个零件都可以定制”来提高效率。这就像MLP是拿标准乐高砖块拼模型KAN相当于把每块砖都做成了可塑的黏土。2.2 可解释性的诉求KAN想重拾“看得懂”的模型另一个推着KAN出现的动力是深度学习目前被反复吐槽的“黑箱问题”。传统神经网络训练完之后你只能拿出一堆权重矩阵很难说清楚某个输出到底依赖输入的哪一部分。科学计算领域对这一点尤其敏感——你让一个物理学家用神经网络去拟合实验数据他除了预测结果还希望这个模型能告诉他“变量之间到底是什么关系”。KAN虽然在结构上已经不是原始定理那样简单的两层但它保留了“用加法聚合单变量函数”的骨架。这意味着训练完成后你其实能把每个输入维度对应的那条曲线单独抽出来看输入x1的贡献是一条什么形状的曲线x2的贡献是另一条什么形状的曲线它们之间没有纠缠不清的交叉耦合。这种结构上的透明性让KAN在做符号回归和公式发现时有了天然的吸引力。我拿它拟合过几个模拟的物理表达式训练结束后画出来的曲线形状和真实函数高度一致甚至能看出幂律关系大致长什么样。2.3 KAN与MLP的边界不是所有任务都适合但也要说清楚KAN不是万能的。它在处理图像、文本这种高维非结构化数据时的表现并不占优。为什么因为这类数据真正有用的特征往往是高度组合的、局部的比如图像里的边缘纹理组合天然适合卷积这类带强先验的结构。KAN把每个输入维度独立建模对高维稀疏输入并不友好。所以理解KAN的第一步是把它放在它真正擅长的位置上中低维、连续函数拟合、有可解释性需求、数据量相对有限的问题。这个定位弄清楚了后面很多设计选择就顺理成章了。3. 数学地基Kolmogorov-Arnold定理与实际落地方案3.1 用“加法组合”构建多元函数KAN的理论出处是数学里一个很有名的定理——科尔莫戈罗夫-阿尔诺德表示定理。这个定理的大意是任何一个多元连续函数都可以被拆解成一组单变量函数的叠加组合。相当于告诉你复杂的多元关系不需要用复杂的“交叉项”硬凑先单独看每个变量各自的变化规律再把它们加起来就够了。这个定理在数学上存在了很久但一直被认为是一个“存在性结论”——它告诉你一定可以这样表示却没有给出有效的构造方法而且原始定理中那些单变量函数可能非常病态、不光滑。所以在很长一段时间里它更像是一个理论上的奇观很少有人想到要把它做成实际的网络结构。KAN的共享贡献是把这个纯数学定理搬进了可训练的网络框架里用光滑的参数化函数比如样条去充当那些单变量函数然后用反向传播去学习它们。3.2 从两层推广到多层工程上的必要修正有一点需要特别说明原始的科尔莫戈罗夫-阿尔诺德定理只保证两层表示的存在性——一层内部函数、一层外部函数。但直接把这个两层结构做成网络实践效果并不好。一方面它要求的内部函数数量太多复杂度不可控另一方面原始定理的函数构建方式不够光滑直接学习会非常困难。KAN的处理方式是把这种表示“一般化”不局限于两层的嵌套结构而是扩展成多层网络每一层都是若干单变量函数之和。这样既保留了“用加法组合单变量函数”的核心灵魂又有了足够深的层次来表达更复杂的映射关系。这个改动相当于把数学定理从“理论可行”推进到了“工程可用”——它不再严格遵循定理的证明框架而是借用定理的直觉来设计一个可学习的函数逼近器。3.3 逼近能力的来源为什么这样就能拟合复杂函数有些人会有疑惑既然最终还是靠“一堆单变量函数的加法”来拟合它凭什么比MLP更强关键在于逼近方式不同。MLP是在输入空间的每个区域里分别放一个线性响应靠分段线性来逼近——逼近精度靠的是增加分段数量而KAN是在每个维度上直接拟合变量之间的非线性关系逼近精度靠的是让单变量函数本身足够贴近真实的边际响应。你可以这样理解MLP是拿一堆短直线去描一条曲线线段越多越像KAN是手里拿了一把可弯曲的曲线尺每一段都直接弯成目标形状。当目标函数本身是光滑的、各变量关系可以解耦的时候KAN的逼近效率会明显更高。这也是为什么它最初在符号回归和偏微分方程拟合任务上表现亮眼——这些任务里的目标函数通常恰恰满足“可解耦、光滑”这两个条件。4. KAN的工作机制从可学习激活函数到B样条4.1 把激活函数从“固定值”变成“可学习参数”KAN最核心的结构改动是把MLP中“激活函数在下权重在上”的设计换成了“激活函数作为边上的权重”。在KAN中每一条边都对应一个一元函数这个函数决定了信号从哪个神经元传到下一个神经元时该怎么被变换。整个网络的前向传播就是一组“函数嵌套函数”的过程。这样设计的好处很直接网络不再需要依靠离散神经元的堆叠来获得非线性表达力每一条边上都已经具备非线性变换能力。理论上一层的KAN就可能表达出MLP很多层才能刻画的函数复杂度。这在低维函数拟合里极其有利因为每增加一个参数都直接用于改善函数形状的拟合而不是花在创建新的线性分段上。4.2 为什么选B样条光滑性、局部性与计算可控性KAN里最常用的可学习函数参数化手段是B样条。样条的本质是“分段的多项式”段与段之间在节点处保证一定的光滑性。选择B样条有三个很实际的理由。第一B样条天然光滑这满足了科学计算中对连续性的要求。你可以指定它的阶数比如三次样条保证函数本身及导数都连续不会像ReLU网络那样产生不光滑的折点。第二B样条有局部性。修改某个节点的系数只会影响该节点附近一小段区域内的函数形状不会导致全局函数剧烈变化。这意味着在训练中更新参数时网络具备天然的“局部修正”能力不会像全连接权重那样改一个值影响全盘。第三B样条的计算复杂度可控而且可以方便地进行网格加密。初始用一个稀疏的网格训练到一定程度后可以插值细化在不改变当前函数形状的前提下增加节点从而逐步提高拟合精度。这种“由粗到精”的机制是MLP完全没有的操作维度。4.3 网格扩展KAN特有的“越训越细”能力网格扩展是KAN区别于传统神经网络的一个非常有工程价值的设计。你在MLP里想提高模型精度通常只能通过增加宽度、深度、调loss权重这些常规手段。但在KAN里你可以先用少节点样条快速训练然后增加样条网格节点数用旧的节点值对新的密集节点进行插值再继续训练。这个过程可以反复进行。每次细化之后函数形状没有跳变只是有了更多自由度去刻画细节。我在模拟数据上验证过把一个拟合函数的网格从5个节点逐步扩展到50个节点最后的误差下降了大约一个数量级而且训练过程非常稳定没有出现发散。这个特性在传统MLP里几乎不可想象。4.4 权重初始化与残差结构的注意事项当然KAN的实际实现里不只有样条还要考虑怎么做一个“残差”连接。社区比较通用的做法是把每个可学习激活函数设计成一个“样条部分”加一个“线性残差部分”。线性残差负责保证初始训练稳定样条部分负责提供丰富的非线性修正。这样可以避免网络在随机初始化时产生不稳定的函数形状。从工程角度实现一个标准的KAN层需要的输入输出张量形状是(B, in_dim) 输入经过每个边上的B样条计算后汇总到 (B, out_dim)。其中每个边上的样条系数是一个 (grid_size order - 1) 长度的向量。这样前向计算的量级清晰可见总参数量大约是 in_dim × out_dim × knots相比MLP的同体量结构参数量并没有想象中那么大。5. KAN与MLP的架构差异一张表看懂取舍5.1 核心差异一览对比维度传统MLPKAN非线性来源固定激活函数ReLU、GELU等边上可学习的B样条函数权重形式标量权重矩阵单变量函数样条参数表达单元神经元叠加函数嵌套与加法局部可调性差权重全局影响好样条节点局部影响可解释性弱黑箱中可输出单变量贡献曲线计算开销低、适合GPU批量矩阵计算高、样条插值计算复杂高维数据适配好批量矩阵优化成熟一般逐维度函数计算分散精度提升手段调宽度、深度、正则网格细化、增密样条节点看到这张表很多人会立刻注意到计算开销的问题。这也是KAN目前在落地时最大的障碍B样条插值的实现很难完全等价成纯矩阵乘法这意味着你没法像MLP那样简单地把整个层铺到GPU上进行大规模并行。社区里有很多尝试优化KAN计算的工程方案比如把大量样条插值改写成稀疏矩阵运算但目前的效率仍然不能和优化了几十年的卷积/全连接内核相提并论。5.2 参数量去哪了同等规模下的效率对比我拿一个四层的KAN和四层的MLP做了同宽度模拟对比拟合目标是一个带交叉项的非线性函数。结果很容易看出两者思路的差别MLP的隐层宽度到64个神经元之后继续加宽效果逐渐减弱呈现出明显的边际递减而KAN在样条节点数从5提到20的过程中误差一直在稳定下降。这不是说KAN比MLP永远好而是说在特定的函数类上它的参数分配策略确实更高效。但要注意随着KAN网络的层数和每层宽度加深训练的显存占用和单步耗时也会显著提升。特别是样条参数梯度需要跨节点做复杂的链式反向传播如果网格规模比较大训练一次的成本往往比同参数量MLP要高出不少。所以在资源有限或需要快速迭代原型时KAN不一定是最优选择。6. KAN实操笔记超参数、训练技巧与踩坑实录6.1 实现选择与工程准备从哪入手最省事如果你也想动手试KAN我建议从成熟的公开实现开始而不是自己从零写B样条插值。目前学术界github上已经有若干广泛使用的KAN实现它们的核心差异主要在样条网格管理方式上有的用固定网格有的支持自适应网格。选一个维护活跃、star数较多的库先跑通最简单的回归demo再逐步替换成你自己的数据。工程环境上只需要PyTorch和基本的科学计算库就够了。CPU上跑小规模demo也能跑但任何超过几万样本的实验都建议用GPU。KAN的前向计算虽然不能完全发挥GPU的矩阵并行优势但反向传播仍然依赖自动微分显卡至少能让训练时间缩短一个数量级。这里补充一个基础概念B样条阶数。KAN实现里常见的order参数指的是样条多项式的最高次数默认一般是3也就是三次样条。阶数越高函数越光滑但计算量也越大而且对极端值的敏感性也会增加。新手第一次跑建议就用默认值不要一上来就调高阶。6.2 核心超参数的经验取值网格、宽度与激活函数数在KAN里最关键的几个超参数是网络宽度每层神经元数、层数深度、每个边上样条函数的网格节点数以及样条阶数。我的实践建议是第一个版本用 2~3 层、每层宽度 5~10 开始网格节点设 5 到 10。这个配置足够拟合大多数常规回归数据。如果拟合不够精细先不要急着加深网络优先增加网格节点数。网格细化带来的精度提升往往比加深网络更直接。样条阶数保持 3除非你有明确的光滑性需求或者数据本身噪声很大才考虑降到 2。输出层建议不加激活函数保持回归输出的原始量纲。6.3 训练稳定性的个人心得学习率与损失函数的坑KAN训练中最让我意外的一点是它对学习率极其敏感。同样是Adam优化器在MLP上学习率设为1e-3可能运行良好但放到KAN上很快就会出现震荡甚至发散。我自己的实测经验是第一轮训练先设到1e-4甚至更低观察loss曲线稳定后再通过学习率预热逐步提高。另外一个值得注意的点样条参数需要适当的正则化。如果发现验证集误差在训练若干轮之后不降反升往往是因为样条函数过度扭曲了。加一点L2正则到样条系数上或者限制网格函数的二阶导数幅度都能有效抑制过拟合。如果你用纯MSE loss训练KAN效果可能不那么理想考虑加个小的正则项会明显更稳。7. 什么时候该用KAN场景选择与组合思路7.1 适合KAN的场景小样本、连续、可解释综合前面的所有分析我对KAN的定位是这样的它是一个“科学计算增强型”的网络结构而不是一个通用的视觉或文本模型。适合它的场景有几个典型特征输入维度不高比如十个以内甚至三五个变量。目标函数是连续的各变量之间有一定的可解耦性。数据量不算大几千条样本已经是常态。你希望模型训练完之后可以分析每个输入变量的独立贡献。精度要求高传统MLP需要很多参数才能逼近的问题。这类场景的研究者比如做材料、物理、生物数据分析的人会从KAN里获得比通用神经网络大得多的收益。这也是为什么KAN迅速在科学计算社区里传播开来的原因——它天然服务于“从数据中寻找规律”这件事。7.2 不适合KAN的场景高维、非结构化、大规模与上面相反如果你处理的是高维稀疏特征、图像像素、文本token、推荐系统的亿级特征KAN现阶段很难直接应用。逐维度加函数的策略在高维下有两个致命问题一是计算量随维度增长非常快二是不具备卷积或注意力机制对局部组合特征的先验提取能力。社区里有一些人尝试把KAN嵌入到Transformer的FFN模块里或者把注意力机制改造为类KAN的形式但要记住这类组合实验的风险远高于收益除非你精力非常充沛、纯粹想探索边界否则还是建议在经典任务上用经典架构在经典架构确实无法解决的精度难题上再引入KAN。7.3 混合架构的想象空间用KAN做“关键路径”如果你确实想把KAN用在更大的系统里我建议采取混合的思路不要把整个网络换成KAN而是把KAN放在系统的关键路径上。比如在回归问题中先用传统网络做一个粗粒度特征提取再用KAN对最终回归输出进行精细的标定或者在物理信息驱动网络中用KAN替代部分控制方程的代理模型这样既能保住整体架构的并行效率又能在关键环节获得KAN的可解释性和拟合精度。这个策略我现在用下来比“全盘替换”要稳妥得多。7.4 关于KAN未来扩展的个人判断从发展节奏来看KAN引发的讨论还在持续热度不减。我最看好的两个方向是一个是把KAN与符号回归结合形成“半自动公式发现”的工具另一个是研究更高效的样条并行计算方式把KAN的成本降下来。虽然目前KAN的高算力消耗是一个硬伤但随着专用算子和GPU端优化的推进我认为它在科学计算领域的实用价值会进一步提升。8. 聊聊我自己的实操体会从判断一个网络架构是否值得关注我的标准从来不是它能不能造出更大的榜单数字而是它能不能在你面对真实数据时给出一个“更好的角度”去理解问题。KAN至少做到了这一点它逼着你重新思考神经网络里的非线性到底应该放在哪里、以什么形式存在。甚至可以说就算你最后不选择KAN作为实际模型仅仅通过理解它的设计思路也会让你对MLP的利弊有更清晰的认识。如果让我给一个最直接的尝试建议拿一个你手头已用MLP拟合过的回归数据换成KAN跑一遍保持同样的数据预处理和评估指标。你不需要一开始就追求精度超越只要观察两个东西——一是KAN用多少参数达到相近的精度二是训练结束之后画出来的单变量贡献曲线是否比权重矩阵更有说服力。这两个观察点会告诉你KAN的“为什么”值不值得继续深挖。我自己的感受是第二次实验之后我对神经网络的理解方式确实变了不少。