KAN网络最全解析——比肩MLP和Transformer?

1 基本思路
1.1 MLP与Spline的优缺点
多层感知器 (MLP)是深度学习的基础理论模块,是目前可用于逼近非线性函数的默认模型,其表征能力已由通用逼近定理证明。但MLP也有明显的缺点,例如在 Transformer中,MLP 的参数量巨大,且通常不具备可解释性。
为了提升表征能力,MIT提出了KAN。KAN本质上是样条(Spline)曲线和 MLP 的组合,吸收了两者的优点。即
KAN = MLP + Spline
在数学中,样条曲线是由多项式分段定义的函数。一般的Spline可以是特定区间的3阶多项式。在插值问题中,样条插值通常优于多项式插值,因为即使使用低次多项式,也能产生类似的精度结果,同时避免了高次多项式的Runge's phenomenon(在一组等距插值点上使用高次多项式进行多项式插值时出现的区间边缘振荡问题)。


1.2 Kolmogorov-Arnold表示定理
Vladimir Arnold与 Andrey Kolmogorov证明了实分析中的如下表示定理:
如果f是多元连续函数,则f可以写成有限数量的单变量连续函数的两层嵌套叠加。其数学表达式就是

该定理解决了希尔伯特第十三问题的一个更受约束但更一般的形式。在数学上,Φq称外部函数(outer functions),Φq,p称为内部函数(inner functions)。
这表明在实数域上,唯一真正的多元函数是求和,因为所有其他函数都可以使用单变量函数求和来表征。
换个形象的说法,就是你家里做个复杂的事(包含多个任务),你爸你妈和你可以分别干活然后汇总,并不需要三个人同时忙一个任务。
顺带八卦下,Vladimir 是位前苏联神童, Andrey则是他的导师。
2 KAN架构与缩放
2.1 KAN架构
KAN的架构设计来自一个数学问题:对一个由输入输出对 {xi, yi} 组成的有监督学习任务,寻找函数f 使得所有数据点的 yi≈ f (xi)。其核心在于找到合适的单变量函数 Φq,p(外部函数)和 Φq(内部函数)。
在KAN中,使用B-spline(B样条)来构建。B-spline是基础样条(Basic Spline)的缩写。
对于B-spline,函数在其定义域内、在结点(Knot)都具有相同的连续性。其多项式表达可由Cox-de Boor 递推公式表达:

例如KA定理的内部函数可以定义为带有参数的矩阵计算。矩阵中的每个元素事实上是一个函数或算子。其中KAN层可以定义为

那么根据KA定理,理论上只要2个KAN层就可以充分表征实数域的各类有监督学习任务。2层的KAN中,激活函数放置在边缘而不是节点上(在节点上进行简单求和),并且2层中间有2n+1个变量。当然为了保证数值逼近的精度,实际设计中可以构建2层以上或者任意层数的KAN。

2层KAN的结构(作者团队修改自MIT)
更为一般的的KAN表征形式是:

其中Φ l是第l个KAN层所对应的函数矩阵(B-spline函数矩阵),x为输入矩阵。
最简的KAN可以写为:
由于B-spline函数具备很好的可导性,因此在这里可以使用大家习惯的反向传播(BP)方法来进行KAN的训练。
2.2 架构细节
为了确保KAN实用,MIT团队还做了一些关键优化。
包括:
1)残差激活函数
使用一个基础(basis)函数 b(x)(类似于残差连接),使激活函数 Φ (x) 是基础函数 b(x) 和样条函数的和。


2)初始化方式
每个激活函数都被初始化为 spline(x) ≈ 0^2。 而w根据MLP 中的线性层的初始化方式进行。
3)Spline网格的更新
据输入激活动态更新每个网格,以解决Spline在有界区域上定义但激活值在训练期间可能超出出固定区域的问题。
2.3 KAN的逼近与神经缩放
关于KAN缩放的基本观点浓缩为以下2点:
1)2层的KAN表征可能是非平滑的,更深的KAN表征可以获得更平滑的逼近。
2)有限维度的KAN就可以很好的逼近样本函数。
下面我们来看看缩放定律:
神经缩放定律是测试损失(Loss)随着模型参数的增加而减小的现象,即 ℓ ∝ N_−α_,其中 ℓ 是测试 RMSE(均方根差),N 是参数数量,α 是缩放指数。也就是说,参数量越大,误差越小(精度越高)。
由于数据域的网格可以以任意的刻度进行细粒度化。因此B-spline曲线可以任意精确的达到(逼近)目标函数,而且这一优势被KAN继承了。
相比之下,MLP 没有“细粒度”的概念。(MLP一般不按数据分区进行训练)
对于 KAN,可以先训练一个参数较少的 KAN,然后通过使Spline网格粒度更细,使其扩展到参数较多的 KAN,这一方式降低了复杂度。
当然这一点可能也有一些问题,因为实际的AI芯片中并未对粒度计算提供太多的设计,激活函数个数越多,区间越细事实上会造成更大的存储带宽瓶颈。
3 KAN的可解释性
在解释之前,先通过稀疏正则化对KAN进行训练,然后剪枝。剪枝后的 KAN更容易解释。
MIT团队给出了解释KAN的基本流程:

KAN的解释流程
1)稀疏化(Sparsification)(预处理)
对于KAN来说,
a) 线性权重被可学习的激活函数取代,因此需定义这些激活函数的 L1 范数,激活函数的 L1 范数定义为其 Np个输入的平均幅度;
b) 单独 L1范数 不足以实现 KAN 的稀疏化;还需要额外的熵正则化。

2)可视化(Visualization)
将激活函数 Φl,i,j的透明度设置为与 tanh(βAl,i,j) 成正比,其中 β = 3 。小幅度的函数被忽略以聚焦重要函数。
3)剪枝(Pruning)
经过稀疏化惩罚训练后,一般还需要将网络修剪成更小的子网。在节点级别对 KAN 进行稀疏化,所有不重要的神经元都被修剪。
4)符号化(Symbolification)
如果猜测某些激活函数实际上是符号函数(例如 cos 或 log),则提供一个接口将其设置为指定的符号形式,例如fix_symbolic(l,i,j,f) 可以设置 (l , i, j) 激活为 f 。从样本中获得预激活(Preactivation) x 和后激活(Postactivation) y,并拟合仿射参数 (a, b, c, d),使得 y ≈ cf (ax + b) + d。这里的拟合可通过 a、b 的迭代搜索和线性回归来完成。
4 小结
4.1 KAN的发展空间
KAN还有进一步优化的巨大空间,包括:
1) 准确性。KAN的精度优于传统MLP结构。一些替代方案有可能进一步提高准确性,例如,Spline激活函数可能被径向基函数或其他核函数替换,或者使用自适应网格策略。
2) 计算效率。 目前KAN 计算效率较低的主要原因是不同的激活函数进行批量计算(通过同一函数处理大量数据)。如果通过将激活函数分组为多个组,可以在全部相同(MLP)和不同(KAN)的激活函数之间进行插值,组内的成员共享相同的激活函数。

KAN准确性优于MLP
4.2 KAN的瓶颈
目前看,尽管KAN有很多优点,但其的最大瓶颈在于训练速度慢。根据MIT团队提供的信息,在参数数量相同的情况下,KAN 通常比 MLP 慢 10 倍。
由于训练算力限制,短期看KAN还是很难代替MLP的。如果想要获得类似Transformer架构的类似效果,走的路会更长,训练代价也要大很多。
长远看KAN可能逐渐在数学物理研究中广泛采用,然后逐渐进入主流舞台。
总体来说KAN的作者构建了一个非常好的基于KA定理的模型框架体系,并给出了足够的理论支撑,该文章估计会成为一代经典。
最后:
如果你想要进一步了解更多的相关知识,可以关注下面公众号联系~会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真......希望能帮到你!

相关文章:
KAN网络最全解析——比肩MLP和Transformer?
1 基本思路 1.1 MLP与Spline的优缺点 多层感知器 (MLP)是深度学习的基础理论模块,是目前可用于逼近非线性函数的默认模型,其表征能力已由通用逼近定理证明。但MLP也有明显的缺点,例如在 Transformer中,MLP 的参数量巨大…...
ASP.NET学生信息管理系统
摘 要 本文介绍了在ASP.net环境下采用“自上而下地总体规划,自下而上地应用开发”的策略开发一个管理信息系统的过程。通过分析某一学校学生管理的不足,创建了一套行之有效的计算机管理学生的方案。文章介绍了学生管理信息系统的系统分析部分,…...
图片改大小尺寸怎么改?几招教你搞定图片修改
在社交媒体平台上发布图片时,调整图片的尺寸大小可以确保图片适合平台的要求,不同的社交媒体平台可能对图片的尺寸有不同的要求,通过调整图片尺寸,可以更加完美的展现出来,那么有没有比较简单的图片改大小的方法呢&…...
Scala编程入门:从零开始的完整教程
目录 引言环境准备创建第一个Scala项目基本语法高阶概念进阶资源结语 引言 Scala是一种强大的、静态类型的、多范式编程语言,它结合了面向对象和函数式编程的特点。本教程将指导您如何从零开始学习Scala,并搭建一个简单的开发环境。让我们开始探索Scala…...
Proxmox VE 8 SDN创建VLAN隔离用户网络
作者:田逸(formyz) 在上一篇文章中,我们用SDN的Simple对租户(用户)网络实现了隔离功能,但它有个限制,仅仅能在单个物理节点上进行通信,而不能跨越物理节点(除…...
API低代码平台介绍3-异构数据源的数据查询功能
异构数据源的数据查询功能 在上一篇文章中我们通过API平台定义了一个最基本的数据查询接口,本篇文章我们将上升难度,在原有接口的基础上,实现在MySQL数据库和Oracle数据库同时进行数据查询。 什么场景会需要同时对异构数据源进行查询&…...
【Linux】-网络请求和下载、端口[6]
目录 一、网络请求和下载 1、ping命令 2、wget命令 3、curl命令 二、端口 1、虚拟端口 2、查看端口占用 一、网络请求和下载 1、ping命令 可以通过ping命令,检查指定的网络服务器是否可联通状态 语法:ping [ -c num ] ip或主机名 选项&…...
Github2024-05-10开日报 Top10
根据Github Trendings的统计,今日(2024-05-10统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4TypeScript项目4JavaScript项目1Lua项目1C项目1Rust项目1Dart项目1 RustDesk: 用Rust编写的开源远…...
2016-2021年全国范围的2.5m分辨率的建筑屋顶数据
一、论文介绍 摘要:大规模且多年的建筑屋顶面积(BRA)地图对于解决政策决策和可持续发展至关重要。此外,作为人类活动的细粒度指标,BRA可以为城市规划和能源模型提供帮助,为人类福祉带来好处。然而…...
Gitea 上传用户签名
在 Gitea 的用户管理部分,有一个 SSH 和 GPG 的选项。 单击这个选项,可以在选项上添加 Key。 Key 的来源 如是 Windows 的用户,可以选择 Kleopatra 这个软件。 通过这个软件生成的 Key 的界面中有一个导出功能。 单击这个导出,…...
【原创】springboot+mysql物资库存管理系统设计与实现
个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…...
vulnhub靶场之FunBox-5
一.环境搭建 1.靶场描述 Lets separate the script-kids from script-teenies.Hint: The first impression is not always the right one!If you need hints, call me on twitter: 0815R2d2 Have fun...This works better with VirtualBox rather than VMwareThis works bett…...
1分钟搞定Pandas DataFrame创建与索引
1.DataFrame介绍 DataFrame 是一个【表格型】的数据结构,可以看作是【由Series组成的字典】(共用同一个索引)。DataFrame 由按一定顺序排列的多列数据组成。设计初衷是将 Series 的使用场景从一维扩展到多维。DataFrame 既有行索引ÿ…...
【贪心算法】哈夫曼编码Python实现
文章目录 [toc]哈夫曼编码不同编码方式对比前缀码构造哈夫曼编码哈夫曼算法的正确性贪心选择性质证明 最优子结构性质证明 总结 Python实现时间复杂性 哈夫曼编码 哈夫曼编码是广泛用于数据文件压缩的十分有效的编码方法,其压缩率通常为 20 % 20\% 20%到 90 % 90\%…...
【RAG 博客】RAG 应用中的 Routing
Blog:Routing in RAG-Driven Applications ⭐⭐⭐⭐ 根据用户的查询意图,在 RAG 程序内部使用 “Routing the control flow” 可以帮助我们构建更实用强大的 RAG 程序。路由模块的关键实现就是一个 Router,它根据 user query 的查询意图&…...
鸿蒙ArkUI:【编程范式:命令式->声明式】
命令式 简单讲就是需要开发用代码一步一步进行布局,这个过程需要开发全程参与。 开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 Objective-C ObjectiveC 复制代码 UIView *cardView …...
【练习2】
1.汽水瓶 ps:注意涉及多个输入,我就说怎么老不对,无语~ #include <cmath> #include <iostream> using namespace std;int main() {int n;int num,flag,kp,temp;while (cin>>n) {flag1;num0;temp0;kpn;while (flag1) {if(kp<2){if(…...
oracle 新_多种块大小的支持9i
oracle 新_多种块大小的支持 conn sys/sys as sysdba SHOW PARAMETER CACHE ALTER SYSTEM SET DB_CACHE_SIZE16M; ALTER SYSTEM SET DB_4K_CACHE_SIZE8M; CREATE TABLESPACE K4 DATAFILE F:\ORACLE\ORADATA\ZL9\K4.DBF SIZE 2M BLOCKSIZE 4K; CREATE TABLE SCOTT.A1 TABLESP…...
Collections工具类
类java.util.Collections提供了对Set、List、Map进行排序、填充、查找元素的辅助方法。 方法名说明void sort(List)对List容器内的元素排序,排序规则是升序void shuffle(List)对List容器内的元素进行随机排列void reverse(List)对List容器内的元素进行逆序排列void…...
java-函数式编程-jdk
背景 函数式接口很简单,但是不是每一个函数式接口都需要我们自己来写jdk 根据 有无参数,有无返回值,参数的个数和类型,返回值的类型 提前定义了一些通用的函数式接口 IntPredicate 参数:有一个,类型是int类…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
