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

 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 非结构化场景

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

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

相关文章

LearnOpenGL-高级OpenGL-8.高级GLSL

本人初学者&#xff0c;文中定有代码、术语等错误&#xff0c;欢迎指正 文章目录 高级GLSLGLSL的内建变量在顶点着色器的内建变量gl_PointSizegl_VertexID 在片段着色器的内建变量gl_FragCoordgl_FrontFacinggl_FragDepth 接口块Uniform缓冲对象Uniform块布局使用Uniform缓冲简…

基于QT的智能家居中控系统的简明设计

文章目录 系统总体说明主板UI设计后续改进与完善 系统总体说明 系统采用 “主从式架构” &#xff0c;即一主多从式&#xff0c;该智能居家控制系统的主要功能包括登录功能、注册功能、音乐播放功能、时间显示、日历显示、温度湿度光照气压海拔数据等环境指标数据显示等。   …

Linux之理解文件系统——文件的管理

文章目录 前言一、磁盘1.磁盘的物理结构2.磁盘的存储结构3.磁盘的逻辑结构 二、文件系统与inode1.文件在磁盘中是如何存储的&#xff1f;2.对文件进行操作 三、软硬链接1.软链接创建软链接&#xff1a;inode删除软链接&#xff1a;软链接的作用&#xff1a; 2.硬链接创建硬链接…

堆(堆排序 模拟堆)

目录 一、堆的数据结构二、堆的操作方法往下调整的示意图往上调整的示意图相关功能的实现思路1.插入一个数2.求最小值3.删除最小值4.删除任意一个元素5.修改任意一个元素 三、堆的实战运用堆排序模拟堆 一、堆的数据结构 堆是一个完全二叉树&#xff1a;除了最后一层结点以外&…

3ds MAX 基本体建模,长方体、圆柱体和球体

3ds MAX基本页面如下&#xff1a; 生成新的几何体在右侧&#xff1a; 选择生成的对象类型即可&#xff0c;以下为例子&#xff1a; 1、长方体建模 选择建立的对象类型为长方形 在 任意一个窗口绘制&#xff0c;鼠标滑动 这里选择左上角的俯视图 松开鼠标后&#xff0c;可以…

第18章 JQuery DataTables初始化渲染显示与排序

1 System.Linq.AsyncIEnumerableExtensions (Data\Extensions\AsyncIEnumerableExtensions.cs) namespace System.Linq { /// <summary> /// 【异步枚举数扩展--类】 /// <remarks> /// 摘要&#xff1a; /// 该类通过对System.Linq.Async中方法的自定义扩展…

C++进阶 —— set

目录 一&#xff0c;set介绍 二&#xff0c;set使用 一&#xff0c;set介绍 set是按照特定次序存储元素的关联式容器&#xff0c;元素不可重复&#xff1b;set中的元素不能在容器中修改(元素总是const)&#xff0c;但是可从容器中插入和删除它们&#xff1b;set中的元素总是按…

【测试报告】个人博客系统自动化测试报告

文章目录 项目背景项目功能测试计划功能测试测试用例执行测试的操作步骤 自动化测试设计的模块、自动化运行的结果、问题定位的结果自动化测试优点 项目背景 对于一个程序员来说&#xff0c;定期整理总结并写博客是不可或缺的步骤&#xff0c;不管是对近期新掌握的技术或者是遇…

代码随想录算法训练营第五十三天 | 力扣 1143.最长公共子序列, 1035.不相交的线, 53. 最大子序和

1143.最长公共子序列 题目 1143. 最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符…

SpringBoot——原理(自动配置+原理分析-源码跟踪)

源码跟踪 从Springboot的启动类进入&#xff0c;进行分析. 源码跟踪技巧 在以后接触各种框架的时候&#xff0c;如果需要查看源码&#xff0c;需要找到关键点和核心流程&#xff0c;先在宏观对整个原理和流程有一个认识&#xff0c;之后再去了解其中的细节。 按住Ctrl左键进…

怎么实现常用网络接口自动化测试框架应用?

一、RESTful&#xff08;resource representational state transfer)类型接口测试 (一&#xff09;GUI界面测试工具&#xff1a;jmeter 1、添加线程组 2、添加http请求 3、为线程组添加察看结果树 4、写入接口参数并运行 5、在查看结果树窗口查看结果 6、多组数据可增加CSVDat…

基于物理信息的神经网络(Physics-informed Neural Networks;PINNs)Part-1(简单介绍)

【摘要】 基于物理信息的神经网络&#xff08;Physics-informed Neural Networks&#xff0c;简称PINNs&#xff09;&#xff0c;是一类用于解决有监督学习任务的神经网络&#xff0c;它不仅能够像传统神经网络一样学习到训练数据样本的分布规律&#xff0c;而且能够学习到数学…

UFS 2 -UFS架构简介2

UFS 2 -UFS架构简介2 1 UFS架构简介1.1 System Boot and Enumeration1.2 UFS Interconnect (UIC) Layer1.2.1 UFS Physical Layer Signals1.2.2 MIPI UniPro1.2.3 MIPI UniPro Related Attributes 1.3 UFS Transport Protocol (UTP) Layer1.3.1 Architectural Model1.3.1.1 Cli…

图解max{X,Y}和min{X,Y}并求相关概率

图解max{X,Y}和min{X,Y}并求相关概率 对max{X,Y}或min{X,Y}进行分解再求解 P ( m a x { X , Y } ≥ c ) P [ ( X ≥ c ) ∪ ( Y ≥ c ) ] P ( m a x { X , Y } ≤ c ) P [ ( X ≤ c ) ∩ ( Y ≤ c ) ] P ( m i n { X , Y } ≥ c ) P [ ( X ≥ c ) ∩ ( Y ≥ c ) ] P ( m i…

k8s功能优势应用场景介绍(一)

一&#xff0c;K8S功能: 1、数据卷 pod中容器之间共享数据&#xff0c;可以使用数据卷 2、应用程序健康检查 容器内服务可能进程阻塞无法处理请求&#xff0c;可以设置监控检查策略保证应用健壮性 3、复制应用程序实例 控制器维护着pod副本数量&#xff0c;保证一个pod或一组同…

C++11 auto类型推导

1.类型推导 C11引入了auto 和 decltype 关键字实现类型推导&#xff0c;通过这两个关键字不仅能方便地获取复杂的类型&#xff0c;而且还能简化书写&#xff0c;提高编码效率。 auto 类型推导的语法和规则 在之前的 C 版本中&#xff0c;auto 关键字用来指明变量的存储类型…

Allure测试报告定制全攻略,优化你的Web自动化测试框架!

目录 前言&#xff1a; 1. Allure测试报告简介 2. Web自动化测试框架简介 3. 封装Web自动化框架 3.1 安装Selenium 3.2 封装Selenium 3.3 定制Allure测试报告 3.3.1 适配翻译插件 3.3.2 定制测试报告样式 4. 示例代码 5. 总结 前言&#xff1a; 随着现在Web应用的普…

SciencePub学术 | 计算机科学类重点SCIEI征稿中

SciencePub学术刊源推荐: 计算机科学类SCI&EI征稿中&#xff01;录用率高&#xff0c;自引率低&#xff0c;进展顺利。信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 【期刊简介】IF&#xff1a;4.0-4.5↑&#xff0c; JCR 2区&#xff0c;中科院3区…

SpringAOP简介及实现(包含切面、切点、连接点和通知)

目录 1.什么是AOP、SpringAOP&#xff1f; 2.AOP的组成 3.SpringAOP的实现 4.切点的表达式 1.什么是AOP、SpringAOP&#xff1f; 在学习SpringAOP之前&#xff0c;我们得先了解一下什么是AOP。AOP是一种面向切面编程的思想。那什么是切面呢&#xff1f;它其实是对某一类事情…

【HR专用】Vue+SpringBoot,实现人才招聘库的开发(后端部分)

人才招聘库是企业用于储存和管理潜在候选人信息的数据库。通常情况下&#xff0c;这些候选人可能已经应聘过公司的职位&#xff0c;也可能是通过其他途径获取的&#xff0c;例如社交网络、招聘网站等。 对于一个中小公司来说&#xff0c;人力资源部绝对是一个重要部门&#xff…