WHAT KAN I SAY?Kolmogorov-Arnold Network (KAN)网络结构介绍及实战(文末送书)

一、KAN网络介绍

1.1 Kolmogorov-Arnold Network (KAN)网络结构的提出

2024年4月,来自MIT、加州理工学院、东北大学等团队的研究,引爆了一整个科技圈:Yes We KAN! 这种创新方法挑战了多层感知器(Multilayer Perceptron,MLP)的传统观点,为神经网络架构提供了全新的视角,GitHub上收获15k stars
[图片]

1.2 Kolmogorov-Arnold Network(KAN)名称由来

为了纪念两位伟大的已故数学家Andrey Kolmogorov和Vladimir Arnold,称其为科尔莫格罗夫-阿诺德网络(KAN) 。
[图片]

作者特别强调其有三个非常重要的特点:

  1. 在数学上是合理的
  2. 准确的
  3. 可解释的

1.3 从结构上对比

多层感知器(MLP):全连接前馈神经网络,重要性怎么强调都不为过;神经元之间的连接是一个实数值,代表权重,而神经元本身配有一个非线性的激活函数;
KAN:它没有将权重参数表示为一个实数,而是表示为一种B样条函数,这个样条函数直接连接两个神经元,代替了MLP中的线性权重;
[图片]

与MLP类似,KAN具有全连接结构:
MLP在节点——「神经元」上具有固定的激活函数
而KAN在边——「权重」上具有可学习的激活函数

KAN的网络结构可以表示为:
[图片]
其中,Φi表示第i层的变换,这些变换由可学习的激活函数组成,而不是传统的线性权重参数。这种设计允许KAN在网络的边缘采用可学习的激活函数,这些函数通常以样条函数形式参数化,从而提供了极高的灵活性,并能够用更少的参数来模拟复杂的函数,增强了模型的可解释性;
MLP的网络结构则可以表示为:
[图片]
在MLP中,Wi表示线性权重参数,而σ表示非线性激活函数。MLP通过线性变换后跟非线性激活函数来处理数据,这种结构在深度学习中非常常见,因为它能够学习数据中的复杂模式。
KAN的公式强调了可学习的激活函数,这些函数在网络的边缘采用,与传统MLP中的固定激活函数形成对比。MLP的公式则侧重于线性权重参数和非线性激活函数的组合,这是其处理数据的基础。
B-样条:KAN的核心, KAN中的样条函数是其学习机制的核心,它们取代了神经网络中通常使用的传统权重参数。样条的灵活性使其能够通过调整其形状来适应性地建模数据中的复杂关系,从而最小化近似误差,增强了网络从高维数据集中学习细微模式的能力。

1.4 B样条函数介绍

样条函数(Spline Function)是一种用于逼近或插值数据的平滑函数,它由分段多项式拼接而成,并且这些多项式在连接处具有一定的连续性(相当于通过分段多项式的组合,以在不牺牲光滑性的前提下精确地逼近或插值数据)。
样条函数分类:
1.线性样条:每个子区间上使用一阶多项式,即直线段它们在节点处具有零阶连续性,函数值连续,导数不连续;
2.二次样条:在每个子区间上使用二阶多项式,在节点处通常要求函数值和一阶导数连续;
3.三次样条:在每个子区间上使用三阶多项式;
4.B样条(B-spline):使用一组基函数来表示样条,每个基函数只在少数几个子区间非零。

B样条(B-spline)应用:
1.插值(Interpolation): 即通过已知数据点来构造一条平滑曲线,以便在数据点之间进行估计;
2.数据拟合(Data Fitting): 可以对大量噪声数据进行平滑处理,从而得到一个逼近数据的光滑函数;
3.计算机图形学(Computer Graphics): 广泛用于图形和动画中,用于表示和控制复杂的曲线和曲面。

1.5 从代码上对比

CNN:
不需要展平,直接输入
组成:
卷积层+池化层+全连接层
[图片]

MLP:
需将图像展平为长向量
组成:
完全由全连接层组成
[图片]

MLP 和 KAN 的实现是非常相似的:
都是由全连接层(Linear)和激活函数组成的网络;
MLP 网络使用传统的ReLU激活函数,KAN 网络使用了一个自定义的非线性激活函数。
[图片]

1.6 从数学上对比

MLP的灵感来自于通用近似定理,即对于任意一个连续函数,都可以用一个足够深的神经网络来近似。
KAN则是来自于Kolmogorov-Arnold表示定理,每个多元连续函数都可以表示为单变量连续函数的两层嵌套叠加。表明任何复杂的“配方”都可以简化为基本的单一成分配方,然后以特定方式组合,如图所示:
[图片]

其证明公式:
[图片]
ϕqp(Xp)是单变量函数(简单的单成分配方),Φq采用单变量函数并将它们组合在一起。
定理指出,可以用2n+1个这样的外部函数——每个外部函数是一个一元函数(它作用于由内部一元函数组成的求和),来表示任何多变量函数;
进而,每个函数都可以用一元函数和求和来表示。

二、KAN网络仿真实验

2.1 仿真实验软硬件环境和参数配置

本次仿真实验要用到模型:CNN、MLP、MLP_KAN、KAN、 FastKAN、FasterKAN、ConvKAN。
重点模型解释:
MLP_KAN:是在MLP的基础上修改了激活函数;
FastKAN:通过径向基函数实现非常快的Kolmogorov-Arnold网络,用径向基函数(Radial basis function network)替换原始 KAN 中的 3 阶 B 样条基, RBF 函数很好地近似于 B 样条基,并且非常易于计算;
FasterKAN:使用 Fast-KAN 中的代码作为其基础,使用反射SWitch激活函数,这些 RSWAF 函数可以近似于 B 样条基,它们易于计算,同时具有均匀的网格;
ConvKAN:KAN卷积与卷积非常相似,但不是在内核和图像中的相应像素之间应用点积,而是对每个元素应用可学习非线性激活函数,然后相加。
实验首先在MNIST数据集和CIFAR-10数据集上进行了测试,然后在四种人体行为数据集上进行了测试,得到实验数据及可视化维度图。
以下是实验软硬件环境及参数配置:
在这里插入图片描述
在这里插入图片描述

2.2 模型在MNIST数据集上进行实验

MNIST数据集上不同模型准确率对比:
[图片]
在使用不同的模型在MNIST数据集上的识别准确率以及参数量和训练时间,可以发现KAN与MLP相比准确率并没有很大的不同,但是训练时间和参数量KAN比MLP大得多。

2.3 模型在CIFAR-10数据集上进行实验

CIFAR-10数据集上不同模型准确率对比:
[图片]
发现KAN比MLP在CIFAR-10数据集上的准确率高12.77%,表明其在复杂数据集上准确率要占优。
而对KAN进行优化过后的FasterKAN的训练时间达到了和MLP一样的效果。

2.4 KAN在MNIST数据集和CIFAR-10数据集的实验分析

质性分析:

  1. 模型复杂性:KAN模型可能在结构上更为复杂,因为它需要学习激活函数,这可能增加了模型的表达能力,但同时也增加了训练的难度和成本。
  2. 适用性:在简单数据集(如MNIST)上,KAN模型并没有显示出明显的优势,这可能是因为简单数据集的特征较为直观,传统模型如MLP已经足够有效。然而,在更复杂的数据集上,KAN模型的潜力得以展现,这表明更适合处理复杂任务。
  3. 训练速度:KAN模型的训练速度慢是一个明显的瓶颈,这与其结构复杂性有关。
  4. 参数量:KAN模型的参数量相对较多,这意味着它在某些任务上能够以较少的层数实现高精度,但小任务上不如MLP。
    量化分析:
  5. 识别准确率:在MNIST数据集上,CNN模型的准确率最高(99.20%),而KAN模型的准确率为97.25%,略低于CNN,但高于MLP(96.24%)。在CIFAR-10数据集上,CNN模型的准确率(73.31%)高于KAN(55.00%),显示出在图像识别任务上,传统的CNN模型仍然具有优势。
  6. 训练时间:在MNIST数据集上,MLP模型的训练时间最短(59.25秒),而KAN模型的训练时间为92.41秒,显示出KAN模型在训练效率上的不足。在CIFAR-10数据集上,MLP模型的训练时间同样最短(99.05秒),而KAN模型的训练时间为153.61秒,进一步证实了KAN模型训练速度慢的问题。
  7. 参数量:在MNIST数据集上,MLP_KAN模型的参数量最大(508160),而KAN模型的参数量为459114,这表明KAN模型在参数量上相对较大,需要更多的计算资源。

2.5 KAN在WISDM数据集进行实验

WISDM数据集上不同模型准确率对比:
[图片]
在使用不同的模型在WISDM数据集上的识别准确率,可以发现KAN与其他模型相比,识别准确率是最低的。

2.6 KAN在UCI-HAR数据集进行实验

UCI-HAR数据集上不同模型准确率对比:
在这里插入图片描述
在使用不同的模型在UCI-HAR数据集上的识别准确率,KAN与除MLP之外的模型相比,识别准确率不如其他模型,但是相较于MLP,KAN的识别准确率提高了0.92%。

2.7 KAN在PAMAP2数据集进行实验

PAMAP2数据集上不同模型准确率对比:
在这里插入图片描述
在使用不同的模型在PAMAP2数据集上的识别准确率,此时的识别准确率与其他模型相比相比,KAN和MLP都达到了最高。

2.8 KAN在OPPORTUNITY数据集进行实验

OPPORTUNITY数据集上不同模型准确率对比:
在这里插入图片描述

在使用不同的模型在OPPORTUNITY数据集上的识别准确率,KAN此时的识别准确率达到了最高,而且识别准确率比第二高的MLP都要多出1.45%。

2.9 KAN在四种人体行为数据集上的实验分析

质性分析:

  1. 模型复杂性:KAN模型的复杂性源于其设计中包含的知识感知机制,这涉及到学习激活函数或其他高级特征。这种复杂性提高了模型的表达能力,但也可能增加了训练的难度和成本。
  2. 适用性:在人体行为识别任务中,KAN模型在PAMAP2数据集上的表现尤为突出,这表明它在处理复杂和多样化的行为模式时具有优势。这是因为人体行为数据通常包含丰富的时序信息和复杂的动态变化,KAN模型能够更好地捕捉这些特征。
  3. 训练速度:KAN模型的训练速度较慢,在实际应用中,这需要更多的计算资源和时间,尤其是在处理大规模数据集时。
  4. 参数量:KAN模型具有较多的参数,这有助于它在复杂任务上实现高精度。然而,在参数量和模型性能之间需要找到平衡,以避免过拟合和不必要的计算开销。
    量化分析:
  5. 识别准确率:在提供的四个数据集中,KAN模型在PAMAP2数据集上达到了最高的准确率(97.26%),这表明它在处理该数据集的特定任务时非常有效。在其他数据集上,KAN的表现也相对稳定,平均准确率为94.115%。
  6. 参数量:KAN模型的复杂性暗示它具有较多的参数,这有助于提高模型的准确性,但也增加计算资源的需求。

2.10 KAN实验总结

1.模型复杂性与表达能力: KAN模型由于其知识感知机制和学习激活函数的设计,具有较高的模型复杂性。这种复杂性赋予了模型强大的表达能力,使其能够捕捉和学习数据中的复杂特征。然而,这也带来了训练难度的增加和对计算资源的更高需求。
2.适用性与任务匹配: KAN模型在处理复杂数据集,如PAMAP2人体行为数据集时,展现出了显著的优势,这表明它更适合于复杂任务。在简单数据集如MNIST上,KAN模型并未显示出明显优势,说明在简单任务上,传统模型可能更为合适。这提示我们在选择模型时需要考虑任务的复杂性和数据集的特性。
3.训练效率与资源需求: KAN模型的训练速度较慢,这在MNIST和CIFAR-10数据集的实验中得到了体现。较长的训练时间意味着在实际应用中可能需要更多的计算资源和时间投入。这一点在资源有限或对训练速度有要求的场景下需要特别考虑。
4.准确率与参数量的权衡: KAN模型在人体行为数据集上的平均准确率为94.115%,显示出良好的性能。同时,其较大的参数量有助于提高模型在复杂任务上的准确性,但也可能增加过拟合的风险和计算资源的需求。在实际应用中,需要在模型的准确性和参数量之间找到平衡点,以避免不必要的计算开销和过拟合问题。
综上所述,KAN模型在处理复杂任务时具有潜力,但在选择使用时需要考虑其对计算资源的需求、训练效率以及与任务特性的匹配度。在资源充足且任务复杂性高的情况下,KAN模型是一个值得考虑的选择。

三、为什么选择KAN网络模型

3.1 更小的参数和规模

在数据拟合任务上研究者发现:
一个中等规模的KAN(如256个隐藏单元)就可以达到或超过一个大规模MLP(如1024个隐藏单元)的性能,
而参数量仅为后者的六分之一左右。这表明,KAN能够用更紧凑的模型取得与大模型相当甚至更优的效果。
理论分析和实证结果均表明:
KAN具有比MLP更优越的神经缩放定律。随着模型规模的增大,KAN的性能提升速度显著快于MLP。当任务复杂度足够高时,要达到相同的准确率,所需的KAN规模远小于MLP,如下图作者得到的实验室数据 。
[图片]

3.2 可解释性方面的优势

可解释性是KAN的另一大亮点。得益于简洁的结构和直观的权重函数,KAN非常容易可视化和解释。在解释之前,先通过稀疏正则化对KAN进行训练,然后剪枝,剪枝后的 KAN更容易解释。

3.2.1 稀疏化

线性权重被可学习的激活函数取代,因此需定义这些激活函数的 L1范数,激活函数的 L1 范数定义为其 Np个输入的平均幅度;单独L1范 数不足以实现 KAN 的稀疏化,还需要额外的熵正则化。

3.2.2 可视化

将激活函数 Φl,i,j的透明度设置为与 tanh(βAl,i,j) 成正比,β = 3

3.2.3 剪枝

经过稀疏化惩罚训练后,一般还需要将网络修剪成更小的子网。在节点级别对 KAN 进行稀疏化,所有不重要的神经元都被修剪。

3.2.4 符号化

如果猜测某些激活函数实际上是符号函数(例如cos或log),则提供一个接口将其设置为指定的符号形式,例如fix_symbolic(l,i,j,f) 可以设置 (l , i, j) 激活为 f。从样本中获得预激活x 和后激活y,并拟合仿射参数(a, b, c, d),使得 y ≈ cf (ax + b) + d
[图片]

3.3 KAN提供新思路

KAN为神经网络的设计和应用开辟了一条全新道路。重新思考MLP的局限性,引入了革命性的改进——可学习的边激活函数。KAN提供了一种更简单高效的神经网络,在准确性和可解释性方面展现出巨大优势。
当前,以transformer为代表的大模型在众多领域一统江湖,但它们大都基于MLP构建,并未从根本上突破 MLP的桎梏,KAN为改进这些模型提供了新思路。KAN所特有的可解释性,带来更透明、更易理解的深度学习技术,提高人工智能的可信度,其潜力在未来有机会得到进一步的发掘。
[图片]

3.4 KAN的争议与肯定

关于KAN的争议也没有停止,例如七月底新加坡国立大学的论文《KAN or MLP: A Fairer Comparison》发现KAN仅在符号公式表示方面优于MLP,但在机器学习、计算机视觉、NLP和音频处理等其他任务上仍低于 MLP。
但无论怎样,在通过堆砌越来越大的网络来提升 AI 性能的当下,KAN 探索深度学习底层新路线的精神是值得肯定的。
[图片]

文末送书

本期推荐1:

《AI智能运营从入门到精通》
巧用AI大模型,带你深度解析用户洞察+精准策略+智能创作+数据模型,构建你的竞争壁垒。
关键点
在这里插入图片描述

京东:https://item.jd.com/14809514.html

★站在运营视角解读AI技术:AI 的底层逻辑与应用方法。
★AI构建精细化运营策略:利用AI画像分层用户,积分激励提升价值,基于生命周期理论,个性化推荐促精细化运营。
★AI智能内容创作助手:助您构建创意选题库,策划高质量脚本,降低内容重复率,训练文案打造爆款标题,生成调研问卷洞悉需求,分析文本偏好,以RSM模型规划活动,并自动撰写运营周报。
★AI驱动数据分析决策:AI作为数据分析的强大助手,不仅加速了决策效率,还提供了从基础到进阶的全面运营数据分析能力。
内容简介
本书从多个方面介绍了如何整合AI技术进行运营工作,包括AI与用户运营的融合、精细化运营策略的构建、智能内容创作助手的运用、AI驱动分析决策。
读者可以通过本书学习如何利用AI处理运营工作,从而更好地满足目标受众需求,提高内容质量,做出更准确的决策,并提升工作效率。本书内容丰富实用,旨在帮助读者适应

本期推荐2:

《AI智能运营从入门到精通》
Blender 2D动画制作指南:软件基础+蜡笔应用+动画原理+3D辅助+角色设计+场景设计+渲染导出,全方位展示Blender 2D动画设计制作全流程。
在这里插入图片描述

京东:https://item.jd.com/14833184.html

关键点
1.专业保证:Blender 中国社区官方推荐;笔者作为软件中国区大版主,对动画行业的发展有精准把握。
2.跨界融合:集3D动画空间感与2D动画绘画感于一体,打破次元壁,创造全新视觉体验。
3.全流程覆盖:从软件基础到角色设计、场景设计、渲染导出,全方位展示Blender 2D动画设计制作流程。
4.实战教学:图文步骤+视频教学+源文件包+效果展示,助你快速上手,轻松掌握动画制作精髓。
5.进阶提升:夯实基础+进阶修炼+精美案例+商业标准,助你实现从新手到高手的华丽蜕变。
内容简介
Blender 是一款功能强大、免费且开源的图形图像软件,它集成了建模、动画、材质设计、渲染、音频处理及视频剪辑等功能,为动画短片的制作提供了一站式解决方案。本书专注于指导读者利
用 Blender 进行二维动画制作,深入剖析其在蜡笔模式下的各类工具、修改器及视觉特效工具,全面探索该模式下的功能特性。通过综合运用这些工具与多样化的表现形式,读者将学会如何绘制并创作出富有创意的二维动画短片,同时还将探索 Blender 在 2D 动画领域的更多绘制技巧与表现方式。
本书非常适合对 Blender 感兴趣,想要学习新型的动画创作方法的零基础 2D 动画爱好者。此外,它也非常适合动画、动漫、新媒体艺术、数字创意设计等相关专业的师生及从业者作为教学参考书或专业指南。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLO11改进-模块-引入星型运算Star Blocks

当前网络设计中,“星型运算”(逐元素乘法)的应用原理未被充分探究,潜力有待挖掘。为解决此问题,我们引入 Star Blocks,其内部由 DW - Conv、BN、ReLU 等模块经星型运算连接,各模块有特定参数。同…

3.银河麒麟V10 离线安装Nginx

1. 下载nginx离线安装包 前往官网下载离线压缩包 2. 下载3个依赖 openssl依赖,前往 官网下载 pcre2依赖下载,前往Git下载 zlib依赖下载,前往Git下载 下载完成后完整的包如下: 如果网速下载不到请使用网盘下载 通过网盘分享的文件…

【理解机器学习中的过拟合与欠拟合】

在机器学习中,模型的表现很大程度上取决于我们如何平衡“过拟合”和“欠拟合”。本文通过理论介绍和代码演示,详细解析过拟合与欠拟合现象,并提出应对策略。主要内容如下: 什么是过拟合和欠拟合? 如何防止过拟合和欠拟…

【婚庆摄影小程序设计与实现】

摘 要 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。所以各大互联网厂商都瞄准移动互联网这个潮…

12.26 学习卷积神经网路(CNN)

完全是基于下面这个博客来进行学习的,感谢! ​​【深度学习基础】详解Pytorch搭建CNN卷积神经网络LeNet-5实现手写数字识别_pytorch cnn-CSDN博客 基于深度神经网络DNN实现的手写数字识别,将灰度图像转换后的二维数组展平到一维,…

Unity URP多光源支持,多光源阴影投射,多光源阴影接收(优化版)

目录 前言: 一、属性 二、SubShader 三、ForwardLitPass 定义Tags 声明变体 声明变量 定义结构体 顶点Shader 片元Shader 四、全代码 四、添加官方的LitShader代码 五、全代码 六、效果图 七、结语 前言: 哈喽啊,我又来啦。这…

如何使用React,透传各类组件能力/属性?

在23年的时候,我主要使用的框架还是Vue,当时写了一篇“如何二次封装一个Vue3组件库?”的文章,里面涉及了一些如何使用Vue透传组件能力的方法。在我24年接触React之后,我发现这种扩展组件能力的方式有一个专门的术语&am…

109.【C语言】数据结构之求二叉树的高度

目录 1.知识回顾:高度(也称深度) 2.分析 设计代码框架 返回左右子树高度较大的那个的写法一:if语句 返回左右子树高度较大的那个的写法二:三目操作符 3.代码 4.反思 问题 出问题的代码 改进后的代码 执行结果 1.知识回顾&#xf…

分析排名靠前的一些自媒体平台,如何运用这些平台?

众所周知,现在做网站越来越难了,主要的原因还是因为流量红利时代过去了。并且搜索引擎都在给自己的平台做闭环改造。搜索引擎的流量扶持太低了。如百度投资知乎,给知乎带来很多流量扶持,也为自身内容不足做一个填补。 而我们站长…

2024大模型在软件开发中的具体应用有哪些?(附实践资料合集)

大模型在软件开发中的具体应用非常广泛,以下是一些主要的应用领域: 自动化代码生成与智能编程助手: AI大模型能够根据开发者的自然语言描述自动生成代码,减少手动编写代码的工作量。例如,GitHub Copilot工具就是利用AI…

Ubuntu网络配置(桥接模式, nat模式, host主机模式)

windows上安装了vmware虚拟机, vmware虚拟机上运行着ubuntu系统。windows与虚拟机可以通过三种方式进行通信。分别是桥接模式;nat模式;host模式 一、桥接模式 所谓桥接模式,也就是虚拟机与宿主机处于同一个网段, 宿主机…

3.系统学习-熵与决策树

熵与决策树 前言1.从数学开始信息量(Information Content / Shannon information)信息熵(Information Entropy)条件熵信息增益 决策树认识2.基于信息增益的ID3决策树3.C4.5决策树算法C4.5决策树算法的介绍决策树C4.5算法的不足与思考 4. CART 树基尼指数(基尼不纯度…

SpringBoot + HttpSession 自定义生成sessionId

SpringBoot HttpSession 自定义生成sessionId 业务场景实现方案 业务场景 最近在做用户登录过程中,由于默认ID是通过UUID创建的,缺乏足够的安全性,决定要自定义生成 sessionId。 实现方案 正常的获取session方法如下: HttpSe…

破解海外业务困局:新加坡服务器托管与跨境组网策略

在当今全球化商业蓬勃发展的浪潮之下,众多企业将目光投向海外市场,力求拓展业务版图、抢占发展先机。而新加坡,凭借其卓越的地理位置、强劲的经济发展态势以及高度国际化的营商环境,已然成为企业海外布局的热门之选。此时&#xf…

数学课程评价系统:客户服务与教学支持

2.1 SSM框架介绍 本课题程序开发使用到的框架技术,英文名称缩写是SSM,在JavaWeb开发中使用的流行框架有SSH、SSM、SpringMVC等,作为一个课题程序采用SSH框架也可以,SSM框架也可以,SpringMVC也可以。SSH框架是属于重量级…

攻防世界web第三题file_include

<?php highlight_file(__FILE__);include("./check.php");if(isset($_GET[filename])){$filename $_GET[filename];include($filename);} ?>惯例&#xff1a; 代码审查&#xff1a; 1.可以看到include(“./check.php”);猜测是同级目录下有一个check.php文…

【深度学习环境】NVIDIA Driver、Cuda和Pytorch(centos9机器,要用到显示器)

文章目录 一 、Anaconda install二、 NIVIDIA driver install三、 Cuda install四、Pytorch install 一 、Anaconda install Step 1 Go to the official website: https://www.anaconda.com/download Input your email and submit. Step 2 Select your version, and click i…

寻找适合小户型的开源知识库open source knowledge base之路

寻找一个开源的知识库&#xff0c;为了把以前花很多时间收集的信息或是项目/课程资料放到一个容易归类和管理的私有自主系统中&#xff0c;以便更容易查阅&#xff0c;花更少时间收集、对比版本及分享等一系列管理工作&#xff0c;同时确保在需要时可以相对快速找到有用的资料&…

C语言勘破之路-最终篇 —— 预处理(上)

人无完人&#xff0c;持之以恒&#xff0c;方能见真我&#xff01;&#xff01;&#xff01; 共同进步&#xff01;&#xff01; 文章目录 一、预定义符号二、#define定义常量三.、#define定义宏四、带有副作用的宏参数五、宏替换的规则六、宏和函数的对比1.宏的优势2.函数的优…

学习threejs,THREE.RingGeometry 二维平面圆环几何体

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.RingGeometry 圆环几…