1. 项目概述
最近在复现几篇关于Kolmogorov-Arnold Networks(KAN)的论文时,发现这个新型网络架构确实很有意思。KAN作为一种替代传统多层感知机(MLP)的方案,在多个基准测试中展现出了不错的性能。不过更让我感兴趣的是,KAN与其他经典网络架构的组合会擦出怎样的火花。
这个项目我花了大约三周时间,系统性地实现了六种KAN混合架构:CNN-KAN、CNN-LSTM-KAN、LSTM-KAN、TCN-KAN以及Transformer-KAN,并在相同的数据集和实验条件下进行了对比测试。过程中踩了不少坑,也发现了一些有趣的规律,今天就把这些实战经验完整分享出来。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心架构解析
2.1 KAN基础原理
KAN的核心思想源自Kolmogorov-Arnold表示定理,该定理指出任何多元连续函数都可以表示为有限个单变量函数的叠加。与传统MLP使用固定激活函数不同,KAN的每个神经元都学习自己的激活函数(通常用B样条实现)。
python复制class KANLayer(nn.Module):
def __init__(self, input_dim, output_dim, grid_size=5):
super().__init__()
self.grid_size = grid_size
self.coeff = nn.Parameter(torch.randn(output_dim, input_dim, grid_size))
self.base_weight = nn.Parameter(torch.randn(output_dim, input_dim))
def forward(self, x):
# B样条基函数计算
batch_size = x.shape[0]
x = x.unsqueeze(-1).expand(-1, -1, self.grid_size)
bases = ((x >= -1) & (x <= 1)).float()
# 系数加权求和
y = torch.einsum('bid,
