图网络笔记(1)——GNN, GCN, GraphSAGE, GAT
简介
在这里简单总结一下常见的一些图网络模型。
GNN
我们的目标是在图的结构上从各结点的初始feature\(x_v\),通过图的结构以及边的特征\(x_{(u,v)}\)学到对应的hidden variable\(h_v\).
考虑一个图\(G=(V, E)\)。
原始的GNN是一个迭代算法,通过\(h_v^{t+1}=f(x_v, \{x_{(u,v)}, h_u^t, x_u: (u, v) \in E \})\)进行更新,最后收敛得到\(h_v\).
依照现代ML的主流哲学,当然是用一个NN来拟合f。
其收敛的依据是不动点定理,我们将更新的过程抽象成\(H^{t+1}=F(H^t, X)\)
只要\(F\)为压缩映射,也就是\(F\)的Jaccobi矩阵的算子范数小于1,即可收敛。
那么只需要加一个penalty来实现这个restriction即可:
\(J=Loss + \lambda max(\Vert \nabla F\Vert - c, 0)\),其中\(c\in(0,1)\)
GNN也有各种变体(variations),例如Gated GNN等。
GCN
GNN也有很大的局限性,不够灵活、需要迭代。
GCN与GNN相比,不是一个迭代算法,而是像CNN网络一样是由若干个层(layers)构成的模型,每层的参数是独立的。
GCN有一定的理论支撑,例如原文章从图谱理论的角度从一定程度上解释了GCN的合理性,但是我个人认为不是重点,我们这里也略去。
总而言之,原文作者在最初的模型上做一些小改动实验后发现加上一些诸如renormalization的trick后得到的效果最好的公式形如这样:
\(H^{l+1} = \sigma(\hat{A}H^lW^l)\)
其中\(W\)是这层(第\(l\)层)的参数,\(\hat{A}=\widetilde{D}^{\frac{1}{2}}\widetilde{A}\widetilde{D}^{\frac{1}{2}}\),其中\(\widetilde{A}=A+I_N\),A为邻接矩阵,\(\widetilde{D}\)为使得\(\hat{A}\)对角元为1的对角矩阵,即\(D_{ii}=\Sigma_{j}\widetilde{A}_{ij}\).
同样可以像CNN网络一样将GCN layer叠起来(stack)构成一个典型的GCN模型。相比GNN,GCN显得更加灵活,也在很多问题中取得了更好的效果。
GraphSAGE
但同样,GCN存在的问题也十分明显:计算时需要将整张图存入内存,每次更新时也需要图的全部信息,计算代价大、存储代价高,不适合运用在大型图上
。于是有了这篇Inductive Representation Learning on Large Graphs,提出了GraphSAGE.
GraphSAGE乍一看像是一个\(K\)层的GCN,但是它通过合理的采样使得更便于计算,也极大地减小了运算和存储的代价。(以下直接按照minibatch的setting进行说明)
首先每次会先抽取一个minibatch,因为每层会聚集一阶邻居(one-hop neighbours)的信息,所以\(K\)层至多会涉及到\(K\)阶邻居,于是我们先将minibatch中结点的至多\(K+1\)阶邻居和它们自己构成的子图拿出来,接着在这个子图上运行算法,只更新minibatch中结点的至多\(K\)阶邻居和它们本身。
我们再来看以下每次更新的公式:\(h_{N(u)}^k=AGGREGATE(\{h_{u^{'}}^{k+1}:u^{'}\in N(u)\})\), \(h_u^k=\sigma(W^k\cdot CONCAT(h_u^{k-1}, h_{N(u)}^k))\), \(h_u^k = \frac{h_u^k}{\Vert h_u^k \Vert }\).
这里的\(N(v)\)其实也是经过采样的,每次会采样固定数目个邻居,方便构成固定形状的tensor、便于计算。
GAT
Graph Attention Network顾名思义是在图网络中引入了注意力机制。注意力机制可以看成是在将一个结点的邻居的feature聚合到这个结点时为每个邻居节点分配的权重。
也就是说我们希望在训练时学习到一个函数\(\widetilde{f}:E\rightarrow [0, 1]\)满足\(\Sigma_{u\in N(v)}\widetilde{f}(v,u)=1\).
- attention weights
- \(\alpha_{i,j}=\frac{e_{i,j}}{\Sigma_{k\in N(v_i)}e_{i,k}}\)
- GAT中选取了\(e_{i,j}=exp(LeakyReLU(a(Wx_i||Wx_j)))\),这里a是一个函数。(当然取a为一层线性变换时这里可以看成是行向量a和后面的矩阵乘法)
- similarity weights
- 例如取cos距离,类似前面,但是取的\(e_{i,j}\)不同:
\(e_{i,j} = \beta cos(Wx_i, Wx_j)\) (两向量夹角的余弦值)
- 例如取cos距离,类似前面,但是取的\(e_{i,j}\)不同:
参考文章
- SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS
- Inductive Representation Learning on Large Graphs
- GRAPH ATTENTION NETWORKS