【图结构】之图注意力网络GAT详解
作者:張張張張
github地址:https://github.com/zhanghekai
【转载请注明出处,谢谢!】
GATGATGAT源代码地址:https://github.com/PetarV-/GAT
GATGATGAT论文地址:https://arxiv.org/pdf/1710.10903.pdf
\qquad GATGATGAT是在GCNGCNGCN的基础上进行改进而得以实现的,不熟悉GCNGCNGCN的朋友可以阅读我的另一篇文章【图结构】之图神经网络GCN详解,关于输入的特征矩阵的生成方式以及最后如何用GATGATGAT或GCNGCNGCN进行分类,都在这篇文章中有所讲述!
文章目录
- 一、在GCN中引入注意力机制——GAT
- 二、图注意力层Graph Attention layer
- 2.1 图注意力层的输入与输出
- 2.2 特征提取与注意力机制
- 2.3 输出特征
- 2.4 multi-head attention
- 三、GAT实现分类
一、在GCN中引入注意力机制——GAT
在GCNGCNGCN详解那篇文章最后我们提出了GCNGCNGCN的两个缺点,GATGATGAT就是来解决这两个缺点的:
GCNGCNGCN缺点:
- 这个模型对于同阶的邻域上分配给不同的邻居的权重是完全相同的(也就是GATGATGAT论文里说的:无法允许为邻居中的不同节点指定不同的权重)。这一点限制了模型对于空间信息的相关性的捕捉能力,这也是在很多任务上不如GATGATGAT的根本原因。
- GCNGCNGCN结合临近节点特征的方式和图的结构依依相关,这局限了训练所得模型在其他图结构上的泛化能力。
\qquadGraphAttentionNetwork(GAT)Graph Attention Network (GAT)GraphAttentionNetwork(GAT)提出了用注意力机制对邻近节点特征加权求和。 邻近节点特征的权重完全取决于节点特征,独立于图结构。GATGATGAT和GCNGCNGCN的核心区别在于如何收集并累和距离为1的邻居节点的特征表示。 图注意力模型GATGATGAT用注意力机制替代了GCNGCNGCN中固定的标准化操作。本质上,GATGATGAT只是将原本GCNGCNGCN的标准化函数替换为使用注意力权重的邻居节点特征聚合函数。
GATGATGAT优点:
- 在GATGATGAT中,图中的每个节点可以根据邻节点的特征,为其分配不同的权值。
- GATGATGAT的另一个优点在于,引入注意力机制之后,只与相邻节点有关,即共享边的节点有关,无需得到整张图的信息:(1)该图不需要是无向的(如果边缘j→ij\to ij→i不存在,我们可以简单地省略计算αij\alpha_{ij}αij);(2)它使我们的技术直接适用于inductive  learninginductive\;learninginductivelearning——包括在训练期间完全看不见的图形上的评估模型的任务。
二、图注意力层Graph Attention layer
2.1 图注意力层的输入与输出
图注意力层的输入是:一个节点特征向量集:
h={h⃗1,h⃗2,⋯,h⃗N},h⃗i∈RFh=\{\vec{h}_1,\vec{h}_2,\cdots,\vec{h}_N\},\vec{h}_i\in \R^Fh={h1,h2,⋯,hN},hi∈RF
其中NNN为节点个数,FFF为节点特征的个数。矩阵hhh的大小是N×FN\times FN×F,代表了所有节点的特征,而R\RR只代表了某一个节点的特征,所以它的大小为F×1F \times 1F×1。输出同理。每一层的输出是:一个新的节点特征向量集:
h′={h′⃗1,h′⃗2,⋯,h′⃗N},h′⃗i∈RF′h'=\{ \vec{h'}_1,\vec{h'}_2,\cdots,\vec{h'}_N\},\vec{h'}_i\in \R^{F'}h′={h′1,h′2,⋯,h′N},h′i∈RF′
其中F′F'F′表示新的节点特征向量维度(可以不等于FFF)。
\qquadGATGATGAT与GCNGCNGCN同样也是一个特征提取器,针对的是NNN个节点,按照其输入的节点特征预测输出新的节点的特征。
2.2 特征提取与注意力机制
\qquad为了得到相应的输入与输出的转换,我们需要根据输入的特征至少进行一次线性变换得到输出的特征,所以我们需要对所有节点训练一个权重矩阵:W∈RF′×FW\in\R^{F' \times F}W∈RF′×F,这个权重矩阵就是输入的FFF个特征与输出的F′F'F′个特征之间的关系。
\qquad针对每个节点实行self−attentionself-attentionself−attention的注意力机制,注意力系数(attention  coefficients)(attention \;coefficients)(attentioncoefficients)为:
(1)eij=a(Wh⃗i,Wh⃗j)e_{ij}=a(W\vec{h}_i,W\vec{h}_j)\tag{1}eij=a(Whi,Whj)(1)
注意:aaa不是一个常数或是矩阵,a()a()a()是一个函数,类似于f(x)f(x)f(x)那种自己定义好的函数。
- 这个公式表示了节点jjj对节点iii的重要性,而不去考虑图结构的信息。
- 如前面介绍过的,向量hhh就是节点的特征向量。
- 下标i,ji,ji,j表示第iii个节点和第jjj个节点。
★什么是self−attentionself-attentionself−attention机制?
\qquadself−attentionself-attentionself−attention其作用是能够更好地学习到全局特征之间的依赖关系,self−attentionself-attentionself−attention通过直接计算图结构中任意两个节点之间的关系,一步到位地获取图结构的全局几何特征。
\qquadself−attentionself-attentionself−attention利用了attentionattentionattention机制,分三个阶段进行计算:(1) 引入不同的函数和计算机制,根据QueryQueryQuery和某个KeyiKey_iKeyi,计算两者的相似性或者相关性,最常见的方法包括:求两者的向量点积、求两者的向量CosineCosineCosine相似性或者通过再引入额外的神经网络来求值;(2) 引入类似softmaxsoftmaxsoftmax的计算方式对第一阶段的得分进行数值转换,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为111的概率分布;另一方面也可以通过softmaxsoftmaxsoftmax的内在机制更加突出重要元素的权重;(3)第二阶段的计算结果aia_iai即为valueivalue_ivaluei对应的权重系数,然后进行加权求和即可得到attentionattentionattention数值。
\qquad作者通过masked  attentionmasked \;attentionmaskedattention将这个注意力机制引入图结构中,masked  attentionmasked \;attentionmaskedattention的含义是:仅将注意力分配到节点iii的邻居节点集NiN_iNi上,即 j∈Nij \in N_ij∈Ni (在本文中,节点iii也是NiN_iNi的一部分)。 为了使得注意力系数更容易计算和便于比较,我们引入了softmaxsoftmaxsoftmax对所有的iii的相邻节点jjj进行正则化:
(2)αij=softmaxj(eij)=exp(eij)∑k∈Niexp(eik)\alpha_{ij}=softmax_j(e_{ij})=\frac{exp(e_{ij})}{\sum_{k\in N_i}exp(e_{ik})}\tag{2}αij=softmaxj(eij)=∑k∈Niexp(eik)exp(eij)(2)
\qquad实验之中,注意力机制aaa是一个单层的前馈神经网络,a⃗∈R2F′\vec{\rm{a}}\in\R^{2F'}a∈R2F′是神经网络中连接层与层之间的权重矩阵,在该前馈神将网络的输出层上还加入了LeakyReLuLeakyReLuLeakyReLu函数,这里小于零斜率为0.20.20.2。
★什么是LeakyReLuLeakyReLuLeakyReLu函数?
\qquadReLuReLuReLu是将所有的负值都设为零,相反,LeakyReLuLeakyReLuLeakyReLu是给所有负值赋予一个非零斜率,在本论文中以数学的方式我们可以表示为:
yi={xiif  xi≥00.2if  xi≤0y_i=\begin{cases}x_i & if\;x_i\geq0\\0.2 & if\;x_i\leq0\end{cases}yi={xi0.2ifxi≥0ifxi≤0
\qquad综合上述公式(1)和(2),整理到一起可得到完整的注意力机制如下:
(3)αij=exp(LeakyReLu(a⃗T[Wh⃗i∣∣Wh⃗j]))∑k∈Niexp(LeakyReLu(a⃗T[Wh⃗i∣∣Wh⃗k]))\alpha_{ij}=\frac{exp(LeakyReLu(\vec{\rm{a}}^T[W\vec{h}_i||W\vec{h}_j]))}{\sum_{k\in N_i}exp(LeakyReLu(\vec{\rm{a}}^T[W\vec{h}_i||W\vec{h}_k]))}\tag{3}αij=∑k∈Niexp(LeakyReLu(aT[Whi∣∣Whk]))exp(LeakyReLu(aT[Whi∣∣Whj]))(3)
- ∣∣  ||\;∣∣符号的意思是连接操作(concatenation  operation)(concatenation \;operation)(concatenationoperation)
- ⋅T\cdot ^T⋅T表示为转置
注意:eije_{ij}eij和αij\alpha_{ij}αij都叫做"注意力系数",只不过αij\alpha_{ij}αij是在eije_{ij}eij基础上进行归一化后的。
上述过程可用下图来表示:
2.3 输出特征
\qquad通过上述运算得到了正则化后的不同节点之间的注意力系数,可以用来预测每个节点的输出特征:
(4)h′⃗i=σ(∑j∈NiαijWh⃗j)\vec{h'}_i=\sigma(\sum_{j \in N_i}\alpha_{ij}W\vec{h}_j)\tag{4}h′i=σ(j∈Ni∑αijWhj)(4)
- WWW为与特征相乘的权重矩阵
- α\alphaα为前面计算得到的注意力互相关系数
- σ\sigmaσ为非线性激活函数
- j∈Nij \in N_ij∈Ni中遍历的jjj表示所有与iii相邻的节点
- 这个公式表示就是:该节点的输出特征与和它相邻的所有节点有关,是它们的线性和的非线性激活后得到的。
2.4 multi-head attention
\qquad为了稳定self−attentionself-attentionself−attention的学习过程,作者发现扩展我们的机制以采用multi−head  attentionmulti-head\;attentionmulti−headattention是有益的。具体而言,KKK个独立注意力机制执行公式(4),然后将它们的特征连接起来。但是,如果我们对最终的网络层执行multi−head  attentionmulti-head\;attentionmulti−headattention,则连接操作不再合理,相反,我们采用KKK平均来替代连接操作,并延迟应用最终的非线性函数(通常为分类问题的softmaxsoftmaxsoftmax或logistic  sigmoidlogistic \;sigmoidlogisticsigmoid),得到最终的公式:
h′⃗i=σ(1K∑k=1K∑j∈NiαijkWkh⃗j)\vec{h'}_i=\sigma(\frac{1}{K}\sum_{k=1}^{K}\sum_{j\in N_i}\alpha_{ij}^kW^k\vec{h}_j)h′i=σ(K1k=1∑Kj∈Ni∑αijkWkhj)
- 共KKK个注意力机制需要考虑,kkk表示KKK中的第kkk个
- 第kkk个注意力机制为aka^kak
- 第kkk个注意力机制下输入特征的线性变换权重矩阵表示为WkW^kWk
★什么是multi−head  attentionmulti-head\;attentionmulti−headattention ?
\qquad这里面multi−head  attentionmulti-head\;attentionmulti−headattention其实就是多个self−attentionself-attentionself−attention结构的结合,每个headheadhead学习到在不同表示空间中的特征,多个headheadhead学习到的attentionattentionattention侧重点可能略有不同,这样给了模型更大的容量。
multi−head  attentionmulti-head\;attentionmulti−headattention图例:
\qquad由节点h⃗1\vec{h}_1h1在其邻域上的multi−head  attentionmulti-head\;attentionmulti−headattention(具有K=3K = 3K=3个头)的图示。不同的箭头样式和颜色表示独立的注意力计算,来自每个头的聚合特征被连接或平均以获得h′⃗1\vec{h'}_1h′1。
三、GAT实现分类
\qquadGATGATGAT的分类过程与GCNGCNGCN的分类过程十分相似,均是采用 softmaxsoftmaxsoftmax函数+++交叉熵损失函数+++梯度下降法来完成的,详细内容可参阅我的另一篇文章【图结构】之图神经网络GCN详解
【参考文献】
- 深入理解图注意力机制
- 图注意力网络(GAT) ICLR2018, Graph Attention Network
- 《Graph Attention Networks》阅读笔记
- self-attention记录
【图结构】之图注意力网络GAT详解相关推荐
- 数据结构——图结构:图
数据结构与算法分析--目录 第一部分:数据结构 数据结构--图结构:图 图基础 \quad 图是一种比线性表和数更为复杂的数据结构.在图结构中,结点之间的关系可以是任意的,也就是说,图中的任意两个数据 ...
- 时序图怎么看?时序图、活动图、状态图、协作图的区别详解
时序图怎么看?时序图.活动图.状态图.协作图的区别详解 2019-12-16 10:05:32 燚智能物联网 简介 时序图时序图用于描述对象之间的传递消息的时间顺序, 即用例中的行为顺序.当执行一个用 ...
- 注意力机制Attention详解
注意力机制Attention详解 一.前言 2018年谷歌提出的NLP语言模型Bert一提出,便在NLP领域引起热议,之所以Bert模型能够火出圈,是由于Bert模型在NLP的多项任务中取得了之前所有 ...
- 趣谈网络协议-第二模块-底层网络知识详解:4陌生的数据中心2CDN和数据中心
趣谈网络协议-第二模块-底层网络知识详解:4陌生的数据中心2CDN和数据中心 1:CDN:你去小卖部取过快递么? 使用"中间仓库"来优化 网络中的"就近配送" ...
- 趣谈网络协议-第二模块-底层网络知识详解:2最重要的传输层
趣谈网络协议-第二模块-底层网络知识详解:2最重要的传输层 1:第10讲 | UDP协议:因性善而简单,难免碰到"城会玩" TCP 和 UDP 有哪些区别? UDP 包头是什么样的 ...
- 网络知识详解之:HTTPS通信原理剖析(对称、非对称加密、数字签名、数字证书)
网络知识详解之:HTTPS通信原理剖析(对称.非对称加密.数字签名.数字证书) 计算机网络相关知识体系详解 网络知识详解之:TCP连接原理详解 网络知识详解之:HTTP协议基础 网络知识详解之:HTT ...
- 用netstat查看网络状态详解
--用netstat查看网络状态详解 -----------------------------2014/06/11 一.Linux服务器上11种网络连接状态: ...
- Kali linux无线网络渗透详解笔记
Kali linux无线网络渗透详解笔记 第一章:搭建渗透环境测试环境 第二章:WiFi网络的构成 第三章:监听WiFi网络 第四章:捕获数据包 第五章: 分析数据包 第六章:获取信息 第七章:WPS ...
- 生成对抗网络入门详解及TensorFlow源码实现--深度学习笔记
生成对抗网络入门详解及TensorFlow源码实现–深度学习笔记 一.生成对抗网络(GANs) 生成对抗网络是一种生成模型(Generative Model),其背后最基本的思想就是从训练库里获取很多 ...
最新文章
- 混合云存储开启企业上云新路径--阿里云混合云备份容灾方案发布
- 如何在30前成为“富翁”?
- POJ3114强连通+spfa
- android 怎么换行,android textview 怎么换行?
- android:碎片的概念
- php动态成本管理,网上审批系统环境下的动态目标成本管理
- arch linux windows,windows+Archlinux双系统安装指南(一)
- JavaScript中this指针的绑定规则
- Eclipse下载及汉化(官方最新)
- html使用css居中
- CF 1383/1384
- 电脑关闭Fn键+F1,直接使用F1键
- 2021年南京邮电大学自动化学院、人工智能学院考研指南
- 深度学习day01-深度学习环境、conda、创建第一张画布
- Windows 清理磁盘
- uni的numberbox怎么用_模拟器最强BIOS篇,如何使用uni-bios
- 通过百度人脸对比API进行人脸对比
- 人脸识别之insightface开源代码使用:训练、验证、测试(3)
- 51单片机编程5-蜂鸣器实验
- “骑驴找马”被上司发现了,怎么办?