Kolmogorov–Arnold Networks (KAN) 即将改变 AI 世界

目录

一、说明

二、KAN介绍 

2.1 什么是 Kolmogorov-Arnold Networks (KAN):

2.2 KAN 的秘诀,Splines!

2.3 了解KAN工作的最简单方法

三、KAN的主要优点 

四、KAN 的 Python 实现 (PyKAN) 

4.1 创建数据集

4.2 输出(数据集可视化)

4.3 创建和训练 KAN

4.4 从模型中获取符号公式

4.5 计算精度

4.6 输出

五、结论


关键词:Kolmogorov–Arnold Networks

一、说明

        在人工智能中,多层感知器(MLP)是基石,其神经架构塑造了无数应用的格局。然而,Kolmogorov-Arnold Networks(KAN)试图通过重新构想神经元在神经网络中工作的本质来突破这一基础。

忘记你所知道的关于神经网络的一切,KAN 在这里改写规则

二、KAN介绍 

        在不断发展的机器学习领域,最近一篇名为“KAN:Kolmogorov-Arnold Network”的研究论文在爱好者中引发了一波兴奋。这种创新方法挑战了多层感知器(MLP)的传统智慧,为神经网络架构提供了新的视角。

2.1 什么是 Kolmogorov-Arnold Networks (KAN):

        这一开创性概念的核心是科尔莫戈罗夫-阿诺德表示定理,这是弗拉基米尔·阿诺德和安德烈·科尔莫戈罗夫提出的数学理论。该定理断言,复杂的多元函数可以分解为更简单的一维函数,为KAN的独特结构奠定了基础。

        现在,显而易见的问题变成了这些“更简单的一维函数”是什么。 对于任何对数学或计算图形学有一点了解的人来说,我们谈论的是古老的,并且由称为样条多项式分段信任

B 样条曲线示例 (Google.com)

2.2 KAN 的秘诀,Splines!

        样条曲线是数学函数,可以通过连接一系列控制点来创建平滑曲线。样条曲线可以灵活地调整曲线的形状,同时确保相邻线段之间的连续性和平滑性

        要创建样条曲线,通常从一组定义曲线路径的控制点开始。 然后,通过使用基函数(例如 B 样条曲线或贝塞尔曲线)对这些控制点之间的路径进行插值或逼近来构建曲线。

图片来源: Unity Manual |样条曲线入门

从本质上讲,样条曲线提供了一种通用工具,用于精确、灵活地表示复杂的曲线或曲面,使其在各个领域中都非常宝贵。

但是,这些样条曲线是如何在 KAN 架构中使用和利用的?

2.3 了解KAN工作的最简单方法

        KAN与传统的MLP不同,它沿着网络边缘用可学习的函数(B样条曲线)取代了固定的激活函数这种自适应架构使 KAN 能够有效地对复杂函数进行建模,同时保持可解释性并减少所需参数的数量。

资料来源:PyKAN Github (https://github.com/KindXiaoming/pykan)

        与MLP中的神经元不同,MLP中的神经元是传输信号的被动管道,KAN中的神经元是学习过程的积极参与者,旨在动态地塑造它们的行为,以响应它们遇到的数据。

        这种变革性转变是通过采用位于网络边缘的可学习激活函数来实现的。

        资料来源:PyKAN Github (https://github.com/KindXiaoming/pykan)

        利用 B-Splines 的表现力,这些功能赋予 KAN 无与伦比的灵活性和适应性,使他们能够轻松驾驭复杂的数据环境。

三、KAN的主要优点 

1 增强的可扩展性

        与MLP相比,KAN具有出色的可扩展性,特别是在高维数据场景中。它们能够将复杂的函数分解为更简单的组件,从而能够高效处理大型数据集,使其成为具有大量信息的任务的理想选择。

2 提高准确性

        尽管使用较少的参数,但 KAN 在各种任务中比传统 MLP 具有更高的精度和更低的损耗。这归因于它们能够自适应地对数据中的关系进行建模,从而实现更精确的预测和对看不见的例子的更好泛化。

3 可解释模型

        KAN 的结构有助于可解释性,使研究人员能够推导出有效表示学习模式的符号公式。与黑盒模型不同,KAN 提供了对输入特征如何在整个网络中转换的见解,从而增强了透明度和理解力。

        N我们知道什么是KAN,为什么它们在人工智能领域如此重要,但世界并不仅仅靠论文中看起来不错的理论和模型来发展。

        但 KAN 最好的一点是,它们与使用新的 Python 库“PyKAN在您自己的数据科学问题中扩展和利用非常相似。

        让我们用一个如何在 Python 中实现这些架构的示例来结束我们的讨论

四、KAN 的 Python 实现 (PyKAN) 

让我们使用分类问题进行演示。

4.1 创建数据集

我们将使用 sklearn 库的“make_moons”函数创建一个合成数据集。

import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
import torch
import numpy as np

dataset = {}
train_input, train_label = make_moons(n_samples=1000, shuffle=True, noise=0.1, random_state=None)
test_input, test_label = make_moons(n_samples=1000, shuffle=True, noise=0.1, random_state=None)

dataset['train_input'] = torch.from_numpy(train_input)
dataset['test_input'] = torch.from_numpy(test_input)
dataset['train_label'] = torch.from_numpy(train_label)
dataset['test_label'] = torch.from_numpy(test_label)

X = dataset['train_input']
y = dataset['train_label']
plt.scatter(X[:,0], X[:,1], c=y[:])

4.2 输出(数据集可视化)

4.3 创建和训练 KAN

from kan import KAN

odel = KAN(width=[2,2], grid=3, k=3)

def train_acc():
    return torch.mean((torch.argmax(model(dataset['train_input']), 
    dim=1) == dataset['train_label']).float())

def test_acc():
    return torch.mean((torch.argmax(model(dataset['test_input']), 
    dim=1) == dataset['test_label']).float())

results = model.train(dataset, opt="LBFGS", steps=20, 
          metrics=(train_acc, test_acc), 
          loss_fn=torch.nn.CrossEntropyLoss())

4.4 从模型中获取符号公式

在此之后,将派生一个符号公式,该公式表示模型从数据中学习的内容。

formula1, formula2 = model.symbolic_formula()[0]

4.5 计算精度

最后,可以从学习的公式中获得准确性

def acc(formula1, formula2, X, y):
    batch = X.shape[0]
    correct = 0
    for i in range(batch):

        logit1 = np.array(formula1.subs('x_1', 
                          X[i,0]).subs('x_2', X[i,1])).astype(np.float64)
        logit2 = np.array(formula2.subs('x_1', X[i,0]).subs('x_2', 
                          X[i,1])).astype(np.float64)

        correct += (logit2 > logit1) == y[i]

    return correct/batch

# Print Accuracy
print('train acc of the formula:', acc(formula1, 
                                       formula2, 
                                       dataset['train_input'],  
                                       dataset['train_label']))

print('test acc of the formula:', acc(formula1, 
                                      formula2, 
                                      dataset['test_input'], 
                                      dataset['test_label']))

4.6 输出

train acc of the formula: tensor(0.9700)
test acc of the formula: tensor(0.9660)

五、结论

        总之,Kolmogorov-Arnold 网络 (KAN) 代表了神经网络架构的范式转变。 虽然需要进一步的研究和实验来充分释放其潜力,但 KAN 有望成为未来几年推进机器学习和科学发现的宝贵工具。

        随着该领域的不断发展,KAN 站在创新的最前沿,塑造智能系统的未来,并彻底改变我们处理复杂数据分析和建模的方式。

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

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

相关文章

神经网络 | 深度学习背后的数学

神经网分析 机器学习处理的是数据,通过学习输入的数据,从而建立模型,以便预测新的数据的输出 按照类型可以进行如下分类 监督分类 非监督分类 强化学习 神经元 生物学中,人的大脑是由多个神经元互相连接形成网络而构成的。也…

访问vue乱码解决

前情提要: 前端 vue工程npm run build生成的dist静态文件 后端 springboot 后端mvn install 生成war包,前端dist放进war包 报错: 页面访问白屏 报错如图 可以看到chunk-vendors.xxxx.js出现了中文乱码,这个js文件是vue build生成的…

2024版本---LabVIEW 软件安装及使用教程

目录 第1章 LabVIEW 软件安装及使用教程 1. 简介 2. 安装教程 2.1 下载 LabVIEW 2024 版本 2.2 安装 LabVIEW 3. 激活 LabVIEW 4. LabVIEW 基本使用教程 4.1 用户界面介绍 4.2 创建一个简单的 VI(虚拟仪器) 4.3 数据采集示例 5. 进阶功能介绍…

秋招突击——算法打卡——6/5——提高{(状态机模型)股票买卖、(单调队列优化DP)最大子序列和}——新做:{考试的最大困扰度}

文章目录 提高(状态机模型)股票买卖IV思路分析实现代码参考代码 新作考试的最大困扰度个人实现参考思路 总结 提高 (状态机模型)股票买卖IV 上一次的思路总结,上次写的时候忘记总结了,现在重新画一下图 思路分析 这道题是一个经典的状态机模型&#…

【数据挖掘】学习笔记

文章目录 第一章 引论1.1 为什么进行数据挖掘1.2 什么是数据挖掘?1.3 可以挖掘什么类型的数据1.4 可以挖掘什么类型的模式1.4.1 类/概念描述:特征化和区分1.4.2 挖掘频繁模式、关联规则和相关性1.4.3 用于预测分析的分类和回归1.4.4 聚类分析1.4.5 离群点…

【C语言之排序】-------六大排序

作者主页:作者主页 数据结构专栏:数据结构 创作时间 :2024年5月18日 前言: 今天我们就给大家带来几种排序的讲解,包括冒泡排序,插入排序,希尔排序,选择排序,堆排序&…

计算机网络ppt和课后题总结(下)

常用端口总结 计算机网络中,端口是TCP/IP协议的一部分,用于标识运行在同一台计算机上的不同服务。端口号是一个16位的数字,范围从0到65535。通常,0到1023的端口被称为“熟知端口”或“系统端口”,它们被保留给一些标准…

【Python数据类型的奥秘】:构建程序基石,驾驭信息之海

文章目录 🚀Python数据类型🌈1. 基本概念⭐2. 转化👊3. 数值运算💥4. 数值运算扩展(math库常用函数) 🚀Python数据类型 🌈1. 基本概念 整数(int):整数是没有小数部分的数…

保研面试408复习 8——计算机网络(浏览器http)、离散数学(平面图)、操作系统、数据结构

文章目录 一、计算机网络1、从在浏览器输入网址到页面显示的过程1. 输入网址2. DNS 解析3. 建立TCP连接4. 发送HTTP请求5. 服务器处理请求并响应6. 浏览器处理响应7. 页面渲染 二、离散数学一、平面图1、平面图性质2、Kuratowski定理 三、操作系统四、数据结构 一、计算机网络 …

Unity3d使用3D WebView for Windows and macOS打开全景网页(720云)操作问题记录

问题描述 使用Unity3d内嵌网页的形式打开720云中的全景图这个功能,使用的是3D WebView for Windows and macOS插件,720云的全景图在浏览器上的操作是滑动鼠标滚轮推远/拉近全景图,鼠标左键拖拽网页可以旋转全景图内容。网页的打开过程是正常…

CSS函数:scale、scale3d函数的使用

CSS函数scale()主要是为了实现元素的放大和缩小效果,使用的是元素的变换效果。使用的是元素的转换属性:transform的,该函数可以实现指定X轴和Y轴的放大、缩小效果。除此之外,我们还可以通过如下两种方式实现指定方向的转换&#x…

C++结合OpenCV进行图像处理与分类

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三…

选择排序-Java版本

选择排序 算法的思想&#xff1a;java模拟 算法的思想&#xff1a; 每遍历一次就找一个最小的数 *外层 一共遍历 length-1次 总遍历次数符合等差数列 时间复杂度为O(n^2)内部查找 并 返回 数值 和 下标 java模拟 public static void selectSort(int[] arr) {for(int i 0;i<…

Flask 学习笔记 总结

python基础 服务端开发编程 第一个是赋值运算&#xff0c;第二是乘法&#xff0c;最后是一个是幂&#xff08;即a2&#xff09; a 2 a * 2 a ** 2 Python支持多重赋值&#xff1a; a, b, c 2, 3, 4 这句命令相当于&#xff1a; a 2 b 3 c 4 Python支持对字符串的灵活…

网络编程(一)

网络编程&#xff08;一&#xff09; 网络基础网络体系结构**OSI的7层模型**&#xff1a;&#xff08;理想化&#xff09;**每层的功能** **TCP/IP的4层模型**&#xff1a;&#xff08;在使用&#xff09;常见的协议IP地址IPV4分类A类&#xff08;第1位固定为0&#xff09;B类&…

10个令人惊叹的Python自动化脚本

大家好&#xff0c;Python凭借其简单和通用性&#xff0c;能够为解决每天重复同样的工作提供最佳方案。本文将介绍10个Python自动化脚本&#xff0c;可以帮助自动化完成任务&#xff0c;提高工作效率&#xff0c;它们可以成为项目运行中的便捷工具&#xff0c;可以收藏这些脚本…

conflicting types for 错误问题

操作系统真象还原中&#xff0c;第十一章出现的问题&#xff1a; 怎样编译都会出现一个conflicting types for ’xxx‘的错误 出现这个错误的原因&#xff1a; 头文件声明和定义参数稍有不同 头文件中声明 void Hanlder(const char * buf); 在定义时写作 void Hanlder(char…

C# WPF入门学习主线篇(六)—— TextBox常见属性和事件

欢迎回到C# WPF入门学习系列的第六篇。在前面的文章中&#xff0c;我们探讨了按钮&#xff08;Button&#xff09;的事件处理。今天&#xff0c;我们将继续学习另一个常用的WPF控件——TextBox。本文将介绍 TextBox 的常见属性和事件&#xff0c;并通过示例代码展示如何在实际应…

用这个AI工具,做公众号爆款图文,5分钟一篇10w+,居然这么简单!(附工具教程)

文章首发于公众号&#xff1a;X小鹿AI副业 大家好&#xff0c;我是程序员X小鹿&#xff0c;前互联网大厂程序员&#xff0c;自由职业2年&#xff0c;也一名 AIGC 爱好者&#xff0c;持续分享更多前沿的「AI 工具」和「AI副业玩法」&#xff0c;欢迎一起交流~ 之前X小鹿一直在各…

泵制造5G智能工厂工业物联数字孪生可视化,推进制造业数字化转型

泵制造5G智能工厂工业物联数字孪生可视化&#xff0c;推进制造业数字化转型。泵制造行业&#xff0c;作为工业领域的核心部分&#xff0c;更是急需通过技术创新实现生产流程的智能化和高效化。而5G智能工厂工业物联数字孪生可视化技术的出现&#xff0c;为泵制造业的数字化转型…