PyTorch图神经网络(三)
1.图注意力网络(GAT)
之前提到的图卷积网络其实已经包含了图注意力网络的思想,他用节点的度来衡量节点的重要性,这样就会使得邻居较少的节点比其他节点更加重要。图注意力网络解决了这种方法的局限性,他把归一化矩阵拓展成注意力矩阵,得到的公式为(写成单个嵌入的形式,便于后文解释):
\[h_i=∑α_{ij}Wx_j
\]
其中,\(α_{ij}\)表示的是节点i和节点j之间的注意力分数,具体数值是根据输入的相互比较隐式计算得到的(自注意力)。
这里的\(α_{ij}\)计算方法为:
1.将节点i和节点j的特征拼接
2.将拼接得到的特征乘上一个共享权重矩阵W(可学习)
3.对第二部的结果应用Leaky ReLU
3.将得到的所有结果归一化作为注意力分数
这一步就和我们所熟知的transformer一样了,通过共享的权重矩阵来计算注意力分数,只不过这里只有一个矩阵。
文中的多头注意力机制和tramsformer中的multi-head机制是类似的,也是拆分成多个相互独立的注意力机制,最终可以通过合适的方法将结果融合起来。文中说的是求平均,应该也可以像multi-head一样设立一个权重矩阵来融合所有结果。
注意:这里可以发现原书在前面写的式子中,都没有提到图的邻接矩阵,实际上在最终实现的时候,还是会用到邻接矩阵的,文中在pytorch实现的时候,也把公式修改为了:
\[H=A^TW_αXW^T
\]