GAT

news/2025/3/15 4:58:26/

Paper : Graph Attention Networks
Code :

摘要

注意力机制的核心在于对给定信息进行权重分配,只关注最相关的输入来进行决策。当注意力机制用来生成一个序列的表示时,也被称作是自注意力机制。注意力机制的表示形式如下

在这里插入图片描述
假定Source是需要系统处理的信息源,Query代表某种条件或者先验信息,Attention Value是给定Query信息的条件下,通过注意力机制从Source中提取得到的信息。一般Source里面包含有多种信息,我们将每种信息通过Key-Value对的形式表示出来,那么Attention定义为

Attention(Query,Source) = ∑ i similarity(Query,Key i ) ⋅ Value i \text{Attention(Query,Source)} = \sum_i\text{similarity(Query,Key}_i)\cdot\text{Value}_i Attention(Query,Source)=isimilarity(Query,Keyi)Valuei

其中 similarity(Query,Key i ) \text{similarity(Query,Key}_i) similarity(Query,Keyi) 表示权重,当Query与Key越接近时,答案越依赖于对应的Value的值。GAT将Attention机制应用到GNN中,Attention机制的三要素分别对应到图中的以下要素

  • Query : 某节点的特征向量
  • Source : 上一层所有邻居节点的特征向量
  • Attention Value : 经过聚合后形成的当前层某节点的特征向量

GAT具有以下几个特点

  • 操作高效,可以在 节点-邻居 之间进行并行化计算
  • 通过对邻居指定任意权重,可以应用于度数不同的图节点
  • 该模型直接适用于归纳学习问题,包括必须将模型推广到完全不可见图的任务

GAT结构

GAT层的输入是节点的特征表示 h = { h → i ∣ 1 ≤ i ≤ N } \text h = \{\overrightarrow{h}_i| 1\leq i\leq N\} h={h i1iN} ,其中 h → i ∈ R F \overrightarrow{h}_i \in \mathbb R^F h iRF,输出是聚合后节点的新的特征表示 h ′ = { h ′ → i ∣ 1 ≤ i ≤ N } \text h' = \{\overrightarrow{h'}_i| 1\leq i\leq N\} h={h i1iN} ,其中 h ′ → i ∈ R F ′ \overrightarrow{h'}_i \in \mathbb R^{F'} h iRF。与其他MPNN结构GNN层相似,GAT层需要学习一个线性映射 W ∈ R F ′ × F W\in\mathbb R^{F'\times F} WRF×F ,而节点 j j j 对于节点 i i i 的注意力权重定义为
e i , j = a ( W h → i , W h → j ) e_{i,j} = a(W\overrightarrow h_i, W\overrightarrow h_j) ei,j=a(Wh i,Wh j)

最通用的形式下,该注意力机制可以表示任意节点 j j j 对任意节点 i i i 的权重,但是一般限制为一阶邻居和自己,即
j ∈ N ~ ( v i ) N ~ ( v i ) = N ( v i ) ∪ { v i } \\j\in \widetilde N(v_i) \\ \widetilde N(v_i) = N(v_i) \cup\{v_i\} jN (vi)N (vi)=N(vi){vi}

为了便于比较不同节点之间的相关系数,需要对节点 i i i 所有的邻居节点 j j j 的权重进行正则化

α i , j = softmax j ( e i , j ) = exp ⁡ ( e i , j ) ∑ v k ∈ N ~ ( v i ) exp ⁡ ( e i , k ) \alpha_{i,j} = \text{softmax}_j(e_{i,j}) = \frac{\exp(e_{i,j})}{\sum_{v_k\in \widetilde N(v_i)}\exp(e_{i,k})} αi,j=softmaxj(ei,j)=vkN (vi)exp(ei,k)exp(ei,j)

对于 e i , j e_{i,j} ei,j a a a 可以选择为非参数的相似度函数,也可以选择使用参数化的模型来输出相似度。在GAT中采用单层全连接网络进行相似度评估,即 a → ∈ R 2 F ′ \overrightarrow a \in \mathbb R^{2F'} a R2F,并使用LeakyReLU 参数 α = 0.2 \alpha = 0.2 α=0.2,最终权重可以表示为

α i , j = exp ⁡ ( LeakyReLU ( a → T [ W h → i ∣ ∣ h → j ] ) ) ∑ v k ∈ N ~ ( v i ) exp ⁡ ( LeakyReLU ( a → T [ W h → i ∣ ∣ h → k ] ) ) \alpha_{i,j} = \frac{\exp(\text{LeakyReLU}(\overrightarrow a^{\text T}[W\overrightarrow h_i||\overrightarrow h_j]))}{\sum_{v_k\in\widetilde N(v_i)}\exp(\text{LeakyReLU}(\overrightarrow a^{\text T}[W\overrightarrow h_i||\overrightarrow h_k]))} αi,j=vkN (vi)exp(LeakyReLU(a T[Wh ih k]))exp(LeakyReLU(a T[Wh ih j]))

节点表示向量聚合之后的结果如下

h → i ′ = σ ( ∑ v j ∈ N ~ ( v i ) α i , j W h → j ) \overrightarrow h_i' = \sigma(\sum_{v_j\in \widetilde N(v_i)}\alpha_{i,j}W\overrightarrow h_j) h i=σ(vjN (vi)αi,jWh j)

为了使自注意力机制的学习过程更加稳定,可以将该方法扩展到multi-head attention,假设同时使用了K个注意力机制,输出是将它们单独的输出进行连接

h → i ′ = ∣ ∣ k = 1 K σ ( ∑ v j ∈ N ~ ( v i ) α i , j k W k h → j ) \overrightarrow h_i' = ||_{k=1}^K \sigma(\sum_{v_j\in \widetilde N(v_i)}\alpha_{i,j}^kW^k\overrightarrow h_j) h i=k=1Kσ(vjN (vi)αi,jkWkh j)

在这里插入图片描述

如果将多头注意力机制使用到最后一层,那么连接操作不太合适,一般使用均值操作来合并多个注意力机制的结果并延迟sigmoid操作

h → i ′ = σ ( 1 K ∑ k = 1 K ∑ v j ∈ N ~ ( v i ) α i , j k W k h → j ) \overrightarrow h_i' = \sigma(\frac{1}{K}\sum_{k=1}^K\sum_{v_j\in \widetilde N(v_i)}\alpha_{i,j}^kW^k\overrightarrow h_j) h i=σ(K1k=1KvjN (vi)αi,jkWkh j)

总结

GAT提出了一个只需要知道局部特征就可以计算的Attention机制,算法并行支持很好,而且对于效果也有一定的改善。从实验设置上,可能缺乏一个有关计算代价的实验来支持“低代价计算Attention”的结论。GAT具有以下几个可以改进的方向

  • 处理的batch size的数据
  • 使用Attention分析模型表示能力
  • 从node classification 扩展到graph classification
  • 将edge features考虑进来

http://www.ppmy.cn/news/642035.html

相关文章

Spring Boot 3.0 GA来啦,GraalVM Native Image Support初体验

Spring Boot 3.0 GA来啦,GraalVM Native Image Support初体验 前言 2022-11-25,SpringBoot 3.0.0 GA版本发布,带了Web Javaer万众期待的Cloud Native特性,这也意味着占据Java Web圈半壁江山的Spring框架正式进入真正的云原生时代…

Higress 0.7.0 版本发布:GA 进入倒计时

作者:Higress 进展概要 Higress 控制台正式 release,涵盖 Higress 的服务/路由/域名/证书管理能力,并提供开箱即用的可观测功能安装/升级 Higress 时支持自动安装对应版本的 Higress Console,避免版本不适配的问题支持开启 Istio…

Java中Beta、Alpha、RC、RELEASE、GA、SNAPSHOT等版本分别代表什么意思?

这两天 Apache Log4j2 的漏洞被闹的沸沸扬扬,一方面是大家热衷于炒作,另一方面是好久没有热闹的消息了,沉寂了太久,需要爆发一波! 回归理性来看,Apache 这波漏洞修复,来来回回发了好几个版本&a…

GA学习

最近在思考PPC/SEO/EDM等线上营销方式,还有第三方合作,以及电视媒体等不同推广渠道的来源,投资回报如何监控。目前看来网络营销和传统营销两者之间如何进行相互促进和转化,以及交叉销售,用户群体的细分等,是…

QCC51XX---如何创建chain并应用到APP层

QCC51XX---系统学习目录_嵌入式学习_force的博客-CSDN博客 看完高通所有有关Kymera相关的文档,也不会看到如何创建chain并应用到APP层这个部分相关内容,因为每个产品的应用需求有很多不一样的地方,所以每个产品上面如果遇到没有的相关chain处理链,需要自行添加自定义chain,…

GA google_analysis数据埋点使用学习记录(GTM)

目录,可以直接点到实践那里开始看的,前面都是我整理笔记的资料 理论部分1、将ga的创建代码在项目开始的时候运行一下,如下图。2、ga函数是什么3、发送数据 实践申请账号和媒体资源:设置跟踪代码,衡量网页浏览怎么定义一…

GAC

GAC(Global AssemblyCache)全局程序集缓存是存放一些有很多程序都要用到的公共Assembly,例如System.Data、System.windows.Froms等。 它在任何带有已安装的 CLR 的机器(例如已安装了 CF.NET 的 Pocket PC)上都可用。旨…