图注意力网络(GAT)

背景

作为对比算法被应用在我们的算法中

Veličković P, Cucurull G, Casanova A, et al. Graph attention networks[J]. arXiv preprint arXiv:1710.10903, 2017.(应该是发表在了ICLR)

模型

图注意力网络 (Graph Attention Networks)被提出\upcite{18}。 X{\bf{X}}X 表示所有样本对应的特征,X∈RN×F{\bf{X}} \in {\mathbb{R}^{N \times F}}XRN×F,其中NNN 表示样本的数量,FFF 表示单个样本对应的特征纬度。 xi{\bf{x}}_ixi表示为单个样本的特征,xi∈RF{{\bf{x}}_i} \in {\mathbb{R}^F}xiRF

att(⋅){\rm{att}}( \cdot )att()表示注意力系数的计算, 一般注意力机制中att(⋅){\rm{att}}( \cdot )att()表示为RH×RH→R{\mathbb{R}^H} \times {\mathbb{R}^H} \to \mathbb{R}RH×RHR。在图注意力网络中,注意力机制系数通过前向传播的神经网络计算得到。
cij=cxiWT⊕xjW {c_{ij}}{\rm{ = }}\begin{matrix}{{c}} {{{\bf{x}}_i}{{\bf{W}}^{\rm{T}}}} \end{matrix} \oplus {{\bf{x}}_j}{\bf{W}} cij=cxiWTxjW
cijc_{ij}cij的计算方式如下所示,seq_fts是特征进行一次映射之后得到的结果:

   f_1 = tf.layers.conv1d(seq_fts, 1, 1)
   f_2 = tf.layers.conv1d(seq_fts, 1, 1)
   logits = f_1 + tf.transpose(f_2, [0, 2, 1])

⊕\oplus是将cWxiT\begin{matrix}{{c}} {{\bf{W}}{{\bf{x}}_i}^{\rm{T}}} \end{matrix}cWxiT转置得到的结果中第iii个值与Wxj{\bf{W}}{{\bf{x}}_j}Wxj中第jjj个值进行相加。表示cij{c_{ij}}cij节点iii与节点jjj 的注意力系数,j∈Nij \in {{\mathcal N}_i}jNiNi{{\mathcal N}_i}Nijjj的领域节点。
在GAT中,使用LeakyRelu函数,并进行归一化,如下所示:
δij=exp⁡(LeakyReLu(cik))∑k∈Niexp⁡(LeakyReLu(cik)) {\delta _{ij}} = \frac{{\exp ({\rm{LeakyReLu(}}{c_{ik}}{\rm{)}})}}{{\sum\nolimits_{k \in {{\mathcal N}_i}} {\exp ({\rm{LeakyReLu(}}{c_{ik}}{\rm{)}})} }} δij=kNiexp(LeakyReLu(cik))exp(LeakyReLu(cik))
通过注意力计算后,得到的新的特征表示为:
KaTeX parse error: Undefined control sequence: \cal at position 62: …imits_{j \in {{\̲c̲a̲l̲ ̲N}_i}} {{\delta…
σ\sigmaσ是一个非线性的激活函数。引入多头注意力机制如下
h′i=∣∣m=1Mσ(∑j∈NiδijmWmxj) {{\bf{h'}}_i}{\rm{ = }}\mathop {{\rm{||}}}\limits_{m = 1}^M \sigma {\rm{(}}\sum\limits_{j \in {{\mathcal N}_i}} {\delta _{_{ij}}^m{{\bf{W}}^m}{{\bf{x}}_j}} {\rm{)}} hi=m=1Mσ(jNiδijmWmxj)
h′i{{\bf{h'}}_i}hi 表示多头注意力通过拼接得到的结果,∣∣{\rm{||}}表示拼接。最终,对多头注意力做平均,如下所示
h′′i=σ(1M∑m=1M∑j∈NiδijmWmxj) {{\bf{h''}}_i}{\rm{ = }}\sigma {\rm{(}}\frac{1}{M}\sum\limits_{m = 1}^M {\sum\limits_{j \in {{\mathcal N}_i}} {\delta _{_{ij}}^m{{\bf{W}}^m}{{\bf{x}}_j}} } {\rm{)}} hi=σ(M1m=1MjNiδijmWmxj)
h′′i{{\bf{h''}}_i}hi表示多头注意力机制平均得到的结果。
图注意力网络通过自注意力机制解决图网络中的卷积运算。注意力机制在计算上不需要进行矩阵运算操作,通过邻域节点的重要性进行节点特征表示。除此以外,注意力机制可以被用来研究模型的可解释性。

代码
邻接矩阵处理方式
size:[2708]
adj: [1,2708,2708]
def adj_to_bias(adj, sizes, nhood=1):
    nb_graphs = adj.shape[0]
    mt = np.empty(adj.shape) #mt is [1, 2708, 2708]
    for g in range(nb_graphs): #nb_graphs is 1
        mt[g] = np.eye(adj.shape[1])  #mt变为单位矩阵
        for _ in range(nhood):
            mt[g] = np.matmul(mt[g], (adj[g] + np.eye(adj.shape[1])))
        #d=
        for i in range(sizes[g]):
            for j in range(sizes[g]):
                if mt[g][i][j] > 0.0:
                    mt[g][i][j] = 1.0
    return -1e9 * (1.0 - mt)
github链接

包含使用torch实现的gat代码

https://github.com/ChenaniahMe/codes/tree/main/GNN/comgat

注意

模型部分为本人整理内容,转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值