全新神经网络架构KAN——本文用于学习与探索

论文地址:https://arxiv.org/pdf/2404.19756

Github:GitHub - KindXiaoming/pykan: Kolmogorov Arnold Networks

文档说明:Welcome to Kolmogorov Arnold Network (KAN) documentation! — Kolmogorov Arnold Network documentation

        本文仅用于论文学习、探讨以及应用探索,文中可能会出现理解上的错误与偏差,恳请各位看到后能够留言,我一定好好思考然后修改。

一、KAN的源头 / 思路来源 Kolmogorov-Arnold表示定理

1.1 理论概念

        KAN 网络结构的思路来自于Kolmogorov-Arnold表示定理,定理由由前苏联两位数学家Vladimir Arnold 和 Andrey Kolmogorov提出。

        定理指出,如何 f 是任意一个定义在有界域上的多变量连续函数,则函数 f 可以表示为有限数量单变量、连续函数两层嵌套加法的形式,即任何多变量连续函数都可以表示为单变量连续函数和加法运算的组合。       

 if f is a multivariate continuous function on a bounded domain, then f can be written as a finite composition of continuous functions of a single variable and the binary operation of addition

        该定理表明:真正的多元函数是一种求和,所有多元函数都可以表示为单变量函数求和的形式。从神经网络拟合任务函数(不同任务的函数维度不定,较为抽象)的角度看,这意味着对任一高维多变量函数的学习最终都可以被归约为对一组单变量函数的学习。

        补充1:Kolmogorov-Arnold定理和傅里叶级数很相似,傅里叶级数是一个连续的周期函数由谐波相关正弦函数的和生成。

        补充2:这个定理,只讲到‘两层叠加‘的结构,并没有讲到更深层次的叠加。

1.2 公式分析        

        论文中,对该定理和公式的表示如下,我们先来简单理解下(红色框由上到下)。

        第一个红框(多变量连续函数):函数 f 的定义域是一个n维的闭区间[0, 1]的笛卡尔积,值域是实数集合R。简单来讲,函数 f 接受一个n维向量作为输入,并将其映射到实数集合R中的一个数。每个维度的取值范围都是[0, 1],所以输入向量的每个分量都是在[0, 1]内取值的。

        第三个红框(两层嵌套函数):Φq 是外部函数(outer functions),Φq,p 是内部函数(inner functions)。对于内部函数,定义域是闭区间[0, 1],值域是实数集合R;对于外部函数,定义域是实数集合R,值域也是实数集合R。

        第二个红框(完整函数表示):直观看到函数 f,由两个嵌套的求和函数构成;外部函数Φq的参数是n个内部函数Φq,p的和!;整体来看 函数 f 是 (2n+1)个外部函数Φq的和。

二、对比MLP和KAN

        图1: KAN结构对标MLP,期望能作为比MLP更优的平替,因此先看一看MLP和KAN的对比。     

        KAN可学习的激活函数放在了权重上,并且是可学习的激活函数(因此KAN训练困难、收敛慢),这些一维函数被参数化为B样条(基础样条, Basic Spline, B-Spline)。这意味着每个权重参数不再是一个单一的数值,而是一个函数(个人理解)

        MLP将固定的激活函数放置在节点,也就是神经元上;而可以学习的权重在边上,权重多以多维度的参数矩阵表现。

三、KAN网络结构 + 使用

3.1 思维链路

        1. 如何将 Kolmogorov-Arnold表示定理,应用、结合到现有深度学习任务中

        简单理解,思考一般的深度学习任务,每一个深度学习任务,尤其是端到端的任务,其实就是学习到一个函数 f ,使得 f(input) = truth。

        在深度学习中,我们使用神经网络拟合任务相关的多元函数 f,而根据Kolmogorov-Arnold表示定理,这个多元函数 f 又可以被单变量函数求和表示。因此,论文作者的想法是先找到Φq 、Φq,p这两个单变量函数,因此才挖掘、设计了KAN。

        理论上,只要两个KAN层(一个表示内部函数,一个学习外部函数)就能够表征在实数域的各类有监督学习任务。两个KAN层模拟了KA表示定理

        补充:由于要学习的函数都是单变量函数,因此论文作者将每个1D的函数都参数化为Basic Spline(后面简化为B样条),具有局部B样条基函数的可学习系数,这一点对应本文章节二。

       2. KA定理和深度任务理论上可以结合,如何和现有的深层神经网络融合

        上述只是理论,两层的KAN还是太简单了,难以在实践中用光滑Spline近似or逼近任何函数,因此需要更多、更深层次的KAN网络。

        类比于现在的神经网络,当定义好了一层网络(由线性变换和非线性组成)后,就可以不断的叠加,使网络更深,学习到不同层级的特征表征等等......

        新的问题:在构建深层KAN之前,如何定义一个完整的KAN层?

        补充:2部分的内容,完全来自于原论文,基本原始翻译。

        3. 定义基础组件——KAN层

        论文中,将具有N(in)维输入和N(out)维输出的KAN层可以定义为1维函数的矩阵,公式如下:

        我的理解:一个KAN层可以表示为 [N(in),N(out)]的一个矩阵,矩阵中的每个元素是一个1D、可学习、连续函数。

3.2 KAN网络推理细节(来自论文)

        假设现在有一个L+1层的KAN复合网络,每一层的节点数是[n0, n1, · · · , nL];使用(l, j)表示第l层中的第j个神经元,使用x(l, j)表示这个神经元的值。

        再说第L层和第L+1层的联系,两层之间的神经元相互连接,共存在(nl * nl+1)个激活函数(前面讲过在KAN中每一个权重都是可学习的激活函数)。第 l 层中第 j 个神经元(l, j) 与 第 l+1 层中第 i个神经元(l + 1, i),通过激活函数连接,激活函数表示为:Φ(l, i, j)

        补充:这里和传统神经网络很像,层之间全连接

        如果想进一步计算x(L+1, j)  ,通过如下式子(很好理解):第L+1层的每一个神经元的值都由第L层的值构成(全连接),因为KAN将激活函数放置在了边上,所以来自第L层的值都会对应一个激活函数Φ(l, i, j) i = [0,1,2...,nl],每个值经过对应的激活函数处理后,简单求和就得到了x(L+1, j)

        总结:还是原来神经网络那套思想,层和层之间全连接,下一层的每一个元素都由上一层所有元素组合构成。区别在于(1) KAN将激活函数放在‘边’上,使得上一层每个元素都对应了一个激活函数。所有激活函数表现形式为矩阵,记为ΦL

 3.3 KAN网络一般推理表达

        作者给出了一张基础两层KAN网络结构 

         如图,论文中展示的两层KAN网络(由下而上),第0层(最底层)表示内部函数,变量维度由n --> 2n + 1;第1层表示外部函数,变量维度由 2n + 1 --> 1,这个‘1’ 也就是多元函数的结果,是一个实数。

        将基础两层KAN网络推广到一般形式:图示见章节二开头图1(c)和(d)

        

3.4 KAN网络优化细节 

        1. 效仿残差网络结构,在激活函数中引入偏置函数b(x)

        其中偏置函数 b(x) 就是激活函数 silu(x) :

        而spline(x) 是一组一维函数的组合。

        注意:原论文中说到可训练参数w理论上是多余的,因为它可以融入到b(x) 和 spline(x)中,但是为了更好地控制激活函数功能,因此添加。个人猜测,大概率做个类似的对比实验。

        2. 初始化方式

        每个激活函数都被初始化为 spline(x) \approx 0^{2}!这里不是很理解,具体看下图

        spline(x)的初始化,作者说的是将可训练参数通过绘制B样条曲线系数来实现按照正太分布N(0,\sigma ^{2})初始化,其中方差部分较小,通常设置为0.1(如果有读者对这个部分理解的更加深入,可以在评论区留言或者留下文章链接)

        可训练参数w,进行Xavier初始化。

        3. 更新样条曲线网格(暂时没懂,可能需要深度spline的原理)
        根据输入激活动态更新每个网格,以解决样条曲线定义在有界区域上,但激活值可以在训练过程中从固定区域演化出来的问题

四、优缺点分析

 4.1 优点

        1. 参与的运算可微,可以直接使用反向传播训练

        2. 在实际应用过程中,KAN可以可视化,提供MLP无法提供的可解释性和交互性。

        3. 拟合复杂函数,更准确

        4. KAN不会像MLP那样容易灾难性遗忘,缓解大模型的遗忘问题

4.2 缺点

        1. 维度灾难,以下结果来自GPT-3.5 + 个人理解,比较好理解

        在数学中,Spline / 样条是一种常用的插值方法,用于在给定的数据点之间生成平滑的曲线。然而,Spline样条在高维空间中存在维度灾难问题。

        维度灾难是指当数据的维度增加时,样本点之间的距离变得非常大,导致插值方法的效果变差。在Spline样条中,随着数据点的维度增加,需要更多的样本点来保持平滑性,否则曲线可能会出现过拟合的问题。

        具体来说,维度灾难问题在Spline样条中体现为以下几个方面:

        a. 数据点之间的距离增加:在高维空间中,数据点之间的距离会呈指数级增长。这意味着需要更多的样本点来捕捉数据的细节,否则插值的曲线可能会出现明显的偏差。

        b. 过拟合问题:由于维度灾难,Spline样条在高维空间中容易出现过拟合的问题。过拟合指的是模型过度适应训练数据,导致在新的数据上表现不佳。在Spline样条中,过拟合可能导致曲线在数据点之间出现剧烈的震荡,而不是平滑的曲线。(样条是一种特殊的函数,由多项式分段定义,如果目标是高维度曲线,那么在高维度空间进行拟合,样条每段之间可能会剧烈波动、震荡or曲折)

        c. 计算复杂度增加:随着数据维度的增加,计算Spline样条的复杂度也会增加。在高维空间中,需要更多的计算资源和时间来生成平滑的曲线。

       

        综上所述,Spline样条存在维度灾难问题,即在高维空间中插值效果变差、过拟合问题增加以及计算复杂度增加。为了解决这个问题,可以考虑降维技术或者使用其他更适合高维数据的插值方法。

        在论文中,提出了一种假设和证明,能够证明KAN的设计有机会解决维度灾难,貌似是从有限的推导中逼近真值。具体可看论文章节2.3中的Theorem 2.1 (Approximation theory, KAT)

        2. 深度KAN网络,缺少相关数学定理

        Kolmogorov-Arnold表示定理对应于两层的KANs。论文中说到,目前还没有一个“一般化”版本的定理对应于更深层次的KANs。

        文中表述的一般形式并没有相关支持。

        3. 实现技术上的缺陷

        (a) 学习的激活函数的成本比固定激活函数成本更高,表现为虽然参数很少,但是收敛的很慢

        (b) 论文作者是物理博士,因此对于训练和评估代码的优化不足

        (c) 貌似当前版本无法适配GPU,高效的实现是应用的第一步!

        (d) SGD、AdamW、Sophia等梯度下降算法是否能够找到KANs的局部最小值?存疑

五、笔者认为论文中比较重要or难以理解的部分

        论文章节2.3:Theorem 2.1 (Approximation theory, KAT),逼近和证明的理论

        论文章节2.4:使spline grids更加精细化,以此来获得更加精准的函数逼近

        论文章节2.5.1:Sparsification ,将L1正则化 / L1稀疏化的概念引入,有两个修改。

                (1) KAN中不存在线性“权重”。线性权重被可学习的激活函数所取代,因此我们应该定义这些激活函数的L1范数

                (2) 我们发现L1不足以稀疏化KAN;相反,额外的熵正则化是必要的(细节见附录C)

        论文章节2.4:与MLP相比,‘神经缩放定律’ = 测试损失Loss随着模型参数的增加而减小的现象

        论文章节3:通过5个拟合函数的例子,证明KAN网络更加精准

参考资料1:号称能打败MLP的KAN到底行不行?数学核心原理全面解析_腾讯新闻

参考资料2:  激活函数-SwiGLU_silu激活函数-CSDN博客

参考资料3:KAN网络技术最全解析—最热KAN能否干掉MLP和Transformer?(收录于GPT-4/ChatGPT技术与产业分析)_kan模型-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/614514.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

A计算机上的程序与B计算机上部署的vmware上的虚拟机的程序通讯 如何配置?

环境: 在A计算机上运行着Debian11.3 Linux操作系统;在B计算机上运行着Windows10操作系统,并且安装了VMware软件,然后在VMware上创建了虚拟机C并安装了CentOS 6操作系统 需求: 现在A计算机上的程序需要同虚拟机C上的软…

【RAG 论文】Contriever:对比学习来无监督训练文本嵌入模型

论文:Unsupervised Dense Information Retrieval with Contrastive Learning ⭐⭐⭐⭐⭐ Facebook Research, arXiv:2112.09118 Code:github.com/facebookresearch/contriever 一、论文速读 本文使用对比学习的方法来对文本检索模型做无监督学习训练&am…

MySQL-索引篇

文章目录 什么是索引?索引的优缺点索引底层数据结构选型Hash表二叉查找树AVL树红黑树B树&B树 索引类型总结主键索引二级索引聚集索引与非聚集索引聚集索引非聚集索引 覆盖索引与关联索引覆盖索引联合查询最左前缀匹配原则 索引下推如何正确使用索引选择合适的字…

信息检索(35):LEXMAE: LEXICON-BOTTLENECKED PRETRAINING FOR LARGE-SCALE RETRIEVAL

LEXMAE: LEXICON-BOTTLENECKED PRETRAINING FOR LARGE-SCALE RETRIEVAL 标题摘要1 引言2 相关工作3 LEXMAE:词典瓶颈屏蔽自动编码器3.1 语言建模编码器3.2 词典瓶颈模块3.3 弱化掩蔽式解码器3.4 词汇加权检索器的预训练目标和微调 4 实验4.1 主要评估4.2 效率分析与…

「云渲染教程」3D渲染时GPU内存不足怎么解决?

在进行三维场景渲染时,如果遇到模型较为复杂,用户们可能会面临图形处理单元(GPU)内存不足的挑战。这种情况通常意味着现有的硬件配置不足以满足渲染任务的需求。为了缓解GPU的工作压力,可以采取一些策略来优化资源的分…

如何使用联合体判断一个机器是大端还是小端

如何使用联合体判断一个机器是大端还是小端 #include<iostream> using namespace std; union Checker//联合体中的数据共享内存 {int val;char ch[2]; }; int main() {Checker checker;checker.val 0x1234;if (checker.ch[0] 0x34)//数组中的数据是由低地址往高地址存放…

Arduino-ILI9341驱动开发TFT屏显示任意内容三

Arduino-ILI9341驱动开发TFT屏显示任意内容三 1.概述 这篇文章介绍使用ILI9341驱动提供的函数控制TFT屏显示字符串、图形、符号等等内容的编辑和展示。 2.硬件 2.1.硬件列表 名称数量Arduino Uno12.8" TFT彩色液晶触摸屏模块&#xff08;ILI9431&#xff09;110K 电阻…

什么是web3D?应用场景有哪些?如何实现web3D展示?

Web3D是一种将3D技术与网络技术完美结合的全新领域&#xff0c;它可以实现将数字化的3D模型直接在网络浏览器上运行&#xff0c;从而实现在线交互式的浏览和操作。 Web3D通过将多媒体技术、3D技术、信息网络技术、计算机技术等多种技术融合在一起&#xff0c;实现了它在网络上…

QT6 android程序界面强制横屏显示不旋转

QT6开发的Android程序有时候旋转后程序会变形&#xff0c;比如想让其固定位横屏显示&#xff0c;就需要进行特殊设置&#xff0c;本文提供一种简便的设置方法。 一.AndroidManifest.xml文件介绍 Android的Manifest.xml文件是一个重要的配置文件&#xff0c;用于描述应用程序的…

2024.5.9 关于 SpringCloud —— Nacos 的安装与配置

目录 Windos 安装步骤 docker 启动 nacos Windos 安装步骤 1&#xff09;点击下方链接&#xff0c;进入并访问 nacos 官网 Nacos官网 | Nacos 官方社区 | Nacos 下载 | Nacos 2&#xff09;按照下图箭头指示下载对应版本的压缩包 3&#xff09;此时我们将得到一个压缩包&…

ARM时钟树结构(GD32)

时钟树的简易框图 初始化配置系统时钟 配置系统初始化时钟&#xff08;参考手册&#xff09; 对应hal库函数 使用72MHz的系统时钟 do -----------while&#xff08;0&#xff09;的使用方法 系统时钟 #include <stdint.h> #include "gd32f30x.h"int main(void)…

分布式事务技术方案

什么是分布式事务 一次课程发布操作需要向数据库、redis、elasticsearch、MinIO写四份数据&#xff0c;这里存在分布式事务问题。 什么是分布式事务&#xff1f; 首先理解什么是本地事务&#xff1f; 平常我们在程序中通过spring去控制事务是利用数据库本身的事务特性来实现…

Rancher-Kubewarden-保姆级教学-含Demo测试

一、什么是Kubewarden&#xff1f; What is Kubewarden? | Kubewarden 1、就是容器集群的准入策略引擎。 1、使用的策略其实就是k8s原生的security context. 2、使用WebAssembly来编写策略。 1、WebAssembly&#xff0c;可以使用擅长的开发语言来编写策略。&#xff08;下面的…

shared_ptr 引用计数相关问题

前言 智能指针是 C11 增加的非常重要的特性&#xff0c;并且也是面试的高频考点&#xff0c;本文主要解释以下几个问题&#xff1a; 引用计数是怎么共享的、怎么解决并发问题的资源释放时&#xff0c;控制块的内存释放吗weak_ptr 怎么判断对象是否已经释放 文中源码用的是 L…

CSS的基础语法和常见的语法简单归纳

CSS CSS 是层叠样式表&#xff08;Cascading Style Sheets&#xff09;的缩写。它是一种用来控制网页样式和布局的标记语言。通过 CSS&#xff0c;可以定义网页中的元素&#xff08;如文字、图像、链接等&#xff09;的外观和排版方式&#xff0c;包括字体、颜色、大小、间距、…

【Android】Apk图标的提取、相同目录下相同包名提取的不同图标apk但是提取结果相同的bug解决

一般安卓提取apk图标我们有两种常用方法&#xff1a; 1、如果已经获取到 ApplicationInfo 对象&#xff08;假设名为 appInfo&#xff09;&#xff0c;那么我们获取方法为&#xff1a; appInfo.loadIcon(packageManager)// 返回一个 Drawable 对象2、 如果还没获取到 Applica…

静态分析-RIPS-源码解析记录-01

token流扫描重构部分&#xff0c;这一部分主要利用php的token解析api解析出来的token流&#xff0c;对其中的特定token进行删除、替换、对于特定的语法结构进行重构&#xff0c;保持php语法结构上的一致性 解析主要在lib/scanner.php中通过Tokenizer这个类来实现,也就是在main…

ICode国际青少年编程竞赛- Python-4级训练场-列表综合练习

ICode国际青少年编程竞赛- Python-4级训练场-列表综合练习 1、 Flyer[3].step(1) Flyer[7].step(2) Flyer[11].step(1) for i in range(4):Flyer[i * 2].step(1) Flyer[8].step(3)for i in range(3):Dev.turnRight()Dev.step(-5)2、 for i in range(5):Flyer[i5].step(Flyer[…

git 推送github 选https遇到登录 openSSH问题

使用https需要使用github令牌token作为密码&#xff0c; 使用SSH不需要登录。 还有一个问题&#xff1a; 创建github仓库后没有quick setup页面解决办法 千万不要点击任何多的操作&#xff01;&#xff01;&#xff01;输入仓库名&#xff0c;直接create&#xff01;&#x…

数据分析——业务指标分析

业务指标分析 前言一、业务指标分析的定义二、业务问题构建问题构建的要求 三、业务问题的识别在识别问题的阶段对于企业内部收益者的补充 四、竞争者分析竞争者分析的内容竞争者分析目的案例 五、市场机会识别好的市场机会必须满足的条件市场机会案例 六、风险控制数据分析师常…