当前位置: 首页 > news >正文

论文阅读:A Generalization of Transformer Networks to Graphs

论文阅读:A Generalization of Transformer Networks to Graphs

  • 论文地址
  • 1 摘要
  • 2 贡献
  • Graph Transformer
    • On Graph Sparsity(图稀疏)
    • On Positional Encodings(位置编码)
    • 3 Graph Transformer Architecture(架构)
      • 模型框架
      • input(输入)
    • Graph Transformer Layer
      • Graph Transformer Layer with edge features(带边特征)
      • 基于任务的 MLP 层
  • 4 实验

论文地址

论文:https://arxiv.org/pdf/2012.09699.pdf
代码:https://github.com/graphdeeplearning/graphtransformer

1 摘要

作者提出了一种适用于任何图的GraphTransformer。原始的transformer在基于单词的全连接图上用于NLP,它有如下缺点:

  1. 这种结构不能很好利用图的连通归纳偏置(graph connectivity inductive bias)
  2. 当图的拓扑结构很重要且尚未编码到节点特征时,表现很差

作者提出的GraphTransformer,有4个优势:

  1. 注意力机制是图中每个节点的邻域连通性的函数
  2. positional encoding用拉普拉斯特征向量表示
  3. Batch Normalization代替Layer Normalization,优点:训练更快,泛化性能更好
  4. 该架构扩展到边特征表示,这对于某些任务可能至关重要,例如化学(键类型)或链接预测(知识图谱中的实体关系)

2 贡献

  1. 提出了一种将 transformer 网络推广到任意结构的同构图,即 Graph Transformer,以及具有边缘特征的 GraphTransformer 的扩展版本,允许使用显式域信息作为边缘特征。
  2. 方法包括一种使用拉普拉斯特征向量为图数据集融合节点位置特征的优雅方法。与文献的比较表明,拉普拉斯特征向量比任何现有的方法都更适合编码任意同构图的节点位置信息
  3. 实验表明,所提出的模型超过了baseline的各向同性和各向异性 GNN

Graph Transformer

On Graph Sparsity(图稀疏)

在NLP的transformer中,用全连接图去处理一个句的原因:

  1. 很难在句子中的单词之间找到有意义的稀疏交互或联系。例如:句子中的单词对另一个单词的依赖性可能因上下文、用户视角而异
  2. NLP的transformer的nodes数量比较少(几十个,几百个),便于计算。

对于实际的图形数据集,图形可能有任意的连接结构,nodes的数量高达数百万或数十亿,使得不可能为此类数据集提供完全连接的图形,因此需要Graph Transformer来让nodes处理邻居信息。

On Positional Encodings(位置编码)

在 NLP 中,基于 transformer 的模型为每个单词提供位置编码。确保每个单词的唯一表示并确保最终保留距离信息

对于图形,唯一节点位置的设计具有挑战性,因此大多数在图数据集上训练的 GNN 学习的是不随节点位置变化的结构化节点信息,这就是为什么GAT是局部attention,而不是全局attention。

现在的目标是学习结构和位置的特征,Dwivedi et al. (2020)利用现有的图结构预先计算拉普拉斯特征向量,并将它们作为节点的位置信息。

  • 拉普拉斯 PE 能更好地帮助编码距离感知信息(即,附近的节点具有相似的位置特征,而较远的节点具有不同的位置特征)

因此使用拉普拉斯特征向量作为 Graph Transformer 中的 PE。特征向量通过图拉普拉斯矩阵的分解来定义:
Δ = I − D − 1 / 2 A D − 1 / 2 = U T Λ U , ( 1 ) \Delta=\mathrm{I}-D^{-1/2}AD^{-1/2}=U^T\Lambda U,\quad(1) Δ=ID1/2AD1/2=UTΛU,(1)

  • A A A n × n n\times n n×n邻接矩阵, D D D是度矩阵
  • Λ \Lambda Λ U U U分别对应特征值和特征向量
  • 使用节点的 k个最小的非平凡特征向量作为其位置编码,对于节点 i i i,用 λ i \lambda_{i} λi表示

3 Graph Transformer Architecture(架构)

模型框架

在这里插入图片描述

input(输入)

首先准备要输入Graph Transformer Layer的input node 和 edge embeddings。

在图 G \mathcal{G} G中,对于任意一个节点 i i i的节点特征 α i ∈ R d n × 1 \alpha_{i} \in \mathbb{R}^{d_{n}\times1} αiRdn×1以及节点 i i i和节点 j j j之间的边特征 β i j ∈ R d e × 1 \beta_{ij}\in\mathbb{R}^{d_{e}\times1} βijRde×1 α i \alpha_{i} αi β i j \beta_{ij} βij通过一个线性映射,从而嵌入到 d d d维的隐藏特征(hidden features) h i 0 h_i^0 hi0 e i j 0 e_{ij}^0 eij0中,公式如下:
h ^ i 0 = A 0 α i + a 0 ; e i j 0 = B 0 β i j + b 0 , ( 2 ) \hat{h}_i^0=A^0\alpha_i+a^0 ; e_{ij}^0=B^0\beta_{ij}+b^0,\quad(2) h^i0=A0αi+a0;eij0=B0βij+b0,(2)

  • 其中 A 0 ∈ R d × d n , B 0 ∈ R d × d e A^0\in\mathbb{R}^{d\times d_n},B^0\in\mathbb{R}^{d\times d_e} A0Rd×dn,B0Rd×de,以 A 0 A^0 A0为例,其每一列是每个节点的节点特征(总共 d n d_n dn个结点),维度为 d d d,而 α i \alpha_{i} αi一个其他元素都为0,对应节点位置的元素为1的向量

  • a 0 , b 0 ∈ R d a^0,b^0\in\mathbb{R}^d a0,b0Rd是线性映射层的参数

然后通过线性映射嵌入维度为 k k k的预计算节点位置编码并将其添加到节点特征 h ^ i 0 \hat{h}_i^0 h^i0中。
λ i 0 = C 0 λ i + c 0 ; h i 0 = h ^ i 0 + λ i 0 , ( 3 ) \lambda_i^0=C^0\lambda_i+c^0 ; h_i^0=\hat{h}_i^0+\lambda_i^0,\quad(3) λi0=C0λi+c0;hi0=h^i0+λi0,(3)

  • 其中 C 0 ∈ R d × k , c 0 ∈ R d C^0\in\mathbb{R}^{d\times k},c^0\in\mathbb{R}^d C0Rd×kc0Rd,其作用是将位置编码转化为维度为 d d d的向量

Graph Transformer Layer

现在定义第 l l l层的节点更新方程:
h ^ i ℓ + 1 = O h ℓ ∣ ∣ k = 1 H ( ∑ j ∈ N i w i j k , ℓ V k , ℓ h j ℓ ) , ( 4 ) \hat{h}_{i}^{\ell+1}=O_{h}^{\ell}\mathcal{\left|\right|}_{k=1}^{H}\Big(\sum_{j\in\mathcal{N}_{i}}w_{ij}^{k,\ell}V^{k,\ell}h_{j}^{\ell}\Big),\quad(4) h^i+1=Ohk=1H(jNiwijk,Vk,hj),(4)
w h e r e , w i j k , ℓ = s o f t m a x j ( Q k , ℓ h i ℓ ⋅ K k , ℓ h j ℓ d k ) , ( 5 ) \mathrm{where,~}w_{ij}^{k,\ell}=\mathrm{softmax}_{j}\Big(\frac{Q^{k,\ell}h_{i}^{\ell} \cdot K^{k,\ell}h_{j}^{\ell}}{\sqrt{d_{k}}}\Big),\quad(5) where, wijk,=softmaxj(dk Qk,hiKk,hj),(5)

  • Q k , ℓ , K k , ℓ , V k , ℓ ∈ R d k × d , O h ℓ ∈ R d × d Q^{k,\ell},K^{k,\ell},V^{k,\ell}\in\mathbb{R}^{d_{k}\times d},O_{h}^{\ell}\in\mathbb{R}^{d\times d} Qk,,Kk,,Vk,Rdk×d,OhRd×d
  • k = 1 k=1 k=1 H H H代表注意头的数量
  • ∣ ∣ \mathcal{\left|\right|} 表示串联(concatenation)

这里详细讲一下式子(5), Q k , ℓ h i ℓ Q^{k,\ell}h_{i}^{\ell} Qk,hi相当于 h i ℓ h_{i}^{\ell} hi的查询向量, K k , ℓ h j ℓ K^{k,\ell}h_{j}^{\ell} Kk,hj h j ℓ h_{j}^{\ell} hj的键向量(相当于查询的答案)

  • 比如,查询向量在问:“我前面有形容词吗”,键向量回答:“有的”。假设二者向量点积值越大,则说明了它们越匹配,则说明越相关
  • 除以 d k \sqrt{d_{k}} dk 是为了数据的稳定性

接着将结果 h ^ i ℓ + 1 \hat{h}_{i}^{\ell+1} h^i+1按照框架图所示依次经过残差连接和LN、Feed Forward Network (FFN)、残差连接和LN,公式如下:
h ^ ^ i ℓ + 1 = Norm ( h i ℓ + h ^ i ℓ + 1 ) , ( 6 ) h ^ ^ ^ ℓ + 1 = W 2 ℓ ReLU ( W 1 ℓ h ^ ^ i ℓ + 1 ) , ( 7 ) h i ℓ + 1 = Norm ( h ^ ^ i ℓ + 1 + h ^ ^ ^ i ℓ + 1 ) , ( 8 ) \hat{\hat{h}}_i^{\ell+1}\quad=\quad\text{Norm}\Big(h_i^\ell+\hat{h}_i^{\ell+1}\Big),\quad(6) \newline \begin{array}{lcl}\hat{\hat{\hat{h}}}^{\ell+1}&=&W_2^\ell\text{ReLU}(W_1^\ell\hat{\hat{h}}_i^{\ell+1}),&(7)\end{array} \newline \begin{array}{rcl}h_i^{\ell+1}&=&\text{Norm}\Big(\hat{\hat{h}}_i^{\ell+1}+\hat{\hat{\hat{h}}}_i^{\ell+1}\Big),&\quad(8)\end{array} h^^i+1=Norm(hi+h^i+1),(6)h^^^+1=W2ReLU(W1h^^i+1),(7)hi+1=Norm(h^^i+1+h^^^i+1),(8)

  • W 1 ℓ , ∈ R 2 d × d , W 2 ℓ , ∈ R d × 2 d , h ^ ^ i ℓ + 1 , h ^ ^ ^ i ℓ + 1 W_{1}^{\ell},\in \mathbb{R}^{2d\times d}, W_{2}^{\ell},\in \mathbb{R}^{d\times2d}, \hat{\hat{h}}_{i}^{\ell+1}, \hat{\hat{\hat{h}}}_{i}^{\ell+1} W1,R2d×d,W2,Rd×2d,h^^i+1,h^^^i+1 都是中间变量
  • Norm可以是LayerNorm或者BatchNorm

Graph Transformer Layer with edge features(带边特征)

接下来介绍的是上图第二个模型,根据公式(5),将此分数视为边<i,j>的隐式信息,紧接着使用公式(12)为边<i,j>注入可用的边信息,如下:
h ^ i ℓ + 1 = O h ℓ ∣ ∣ k = 1 H ( ∑ j ∈ N i w i j k , ℓ V k , ℓ h j ℓ ) , (9) e ^ i j ℓ + 1 = O e ℓ ∣ ∣ k = 1 H ( w ^ i j k , ℓ ) , w h e r e , (10) w i j k , ℓ = s o f t m a x j ( w ^ i j k , ℓ ) , (11) w ^ i j k , ℓ = ( Q k , ℓ h i ℓ ⋅ K k , ℓ h j ℓ d k ) ⋅ E k , ℓ e i j ℓ , (12) \begin{aligned}&\hat{h}_{i}^{\ell+1}&&=\quad O_{h}^{\ell}\mathcal{\left|\right|}_{k=1}^{H}\Big(\sum_{j\in\mathcal{N}_{i}}w_{ij}^{k,\ell}V^{k,\ell}h_{j}^{\ell}\Big),&&\text{(9)}\\&\hat{e}_{ij}^{\ell+1}&&=\quad O_{e}^{\ell}\mathcal{\left|\right|}_{k=1}^{H}\Big(\hat{w}_{ij}^{k,\ell}\Big), \mathrm{where},&&\text{(10)}\\&w_{ij}^{k,\ell}&&=\quad\mathrm{softmax}_{j}(\hat{w}_{ij}^{k,\ell}),&&\text{(11)}\\&\hat{w}_{ij}^{k,\ell}&&=\quad\left(\frac{Q^{k,\ell}h_{i}^{\ell}\cdot K^{k,\ell}h_{j}^{\ell}}{\sqrt{d_{k}}}\right) \cdot E^{k,\ell}e_{ij}^{\ell},&&\text{(12)}\end{aligned} h^i+1e^ij+1wijk,w^ijk,=Ohk=1H(jNiwijk,Vk,hj),=Oek=1H(w^ijk,),where,=softmaxj(w^ijk,),=(dk Qk,hiKk,hj)Ek,eij,(9)(10)(11)(12)

  • Q k , ℓ , K k , ℓ , V k , ℓ , E k , ℓ ∈ R d k × d , O h ℓ , O e ℓ ∈ R d × d Q^{k,\ell},K^{k,\ell},V^{k,\ell},E^{k,\ell} \in \mathbb{R}^{d_{k}\times d}, O_{h}^{\ell},O_{e}^{\ell} \in \mathbb{R}^{d\times d} Qk,,Kk,,Vk,,Ek,Rdk×d,Oh,OeRd×d
  • 这里的公式,矩阵运算过程中总感觉维度不对应,后期再看这个问题

紧接着,经历相同的过程,如下:
对于节点:
h ^ ^ i ℓ + 1 = N o r m ( h i ℓ + h ^ i ℓ + 1 ) , (13) h ^ ^ ^ i ℓ + 1 = W h , 2 ℓ R e L U ( W h , 1 ℓ h ^ ^ i ℓ + 1 ) , (14) h i ℓ + 1 = N o r m ( h ^ ^ i ℓ + 1 + h ^ ^ ^ i ℓ + 1 ) , (15) \begin{aligned} &\hat{\hat{h}}_{i}^{\ell+1}&& =\quad\mathrm{Norm}\Big(h_{i}^{\ell}+\hat{h}_{i}^{\ell+1}\Big), &&&& \text{(13)} \\ &\hat{\hat{\hat{h}}}_{i}^{\ell+1}&& =\quad W_{h,2}^{\ell}\mathrm{ReLU}(W_{h,1}^{\ell}\hat{\hat{h}}_{i}^{\ell+1}), &&&& \text{(14)} \\ &h_{i}^{\ell+1}&& =\quad\mathrm{Norm}\Big(\hat{\hat{h}}_{i}^{\ell+1}+\hat{\hat{\hat{h}}}_{i}^{\ell+1}\Big), &&&& \text{(15)} \end{aligned} h^^i+1h^^^i+1hi+1=Norm(hi+h^i+1),=Wh,2ReLU(Wh,1h^^i+1),=Norm(h^^i+1+h^^^i+1),(13)(14)(15)

  • W h , 1 ℓ , ∈ R 2 d × d , W h , 2 ℓ , ∈ R d × 2 d W_{h,1}^{\ell},\in \mathbb{R}^{2d\times d}, W_{h,2}^{\ell},\in \mathbb{R}^{d\times2d} Wh,1,R2d×d,Wh,2,Rd×2d

对于边:
e ^ ^ i j ℓ + 1 = N o r m ( e i j ℓ + e ^ i j ℓ + 1 ) , ( 16 ) e ^ ^ ^ i j ℓ + 1 = W e , 2 ℓ R e L U ( W e , 1 ℓ e ^ ^ i j ℓ + 1 ) , ( 17 ) e i j ℓ + 1 = N o r m ( e ^ ^ i j ℓ + 1 + e ^ ^ ^ i j ℓ + 1 ) , ( 18 ) \hat{\hat{e}}_{ij}^{\ell+1}=\quad\mathrm{Norm}\Big(e_{ij}^{\ell}+\hat{e}_{ij}^{\ell+1}\Big),(16)\\\hat{\hat{\hat{e}}}_{ij}^{\ell+1}=\quad W_{e,2}^{\ell}\mathrm{ReLU}(W_{e,1}^{\ell}\hat{\hat{e}}_{ij}^{\ell+1}),(17)\\e_{ij}^{\ell+1}=\quad\mathrm{Norm}\Big(\hat{\hat{e}}_{ij}^{\ell+1}+\hat{\hat{\hat{e}}}_{ij}^{\ell+1}\Big),(18) e^^ij+1=Norm(eij+e^ij+1),(16)e^^^ij+1=We,2ReLU(We,1e^^ij+1),(17)eij+1=Norm(e^^ij+1+e^^^ij+1),(18)

  • W e , 1 ℓ , ∈ R 2 d × d , W e , 2 ℓ , ∈ R d × 2 d W_{e,1}^{\ell},\in \mathbb{R}^{2d\times d},W_{e,2}^{\ell},\in \mathbb{R}^{d\times2d} We,1,R2d×d,We,2,Rd×2d

基于任务的 MLP 层

在 Graph Transformer 最后一层获得的节点表示被传递到基于任务的 MLP 网络,用于计算与任务相关的输出,然后将其馈送到损失函数以训练模型的参数

4 实验

为了评估提出的模型的性能,在ZINC,PATTERN,CLUSTER这三个数据集实验。

  • ZINC, Graph Regression:分子数据集,node代表分子,edge代表分子之间的键。键之间有丰富的特征信息,所以用第二个模型。
  • PATTERN,Node Classification:任务是把nodes分成两个communities,没有明确的edge信息,所以用第一个模型。
  • CLUSTER, Node Classification:任务是为每个node分配cluster,一共有6个cluster,用第一个模型。

模型的配置:使用PyTorch,DGL。一共有10层Graph Transformer layers,每层有8个attention head和随机隐藏单元,学习率递减策略,当学习率达到 1 0 − 6 10^{-6} 106就停止训练。使用 4 种不同的种子进行每个实验,并报告 4 次运行的平均值和平均性能测量值。
表1如下:

  • GraphTransformer (GT) 在所有数据集上的结果。 ZINC 的性能测量是 MAE,PATTERN 和 CLUSTER的性能测量是 Acc。 结果(除了 ZINC 之外,所有结果都越高越好)是使用 4 种不同种子进行 4 次运行的平均值。
  • 粗体:每个数据集表现最佳的模型。
  • 使用给定的图(稀疏图)和(完整图)执行每个实验,其中完整图在所有节点之间创建完全连接;对于 ZINC 全图,边特征被丢弃。
    在这里插入图片描述
    表2如下所示:
    每个数据集上的最佳表现分数(来自表 1)与 GNN baselines的比较
    在这里插入图片描述
    实验结论如下:
  • 由表1可知,带有PE和BN的模型实验数据更好。
  • 由表2可知,提出的模型明显比GCN和GTN要好,但没有GatedGCN好。
  • 提出的第二个模型的性能在ZINC上近似于GatedGCN。

相关文章:

论文阅读:A Generalization of Transformer Networks to Graphs

论文阅读&#xff1a;A Generalization of Transformer Networks to Graphs 论文地址1 摘要2 贡献Graph TransformerOn Graph Sparsity&#xff08;图稀疏&#xff09;On Positional Encodings&#xff08;位置编码&#xff09;3 Graph Transformer Architecture&#xff08;架…...

中国计量大学《2022年801+2022年819自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《25届中国计量大学801819自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2022年801真题 2022年819真题 Part1&#xff1a;2022年完整版真题 2022年801…...

创客匠人运营课堂|增强用户的参与度和忠诚度,这一个工具就能实现!

活动投票是通过营销活动来提升用户粘性及平台裂变效果的工具。可以让活动得到更好的传播&#xff0c;平台品牌得到更大的曝光。 使用场景 活动投票是一种互动营销手段&#xff0c;适用于各种活动场景&#xff0c;具有增强用户的参与度和忠诚度&#xff0c;提高活动的透明度和公…...

k8s 微服务 ingress-nginx 金丝雀发布

目录 一 什么是微服务 二 微服务的类型 三 ipvs模式 3.1 ipvs模式配置方式 四 微服务类型详解 4.1 clusterip 4.2 ClusterIP中的特殊模式headless 4.3 nodeport 4.4 loadbalancer 4.5 metalLB 4.6 externalname 五 Ingress-nginx 5.1 ingress-nginx功能 5.2 部署…...

Elasticsearch不停机切换(上云)方案

如何给飞行中的飞机换引擎? 背景 业务背景 略 技术背景 线下集群40个索引左右&#xff0c;总数据量不大,不到100G因为ES承担的业务鉴权业务&#xff0c;所以不能接受停机割接 还有就是ES中数据来自各个业务方&#xff0c;推送的时机不定&#xff0c;也没有完备的重推机制&…...

归纳一下Invoke,beginInvoke,还有InvokeRequire

1.在WinForms中的Invoke和BeginInvoke WinForms是一个单线程的UI框架。在多线程的环境下操作UI控件时。需要使用Invoke和BeginInvoke跨线程调起UI线程 这两的区别如下Invoke&#xff1a;同步调用&#xff0c;当前代码不在UI线程上执行时&#xff0c;会卡住当前线程&#xff0…...

Prompt最佳实践|指定输出的长度

在OpenAI的官方文档中已经提供了[Prompt Enginerring]的最佳实践&#xff0c;目的就是帮助用户更好的使用ChatGPT 编写优秀的提示词我一共总结了9个分类&#xff0c;本文讲解第6个分类&#xff1a;指定输出长度 提供更多的细节要求模型扮演角色使用分隔符指定任务步骤提供样例…...

离散制造 vs 流程制造:锚定精准制造未来,从装配线到化学反应,实时数据集成在制造业案例中的多维应用

使用 TapData&#xff0c;化繁为简&#xff0c;摆脱手动搭建、维护数据管道的诸多烦扰&#xff0c;轻量替代 OGG, Kettle 等同步工具&#xff0c;以及基于 Kafka 的 ETL 解决方案&#xff0c;「CDC 流处理 数据集成」组合拳&#xff0c;加速仓内数据流转&#xff0c;帮助企业…...

教你一招:在微信小程序中为用户上传的图片添加时间水印

在微信小程序开发过程中&#xff0c;我们常常需要在图片上添加水印&#xff0c;以保护版权或增加个性化元素。本文将为大家介绍如何在微信小程序中为图片添加时间水印&#xff0c;让你的小程序更具特色。 实现步骤&#xff1a; 1. 创建页面结构 在pages目录下创建一个名为upl…...

MySQL --基本查询(上)

文章目录 1.Create1.1单行数据全列插入1.2多行数据指定列插入1.3插入否则更新1.4替换 2.Retrieve2.1 select列2.1.1全列查询2.1.2指定列查询2.1.3查询字段为表达式2.1.4 为查询结果指定别名2.1.5结果去重 2.2where 条件2.2.1英语不及格的同学及英语成绩 ( < 60 )2.2.2语文成…...

mysql学习教程,从入门到精通,SQL 删除数据(DELETE 语句)(19)

1、SQL 删除数据&#xff08;DELETE 语句&#xff09; 在SQL中&#xff0c;TRUNCATE TABLE 语句用于删除表中的所有行&#xff0c;但不删除表本身。这个操作通常比使用 DELETE 语句删除所有行要快&#xff0c;因为它不记录每一行的删除操作到事务日志中&#xff0c;而是直接重…...

RoguelikeGenerator Pro - Procedural Level Generator

这是怎么一回事? Roguelike Generator Pro:简单与力量的结合。使用GameObjects、Tilemaps或自定义解决方案轻松制作3D/2D/2.5D关卡。享受内置功能,如碰撞处理、高度变化、基本控制器和子随机化器,所有这些都由Drunkard Wlak程序生成算法提供支持。 我该如何使用它? 简单:…...

反病毒技术和反病毒软件(网络安全小知识)

一、反病毒技术的难点 病毒变异与多态性&#xff1a;病毒开发者不断利用新技术和漏洞&#xff0c;创造出新的病毒变种和多态病毒。这些病毒能够自我变异&#xff0c;从而避开传统的基于特征码的检测方法&#xff0c;使得反病毒软件难以识别和清除。 未知病毒检测&#xff1a;在…...

位图与布隆过滤器

引例 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中。 思路1&#xff1a;排序二分查找 思路2&#xff1a;哈希或红黑树 因为40亿个整数要占用16GB 102410241024Byte 约等于10亿Byte1GB 40亿*4Byte 16G…...

【题解】—— LeetCode一周小结38

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结37 16.公交站间的距离 题目链接&#xff1a;1184. 公交站间的距…...

EvilScience靶机详解

主机发现 arp-scan -l 得到靶机ip 192.168.229.152 端口扫描 nmap -sV -A -T4 192.168.1.20 这段代码使用 nmap 命令来扫描目标主机 192.168.1.20&#xff0c;并执行以下操作&#xff1a;-sV&#xff1a;探测开放的端口&#xff0c;以确定服务/版本信息。-A&#xff1a;启…...

算法练习题24——leetcode3296移山所需的最小秒数(二分模拟)

【题目描述】 【代码示例&#xff08;java&#xff09;】 class Solution {// 计算让工人们将山的高度降到0所需的最少时间public long minNumberOfSeconds(int mountainHeight, int[] workerTimes) {long left 0; // 最少时间初始为0long right 0; // 最大时间初始化为0// …...

excel 单元格一直显示年月日

excel 单元格一直显示年月日&#xff0c;在单元格上右键选择单元格格式&#xff0c;选择日期时单元格会显示成日期格式...

【线程】线程的控制

本文重点&#xff1a;理解线程控制的接口 前言 内核中是没有很明确线程的概念的&#xff0c;只有轻量级进程的概念&#xff0c;不会提供直接给我们线程的系统调用&#xff0c;而会给我们提供轻量级进程的系统调用。我们用户是需要线程的接口的&#xff0c;在应用层&#xff0…...

掌握 Spring:从新手到高手的常见问题汇总

一提起Spring&#xff0c;总感觉有太多知识&#xff0c;无法详尽&#xff0c;有些基础理解就先不说了&#xff0c;相信大家都已经用过Spring了 下面简单针对常见Spring面试题做些回答 核心特性 IOC容器spring事件资源管理国际化校验数据绑定类型转换spirng表达式面向切面编程……...

机器学习——Bagging

Bagging&#xff1a; 方法&#xff1a;集成n个base learner模型&#xff0c;每个模型都对原始数据集进行有放回的随机采样获得随机数据集&#xff0c;然后并行训练。 回归问题&#xff1a;n个base模型进行预测&#xff0c;将得到的预测值取平均得到最终结果。 分类问题&#xf…...

日志体系结构与框架:历史、实现与如何在 Spring Cloud 中使用日志体系

文章目录 1. 引言2. 日志体系结构3. 日志框架的发展历程日志框架特点对比 4. 日志记录器的使用与管理使用 SLF4J 和 Logback 的日志记录示例 5. Spring Cloud 中的日志使用5.1 日志框架集成5.2 分布式追踪&#xff1a;Spring Cloud Sleuth 和 Zipkin添加 Sleuth 和 Zipkin 依赖…...

图文深入理解SQL语句的执行过程

List item 本文将深入介绍SQL语句的执行过程。 一.在RDBMS&#xff08;关系型DB&#xff09;中&#xff0c;看似很简单的一条已写入DB内存的SQL语句执行过程却非常复杂&#xff0c;也就是说&#xff0c;你执行了一条诸如select count(*) where id 001 from table_name的非常简…...

ubuntu安装StarQuant

安装boost 下面展示一些 内联代码片。 sudo apt install libboost-all-dev -y安装libmongoc-1.0 链接: link // An highlighted block sudo apt install libmongoc-1.0-0 sudo apt install libbson-1.0 sudo apt install cmake libssl-dev libsasl2-dev编译源码 $ git clone…...

学习篇 | Jupyter 使用(notebook hub)

1. JupyterHub 1.1 快速尝试 jupyterhub -f/path/jupyter_config.py --no-ssl1.2 长期后台运行 bash -c "nohup jupyterhub -f/path/jupyter_config.py --no-ssl" > ~/jupyterhub.log 2>&1 &1.3 帮助 jupyterhub --help2. Jupyter Notebook 2.1 快…...

【裸机装机系列】8.kali(ubuntu)-虚拟内存swap交换分区扩展

推荐阅读&#xff1a; 1.kali(ubuntu)-为什么弃用ubuntu&#xff0c;而选择基于debian的kali操作系统 linux swap交换分区&#xff0c;相当于win系统虚拟内存的概念。当linux系统的物理内存不够用的时候&#xff0c;就需要将物理内存中的一部分空间释放出来&#xff0c;以供当前…...

异步请求的方法以及原理

异步请求是指在发送请求后&#xff0c;不会阻塞程序的执行&#xff0c;而是继续执行后续的代码&#xff0c;等待请求返回后再执行相应的回调函数。常见的异步请求方法包括使用XMLHttpRequest对象&#xff08;XHR&#xff09;和fetch API。 异步请求的方法 1. XMLHttpRequest (X…...

SpringCloud入门(六)Nacos注册中心(下)

一、Nacos环境隔离 Nacos提供了namespace来实现环境隔离功能。 nacos中可以有多个namespace。namespace下可以有group、service等。不同namespace之间相互隔离&#xff0c;例如不同namespace的服务互相不可见。 使用Nacos Namespace 环境隔离 步骤&#xff1a; 1.在Nacos控制…...

【RDMA】mlxlink检查和调试连接状态及相关问题--驱动工具

简介 mlxlink工具用于检查和调试连接状态及相关问题。该工具可以用于不同的链路和电缆&#xff08;包括被动、电动、收发器和背板&#xff09;。 属于mft工具套件的一个工具&#xff0c;固件工具 Firmware Tools (MFT):https://blog.csdn.net/bandaoyu/article/details/14242…...

QT For Android开发-打开PPT文件

一、前言 需求&#xff1a; Qt开发Android程序过程中&#xff0c;点击按钮就打开一个PPT文件。 Qt在Windows上要打开PPT文件或者其他文件很容易。可以使用QDesktopServices打开文件&#xff0c;非常方便。QDesktopServices提供了静态接口调用系统级别的功能。 这里用的QDesk…...