作者:張張張張
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∈Ni​​exp(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​={xi​0.2​ifxi​≥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∈Ni​​exp(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​∑​αij​Whj​)(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​=σ(K1​k=1∑K​j∈Ni​∑​αijk​Wkhj​)

  • 共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详解相关推荐

  1. 数据结构——图结构:图

    数据结构与算法分析--目录 第一部分:数据结构 数据结构--图结构:图 图基础 \quad 图是一种比线性表和数更为复杂的数据结构.在图结构中,结点之间的关系可以是任意的,也就是说,图中的任意两个数据 ...

  2. 时序图怎么看?时序图、活动图、状态图、协作图的区别详解

    时序图怎么看?时序图.活动图.状态图.协作图的区别详解 2019-12-16 10:05:32 燚智能物联网 简介 时序图时序图用于描述对象之间的传递消息的时间顺序, 即用例中的行为顺序.当执行一个用 ...

  3. 注意力机制Attention详解

    注意力机制Attention详解 一.前言 2018年谷歌提出的NLP语言模型Bert一提出,便在NLP领域引起热议,之所以Bert模型能够火出圈,是由于Bert模型在NLP的多项任务中取得了之前所有 ...

  4. 趣谈网络协议-第二模块-底层网络知识详解:4陌生的数据中心2CDN和数据中心

    趣谈网络协议-第二模块-底层网络知识详解:4陌生的数据中心2CDN和数据中心 1:CDN:你去小卖部取过快递么? 使用"中间仓库"来优化 网络中的"就近配送" ...

  5. 趣谈网络协议-第二模块-底层网络知识详解:2最重要的传输层

    趣谈网络协议-第二模块-底层网络知识详解:2最重要的传输层 1:第10讲 | UDP协议:因性善而简单,难免碰到"城会玩" TCP 和 UDP 有哪些区别? UDP 包头是什么样的 ...

  6. 网络知识详解之:HTTPS通信原理剖析(对称、非对称加密、数字签名、数字证书)

    网络知识详解之:HTTPS通信原理剖析(对称.非对称加密.数字签名.数字证书) 计算机网络相关知识体系详解 网络知识详解之:TCP连接原理详解 网络知识详解之:HTTP协议基础 网络知识详解之:HTT ...

  7. 用netstat查看网络状态详解

    --用netstat查看网络状态详解 -----------------------------2014/06/11 一.Linux服务器上11种网络连接状态:                     ...

  8. Kali linux无线网络渗透详解笔记

    Kali linux无线网络渗透详解笔记 第一章:搭建渗透环境测试环境 第二章:WiFi网络的构成 第三章:监听WiFi网络 第四章:捕获数据包 第五章: 分析数据包 第六章:获取信息 第七章:WPS ...

  9. 生成对抗网络入门详解及TensorFlow源码实现--深度学习笔记

    生成对抗网络入门详解及TensorFlow源码实现–深度学习笔记 一.生成对抗网络(GANs) 生成对抗网络是一种生成模型(Generative Model),其背后最基本的思想就是从训练库里获取很多 ...

最新文章

  1. 混合云存储开启企业上云新路径--阿里云混合云备份容灾方案发布
  2. 如何在30前成为“富翁”?
  3. POJ3114强连通+spfa
  4. android 怎么换行,android textview 怎么换行?
  5. android:碎片的概念
  6. php动态成本管理,网上审批系统环境下的动态目标成本管理
  7. arch linux windows,windows+Archlinux双系统安装指南(一)
  8. JavaScript中this指针的绑定规则
  9. Eclipse下载及汉化(官方最新)
  10. html使用css居中
  11. CF 1383/1384
  12. 电脑关闭Fn键+F1,直接使用F1键
  13. 2021年南京邮电大学自动化学院、人工智能学院考研指南
  14. 深度学习day01-深度学习环境、conda、创建第一张画布
  15. Windows 清理磁盘
  16. uni的numberbox怎么用_模拟器最强BIOS篇,如何使用uni-bios
  17. 通过百度人脸对比API进行人脸对比
  18. 人脸识别之insightface开源代码使用:训练、验证、测试(3)
  19. 51单片机编程5-蜂鸣器实验
  20. “骑驴找马”被上司发现了,怎么办?

热门文章

  1. oracle 使用trigger实现主键自增
  2. 第十二届蓝桥杯大赛软件赛省赛C/C++ B组真题解析
  3. 微信流量主点击量与曝光量是什么意思
  4. SSM源码分析之Spring02-Spring源码分析前瞻
  5. STM32的PWM和DAC练习中生成音频和波形
  6. 【跟彤砸学编程】—— 第一课
  7. Tornado框架简介
  8. C#读写导入导出Excel表格模板(NPOI)
  9. 机器学习之随机森林(手推公式版)
  10. 中科红旗:开源的野心