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

发布时间 2023-07-23 19:15:40作者: ANewPro

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