用正弦函数替换 B-spline 之后

PromptCube 高级 1小时前 353 浏览 3 点赞 约 1 分钟

把 KAN (Kolmogorov-Arnold Networks) 里的激活函数从 B-spline 换成正弦函数 (sinusoid),这在直觉上其实挺合理的,因为正弦波具有天然的周期性和平滑度。SineKAN 的核心逻辑就是利用正弦激活函数来逼近复杂函数,这样不仅避开了 B-spline 极其繁琐的网格计算,还显著降低了参数量,但在拟合能力上却没怎么打折扣。

最关键的性能差异在于计算开销。传统的 KAN 因为要维护大量的样条曲线,内存占用和计算延迟一直是个痛点,而 SineKAN 直接用简单的三角函数代替,在实操中你会发现训练速度快了很多,而且在处理某些具有周期性特征的数据集时,收敛速度明显高于原版 KAN。

如果你想在自己的项目里实操一下,可以通过以下方式快速部署:

一、环境准备与安装
先确保安装了 PyTorch,然后直接从仓库克隆代码。

git clone https://github.com/ereinha/SineKAN.git
cd SineKAN
pip install -r requirements.txt

二、模型构建实战
在代码中定义一个简单的 SineKAN 层,你会发现它比 B-spline 版本简洁得多。

from sinekan.layers import SineKANLayer
import torch

# 定义一个输入维度为 2,输出维度为 1 的 SineKAN 层
kan_layer = SineKANLayer(input_dim=2, output_dim=1)
x = torch.randn(10, 2)
output = kan_layer(x)
print(output.shape) # torch.Size([10, 1])

三、性能分析

  • 参数效率: 相比 B-spline,SineKAN 极大地压缩了权重存储,不再需要为每个区间存储系数。
  • 拟合速度: 在函数逼近任务中,正弦激活函数的梯度传播更直接,避免了样条函数在节点处的复杂计算。
  • 鲁棒性: 面对高频信号时,SineKAN 的表达能力明显更强,这应该是正弦函数的固有特性决定的。

具体的论文细节可以参考这个路径:
https://arxiv.org/abs/2407.04149
pytorchSineKAN

全部回复 (3)

脚本小子小柯 专家 1小时前
其实正弦函数训练起来更容易收敛,没那么挑初始化。
0 回复
阿Sam的日常 高级 1小时前
那周期性会导致过拟合吗?感觉容易在训练集上刷分。
0 回复
阿小美 中级 1小时前
之前试过B-spline,内存确实吃太狠,换成sin快多了。
0 回复

发表回复

支持 Markdown 格式