MLP的代替:KAN

news2024/9/20 15:03:37

受柯尔莫哥洛夫-阿诺德表示定理的启发,作者提出柯尔莫哥洛夫-阿诺德网络(KAN)作为多层感知器(MLP)有前途的替代品。MLP 在节点(“神经元”)上具有固定的激活函数,而 KAN 在边(“权重”)上具有可学习的激活函数。KAN 没有线性权重----每个权重参数都被参数化为spline的单变量函数所取代。作者证明,这种看似简单的改变使得 KAN 在准确性和可解释性方面优于 MLP。就准确性而言,在数据拟合和 PDE 求解中,较小的 KAN 可以比较大的 MLP 获得可比或更好的准确性。从理论上和经验上来说,KAN 比 MLP 拥有更快的神经尺度法则(neural scaling laws:随着模型参数的增加,测试损失减小)。对于可解释性,KAN 可以直观地可视化,并且可以轻松地与人类交互。通过数学和物理领域的两个例子,KAN 被证明是有用的“合作者”,帮助科学家(重新)发现数学和物理定律。总之,KAN 是 MLP 的有前途的替代品,为进一步改进当今严重依赖 MLP 的深度学习模型提供了机会。

来自:KAN: Kolmogorov–Arnold Networks

目录

  • 引言
  • KAN
    • Kolmogorov-Arnold表示理论
    • KAN架构
      • 实现细节
    • 化简KAN使其可解释
  • 思考

引言

多层感知器 MLP,也称为全连接前馈神经网络,是当今深度学习模型的基础构建块。MLP 的重要性怎么强调都不为过,因为它们是机器学习中用于逼近非线性函数的默认模型,MLP的表达能力由通用逼近定理保证。然而,MLP 是我们可以构建的最好的非线性回归器吗?尽管 MLP 被广泛使用,但它们也有明显的缺点。 例如,在 Transformer 中,MLP 占用几乎所有参数,并且在没有后期分析工具的情况下难以解释。

作者提出了一种有希望的MLP替代方案,称为Kolmogorov-Arnold网络 KANs。MLP受到通用近似定理的启发,而KAN则受到Kolmogorov-Arnold表示定理的启发。与MLP一样,KAN具有全连接的结构。然而,MLP将固定的激活函数放在节点(“神经元”)上,而KAN将可学习的激活函数放在边(“权重”)上,如图0.1所示。因此,KAN根本没有线性权重矩阵:取而代之的是,每个权重参数都被一个可学习的一维函数参数化为spline所取代。KAN的节点只是简单地对输入信号求和,而不应用任何非线性。
fig1

  • 图0.1:MLP与KAN的比较。

有人可能会担心,由于每个MLP的权重参数都变成了KAN的spline,因此KAN的成本非常昂贵。幸运的是,KAN拥有比MLP更小的规模。比如:对于PDE solving,2层,每层宽度10的KAN比4层,每层宽度100的MLP精确100倍( 1 0 − 7 10^{−7} 107 vs 1 0 − 5 10^{−5} 105 MSE),参数效率高100倍( 1 0 2 10^{2} 102 vs 1 0 4 10^{4} 104参数)。

其实之前已经有很多研究使用Kolmogorov-Arnold表示定理构建神经网络。然而,大多数工作都坚持使用原始的depth-2 width-(2 n n n+1),并且没有利用更现代的技术,例如反向传播来训练网络。KAN的贡献在于将原始的Kolmogorov-Arnold表示推广到任意宽度和深度,并在今天的深度学习世界中重新激活它,以及使用广泛的实验来突出其作为AI+Science基础模型的优势,因为它的准确性和可解释性。

KAN是spline和MLP的组合,利用各自的优势并避免各自的弱点。spline对于低维函数是精确的,易于局部调整,并且能够在不同的分辨率之间切换。然而,spline曲线由于无法利用组合结构而存在严重的COD(维数诅咒)。另一方面,MLP由于其特征学习而较少受到COD的影响,但由于其无法优化单变量函数,因此在低维情况下不如spline曲线准确。

为了准确地学习一个函数,一个模型不仅要学习组成结构(外部自由度),而且要很好地近似单变量函数(内部自由度)。KAN是这样的模型,因为它们在外部有MLP,在内部有spline。因此,KAN不仅可以学习特征(由于它们与MLP的外部相似性),而且还可以以很高的精度优化这些学习到的特征(由于它们与spline的内部相似性)。比如,给定一个高维函数: f ( x 1 , . . . , x N ) = e x p ( 1 N ∑ i = 1 N s i n 2 ( x i ) ) f(x_{1},...,x_{N})=exp(\frac{1}{N}\sum_{i=1}^{N}sin^{2}(x_{i})) f(x1,...,xN)=exp(N1i=1Nsin2(xi)) N N N较大时,由于COD的影响,spline失效;MLP可以潜在地学习广义加性结构,但它们对于用ReLU激活来近似指数函数和正弦函数是非常低效的。相比之下,KANs可以很好地学习组合结构和单变量函数,因此在很大程度上优于MLP(见图3.1)。

fig2

  • 图3.1:用5个toy例子来比较KAN和MLP。KAN 几乎可以实现理论预测的最快缩放定律,而 MLP 的缩放定律很缓慢。

KAN

MLP的灵感来自于通用近似定理。本节组织形式为:

  • 回顾Kolmogorov-Arnold定理
  • Kolmogorov-Arnold网络的设计
  • 提出简化技术以使KANs可解释

Kolmogorov-Arnold表示理论

Vladimir Arnold和Andrey Kolmogorov证明了如果 f f f是一个有界域上的多元连续函数,那么 f f f可以写成单变量连续函数的有限复合,更具体的,对于函数 f : [ 0 , 1 ] n → R f:[0,1]^{n}\rightarrow\mathbb{R} f:[0,1]nR f ( x ) = f ( x 1 , . . . , x n ) = ∑ q = 1 2 n + 1 Φ q ( ∑ p = 1 n ϕ q , p ( x p ) ) (2.1) f(\textbf{x})=f(x_{1},...,x_{n})=\sum_{q=1}^{2n+1}\Phi_{q}(\sum_{p=1}^{n}\phi_{q,p}(x_{p}))\tag{2.1} f(x)=f(x1,...,xn)=q=12n+1Φq(p=1nϕq,p(xp))(2.1)其中, ϕ q , p : [ 0 , 1 ] → R \phi_{q,p}:[0,1]\rightarrow\mathbb{R} ϕq,p:[0,1]R Φ q : R → R \Phi_{q}:\mathbb{R}\rightarrow\mathbb{R} Φq:RR。从某种意义上说,他们证明了唯一真正的多元函数是加法,因为所有其他函数都可以用一元函数与求和来表示。有人可能会天真地认为这对机器学习来说是个好消息:学习一个高维函数可以归结为学习一个多项式数量的一维函数。然而,这些一维函数可能是非平滑的,甚至是分形的,因此在实践中可能无法学习。由于这种病态的行为,Kolmogorov-Arnold表示定理在机器学习中基本上被判了死刑,被认为理论上是正确的,但实际上毫无用处。

然而,作者对Kolmogorov-Arnold定理在机器学习中的有用性更为乐观:

  • 首先,不需要拘谨于原始的Eq.(2.1),它只有两层非线性和隐藏层中少量的项(2 n n n+1):作者将网络推广到任意的宽度和深度。
  • 其次,科学和日常生活中的大多数函数通常是光滑的,并且具有稀疏的组成结构,这有助于光滑的Kolmogorov-Arnold表示。这里的哲学接近于物理学家的心态,他们通常更关心典型的情况,而不是最坏的情况。

KAN架构

假设我们有一个由输入输出对 { x i , y i } \left\{\textbf{x}_{i},y_{i}\right\} {xi,yi}组成的监督学习任务,我们想要找到一个 f f f对所有data point有 y i ≈ f ( x i ) y_{i}\approx f(\textbf{x}_{i}) yif(xi)。Eq.(2.1)暗示,如果我们能找到合适的单变量函数 ϕ q , p \phi_{q,p} ϕq,p Φ q \Phi_{q} Φq,我们就完成了。这启发作者设计一个神经网络,显式参数化Eq.(2.1)。由于所有需要学习的函数都是单变量函数,我们可以将每个一维函数参数化为一条B-spline,以及具有局部B-spline基函数的可学习系数(见图2.2右)。
fig3

  • 图2.2:左----流经网络的激活符号(从下往上前向计算)。右----激活函数被参数化为B-spline,它允许在粗粒度和细粒度网格之间切换。

现在我们有了一个KAN的原型,其计算图由Eq.(2.1)精确指定,如图0.1 b所示(输入维数 n n n=2),表现为一个两层神经网络,激活函数放置在边缘而不是节点上(对节点进行简单求和),中间层宽度为 2 n n n + 1。

如前所述,这样的网络被认为太简单,无法在实践中任意地用光滑spline近似任何函数!因此,作者希望将KAN扩展到更宽和更深。目前还不清楚如何使KAN更深,因为Kolmogorov-Arnold表示对应于两层的KAN。然而,目前还没有一个“一般化”版本的定理对应于更深层次的KAN。

作者注意到MLP和KAN之间的类比时,突破出现了。在MLP中,一旦定义了一个层(它由线性变换和非线性组成),我们就可以堆叠更多的层来使网络更深。为了建立更深的KAN,我们应该首先回答:什么是KAN layer?事实证明,具有 n i n n_{in} nin-dim输入和 n o u t n_{out} nout-dim输出的KAN层可以定义为一维函数的矩阵: Φ = { ϕ q , p } ,    p = 1 , 2 , . . . , n i n ,    q = 1 , 2 , . . . , n o u t (2.2) \Phi=\left\{\phi_{q,p}\right\},\thinspace\thinspace p=1,2,...,n_{in},\thinspace\thinspace q=1,2,...,n_{out}\tag{2.2} Φ={ϕq,p},p=1,2,...,nin,q=1,2,...,nout(2.2)其中 ϕ q , p \phi_{q,p} ϕq,p有可学习参数,在Kolmogov-Arnold定理中,内部函数形成一个 n i n = n , n o u t = 2 n + 1 n_{in}=n,n_{out}=2n+1 nin=n,nout=2n+1的KAN层,外部函数形成一个 n i n = 2 n + 1 , n o u t = n n_{in}=2n+1,n_{out}=n nin=2n+1,nout=n的KAN层。因此,Eq.(2.1)中的Kolmogov-Arnold表示只是两个KAN层的简单组合。现在很清楚拥有更深的Kolmogorov-Arnold表示意味着什么:简单地堆叠更多的KAN层!

作者引入一些符号。这段话有点技术性,但我们可以参考图2.2-左来获得具体的例子和直观的理解。KAN的形状由整数数组表示: [ n 0 , n 1 , . . . , n L ] [n_{0},n_{1},...,n_{L}] [n0,n1,...,nL]其中, n i n_{i} ni是计算图第 i i i层的节点数量。用 ( l , i ) (l,i) (l,i)表示第 l l l层的第 i i i个神经元,用 x l , i x_{l,i} xl,i表示 ( l , i ) (l,i) (l,i)神经元的激活值。在第 l l l层和第 l + 1 l+1 l+1层之间,有 n l n l + 1 n_{l}n_{l+1} nlnl+1个激活函数:连接 ( l , j ) (l, j) (l,j) ( l + 1 , i ) (l +1, i) (l+1,i)的激活函数表示为 ϕ l , i , j ,    l = 0 , . . . , L − 1 ,    i = 1 , . . . , n l + 1 ,    j = 1 , . . . , n l \phi_{l,i,j},\thinspace\thinspace l=0,...,L-1,\thinspace\thinspace i=1,...,n_{l+1},\thinspace\thinspace j=1,...,n_{l} ϕl,i,j,l=0,...,L1,i=1,...,nl+1,j=1,...,nl其中, ϕ l , i , j \phi_{l,i,j} ϕl,i,j的激活之前是 x l , i x_{l,i} xl,i ϕ l , i , j \phi_{l,i,j} ϕl,i,j的激活之后被记为 x ~ l , i , j = ϕ l , i , j ( x l , i ) \widetilde{x}_{l,i,j}=\phi_{l,i,j}(x_{l,i}) x l,i,j=ϕl,i,j(xl,i) ( l + 1 , j ) (l + 1, j) (l+1,j)神经元的激活值就是所有传入的后激活值之和: x l + 1 , j = ∑ i = 1 n l x ~ l , i , j = ∑ i = 1 n l ϕ l , i , j ( x l , i ) ,    j = 1 , . . . , n l + 1 (2.5) x_{l+1,j}=\sum_{i=1}^{n_{l}}\widetilde{x}_{l,i,j}=\sum_{i=1}^{n_{l}}\phi_{l,i,j}(x_{l,i}),\thinspace\thinspace j=1,...,n_{l+1}\tag{2.5} xl+1,j=i=1nlx l,i,j=i=1nlϕl,i,j(xl,i),j=1,...,nl+1(2.5)在矩阵形式中,有:
eq1
其中, Φ l \Phi_{l} Φl是第 l l l层KAN对应的函数矩阵。一般的KAN网络是 L L L层的组合:给定一个输入向量 x 0 ∈ R n 0 \textbf{x}_{0}\in\mathbb{R}^{n_{0}} x0Rn0,KAN的输出为: K A N ( x ) = ( Φ L − 1 ∘ Φ L − 2 ∘ ⋅ ⋅ ⋅ ∘ Φ 1 ∘ Φ 0 ) x KAN(\textbf{x})=(\Phi_{L-1}\circ\Phi_{L-2}\circ\cdot\cdot\cdot\circ\Phi_{1}\circ\Phi_{0})\textbf{x} KAN(x)=(ΦL1ΦL2Φ1Φ0)x也可以重写上述方程,假设输出维数 n L = 1 n_{L}=1 nL=1,则有 f ( x ) = K A N ( x ) f(\textbf{x})=KAN(\textbf{x}) f(x)=KAN(x)
eq2
原始Kolmogorov-Arnold表示Eq.(2.1)对应于形状为 [ n , 2 n + 1 , 1 ] [n, 2n + 1,1] [n,2n+1,1]的2层KAN。所有的运算都是可微的,所以我们可以用反向传播来训练KAN。为了比较,一个MLP可以写成仿射变换 W \textbf{W} W和非线性 σ σ σ的交织: M L P ( x ) = ( W L − 1 ∘ σ ∘ W L − 2 ∘ σ ∘ ⋅ ⋅ ⋅ ∘ W 1 ∘ σ ∘ W 0 ) x MLP(\textbf{x})=(\textbf{W}_{L-1}\circ\sigma\circ\textbf{W}_{L-2}\circ\sigma\circ\cdot\cdot\cdot\circ\textbf{W}_{1}\circ\sigma\circ\textbf{W}_{0})\textbf{x} MLP(x)=(WL1σWL2σW1σW0)x很明显,MLP将线性变换和非线性分别处理为 W \textbf{W} W σ σ σ,而KAN在 Φ Φ Φ中将它们一起处理。在图0.1 ©和(d)中,可视化了三层MLP和三层KAN,以澄清它们的区别。

实现细节

1.残差激活函数
我们包含一个基函数 b ( x ) b(x) b(x)(类似于残差连接),使得激活函数 ϕ ( x ) \phi(x) ϕ(x)是基函数 b ( x ) b(x) b(x)和spline函数的和: ϕ ( x ) = w ( b ( x ) + s p l i n e ( x ) ) \phi(x)=w(b(x)+spline(x)) ϕ(x)=w(b(x)+spline(x))设置 b ( x ) = s i l u ( x ) = x 1 + e − x b(x)=silu(x)=\frac{x}{1+e^{-x}} b(x)=silu(x)=1+exx在大部分情况下,spline函数被参数化为B-spline的线性组合: s p l i n e ( x ) = ∑ i c i B i ( x ) spline(x)=\sum_{i}c_{i}B_{i}(x) spline(x)=iciBi(x)其中, c i c_{i} ci是可学习的。原则上 w w w是多余的,因为它可以被吸收到 b ( x ) b(x) b(x) s p l i n e ( x ) spline(x) spline(x)中。然而,我们仍然包括这个 w w w因子,以更好地控制激活函数的总体大小。

2.初始化scales
每个激活函数初始化为 s p l i n e ( x ) ≈ 0 spline(x)\approx 0 spline(x)0

3.更新spline grids
作者根据输入激活动态更新每个网格。

化简KAN使其可解释

这个想法是从一个足够大的KAN开始,用稀疏性正则化训练它,然后进行修剪。作者将证明这些经过修剪的KAN比未经过修剪的KAN更易于解释。

1.稀疏化
对于MLP,线性权重的L1正则化用于支持稀疏性。KAN可以适应这个高层次的想法,但需要两个修改:

  • 在KAN中没有线性的“权重”。线性权重被可学习的激活函数所取代,因此我们应该定义这些激活函数的L1范数。
  • 实验发现L1不足以使KAN稀疏化;相反,一个额外的熵正则化是必要的。

定义激活函数 ϕ \phi ϕ的L1范数为在 N p N_{p} Np输入上的平均幅度: ∣ ϕ ∣ 1 = 1 N p ∑ s = 1 N p ∣ ϕ ( x ( s ) ) ∣ |\phi|_{1}=\frac{1}{N_{p}}\sum_{s=1}^{N_{p}}|\phi(x^{(s)})| ϕ1=Np1s=1Npϕ(x(s))然后对于输入 n i n n_{in} nin和输出 n o u t n_{out} nout的KAN layer Φ \Phi Φ,其L1范数为: ∣ Φ ∣ 1 = ∑ i = 1 n i n ∑ j = 1 n o u t ∣ ϕ i , j ∣ 1 |\Phi|_{1}=\sum_{i=1}^{n_{in}}\sum_{j=1}^{n_{out}}|\phi_{i,j}|_{1} ∣Φ1=i=1ninj=1noutϕi,j1因此,训练目标为: l t o t a l = l p r e d + λ ∑ l = 0 L − 1 ∣ Φ l ∣ 1 l_{total}=l_{pred}+\lambda\sum_{l=0}^{L-1}|\Phi_{l}|_{1} ltotal=lpred+λl=0L1Φl1

2.可视化
当可视化KAN时,将激活函数的透明度设置为与 t a n h ( β A l , i , j ) tanh(β A_{l,i,j}) tanh(βAl,i,j)成比例,其中 β = 3 β = 3 β=3。因此,贡献较小的函数会逐渐消失,让我们专注于重要的函数。

3.修剪
在使用稀疏化惩罚进行训练后,我们可能还希望将网络修剪成更小的子网。作者在节点级别(而不是在边缘级别)对KANs进行稀疏化。对于每个节点(假设是第1层的第 i i i个神经元),作者将其传入和传出的分数定义为: I l , i = m a x k ( ∣ ϕ l − 1 , k , i ∣ 1 ) , O l , i = m a x j ( ∣ ϕ l + 1 , j , i ∣ 1 ) I_{l,i}=max_{k}(|\phi_{l-1,k,i}|_{1}),O_{l,i}=max_{j}(|\phi_{l+1,j,i}|_{1}) Il,i=maxk(ϕl1,k,i1),Ol,i=maxj(ϕl+1,j,i1)如果传入和传出的分数都大于阈值超参数 θ = 1 0 − 2 \theta=10^{-2} θ=102,则认为节点是重要的。不重要的节点被修剪。

4.符号化
在我们怀疑某些激活函数实际上是符号的情况下,例如,cos或log,作者提供了一个接口来将它们设置为指定的符号形式。

思考

KAN的设计看起来更像是为了求解物理公式,尤其是可解释性符号化部分的内容。在修剪的时候,我们可以发现保留的节点是随着输入动态改变的。尽管我一开始总在想KAN相比MLP有什么缺陷,但是现在我真的觉得KAN是代替MLP的一个未来方案。

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

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

相关文章

SAP CS07复制BOM简介

在比较大型的集团公司中会应用到这样一个场景,所有的BOM都是由总部研发统一管控,然后在下发到下属的工厂进行生产,当发生变更的时候BOM也是会随之进行变更。 同样的在相同的两家工厂中,使用的是一套的设计方案,并且当物料发起变更的时候BOM也要随之进行变更处理。 在对BO…

Linux程序开发(一):Linux基础入门安装和实操手册

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…

C语言之旅:自定义类型(联合和枚举)

目录 一.联合体 1.1 联合体的声明 1.2 联合体的使用 1.3 为什么输出 4呢? 1.4 相同成员的结构体和联合体对比 1.5 联合体大小对比 1.6使用联合体判断大小端 二.枚举类型 2.1枚举类型的例举: 2.2枚举类型的优点 2.3 枚举类型的使用 在上篇文章中…

如何利用命令提示符列出文件?这里提供了几个实例供你参考

序言 什么命令可以用来列出目录中的文件?如何在命令提示符Windows 10/11中列出文件?很多人对这些问题感到困惑。在这篇文章中,我们详细解释了命令提示符列出文件的主题。 CMD(命令提示符)是一个功能强大的Windows内置…

Python学习之路 | Python基础语法(二)

Python3 面向对象 封装、继承、多态。 基础 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中…

与禹老师学前端vue3学习汇总

24.5.15: 创建Vue3工程 1.确定自己电脑有没有nodejs环境,在cmd中输入node,如果出现Node.js的版本号说明已经有这个环境了,否则搜索Node.js安装 2.先在D盘创建一个文件夹Vue3_Study,然后在这个空文件夹中右键选择终端…

【069】基于SpringBoot+Vue实现的企业资产管理系统

系统介绍 基于SpringBootVue实现的企业资产管理系统管理员功能有个人中心,用户管理,资产分类管理,资产信息管理,资产借出管理,资产归还管理,资产维修管理。用户可以对资产进行借出和归还操作。因而具有一定…

Git系列:Git Switch 高效使用技巧

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

实时网络监控 - 一目了然网络状况

网络问题排查一直是IT管理员头痛的问题。随着网络规模的不断扩大和业务复杂度的提升,如何快速定位和解决网络故障变得尤为关键。本文详细介绍了一款名为 AnaTraf 的网络流量分析工具,它能提供全流量回溯分析、实时网络监控、性能分析等功能,助力企业快速诊断和解决各…

每日两题 / 236. 二叉树的最近公共祖先 124. 二叉树中的最大路径和(LeetCode热题100)

236. 二叉树的最近公共祖先 - 力扣(LeetCode) dfs统计根节点到p,q节点的路径,两条路径中最后一个相同节点就是公共祖先 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* …

鸿蒙 DevEcoStudio:简单实现网络请求登录案例

使用http或axios实现登录案例 在entry/src/main/ets/pages路径下新建Page9.ets文件: import http from ohos.net.http import router from ohos.router Entry Component struct Page9 {State message: string Hello WorldState username: string State password:…

学习了java编程后,你就只能做java程序员吗?

在开始前我有一些资料,是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! 学习了Java编程后,…

KNN算法用于回归分析

生成数据集 from sklearn.datasets import make_regression import matplotlib.pyplot as plt# 生成特征数量为1, 噪音为50的数据集 X, y make_regression(n_features1, n_informative1, noise50, random_state8)# 散点图 plt.scatter(X, y, c"orange",…

CTF例题:[SWPU2019]Web1(无列名注入)

网址:BUUCTF在线评测 搜索web1 启动靶机 点击链接进入题目 进入题目后发现有登录和注册接口,直接注册登录。 首先通过1进行测试,查看是否有注入点 出现报错,说明可能存在注入点 然后继续测试发现该服务器过滤了: or、…

SFTPGO 整合minio AD群组 测试 |sftpgo with minio and ldap group test

SFTP-GO 研究 最近在测试sftpgo,发现中文的资料比较少,在企业中很多存储开始支持S3,比如netapp 于是想尝试把文件服务器换成sftpgoS3的存储,sftp go和AD 群组的搭配测试比较少 自己测试了一把,觉得还是没有server-u的A…

三类银行互联网贷款迎新规!速看菊风信贷智能双录解决方案

​​继2020年《商业银行互联网贷款管理暂行办法》(下称《办法》)和2021年《关于进一步规范商业银行互联网贷款业务的通知》之后,时隔三年,股份制银行、城商行、民营银行(简称“三类银行”)互联网贷款业务再…

shell脚本实现linux系统自动化配置免密互信

目录 背景脚本功能脚本内容及使用方法 1.背景 进行linux自动化运维时需要先配置免密,但某些特定场景下,做了互信的节点需要取消免密,若集群庞大节点数量多时,节点两两之间做互信操作非常麻烦,比如有五个节点&#x…

C++二叉搜索树搜索二叉树二叉排序树

C二叉搜索树 1. 二叉搜索树的概念 二叉搜索树(BST,Binary Search Tree),也称为二叉排序树或二叉查找树。它与一般二叉树的区别在于:每个结点必须满足“左孩子大于自己,右孩子小于自己”的规则。在这种规则的约束下,二…

海外云手机的运作原理和适用场景

海外云手机是一种基于云计算技术的虚拟手机服务,通过将手机操作系统和应用程序托管在远程服务器上,实现用户可以通过互联网连接来使用和管理手机功能,而无需实际拥有物理手机。以下是有关海外云手机的相关信息: 海外云手机的运作原…

【Linux】-Linux的实用操作:快捷键与软件安装操作、构建软连接、日期时区的设置[4]

目录 一、各类小技巧(快捷键) 1、ctrl c 强制停止 2、ctrl d 退出或登出 3、历史命令搜索 4、光标移动快捷键 5、清屏 二、软件安装 1、yum命令 2、apt命令 - 扩展(ubuntu) 三、systemctl命令 四、软连接 1、ln命令…