论文阅读: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 实验

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。

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

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

相关文章

阿里HPN-用于大型语言模型训练的数据中心网络

阿里巴巴HPN:用于大型语言模型训练的数据中心网络 探索大规模语言模型训练新方法&#xff1a;阿里巴巴HPN数据中心网络论文。 摘要 本文介绍了阿里云用于大型语言模型(LLM)训练的数据中心网络HPN。由于LLM和一般云计算之间的差异(例如&#xff0c;在流量模式和容错性方面)&…

一份热乎的阿里25届数据分析面试题

目录 阿里巴巴25届数分面试题 想要获取答案&#xff0c;想进一步了解SQL这门艺术语言的&#xff0c;可以订阅我的专栏数字化建设通关指南&#xff0c;将在该专栏进行详细解析。 专栏 原价99&#xff0c;现在活动价39.9&#xff0c;按照阶梯式增长&#xff0c;还差3个名额将上…

如何备份SqlServer数据库

第一步&#xff1a;登录你要备份的服务器数据库ssms 第二步&#xff1a;选择你要备份的数据库 此处已PZ-SJCS 数据库为例 右键该数据库-->任务-->备份 第三步&#xff1a;选择你备份的类型备份组件等&#xff0c;目标磁盘 &#xff0c;点击添加选择将你备份的文件备份那…

kubernetes网络(一)之calico详解

摘要 本文介绍Kubernetes最流行的网络解决方案calico。 kubernetes中不同宿主上的pod需要相互通信&#xff0c;如果按TCP/IP协议分层进行分类&#xff1a; 二层方案&#xff1a;flannel的udp和vxlan模式 三层方案&#xff1a;flannel的host-gw模式&#xff1b;calico的IPIP模…

pod介绍与配置

1、pod概念介绍 Pod 是 kubernetes 基本调度单位。每个 Pod 中可以运 行一个或多个容器&#xff0c;共享 Pod 的文件系统、IP 和网络等资源&#xff0c;每个 Pod 只有一个 IP。 2、使用 yaml或json 文件创建 Pod 声明式文件方式创建 Pod&#xff0c;支持 yaml 和 json 1&…

【Fastapi】参数获取,json和query

【Fastapi】参数获取&#xff0c;json和query 前言giteegithub query形式json传递同步方法使用json 前言 花了半个月的时间看了一本小说&#xff0c;懈怠了…今天更新下fastapi框架的参数获取 gitee https://gitee.com/zz1521145346/fastapi_frame.git github https://git…

【网络通信基础与实践番外一】多图预警之图解UDP和TCP前置知识

参考大佬的文章https://www.cnblogs.com/cxuanBlog/p/14059379.html 一、宏观架构中的传输层 在计算机中&#xff0c;任何一个可以交换信息的介质都可以称为端系统。计算机网络的运输层则负责把报文从一端运输到另一端&#xff0c;运输层实现了让两个互不相关的主机进行了逻辑…

【洛谷】P10417 [蓝桥杯 2023 国 A] 第 K 小的和 的题解

【洛谷】P10417 [蓝桥杯 2023 国 A] 第 K 小的和 的题解 题目传送门 题解 CSP-S1 补全程序&#xff0c;致敬全 A 的答案&#xff0c;和神奇的预言家。 写一下这篇的题解说不定能加 CSP 2024 的 RP 首先看到 k k k 这么大的一个常数&#xff0c;就想到了二分。然后写一个判…

Netty系列-4 Pipeline和Handler

背景 Netty将IO事件按照流向划分为两个部分&#xff1a;Inbound入站事件和Outbound出站事件。入站事件由外部触发&#xff0c;包括通道注册(register)、通道激活(active)、数据可读(read)、通道异常(exceptionCaught)等&#xff1b;出站事件由程序主动触发&#xff0c;如连接的…

人工智能不是人工“制”能

文/孟永辉 如果你去过今年在上海举办的世界人工智能大会&#xff0c;就会知道当下的人工智能行业在中国是多么火爆。 的确&#xff0c;作为第四次工业革命的重要组成部分&#xff0c;人工智能愈发引起越来越多的重视。 不仅仅是在中国&#xff0c;当今世界的很多工业强国都在将…

828华为云征文|云服务器Flexus X实例|MacOS系统-宝塔部署Nuxt项目

文章目录 1. Flexus云服务器X实例1.1 与Flexus应用服务器L实例相比具备以下优势1.2 服务器的详细配置 2.宝塔部署Nuxt项目2.1 登录实例2.1 宝塔面板 3. Nuxt 项目与部署3.1 Nuxt3.2创建Nuxt项目3.3 部署3.4 部署成功 4.结语 1. Flexus云服务器X实例 华为云的Flexus云服务是为中…

C++高精度计时方法总结(测试函数运行时间)

文章目录 一、clock()函数——毫妙级二、GetTickCount()函数&#xff08;精度16ms左右&#xff09;——毫妙级三、高精度时控函数QueryPerformanceCounter()——微妙级四、高精度计时chrono函数——纳妙级五、几种计时比较六、linux下的计时函数gettimeofday()-未测试参考文献 …

typedef的用法

typedef只有一种用法&#xff0c;那就是&#xff1a; 1,代替各种类型或某类&#xff08;结构体&#xff09;成员。 比如下列代码&#xff1a; #include <iostream> #include <string> int main() {typedef int i;i e3;int f3;std::string t_or_f(ef)?"tru…

OpenAI的O1模型达到AGI二级,类人推理能力被提示危险,细思极恐!

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 今天让我们一起来聊聊最近科技圈的大新闻—…

利士策分享,家庭内耗:隐形的风暴,无声的侵蚀

利士策分享&#xff0c;家庭内耗&#xff1a;隐形的风暴&#xff0c;无声的侵蚀 在温馨的灯光下&#xff0c;家本应是我们心灵的港湾&#xff0c;是疲惫时最坚实的依靠。 然而&#xff0c;当家庭内部出现裂痕&#xff0c;无形的内耗便如同冬日里的寒风&#xff0c;悄无声息地…

SpringBoot 3.4.0还没来之前,又又又更新啦!SpringBoot 3.3.4版本依赖升级,性能与稳定性再提升!

为什么要使用SpringBoot在现代开发中&#xff0c;高效与灵活性是每个开发团队追求的核心目标。然而&#xff0c;如何在不牺牲灵活性的前提下&#xff0c;快速构建复杂的应用程序&#xff0c;常常成为开发者的难题。SpringBoot的出现&#xff0c;正是为了解决这个矛盾。它以“约…

Spring Boot技术在高校心理辅导系统中的应用研究

3 系统分析 3.1可行性分析 在进行可行性分析时&#xff0c;我们通常根据软件工程里方法&#xff0c;通过四个方面来进行分析&#xff0c;分别是技术、经济、操作和法律可行性。因此&#xff0c;在基于对目标系统的基本调查和研究后&#xff0c;对提出的基本方案进行可行性分析。…

【C++初阶】探索STL之——vector

【C初阶】探索STL之——vector 1.什么是vector2.vector的使用2.1 vector的定义2.2 vector iterator(迭代器)的使用2.3 vector空间问题2.4 vector的增删查改2.5 vector迭代器失效的问题2.5.1 vector常见迭代器失效的操作 3 动态二位数组 1.什么是vector vector其实就是一个可以…

GNU链接器(LD):设置入口点(ENTRY命令)的用法及实例解析

0 参考资料 GNU-LD-v2.30-中文手册.pdf GNU linker.pdf1 前言 一个完整的编译工具链应该包含以下4个部分&#xff1a; &#xff08;1&#xff09;编译器 &#xff08;2&#xff09;汇编器 &#xff08;3&#xff09;链接器 &#xff08;4&#xff09;lib库 在GNU工具链中&…

3.5.2 __ipipe_init()之完成中断处理程序设置

点击查看系列文章 》 Interrupt Pipeline系列文章大纲-CSDN博客 原创不易&#xff0c;需要大家多多鼓励&#xff01;您的关注、点赞、收藏就是我的创作动力&#xff01; 3.5.2 __ipipe_init()之完成中断处理程序设置 __ipipe_init()最核心的就是__ipipe_enable_pipeline()&am…