当前位置:   article > 正文

卷积柯尔莫哥洛夫-阿诺德网络 (CKAN)_kan卷积

kan卷积

卷积柯尔莫哥洛夫-阿诺德网络 (CKAN)

卷积 KAN 网络简介!

该项目将柯尔莫哥洛夫-阿诺德网络(KAN)创新架构的思想扩展到卷积层,将卷积的经典线性变换转变为每个像素中可学习的非线性激活。

作者

该存储库由以下人员创建:

制作人员

此存储库使用 KAN 的有效实现,可在此处获取。KAN 的原始实现可在此处获取。KAN 的原始论文可在此处获取。

什么是 KAN?

KAN 是多层感知器 (MLP) 的有前途的替代品。KAN 与 MLP 一样具有强大的数学基础:MLP 基于通用近似定理,而 KAN 基于 Kolmogorov-Arnold 表示定理。KAN 和 MLP 是双重的:KAN 在边上有激活函数,而 MLP 在节点上有激活函数。KAN 似乎比 MLP 更高效地利用参数,但每个 KAN 层都比 MLP 层有更多参数。

mlp_kan_比较

有关这种新颖架构的更多信息,请访问:

什么是 KAN 卷积?

KAN 卷积与卷积非常相似,但我们不是将核与图像中相应的像素之间的点积应用到每个元素上,而是可学习的非线性激活函数应用于每个元素,然后将它们相加。KAN 卷积的核相当于一个由 4 个输入和 1 个输出神经元组成的 KAN 线性层。对于每个输入 i,我们应用一个 ϕ_i 可学习函数,该卷积步骤的结果像素是 ϕ_i(x_i) 的总和。下图可以直观地看到这一点。

图像

KAN 卷积中的参数

假设我们有一个 KxK 核。在这种情况下,对于这个矩阵的每个元素,我们都有一个 ϕ,其参数数量为:gridsize + 1。对于实现问题,高效 kan 定义: 

图像

这为激活函数 b 提供了更多的可表达性。因此,线性层的参数数量为 gridsize + 2。因此,KAN 卷积总共有 K²(gridsize + 2) 个参数,而普通卷积只有 K²。考虑到 gridsize 通常(在我们的实验中)介于 k 和 k² 之间,但 k 往往是一个较小的值,介于 2 和 16 之间。

初步评估

我们测试过的不同架构包括:

  • KAN 卷积层连接到 Kan 线性层 (KKAN)
  • 连接到 MLP (CKAN) 的 Kan 卷积层
  • 卷积之间批量归一化的 CKAN (CKAN_BN)
  • ConvNet(连接到 MLP 的经典卷积)(ConvNet)
  • 简单 MLP

图像

这里我们有一些结果:

模型测试准确度测试精度测试回忆测试F1分数参数数量卷积层
1层MLP0.9220.9220.9210.9217850-
卷积网络(小)0.9760.9760.9760.9762740[5,1] k=[3,3]
ConvNet(中等)0.9910.9910.9910.991157 030[5,5] k=[3,3]
ConvNet(大)0.9950.9950.9950.995887530[32,1,2,1] k=[5,5,3,3]
KANConv 和 MLP0.9850.9850.9840.984163,726坎康夫[5,5]k=[3,3]
简单的Conv和KAN0.9800.9800.9800.98037 030[5,1] k=[3,3]
坎坎0.9870.9870.9870.98794,650坎康夫[5,5]k=[3,3]

卷积层中的列表在每个元素中包含卷积数量以及相应的内核大小。

基于 28x28 MNIST 数据集,我们可以观察到 KANConv & MLP 模型与 ConvNet (Big) 相比达到了可接受的精度。然而,不同之处在于,KANConv & MLP 所需的参数数量比标准 ConvNet 所需的参数数量少七倍。此外,KKAN 的准确度比 ConvNet Medium 低 0.04,参数数量几乎只有一半(94k vs 157k),这显示了该架构的潜力。需要对更多数据集进行实验才能得出一定的结论。

讨论

KAN 卷积的实现是一个很有前途的想法,尽管它仍处于早期阶段。我们已经进行了一些初步实验来评估 KAN 卷积的性能。我们之所以说是初步的,是因为我们想尽快发布这个想法,以便社区可以开始研究它。

我们知道有许多超参数需要调整,并且需要进行许多实验。在接下来的几天和几周内,我们将彻底调整模型和用于比较的模型的超参数。我们尝试了超参数和架构的一些变化,但这是启发式的,没有使用任何精确的方法。我们还认识到,由于计算能力和时间原因,我们没有使用大型或更复杂的数据集,我们正在努力解决这一问题。
未来我们将在更复杂的数据集上进行实验,这意味着 KANS 的参数数量将会增加,因为我们需要实现更多的 Kan 卷积层。

结论

目前,与传统卷积网络相比,我们还没有看到 KAN 卷积网络的性能有显着提高。我们认为这是因为我们使用的是简单的数据集和小模型,因为我们的架构的优势在于与我们尝试过的最佳架构(ConvNet Big,这是一个不公平的比较,因为它需要的参数要少得多)其大小)。最后连接相同 MLP 的 2 个相等卷积层和 KAN 卷积层之间的比较显示,经典方法稍胜一筹,准确度提高了 0.06,而 KAN 卷积层和参数数量几乎一半的 KAN 线性层则减少了 0.04准确性。我们相信,随着模型和数据集复杂性的增加,我们将看到 KAN 卷积网络的性能显着提高。而且随着维度输入的增加,我们模型的参数数量也会增长得更快。

工作正在进行中

  • 在更复杂的数据集上进行实验。
  • 使用随机搜索进行超参数调整。
  • 尝试更多的架构。
  • 动态更新网格范围。

安装

git clone git@github.com/AntonioTepsich/ckan.git
cd ckan
pip install -r requirements.txt

用法

只需将文件复制kan_convolutional到您的项目并导入即可。

from kan_convolutional.KANConv import KAN_Convolutional_Layer

例子

为 MNIST 构建 KANConv

import torch
from torch import nn
import torch.nn.functional as F

from kan_convolutional.KANConv import KAN_Convolutional_Layer

class KANC_MLP(nn.Module):
    def __init__(self,device: str = 'cpu'):
        super().__init__()
        self.conv1 = KAN_Convolutional_Layer(
            n_convs = 5,
            kernel_size= (3,3),
            device = device
        )

        self.conv2 = KAN_Convolutional_Layer(
            n_convs = 5,
            kernel_size = (3,3),
            device = device
        )

        self.pool1 = nn.MaxPool2d(
            kernel_size=(2, 2)
        )
        
        self.flat = nn.Flatten() 
        
        self.linear1 = nn.Linear(625, 256)
        self.linear2 = nn.Linear(256, 10)


    def forward(self, x):
        x = self.conv1(x)

        x = self.pool1(x)

        x = self.conv2(x)
        x = self.pool1(x)
        x = self.flat(x)
        x = self.linear1(x)
        x = self.linear2(x)
        x = F.log_softmax(x, dim=1)
        return x
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/873831
推荐阅读
相关标签
  

闽ICP备14008679号