[论文笔记]GRAPH ATTENTION NETWORKS(GAT) 图注意力网络原理

GAT Note

参考:

Paper:GRAPH ATTENTION NETWORKS ICLR 2018

向往的GAT(图注意力模型) - 知乎 (zhihu.com)

专栏 | 深入理解图注意力机制 (qq.com)

图卷积神经网络系列:8. | 空域图卷积模型GAT及PyTorch实现 - 知乎 (zhihu.com)

Paper

  • GAT中,卷积被定义为利用注意力机制来对邻域结点进行有区别的聚合,核心思想:将Attention应用于图卷积网络

Motivation

  • 作者认为,邻域中所有的节点共享相同的卷积核参数 W W W会限制模型的能力。因为邻域内的每一个节点和中心节点的关联度都是不同的,在卷积聚合邻域节点的信息时需要对邻域中的不同的节点区别对待

  • 具体地,就是利用Attention机制来建模邻域节点与中心节点的关联度,来实现“区别对待”

Method

关键点1:使用注意力机制计算节点之间的关联度
关键点2:利用注意力系数对邻域节点进行有区别的信息聚合,完成图卷积操作

注意力机制的理解

  • GAT也可以认为是对局部图结构的一种学习。现有的图卷积方法常常更关注节点特征,而忽视了图上的结构。

  • Attention机制可以认为是一个带有可学习参数的可学习函数。利用Attention机制,就可以构建一个可学习的函数来得到相邻节点之间的关系,也就是局部的图结构。

Basic of GAT

  • 两种特征

    • 对于任意一个顶点,它在图上的邻居特征,即图的结构关系
    • 每个顶点还有自己的特征 h i h_i hi(通常是高维向量)
  • GCN的局限性

    GCN是处理transductive任务的一把利器(transductive任务是指:训练阶段与测试阶段都基于同样的图结构),但是存在局限性

    • **无法完成inductive任务,即处理动态图问题。**inductive任务是指:训练阶段与测试阶段需要处理的graph不同。通常是训练阶段只是在子图(subgraph)上进行,测试阶段需要处理未知的顶点。(unseen node)
    • 处理有向图的瓶颈,不容易实现分配不同的学习权重给不同的neighbor
  • Mask graph attention or global graph attention

    • Global graph attention:每个顶点对图上任意顶点都进行attention运算
      • 优点:完全不依赖于图的结构,对于inductive任务无压力
      • 缺点:
        1. 丢掉了图结构这个特征
        2. 运算成本很大
    • Mask graph attention:注意力机制的运算只在邻居顶点上进行
      • 论文中作者即采用的这种方式

GAT

  • 和所有的attention mechanism一样,GAT的计算也分为两步走:
    z i ( l ) = W ( l ) h i ( l ) e i j ( l ) = a ⃗ ( l ) T ( [ z i ( l ) ∣ ∣ z j ( l ) ] ) α i j ( l ) = e x p ( L e a k y R e L U ( e i j ( l ) ) ) ∑ k ∈ N ( i ) e x p ( L e a k y R e L U ( e i k ( l ) ) ) (1) z_i^{(l)}=W^{(l)}h_i^{(l)}\\ e_{ij}^{(l)}=\vec a^{(l)T}([z_i^{(l)}||z_j^{(l)}])\\ \alpha_{ij}^{(l)}=\frac{exp(LeakyReLU(e_{ij}^{(l)}))}{\sum_{k\in N(i)}exp(LeakyReLU(e_{ik}^{(l)}))} \tag{1} zi(l)=W(l)hi(l)eij(l)=a (l)T([zi(l)zj(l)])αij(l)=kN(i)exp(LeakyReLU(eik(l)))exp(LeakyReLU(eij(l)))(1)

    h i ( l + 1 ) = σ ( ∑ j ∈ N ( i ) α i j ( l ) z j ( l ) ) (2) h_i^{(l+1)}=\sigma(\sum_{j\in N(i)}\alpha_{ij}^{(l)}z_j^{(l)}) \tag{2} hi(l+1)=σ(jN(i)αij(l)zj(l))(2)

对比GCN:
H ( l + 1 ) = σ ( D ~ − 1 2 A ~ D ~ − 1 2 H ( l ) θ ) H^{(l+1)}=\sigma(\tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}}H^{(l)}\theta) H(l+1)=σ(D~21A~D~21H(l)θ)

(1)计算注意力系数(attention coefficient)

  • 对于顶点 i i i ,逐个计算它的邻居们( j ∈ N i j\in N_i jNi)和它自己之间的相似系数:
    e i j = a ⃗ ( l ) T ( [ W ( l ) h i ( l ) ∣ ∣ W ( l ) h j ( l ) ] ) , j ∈ N i e_{ij}=\vec a^{(l)T}([W^{(l)}h_i^{(l)}||W^{(l)}h_j^{(l)}]), j\in N_i eij=a (l)T([W(l)hi(l)W(l)hj(l)]),jNi

    1. 首先一个共享参数 W W W的线性映射对顶点的特征 h i h_i hi h j h_j hj进行增维(这是一个常见的特征增强feature augment方法)
    2. [ ⋅ ∣ ∣ ⋅ ] [·||·] []对顶点 i i i j j j的变换后的特征进行拼接(concatenate)
    3. 最后 a ( ⋅ ) a(·) a()把拼接后的高维特征映射到一个实数上(作者通过single-layer feedforward neural network实现)

    显然学习顶点 i i i j j j之间的相关性,就是通过可学习的参数 W W W和映射 a ( ⋅ ) a(·) a()完成的。

  • 有了相关系数,归一化(论文采用softmax)后可以得到注意力系数
    α i j ( l ) = e x p ( L e a k y R e L U ( e i j ( l ) ) ) ∑ k ∈ N ( i ) e x p ( L e a k y R e L U ( e i k ( l ) ) ) \alpha_{ij}^{(l)}=\frac{exp(LeakyReLU(e_{ij}^{(l)}))}{\sum_{k\in N(i)}exp(LeakyReLU(e_{ik}^{(l)}))} αij(l)=kN(i)exp(LeakyReLU(eik(l)))exp(LeakyReLU(eij(l)))

(2)加权求和(aggregate)

  • 根据计算好的注意力系数,把特征加权求和(aggregate)
    h ⃗ i ′ = σ ( ∑ j ∈ N i α i j W h ⃗ j ) \vec h_i^{'}=\sigma(\sum _{j\in N_i}\alpha_{ij}W\vec h_j) h i=σ(jNiαijWh j)

    h i ′ h_i^{'} hi就是GAT输出的对于每个顶点 i i i的新特征(融合了邻域信息), σ ( ⋅ ) \sigma(·) σ()是激活函数

  • multi-head attention

    神似卷积神经网络里的多通道,GAT 引入了多头注意力来丰富模型的能力和稳定训练的过程。每一个注意力的头都有它自己的参数。如何整合多个注意力机制的输出结果一般有两种方式:

    1. 拼接

    h ⃗ i ′ ( K ) = ∥ k = 1 K σ ( ∑ j ∈ N i α i j k W k h ⃗ j ) (3) \vec h_i^{'}(K)=\parallel_{k=1}^K\sigma(\sum_{j\in N_i}\alpha_{ij}^k W^k\vec h_j) \tag{3} h i(K)=k=1Kσ(jNiαijkWkh j)(3)

    1. 平均

    h ⃗ i ′ ( K ) = σ ( 1 K ∑ k = 1 K ∑ j ∈ N i α i j k W k h ⃗ j ) (3) \vec h_i^{'}(K)=\sigma(\frac{1}{K}\sum_{k=1}^{K}\sum_{j\in N_i}\alpha_{ij}^k W^k\vec h_j) \tag{3} h i(K)=σ(K1k=1KjNiαijkWkh j)(3)

    以上式子中 K 是注意力头的数量。论文建议对中间层使用拼接对最后一层使用求平均。

与其他图卷积模型的对比

  1. 在邻域节点构建上,不同于GNN(随机游走)、GraphSAGE(采样), GAT直接选用一阶相邻节点作为邻域节点(和GCN类似)

    随机游走(random walk)

    • 所谓随机游走(random walk),就是在网络上不断重复地随机选择游走路径,最终形成一条贯穿网络的路径。

      从一个顶点出发,然后按照一定的概率随机移动到一个邻居节点,并将该节点作为新的当前节点,如此循环执行若干步,得到一条游走路径。

    • 优点:

      • 并行性
      • 局部适应性

    (7条消息) GNN笔记: random walk_UQI-LIUWJ的博客-CSDN博客

  2. 在节点排序上,GAT中的邻域的所有节点无需排序并且共享卷积核参数(和 GraphSAGE类似)。

  3. 由于GAT引入了Attention机制,可以构建相邻节点的关系,是对邻域节点的有区别的聚合。若将 和 结合起来看做一个系数,实际上GAT对邻域的每个节点隐式地(implicitly)分配了不同的卷积核参数。

深入理解

与GCN的联系与区别

本质上而言:**GCN与GAT都是将邻居顶点的特征聚合到中心顶点上(一种aggregate运算),**利用graph上的local stationary学习新的顶点特征表达。**不同的是GCN利用了拉普拉斯矩阵,GAT利用attention系数。**一定程度上而言,GAT会更强,因为 顶点特征之间的相关性被更好地融入到模型中。

为什么GAT适用于有向图?

最根本的原因应该是GAT的运算方式是逐顶点的运算(node-wise),这一点可从公式(1)中很明显地看出。每一次运算都需要循环遍历图上的所有顶点来完成。逐顶点运算意味着,摆脱了拉普利矩阵的束缚,使得有向图问题迎刃而解。

为什么GAT适用于inductive任务?

**GAT中重要的学习参数是 W W W a ( ⋅ ) a(·) a(),因为上述的逐顶点运算方式,这两个参数仅与顶点特征相关,与图的结构毫无关系。**所以测试任务中改变图的结构,对于GAT影响并不大,只需要改变 N i N_i Ni,重新计算即可。
与此相反的是,GCN是一种全图的计算方式,一次计算就更新全图的节点特征。学习的参数很大程度与图结构相关,这使得GCN在inductive任务上遇到困境。

你可能感兴趣的:(GNN,深度学习,神经网络,pytorch)