GNN学习 GNN Layer(持续更新中)

ANewPro / 2023-07-23 / 原文

GNN学习 GNN Layer

GNN的通用框架

  • 1.对GNN的一个网络层进行信息转换和信息聚合两个操作
  • 2.连接GNN的网络层
  • 3.图增强,分为图特征增强和图结构增强
  • 4.学习目标,有监督学习还是无监督学习,节点/边/图级别

1.信息转换和信息聚合

GNN Layer=Message+Aggregation

pCqj0fK.png

不同的实例有不同的信息转换和增强的方法

GNN单层网络的目标是将一系列向量压缩到一个向量中

Message computation

\(m_u^l=MSG^l(h^{l-1}_u)\)

每个节点都会产生信息,这些信息将会被传递到其它节点

MSG可以是一个矩阵W

Message Aggregation

\(h_v^l=AGG^l({m_u^l,u\in N(v)})\)

每个节点都要聚合从其它的邻居节点处获得的信息

AGG可以是Sum,Mean或者Max

存在的问题:

会导致节点自身的信息丢失,因为在计算时不会包含节点本身,解决方法就是在计算\(h_v^l\)时包含\(h_v^{l-1}\)

  • 在信息传递时,对节点本身和邻居应用不同的权重矩阵
  • 在信息聚合时,将邻居节点与自身信息进行聚合

\(m_u^l=W^lh^{l-1}_u\)

\(m_v^l=B^lh^{l-1}_v\)

\(h_v^l=CONCAT(AGG({m_u^l,u\in N(v)}),m_v^l)\)

所以一个单层的神经网络就是将这些东西结合在一起

  • Message:\(m_u^l=MSG^l(h^{l-1}_u),u\in {N(v)\cup v}\)
  • Aggregation:\(h_v^l=AGG^l(\{m_u^l,u\in N(v)\}),m_v^l)\)

在做完前面的步骤之后,我们可以将其经过一个非线性激活函数\(\sigma\),例如ReLU或者Sigmoid

经典案例分析

1.GCN

前面讲到的GCN的传递函数

\(h_v^l=\sigma(\sum_{u\in N(v)}W^l\frac{h_u^{l-1}}{\left | N(v) \right | })\)

累加号就是聚合的过程

累加号后面的就是信息传递的过程

详细来说:

Message:

\(m_u^l=\frac{1}{|N(v)|}W^lh^{l-1}_u\)

Aggregation:

\(h^l_v=\sigma(Sum(\{m_u^l,u\in N(v)\}))\)

2.GraphSAGE

这个方法包含了节点本身的一些信息

\(h_v^l=\sigma(W^l\cdot CONCAT(h_v^{l-1},AGG(\{h_u^{l-1},\forall u\in N(v)\})))\)

Message过程在AGG里进行计算了

先聚合邻居节点,再聚合自身节点

AGG可以是Sum,Mean甚至是LSTM

之后要进行归一化,我们这里采用L2 Normalization

对每层都进行L2归一化,也就是

\(h_v^l\leftarrow \frac{h_v^l}{||h_v^l||} \forall v\in V\)

并且\(||u||_2=\sqrt{\sum_iu_i^2}\)所以被称为L2-norm

3.GAT(Graph Attention Network)

层之间的传递公式为

\(h_v^l=\sigma(\sum_{u\in N(v)}\alpha_{vu} W^lh_u^{l-1})\)

其中\(\alpha_{vu}\)被称为注意权重(attention weight)

例如GCN里\(\alpha_{vu}=\frac{1}{|N(v)|}\)

GAT

如何学习\(\alpha_{vu}\)

目标:确定图中每个节点的不同邻居的重要性

想法:

  • 节点关注邻居的信息
  • 间接的确定邻居不同节点的不同的权重

注意力机制

\(\alpha_{vu}\)是作为注意力机制a的副产品被计算的

首先计算两个节点之间传递信息的注意力系数\(e_{vu}\)

\(e_{vu}=a(W^lh_u^{l-1},W^lh_v^{l-1})\)

注意力系数表示了从节点u传递给节点v的信息的重要性

之后我们对注意力系数归一化,得到注意力权重,这里可以采用softmax来进行归一化

那么注意力机制的形式是什么

我们可以用简单的单层神经网络来作为注意力机制a

那么相当于

\(e_{vu}=Linear(W^lh_u^{l-1},W^lh_v^{l-1})\)

也可以引入多头注意力机制

pCLEbxs.png

最后对输出进行聚合

\(h_v^l=AGG(h_v^l[1],h_v^l[2],h_v^l[3])\)

注意力机制的主要好处就是确定不同邻居节点的不同重要性

A对B的注意力和B对A的注意力可以不同

实际的GNN Layer搭建如下

pCLVoex.png