论文笔记:Graph neural networks: A review of methods and applications

news2025/1/12 4:10:40

 1 GNN的设计pipeline

1.1 获取图结构

  • 结构化场景
    • 图结构在应用问题中是已知的
      • 比如分子结构、物理系统
  • 非结构化场景
    • 图结构在应用问题中是未知的
      • 需要根据任务人为地建图

1.2 判断图的类型 & 尺寸

  • 图的类型
    • 有向图/无向图//+
    • 异构图/同构图
      • 图中的点和边类型是不是一样的
    • 静态图/动态图
      • 如果输入特征/图的拓扑关系会随着时间变化,那么图是一个动态图
    • 这类类型之间是正交的,也就是可以有各种类型的组合
  • 尺寸
    • 没有明确的规定大图和小图
    • 评判标准会随着计算硬件设备的发展而变化
      • 在这篇论文中,如果邻接矩阵/拉普拉斯矩阵(O(n^2)复杂度)无法被设备存储,那么我们认为这是一个大图

1.3设计损失函数

  • 点级别的任务
    • 点分类、点回归、点聚类等
  • 边级别的任务
    • 边分类、连边预测
  • 图级别的任务
    • 图分类、图回归

  • 有监督图学习
    • 提供供训练的标签数据
  • 半监督学习
    • 提供少量标记节点和大量未标记节点进行训练
    • 测试阶段有两种配置:
      • 传导设置:要求模型预测给定未标记节点的标签
      • 归纳设置:提供相同分布下的新未标记节点进行推断
  • 无监督学习
    • 只提供未标记数据,供模型查找模式

1.4 创建模型

  • 传播模块
    • 在节点之间传播信息,以便聚合的信息可以捕获特征和拓扑信息
    • 通常使用卷积运算符和循环运算符来从邻居中聚合信息
    • skip-connection用于从节点的历史表示中收集信息并缓解过度平滑问题
  • 采样模块
    • graph很大的时候,通常需要采样模块来在图形上进行传播
  • 池化模块
    • 使用池化模块从节点中提取high-level信息

 2 计算模组介绍

 

2.1 传播模块(卷积算子)

  • 卷积算子是传播模块中最常使用的算子
    • 将其他领域中的卷积计算推广到图领域中
    • 可以分为:空域方法/谱域方法

2.1.1 谱域方法

  • 基于图的谱域表征
    • 在谱域方法中,首先利用图傅里叶转换F,将空域图信号x转换至谱域
      • F(x)=U^T(x)
    • 然后使用谱域上的卷积
    • 谱域卷积完成后,使用逆傅里叶转换将结果信号转换回去
      • F^{-1}(x)=Ux
    • U是正则化拉普拉斯矩阵L=I_N-D^{-\frac{1}{2}}AD^{-\frac{1}{2}}的特征向量组成的矩阵
      • D是图的度矩阵,A是图的邻接矩阵
      • 正则化拉普拉斯矩阵是一个对称半正定矩阵,所以他可以被分解成L=U\Lambda U^T,其中\Lambda是特征值组成的对角矩阵
  • ——>图上的谱域卷积可以表示成
    • U^Tg是谱域上的filter
      • 可以使用一个可学习的对角矩阵gw来简化之
        • 为什么可以用对角矩阵简化呢:

之后论文介绍了几种经典的谱域卷积方法,来研究不同的gw 

Spectral Network(2014)
  • 使用了一个可学习的对角矩阵作为图卷积的filter
    • gw=diag(w),w \in R^N是参数
  • 缺点
    • 计算效率低
    • 无法体现图中的空间关系
ChebNet(2016)

                       \tilde{L}=\frac{2}{\lambda_{max}}L-I_N

                        \lambda_{max}是L最大的特征值

                        \tilde{L}中的特征值是[-1,1]

                        此时的参数是w \in R^K(切比雪夫多项式的参数)

                        切比雪夫多项式T_k(x)=2xT_{k-1}(x)-T_{k-2}(x)

                        T_0(x)=1,T_1(x)=x

  • 优点:
    • 不用计算拉普拉斯矩阵的特征向量
    • 使用K阶切比雪夫多项式,相当于感受野是到K阶邻居
GCN(2017)
  • 将ChebNet中卷积操作的K简化为1,以减缓过拟合问题

    • 进一步假定\lambda_{max}=2,这样ChebNet中的公式(4)可以简化为:
      • 此时只剩两个参数w0和w1

        • GCN进一步简化参数量,使得w0=-w1,于是公式 (5)又变成:

    • 在(6)的基础上,GCN为了解决梯度消失/爆炸的问题,进一步提出了重规范化(renormalization)
      • I_N+D^{-0.5}AD^{-0.5} \rightarrow \tilde{D}^{-0.5}\tilde{A}\tilde{D}^{-0.5}
        • \tilde{A}=A+I_N
        • \tilde{D_{ii}}=\sum_j\tilde{A_{ij}}
    • ——>最终GCN的形式为
      •  
AGCN(2018)
  • 前面的模型都使用原始图结构来表示节点之间的关系。
  • 然而,不同节点之间可能存在隐含的关系。
  • ——>AGCN学习一个“残差”图拉普拉斯矩阵,并将其添加到原始拉普拉斯矩阵中。

 

DGCN(2018)
  • 同时考虑局部依赖关系和全局依赖关系
    • 局部依赖关系:类似于GCN
    • 全局依赖关系
      • 将GCN中的邻接矩阵替换成正向逐点互信息矩阵Ap(postive mutual information matrix PPMI)
      •  
GWNN(2019)
  • 使用小波变换替代傅里叶变换
  • 优点:
    • 图小波变换可以快速获得,无需矩阵分解

图小波神经网络(GWNN)(Xu等人,2019a)使用图小波变换来替代图傅里叶变换。它具有几个优点:(1)图小波可以快速获得,无需进行矩阵分解;(2)图小波是稀疏且局部化的,因此结果更好且更可解释。GWNN在半监督节点分类任务上优于几种频谱方法。

谱域卷积的一个问题:几乎所有上述提到的频谱方法中,所学习的滤波器依赖于图结构。换句话说,这些滤波器不能应用于具有不同结构的图

2.1.2 基本空域方法

  • 直接基于图的拓扑结构在图上定义卷积操作。
  • 空域卷积的主要挑战是如何定义具有不同大小邻域的卷积操作,并保持卷积神经网络的局部不变性
Neural FPs(2015)

给不同度的点不同的权重

 

缺点:不能应用到太大的图中

DCNN(2016)
  • 使用转移矩阵来定义节点的邻域
    • X \in R^{N \times F}是输入特征矩阵 (F是特征的维度)
    • P* \in {N \times K \times N}是一个 N×K×N 的张量,其中包含矩阵 P 的幂级数\{P,P^2,\cdots,P^K\}
      • P是由图的邻接矩阵 A  度归一化得到的转移矩阵
PATCHY-SAN(2016)
  • 对于每个节点,提取并归一化恰好包含 k 个节点的邻域。
GraphSAGE(2017)

  •  GraphSAGE在聚合信息时,不使用完整的邻居集合,而是均匀地从中抽样一个固定大小的邻居集合。
  • AGG是聚合函数,GraphSAGE提供了三种聚合器:均值聚合器、LSTM聚合器和池化聚合器。
    • 使用均值聚合器的GraphSAGE可以被视为GCN的归纳版本
    • LSTM聚合器则不是置换不变的,它需要节点的指定顺序。
MPNN(2017)

(论文是划归到 空域方法的一般框架中),实际上还是空域卷积,但和之前和空域卷积的方法不同的是,这是一个通用框架

  • 模型分成两个阶段:
    • message passing阶段
      • 汇总自己、邻居、和邻居连边的信息
      • 将汇总的信息和上一层自己的信息一起,用来更新这一层自己的信息
      • 【某种程度上像GraphSAGE,汇总信息的时候加上了自己和边的信息】
    • readout阶段

       

Graph Network

(论文是划归到 空域方法的一般框架中),实际上还是空域卷积,但和之前和空域卷积的方法不同的是,这是一个通用框架

  • 核心模块是GN块
    • GN块由3个更新函数和3个加总函数组成

     

 2.1.3 基于attention的方法

  • 基于attention的算子对权重施加不同的权重
    • ——>减缓噪声,获得更好的结果
GAT(2018)

在传播阶段使用attention机制

每一个点的hidden state可以表示成:

  • 此外,GAT利用多头注意力机制来稳定学习过程。
    • 应用K个独立的注意力头来计算隐藏状态
    • 然后将它们的特征:
      • 连接起来
      • 或者计算平均值
        •  
GaAN(2018)也使用了多头注意力机制。然而,它使用了自注意力机制来从不同的注意力头中收集信息,以替代GAT中的平均操作。

2.2 传播模块(recurrent 算子)

循环运算符和卷积运算符之间的主要区别在于,卷积运算符中的层使用不同的权重,而循环运算符中的层共享相同的权重。

2.2.1 基于收敛的模型

 和MPNN这种很类似,也是先将自己、邻边、邻点的feature,和邻点的hidden state一起加总,然后送到输出去

令 H、O、X 和 XN 分别是由所有状态(点+边)、所有输出、所有特征和所有节点特征堆叠而成的矩阵。那么可以使用如下的紧凑形式表示基于收敛的模型:

 

如果堆叠几层这样的GNN-recurrent,会不断迭代(21)式,直至收敛(Banach不动点理论)

尽管实验证据表明GNN-recurrent是一种用于建模结构数据的强大架构,但仍存在一些限制:

  1. GNN-recurrent要求f是一个收缩映射,这限制了模型的能力。而且,迭代更新节点的隐藏状态直至达到稳定点的过程效率较低。
  2. 如果我们关注的是节点的表示而不是图的表示,使用稳定点是不合适的,因为稳定点中表示的分布在值上会更加平滑,对于区分每个节点的信息量较少。

2.2.2 基于门的方法

  • 在propagation阶段使用类似于GRU或者LSTM的门机制来减少计算限制+提升图结构中信息的长距离传递
  • 信息传递估计的轮数,不必要求收敛

 2.3 基于skip-connection的传递模组

  • 许多模型会堆叠图神经网络层,旨在通过增加更多层,使每个节点从k-hop邻居处聚合更多信息,以获得更好的结果。
  • 然而,在许多实验证明,更深的模型并不能改善性能,甚至可能表现更差
    • 因为更多的层也会传播来自指数级增加的邻居成员的噪声信息
    • 还会导致过度平滑的问题,因为当模型变得更深时,节点在聚合操作后往往具有相似的表示。
  • ——>很多模型尝试使用skip-connection的方法来解决这个问题
Highway GCN(2018)
  • 使用了逐层的门(权重)

 

CLN(2017)也使用了highway network,但是不同的方法来计算门权重
JKN(2018)
  • 最后一层对每个节点,从其所有中间表示中选择(直接"jump"到最后一层)
    • ——>使得模型可以根据需要为每个节点自适应地选择有效的邻域大小。
DeepGCN
  • ResGCN
    •  
  • DenseGCN

     

2.4 采样

  • GNN模型通过从上一层的邻域中为每个节点聚合信息。
    • 如果我们回溯多个GNN层,邻居的数量将随着深度呈指数级增长。
    • 为了缓解这种“邻居爆炸”问题,一种高效而有效的方法是进行采样。
  • 此外,当处理大型图时,我们不能始终存储和处理每个节点的所有邻域信息
  • ——>因此需要采样模块来辅助进行信息传播。

2.4.1 点采样

  • 减小邻居节点数量的一种直接方法是从每个节点的邻域中选择一个子集。
GraphSAGE(2017)采样固定数量的邻居,确保每个节点的邻域大小在2到50之间
PinSage(2018)
  • 提出了基于重要性的采样方法
  • 通过从目标节点开始模拟随机游走,该方法选择具有最高归一化访问计数的前T个节点

2.4.2  层采样

层采样在每个层保留一小组节点进行邻居信息聚合。

FastGCN(2018)使用重要性采样,其中重要节点在每一层更有可能被采样到
Adaptive sampling towards fast graph representation learning.(2018)引入了一个参数化和可训练的采样器,用于在前一层的条件下进行逐层采样

2.4.3 子图采样

  • 与在完整图上进行节点和边的采样不同,一种根本不同的方式是采样多个子图,并在这些子图中限制邻域搜索。
ClusterGCN(2019)通过图聚类算法对子图进行采样
GraphSAINT(2020)直接对节点或边进行采样以生成子图

2.5 池化模块

在一些模型中称为readout函数

简单点池化对节点特征进行节点级的最大/平均/求和/注意力等操作,以获得全局图表示
Set2Set如MPNN中基于LSTM的Readout 操作
SortPooling(2018)
  • 首先根据节点的结构角色对节点嵌入进行排序
  • 然后将排序后的嵌入输入到CNN中以获得表示
层次池化

3 不同类型的图

 3.1 有向图

  • 有向边通常包含比无向边更多的信息。
  • 可以通过在卷积操作中采用不对称的邻接矩阵来模拟边的正向和反向方向,而不仅仅是简单地采用一个不对称的邻接矩阵。
  • DGP(2019)在正向和反向方向上使用两种权重矩阵Wp和Wc进行卷积操作。

3.2 异质图

  • 图中的点/边是多模态/多类型的
    • 在一个异质图\{V,E,\varphi, \psi \}中,每个点都有他的类别φ,每条边也有相应的类别ψ

3.2.1 基于元路径的方法

  • 元路径确定了路径中每个位置上节点的类型
    • \varphi_1 \stackrel{\psi_1}{\rightarrow} \varphi_2 \stackrel{\psi_2}{\rightarrow} \varphi_3 \cdots \stackrel{\psi_L}{\rightarrow} \varphi_{L+1}
    • 通过连接元路径实例的两个端点节点,元路径捕捉到了两个可能没有直接连接的节点之间的相似性
    • ——>一个异构图可以被转化为多个同质图,然后可以应用图学习算法。

 

3.2.2 基于边的方法

在采样、聚合等方面针对不同类型的邻居和边使用不同的函数。

HetGNN( 2019)在采样、特征编码和聚合步骤中直接对不同类型的邻居进行区分处理
HGT( 2020)
  • 将元关系定义为两个相邻节点及其边的类型 <\varphi(v_i),\psi(e_{ij}),\varphi(v_j)>
  • 为不同的元关系分配不同的注意力权重矩阵,使模型能够考虑类型信息

3.2.3 关系图问题

  • 有些图的边可能包含的信息比类型更多,或者类型的数量过大
    • ——>应用基于元路径或元关系的方法变得困难
    • ——>我们将这种图称为关系图

3.2.4 多重图/多视图图 Multiplex graph

  • 在更复杂的情况下,图中的一对节点可以与多种不同类型的边相关联
    • 针对不同类型的边进行观察,图可以形成多个层次,其中每一层代表一种关系类型
  • ——>边的类型不被假设为相互独立,因此简单地将图分割为只包含一种类型边的子图可能不是最优解

3.3 动态图

  • 图中边/点的信息随时间不断变化
DCRNN(2018)、STGCN(2018)
  • 首先通过GNN收集空间信息
  • 然后将输出输入到序列模型中,如Seq2Seq或RNN。
Structural-RNN(2016),ST-GCN(2018)
  • 同时收集空间和时间消息。
  • 通过增加时间连接来扩展静态图结构,因此可以在扩展后的图上应用传统的GNN
DGNN(2020)
  • 将GCN的输出送到LSTM中
EvolveGCN(2020)
  • 认为直接建模节点表示的动态性会影响模型在节点集保持变化的图上的性能
    • ——》它不是将节点特征视为RNN的输入,而是将GCN的权重馈送到RNN中以捕捉图的内在动态性

3.4 超图

  • 一个超图可以用G = (V, E, We)表示
    • 其中边e ∈ E连接两个或多个顶点,并被赋予权重w ∈ We。
    • 超图的邻接矩阵可以用一个大小为|V| × |E|的矩阵L来表示

 

HGNN

Dv——点度数矩阵

We——边权重矩阵

De——边度数矩阵

X——点特征

W——可学习参数

 

3.5 有符号图

  • 有符号图是具有有符号边的图,即边可以是正或负的。
  • 一种思路是将负边简单地视为缺失的边或另一种类型的边
  • SGCN(2018)利用平衡理论来捕捉正边和负边之间的相互作用。
    • 直观地说,平衡理论认为我的朋友的朋友也是我的朋友(正边),而我的敌人的敌人是我的朋友(负边)。
       

4 无监督训练场景

  • 对于监督学习和半监督学习的情景,由于提供了标签,所以可以轻松地为这些带标签的样本设计损失函数。
  • 对于无监督学习的情景,没有标记的样本,因此损失函数应该依赖于图本身提供的信息,例如输入特征或图的拓扑结构。

4.1 图自编码器

GAE(2016)首先使用GCN来编码图中的点
  • H=GCN(X,A)
然后使用一个简单的decoder来重构邻接矩阵
  • \tilde{A}=\rho(HH^T)
通过计算原始邻接矩阵和重构邻接矩阵的相似度,来计算损失函数
MGAE(2017)
  • 利用边缘去噪自编码器获得稳健的节点表示
GALA(2019)
  • 构建对称的图自编码器
  • 提出了拉普拉斯锐化(Laplacian sharpening),即拉普拉斯平滑的逆操作,用于解码隐藏状态
    • ——>这种机制缓解了图神经网络训练中的过度平滑问题

4.2 对比学习

Deep Graph Infomax,DGI(2019)最大化节点表示和图表示之间的互信息
Infograph(2020)通过不同尺度(包括节点、边和三角形)的子结构级表示和图级表示之间的互信息最大化来学习图表示
Multi-view(2020)对比来自一阶邻接矩阵和图扩散的表示,在多个图学习任务上实现了最先进的性能

5 GNN的分析

5.1 理论分析

5.1.1 图信号处理

  • Deeper insights into graph convolutional networks for semi-supervised learning (2018)
    • 首次指出图神经网络中的图卷积实际上是拉普拉斯平滑(Laplacian smoothing)
    • ——》拉普拉斯平滑了特征矩阵,反映了相似性假设,即附近的节点应该是相似的
  • SGC(201b)进一步去除了层间的权重矩阵和非线性操作,表明低通滤波器是GNN有效的原因
    • 在低通滤波的思想下,后续很多论文分析了不同的滤波器
      • AGC(2019)为了实现所有特征值的低通滤波,设计了图滤波器I-\frac{1}{2}L
        AGE(2020)进一步证明了使用I-\frac{1}{\lambda_{max}}L的滤波器可以获得更好的结果
        NT(2019)

        图卷积主要是对输入特征进行去噪的过程,模型的性能在很大程度上取决于特征矩阵中的噪声量

 

5.1.2 图泛化能力

The vapnik–chervonenkis dimension of graph and recursive neural networks (2018)证明了一类有限GNN的VC维度
Generalization and representational limits of graph neural networks(2020)基于神经网络的Rademacher界给出了更紧密的泛化界限
Stability and generalization of graph convolutional neural networks(2019)
  • 分析了具有不同卷积滤波器的单层GNN的稳定性和泛化性质
  • 得出结论:GNN的稳定性取决于滤波器的最大特征值
Understanding attention and generalization in graph neural networks(2019)
  • 关注了GNN中注意机制的泛化能力
  • 注意机制有助于GNN对更大和嘈杂的图进行泛化

 5.1.3 表达能力

How powerful are graph neural networks?(2019)

Weisfeiler and leman go neural: higher-order graph neural networks(2019)

  • GCNs和GraphSAGE相比于Weisfeiler-Leman(WL)测试算法,在区分性方面较弱
  • WL测试算法是一种用于图同构性测试的算法
GIN(2019)更有表达力的GNN
The logical expressiveness of graph neural networks.(2019)
  • 讨论了GNNs在FOC2(一阶逻辑的一个片段)中的表达能力。
  • 作者发现现有的GNNs很难符合逻辑要求
Graph neural networks exponentially lose expressive power for node classification(2020)局部相关的GNN变体无法学习全局图属性,包括直径、最大/最小环或模式

5.1.4 不变性

由于图中没有节点顺序,GNN的输出嵌入应该是对输入特征进行排列不变或等变的。

Invariant and equivariant graph networks.(2019)通过表征排列不变或等变的线性层来构建不变的GNN
On the universality of invariant networks.(2019)进一步证明了可以通过高阶张量化获得通用的不变GNN

5.1.5 可迁移性

GNN的一个特征是其参数与图解耦,这意味着具备跨图传递(可迁移性)并具有性能保证的能力。

Transferability of Spectral Graph Convolutional Neural Networks.(2019)研究了谱图滤波器的可传递性,表明这样的滤波器能够在同一域中的图之间进行传递
Graphon neural networks and the transferability of graph neural networks(2020)
  • 分析了GNN在图分形(graphon)上的行为。
  • 图分形指的是一系列图的极限,也可以看作是稠密图的生成器。
  • 作者得出结论,GNN能够在从相同图分形确定性生成的不同大小的图之间进行传递。

5.1.6 标签效率

(半)监督学习对于GNN来说需要大量的标记数据才能达到令人满意的性能。

已有研究证明了通过选择高度节点和不确定节点等信息丰富的节点,可以大大提高标记效率。

5.2 实验角度

5.2.1 模型评估

  • 评估机器学习模型是研究中的一个重要步骤。多年来,人们对实验的可重复性和可复制性提出了关切。
    • GNN模型是否有效以及在多大程度上有效?
    • 模型的哪些部分对最终性能起到贡献?
    • 。。。
Pitfalls of graph neural network evaluation(2018)
  • 在半监督节点分类任务中,在相同的训练策略和超参数调整下GNN模型的表现
  • 得出的结论是,不同的数据集划分会导致模型排名截然不同。
    • 此外,在适当的设置下,简单模型可能优于复杂模型
A fair comparison of graph neural networks for graph classification(2020)
  • 回顾了几种图分类模型,并指出它们的比较方式不合适。
  • 基于严格的评估,结构信息被发现没有被充分利用于图分类任务
Design space for graph neural networks.(2020)
  • 讨论了GNN模型的架构设计,例如层数和聚合函数。通过大量的实验,这项工作为各种任务的GNN设计提供了全面的指南。

5.2.2 基准benchmark

Benchmarking Graph Neural Networks.(2020)

Open graph benchmark: datasets for machine learning on graphs.(2020)

提供了可扩展和可靠的图学习基准
Benchmarking Graph Neural Networks.(2020)在多个领域和任务中构建了中等规模的基准数据集
Open graph benchmark: datasets for machine learning on graphs.(2020)提供了大规模数据集

6 应用

6.1 结构化场景

6.1.1 graph mining

图匹配、图聚类

6.1.2 物理

 

  • 对实际物理系统进行建模
    • 物理系统可以建模为系统中的对象和对象之间的成对相互作用
    • 通过将对象建模为节点,成对相互作用建模为边,可以将系统简化为图

6.1.3 化学

分子指纹 molecular  fingerprint

编码分子结构

分子可以自然地被看作是图,其中原子是节点,化学键是边

化学反应预测 chemical reaction prediction
蛋白质界面预测 protein interface prediction
  • 蛋白质通过界面相互作用,界面由每个参与蛋白质的氨基酸残基形成
  • 蛋白质界面预测任务是确定特定残基是否构成蛋白质的一部分
  • 一般而言,对于单个残基的预测依赖于其他相邻残基。通过将残基作为节点,蛋白质可以被表示为图,从而可以利用基于GNN的机器学习算法
生物医学工程

 6.1.4  知识图谱

  • 知识图谱(KG)表示一组现实世界的实体及其之间的关系
  • 在KG上的任务包括学习低维度的嵌入
    • 其中包含:
      • 实体和关系的丰富语义信息
      • 预测实体之间的缺失连接
      • 对知识图谱进行多跳推理
      • 。。。

6.1.5 生成模型

比如:发现新的化学结构、构建知识图谱。。

6.1.6 组合优化问题

图上的组合优化问题是一类NP难问题。一些特定的问题,如旅行商问题(TSP)和最小生成树(MST),已经有了各种启发式解法。最近,使用深度神经网络来解决这类问题成为热点,其中一些解决方案进一步利用了图神经网络的图结构特性。

6.1.7 交通路网

6.1.8 推荐系统

6.2 非结构化场景

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

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

相关文章

Prometheus 简单介绍,部署

目录 Prometheus 介绍 功能介绍 Prometheus安装 安装介绍 prometheus.yml 文件介绍 prometheus实施安装 Prometheus常用命令参数有哪些 设置Prometheus-server开机自动启动 &#xff08;解释&#xff09; Prometheus简单启动页面介绍 node_exporte 是做什么的 安装n…

【个人笔记】真寻bot部署记录+远程postgreSQL访问+源码食用记录

安装 0. 系统配置 Centos v8.2 1. 安装 使用真寻bot https://github.com/zhenxun-org/zhenxun_bot-deploy bash <(curl -s -L https://raw.githubusercontent.com/zhenxun-org/zhenxun_bot-deploy/master/install.sh)选择1&#xff0c;安装go-cqhttp和zhenxun_bot&…

java boot项目读取yml配置信息

之前 我们讲过 boot的配置文件格式主要有三种 application.properties application.yml application.yaml 我们说推荐用 application.yml 其实从 xml 到 yml 都是要系统去读取他的配置信息 今天 我们就来写一下 在java中读取 yml的配置 这里 我在 yml中多加两个配置 代码如下…

LabView中顺序结构的使用

LabView中的顺序结构能够保证程序按照一定的顺序运行。LabView中的顺序结构分为平铺式顺序结构和层叠式顺序结构两种。 1 平铺式顺序结构 平铺式顺序结构包括一个或多个顺序执行的子程序框图&#xff0c;这种框图也被成为“帧”&#xff0c;程序按照帧为单位&#xff0c;以从…

MKS SERVO4257D 闭环步进电机_系列3 串口(RS485)指令说明

第1部分 产品介绍 MKS SERVO 28D/35D/42D/57D 系列闭环步进电机是创客基地为满足市场需求而自主研发的一款产品。具备脉冲接口和RS485/CAN串行接口&#xff0c;支持MODBUS-RTU通讯协议&#xff0c;内置高效FOC矢量算法&#xff0c;采用高精度编码器&#xff0c;通过位置反馈&am…

ATA-3000系列功率放大器在精密微流体控制中的典型应用

ATA-3000系列功率放大器在精密微流体控制中的典型应用 压电陶瓷精密微流体控制应用&#xff1a; 精密微流体控制在医药配比、遗传基因与生物工程、航空航天、军工国防等方面具有广泛的应用&#xff0c;特别是在大流量伺服阀先导控制领域&#xff0c;具有重要作用。随着压电陶瓷…

TPO69 01|Why Snakes Have Forked Tongues P5P6|阅读真题精读|17:50~19:35

17:00&#xff5e;17:50 吃饭 目录 P56 生词 段落大意 P5段落大意 P6段落大意 题目 【5】事实信息题|定位准确非常重要✅ 【6】事实信息题|定位准确非常重要✅ 【7】推理题|文章是否提及|不要过度推理 【8】修辞目的题|举例一般为了说明✅ 【9】句子插入题|in other words|同义…

SpringCloud Alibaba Seata

SpringCloud Alibaba Seata Seata 基础 先看一个问题&#xff0c;引出Seata 单机单库(多表)处理事务示意图 分布式微服务架构下的数据库事务示意图 3. 梳理上图 用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持∶仓储服务∶对给定的商品扣除仓库/商品数量订单服务…

第10届蓝桥杯Scratch国赛真题集锦

编程题 第 1 题 问答题 捉迷藏之 题目说明 编程实现:小猫随机躲在6个按固定位置排列的前景角色任一个的后面,只露出一点点痕迹。具体要求: 1).添加任意1个背景,保留小猫角色,从角色库中挑选6个角色作为前景角色(小猫将躲在它们的后面) 2).6个前景角色按照两行三列的方式以固…

从数据工程师到提示工程师:使用AI解决数据准备任务

数据工程占据了数据科学过程的很大一部分。在CRISP-DM中&#xff0c;这个过程阶段被称为“数据准备”。它包括数据摄取、数据转换和数据质量保证等任务。在本文中&#xff0c;我们使用ChatGPT和Python解决了典型的数据工程任务。通过这样做&#xff0c;我们探索了数据工程与新的…

Redis集群安装之分片集群

1.为什么使用分片集群 主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决&#xff1a; 海量数据存储问题高并发写的问题 哨兵模式本质是依旧是主从模式&#xff0c;在主从模式下我们可以增加slave节点来拓展读并发能力&#xff0c;但是没办法扩展写能力…

项目笔记-瑞吉外卖(全)

文章目录 1.业务开发day011.软件开发整体介绍2.项目整体介绍:star:3.开发环境搭建4.登录功能:star:4.1代码实现 5.退出功能6.页面效果出现 day021.完善登录功能2.新增员工功能3.启用禁用员工信息:star:(自定义消息转换器使用)4.编辑员工信息 day031.公共字段自动填充2.新增分类…

第11届蓝桥杯Scratch国赛真题集锦

编程题 第 1题 问答题 3D打印小猫 题目说明 背景信息:3D打印技术,它与普通打印工作原理基本相同,打印机内装有液体或粉未等“打印材料”,与电脑连接后,通过电脑控制把“打印材料”一层层叠加起来,最终把计算机上的蓝图变成实物。 编程实现:通过滑杆控制小猫造型变化,按下…

聚类算法以及聚类算法模型评估的介绍

一、聚类算法的介绍 1.什么是聚类算法 聚类算法是一类无监督学习算法&#xff0c;用于将数据集中的对象分组&#xff08;或聚类&#xff09;成具有相似性的集合。聚类算法不依赖于预定义的类别标签&#xff0c;而是根据数据的内在特点将相似的数据点聚集在一起。聚类算法的目…

分布式网络通信框架(三)——protobuf使用案例

例子1 test.proto文件如下&#xff1a; syntax "proto3"; // 声明了protobuf版本package fixbug; // 声明了代码所在的包&#xff08;生成C代码后就是namespace 名字&#xff09;// 定义登录消息类型 message LoginRequest {string name 1; // 1 代表name是这个m…

详解uni-app项目运行在安卓真机调试

详解uni-app项目运行在安卓真机调试 uni-app项目运行在安卓真机调试 文章目录 详解uni-app项目运行在安卓真机调试前言为什么要用真机调试&#xff1f;真机调试操作步骤总结 前言 UNI-APP学习系列之详解uni-app项目运行在安卓真机调试 为什么要用真机调试&#xff1f; 因为安…

mybatis-plus实现非法sql拦截(防止全表更新与删除)

文章目录 什么是非法sql&#xff1a;拦截的意义是&#xff1a;使用&#xff1a;1、在pom文件中添加依赖2、注入MybatisPlusInterceptor类&#xff0c;并配置BlockAttackInnerInterceptor拦截器 测试&#xff1a; 什么是非法sql&#xff1a; 不带where子句的delete和update&…

C++反向迭代器

C反向迭代器 &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容介绍反向迭代器的概念和模拟实现一个通用的反向…

HTB-Escape

HTB-Escape 信息收集立足sql_svc -> RyanRyan -> Administrator扩展NTLM简单介绍 信息收集 可以从中获取两个域名。 看看 rpc服务是否有可以收集的信息。 看看samba。 rpc的Public共享文件有一个关于SQL Server的pdf。 阅读它&#xff01; 从中能得到几个用户名…

unix环境高级编程 第一章 UNIX基础知识 Go实现代码

ls命令的Go语言实现 package mainimport ("fmt""os" )func main() {if len(os.Args) ! 2 {panic("参数数量不足")}targetPath : os.Args[1]if dirList, err : os.ReadDir(targetPath); err nil {for _, dirInfo : range dirList {fmt.Println(…