图神经网络:GAT学习、理解、入坑
时间:2023-09-09 23:07:00
介绍
论文地址-GRAPH ATTENTION NETWORKS-Published as a conference paper at ICLR 2018
tensorflow源码地址代码版本
pyGAT-pytorch源码地址
keras-gat
边预测任务-GraphSAGE
初步理解原理
??GAT(Graph Attention Networks)采用Attention通过对邻居节点的加权求和,学习邻居节点的权重,获得节点本身的表达。
给定图 G = ( V , E ) G = (V,E) G=(V,E), V V V 表示点, E E E 表示边,节点数 ∣ V ∣ = N |V| = N ∣V∣=N。
输入: N N N节点的特点, h = { h ? 1 , h ? 2 , … , h ? N } , h ? i ∈ R F \mathbf{h}=\left\{\vec{h}_{1}, \vec{h}_{2}, \ldots, \vec{h}_{N}\right\}, \vec{h}_{i} \in \mathbb{R}^{F} h={
h1,h2,…,hN},hi∈RF
输出:采用 Attention机制生成新的节点特征 h ′ = { h ⃗ 1 ′ , h ⃗ 2 ′ , … , h ⃗ N ′ } , h ⃗ i ′ ∈ R F ′ \mathbf{h^{\prime}}=\left\{\vec{h}_{1}^{\prime}, \vec{h}_{2}^{\prime}, \ldots, \vec{h}_{N}^{\prime}\right\}, \vec{h}_{i}^{\prime} \in \mathbb{R}^{F^{\prime}} h′={
h1′,h2′,…,hN′},hi′∈RF′ 作为输出.
从GNN,GCN到GAT
- GNN学习的是邻居节点聚合到中心的方式,传统的GNN对于邻居节点采用求和/求平均的方式,各个邻居的权重相等为1
- GCN进行了改造邻居聚合方式为邻接矩阵做对称归一化,也是类似求平均,但是它考虑到了节点的度大小,度越大权重往小了修正,是一种避免单节点链接巨量节点导致计算失真的调整方式,仅仅通过度+规则对权重做了修改,而没有考虑到因为节点的影响大小去调整权重的大小。
- GAT认为
(1).不同邻居对中心节点的影响是不一样的,且它想通过注意力自动地去学习这个权重参数,从而提升表征能力
(2).GAT使用邻居和中心节点各自的特征属性来确定权重,中心节点的所有邻居的权重相加等于1
W就是可以训练的参数,分别用来针对向量A/B/…等进行操作(转置)
“||”:拼接操作,“*”:内积
参数a也可以通过网络训练得到。
两个节点的权重需要基于两个节点的特征
节点i的特征乘以W拼接上节点j的特征乘以W,再乘以 a → \overrightarrow{a} a,公式:( ( W h i → ∣ ∣ W h j → ) ∗ a → (W\overrightarrow{h_i}||W\overrightarrow{h_j})*\overrightarrow{a} (Whi∣∣Whj)∗a)。
首先 ,为了更加充分地表示节点的特征,对节点 h i h_i hi 进行特征变换, W h i W h_i Whi , W ∈ R F ′ × F \mathbf{W} \in \mathbb{R}^{F^{\prime} \times F} W∈RF′×F ,即将节点的特征维度 F F F映射到维度 F ′ F^{\prime} F′上。关键的步骤来了,对图中的每个节点进行self-attention操作,计算任意两个节点之间的注意力权重。节点 j j j 对节点 i i i 的重要性计算公式如下:
e i j = a ( W h ⃗ i , W h ⃗ j ) e_{i j}=a\left(\mathbf{W} \vec{h}_{i}, \mathbf{W} \vec{h}_{j}\right) eij=a(Whi,Whj)
一般而言,该模型允许图中的每个节点扩展到其他节点,从而丢弃所有结构信息。 原论文中,通过masked attention将图结构注入这个机制中,即对于节点 [公式] 来说,只计算其一阶邻居节点集合 N i N_i Ni 中节点 对 i i i 的作用, j ∈ N i j \in \mathcal{N}_{i} j∈Ni。
为了使系数在不同节点之间易于比较,论文中使用softmax函数在集合 N i \mathcal{N}_{i} Ni中对它们进行归一化,如下所示。在实验中,注意力机制是一个单层的前馈神经网络,激活函数采用LeakyReLU。
α i j = softmax j ( e i j ) = exp ( e i j ) ∑ k ∈ N i exp ( e i k ) \alpha_{i j}=\operatorname{softmax}_{j}\left(e_{i j}\right)=\frac{\exp \left(e_{i j}\right)}{\sum_{k \in \mathcal{N}_{i}} \exp \left(e_{i k}\right)} αij=softmaxj(eij)=∑k∈Niexp(eik)exp(eij)
Attention系数按如下方式生成:
α i j = exp ( LeakyReLU ( a → T [ W h ⃗ i ∥ W h ⃗ j ] ) ) ∑ k ∈ N i exp ( LeakyReLU ( a → T [ W h ⃗ i ∥ W h ⃗ k ] ) ) \alpha_{i j}=\frac{\exp \left(\operatorname{LeakyReLU}\left(\overrightarrow{\mathbf{a}}^{T}\left[\mathbf{W} \vec{h}_{i} \| \mathbf{W} \vec{h}_{j}\right]\right)\right)}{\sum_{k \in \mathcal{N}_{i}} \exp \left(\operatorname{LeakyReLU}\left(\overrightarrow{\mathbf{a}}^{T}\left[\mathbf{W} \vec{h}_{i} \| \mathbf{W} \vec{h}_{k}\right]\right)\right)} αij=∑k∈Niexp(LeakyReLU(aT[Whi∥Whk]))exp(LeakyReLU(aT