《KAN》的四个问题(转自b站耿直哥)

视频链接

【KAN网络】非线性空间美学的崛起,傅里叶级数转世泰勒展开重生_哔哩哔哩_bilibili

1、KAN和MLP的本质区别

MLP:输入的线性组合外套一层激活函数,从而实现非线性变换 写成矩阵形式更为简洁

对于深度神经网络就是线性组合 激活函数 再组合 再激活 如此反复

把线性空间不断变换扭曲成非线性的空间 这使得原来非线性不可分的数据在新的空间中反倒线性可分了

MLP的优点:结构简洁高效

MLP的缺点:

1、激活函数固定而脆弱,一旦导数为0或者太大,就会产生梯度消失/爆炸,导致反向传播失效

2、线性组合过于简单,想学到有用的信息需要庞大的参数量,效率的低下,处理高维数据或者长期依赖能力有限

  • KAN:针对MLP的缺点做了改进,对于输入直接激活非线性变换然后再组合,在这个两层结构中,相当于把激活函数放到了连接上

以样条函数(作为激活函数)为例,当多个样条函数组合起来就能模拟任意函数

写成公式如上图所示,数学上叫Kolmogorov-Arnold表示定理,这也是KAN网络名字的来源了。

2、KAN的核心原理和主要思想

单丝不成线,独木难成林,单独的KAN结构其实用处不大,KAN的牛逼之处在于扩展了深度网络,写成矩阵形式不再是MLP线性组合与激活的嵌套,而是激活 激活 再激活 

比如选择样条函数进行参数化学习,虽然学起来比线性模型更难,但是非线性表征能力大大提升,能用很少的节点实现更高的准确度,一个两层宽度为10的KAN网络求解偏微分方程比一个四层宽度为100的MLP效果还要好,KAN是这个MLP参数量的1%

3.为什么它有很好的准确性和可解释性

除了上述提到的结构上的优势还必须有好的训练算法,MLP通过增加网络宽度和深度提升性能,需要独立训练不同大小的模型,

而KAN提出了网格扩展技术,先粗后精,递进精调,无需重训就能实现模型精度的提升,

除此之外他还提出了新的网络结构自适应算法:在初始网络上通过稀疏化,剪枝,设定特定的激活函数,训练放射参数,符号化等步骤进行优化,大大提升了网络的可解释性让神经网络这个黑河训练的老大难问题得到了极大的缓解

例:求解f(x,y)=xy网络的结构如下图所示

x和y经过直线求和再二次函数对应x加y的平方,而二者直接二次函数激活对应x方和y方,过反斜杠直线相当于求差,简直就是所见即所得,这带来了两大好处,正着用算法可以实现数据内在模式的探索和发现,反着用能把世界模型和学科知识嵌入网络结构,让Sora这样的模型长上翅膀,实现对物理世界的真实模拟

4、当前的缺点和对AI领域的深远影响

官方的代码目前还非常的幼稚。跑起来比较慢,工程化尚且不足,此外数学层面上核心的K-A表示定理能否扩展到深层网络还有待论证,但瑕不掩瑜KAN的出现如同哥伦布发现了新大陆,对AI尤其是深度学习提供了更广阔的空间

对于3中的技术细节详见下一篇《KAN》论文笔记

<think>好的,用户想要用KAN(可能是指某种特定结构或算法)替代传统的MLP(多层感知机),但现有的引用内容里并没有直接提到KAN的相关信息。首先需要明确KAN具体指什么,可能用户指的是某种新型的神经网络结构,比如Kolmogorov–Arnold Networks,或者是其他缩写。假设这里KAN是指Kolmogorov–Arnold Network,这是一种基于Kolmogorov-Arnold表示定理的网络结构,理论上可以表示任何连续函数。 根据用户提供的引用内容,引用[1]提到了TuiGAN的生成器架构,引用[2]讨论了文本和图像的图表示,引用[3]关于自动驾驶的法律法规。这些似乎与KAN替换MLP无直接关联。因此,可能需要基于对KAN的一般理解来构建示例代码。 接下来需要考虑如何将KAN结构换为代码。传统的MLP由全连接层组成,而KAN可能涉及不同的层结构,比如使用可学习的激活函数或更复杂的连接方式。假设KAN的核心思想是使用可调整的基函数组合,可以通过自定义PyTorch层来实现。 可能的实现步骤包括:定义可学习的参数作为基函数的系数,设计前向传播时的组合方式。例如,每个神经元的输出不再是简单的权重和输入的线性组合加上激活函数,而是多个基函数的线性组合,这些基函数的参数可以通过训练调整。 需要注意代码的兼容性,确保能够替换现有MLP中的全连接层。同时,需要验证实现的正确性,比如梯度计算是否正确,模型是否能正常训练。 最后,生成相关问题,帮助用户进一步理解KAN的应用和优化,比如性能比较、训练技巧和应用场景等。</think>### 使用KAN替代MLP的实现思路 目前文献中关于KAN(如指代Kolmogorov-Arnold Network)替代MLP的实现尚未形成标准范式,但可根据其数学原理构建基础框架。以下提供一个基于PyTorch的简化实现示例: ```python import torch import torch.nn as nn class KANLayer(nn.Module): def __init__(self, in_dim, out_dim, basis_funcs=5): super().__init__() # 定义可学习的基函数参数 self.coeffs = nn.Parameter(torch.randn(out_dim, in_dim, basis_funcs)) # 初始化基函数类型(示例使用多项式基) self.basis = [lambda x, i=i: x.pow(i+1) for i in range(basis_funcs)] def forward(self, x): output = [] for out_idx in range(self.coeffs.shape[0]): # 对每个输出神经元计算基函数组合 neuron_output = 0 for in_idx in range(self.coeffs.shape[1]): basis_sum = sum(c * f(x[:, in_idx]) for c, f in zip(self.coeffs[out_idx, in_idx], self.basis)) neuron_output += basis_sum output.append(neuron_output) return torch.stack(output, dim=1) # 示例网络结构 class KAN(nn.Module): def __init__(self): super().__init__() self.kan1 = KANLayer(784, 128) self.kan2 = KANLayer(128, 10) def forward(self, x): x = x.view(-1, 784) x = torch.relu(self.kan1(x)) return self.kan2(x) ``` 关键改进点: 1. 基函数选择:可替换为样条函数、径向基函数等 2. 参数初始化:需要根据基函数特性设计初始化策略 3. 正则化:添加L1/L2约束防止过拟合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值