WL-test
https://dl.acm.org/doi/10.5555/1953048.2078187
WL-test 是一个判断图同构问题的启发式算法(可能会把非同构判断成同构)。
1-WL-test 是最简单的一个版本,方法如下:
- 初始时,点 v v v 特征为 l 0 ( v ) l_0(v) l0(v)
- 每次迭代时,用邻点特征的多重集更新每个点的特征,即令 l i ( v ) = f ( { l i − 1 ( u ) ∣ u ∈ N ( v ) } ) l_i(v)=f(\{l_{i-1}(u)|u\in \mathcal N(v)\}) li(v)=f({li−1(u)∣u∈N(v)})
- 最终比较两张图所有点特征的多重集是否相等
迭代 h h h 次,时间复杂度 O ( h m ) O(hm) O(hm)。(就是比较深度为 h h h 的 dfs 树是否同构)
GNN
GNN 有多种结构,但每一层通常都可以写成如下形式:
m a ( t ) = AGGREGATE N ( { ( A ~ v u , h u ( t ) ) ∣ u ∈ N ( v ) } ) , m v ( t ) = AGGREGATE I ( { A ~ v u ∣ u ∈ N ( v ) } ) h v ( t ) , h v ( t + 1 ) = COMBINE ( m v ( t ) , m a ( t ) ) . \begin{aligned} &\begin{aligned}m_a^{(t)}=\text{AGGREGATE}^N\left(\left\{(\tilde{A}_{vu},h_u^{(t)})|u\in\mathcal{N}(v)\right\}\right),\end{aligned} \\ &m_v^{(t)}=\text{AGGREGATE}^I\left(\left\{\tilde{A}_{vu}|u\in\mathcal{N}(v)\right\}\right)h_v^{(t)}, \\ &\begin{aligned}h_v^{(t+1)}&=\text{COMBINE}\Big(m_v^{(t)},m_a^{(t)}\Big).\end{aligned} \end{aligned} ma(t)=AGGREGATEN({(A~vu,hu(t))∣u∈N(v)}),mv(t)=AGGREGATEI({A~vu∣u∈N(v)})hv(t),hv(t+1)=COMBINE(mv(t),ma(t)).
下面尝试整理一下常见的几种结构。
GCN (spectral)
https://arxiv.org/abs/1312.6203
https://arxiv.org/abs/1606.09375
有点复杂,见得不多
GCN (spatial)
https://arxiv.org/abs/1609.02907
相对简单且常见。
H ( l + 1 ) = σ ( D ~ − 1 2 A ~ D ~ − 1 2 H ( l ) W ( l ) ) H^{(l+1)}=\sigma\Big(\tilde{D}^{-\frac12}\tilde{A}\tilde{D}^{-\frac12}H^{(l)}W^{(l)}\Big) H(l+1)=σ(D~−21A~D~−21H(l)W(l))
其中 A ~ = A + I N \tilde{A}=A+I_N A~=A+IN 是(带权)邻接矩阵和单位矩阵之和, D ~ i i = ∑ j A i j \tilde{D}_{ii}=\sum_jA_{ij} D~ii=∑jAij 为(带权)度数矩阵。
时间 O ( m d 2 ) O(md^2) O(md2) 空间 O ( m ) O(m) O(m)
MPNN
https://arxiv.org/abs/1704.01212
提出了通用形式
m v t + 1 = ∑ w ∈ N ( v ) M t ( h v t , h w t , e v w ) h v t + 1 = U t ( h v t , m v t + 1 ) \begin{aligned}m_v^{t+1}&=\sum_{w\in N(v)}M_t(h_v^t,h_w^t,e_{vw})\\h_v^{t+1}&=U_t(h_v^t,m_v^{t+1})\end{aligned} mvt+1hvt+1=w∈N(v)∑Mt(hvt,hwt,evw)=Ut(hvt,mvt+1)
GraphSAGE
http://arxiv.org/abs/1706.02216
该结构的 OOD 泛化性较强
a v ( k ) = M A X ( { R e L U ( W ⋅ h u ( k − 1 ) ) , ∀ u ∈ N ( v ) } ) a_v^{(k)}=\mathrm{MAX}\left(\left\{\mathrm{ReLU}\left(W\cdot h_u^{(k-1)}\right),\mathrm{~}\forall u\in\mathcal{N}(v)\right\}\right) av(k)=MAX({ReLU(W⋅hu(k−1)), ∀u∈N(v)})
h u ( k ) = W ⋅ [ h v ( k − 1 ) , a v ( k ) ] h_u^{(k)}=W\cdot\left[h_v^{(k-1)},a_v^{(k)}\right] hu(k)=W⋅[hv(k−1),av(k)]
时间 O ( s n d 2 ) O(snd^2) O(snd2) 空间 O ( n ) O(n) O(n)
GAT
http://arxiv.org/abs/1710.10903
http://arxiv.org/abs/2105.14491 (GATv2)
就是在图上做 attention,原文的 attention score 是用 MLP 算的。
α i j = exp ( LeakyReLU ( a ⃗ T [ W h ⃗ i ∥ W h ⃗ j ] ) ) ∑ k ∈ N i exp ( LеаkyReLU ( a ⃗ T [ W h ⃗ i ∥ W h ⃗ k ] ) ) \alpha_{ij}=\frac{\exp\left(\text{LeakyReLU}\left(\vec{\mathbf{a}}^T[\mathbf{W}\vec{h}_i\|\mathbf{W}\vec{h}_j]\right)\right)}{\sum_{k\in\mathcal{N}_i}\exp\left(\text{LеаkyReLU}\left(\vec{\mathbf{a}}^T[\mathbf{W}\vec{h}_i\|\mathbf{W}\vec{h}_k]\right)\right)} αij=∑k∈Niexp(LеаkyReLU(aT[Whi∥Whk]))exp(LeakyReLU(aT[Whi∥Whj]))
时间 O ( h n d 2 + h m d ) O(hnd^2+hmd) O(hnd2+hmd) 空间 O ( n 2 ) O(n^2) O(n2)
GATv2 改为: e ( h i , h j ) = a ⊤ LeakyReLU ( W ⋅ [ h i ∥ h j ] ) e\left(\boldsymbol{h}_i,\boldsymbol{h}_j\right)=\boldsymbol{a}^\top\text{LeakyReLU}\left(\boldsymbol{W}\cdot[\boldsymbol{h}_i\|\boldsymbol{h}_j]\right) e(hi,hj)=a⊤LeakyReLU(W⋅[hi∥hj])
h ⃗ i ′ = ∥ k = 1 K σ ( ∑ j ∈ N i α i j k W k h ⃗ j ) \vec{h}_i^{\prime}=\Big\Vert_{k=1}^K\sigma\left(\sum_{j\in\mathcal{N}_i}\alpha_{ij}^k\mathbf{W}^k\vec{h}_j\right) hi′= k=1Kσ(∑j∈NiαijkWkhj)
AGNN
http://arxiv.org/abs/1803.03735
P i ( t ) = softmax ( [ β ( t ) cos ( H i ( t ) , H j ( t ) ) ] j ∈ N ( i ) ∪ { i } ) P_i^{(t)}=\text{ softmax}{ \left ( [ \beta ^ { ( t ) }\cos(H_i^{(t)},H_j^{(t)})]_{j\in N(i)\cup\{i\}}\right)} Pi(t)= softmax([β(t)cos(Hi(t),Hj(t))]j∈N(i)∪{i})
H i ( t + 1 ) = ∑ j ∈ N ( i ) ∪ { i } P i j ( t ) H j ( t ) H_i^{(t+1)}=\sum_{j\in N(i)\cup\{i\}}P_{ij}^{(t)}H_j^{(t)} Hi(t+1)=∑j∈N(i)∪{i}Pij(t)Hj(t)
GIN
http://arxiv.org/abs/1810.00826
文章指出 GNN 表达能力的上限是 1-WL-test,而 GIN 可以接近这个上限。
其中聚合函数用 sum 表达能力会比 mean 和 max 强。
h v ( k ) = M L P ( k ) ( ( 1 + ϵ ( k ) ) ⋅ h v ( k − 1 ) + ∑ u ∈ N ( v ) h u ( k − 1 ) ) h_v^{(k)}=\mathrm{MLP}^{(k)}\left(\left(1+\epsilon^{(k)}\right)\cdot h_v^{(k-1)}+\sum_{u\in\mathcal{N}(v)}h_u^{(k-1)}\right) hv(k)=MLP(k)((1+ϵ(k))⋅hv(k−1)+∑u∈N(v)hu(k−1))
时间 O ( m d 2 ) O(md^2) O(md2) 空间 O ( m ) O(m) O(m)
GNN beyond 1-WL-test
后续又提出了一些超越 1-WL-test 表达能力的 GNN,下面尝试整理一下。
NGNN
http://arxiv.org/abs/2110.13197
使用 GNN 套 GNN,学习到的特征从 subtree 变成了 subgraph,但复杂度高了很多。
m v , G w h t + 1 = ∑ u ∈ N ( v ∣ G w h ) M t ( h w t , h u , G w h t , e v u ) \boldsymbol{m}_{v,G_w^h}^{t+1}=\sum_{u\in N(v|G_w^h)}M_t(\boldsymbol{h}_w^t,\boldsymbol{h}_{u,G_w^h}^t,\boldsymbol{e}_{vu}) mv,Gwht+1=∑u∈N(v∣Gwh)Mt(hwt,hu,Gwht,evu)
h v , G w h t + 1 = U t ( h v , G w h t , m v , G w h t + 1 ) \boldsymbol{h}_{v,G_w^h}^{t+1}=U_t(\boldsymbol{h}_{v,G_w^h}^t,\boldsymbol{m}_{v,G_w^h}^{t+1}) hv,Gwht+1=Ut(hv,Gwht,mv,Gwht+1)
GraphSNN
https://openreview.net/forum?id=uxgg9o7bI_3
根据结构定义边权,从而增强 GNN 的表达能力,方法如下:
计算每个点和所有邻点的导出子图: S v = G ( N ( v ) ∪ { v } ) S_v=G(\mathcal N(v)\cup \{v\}) Sv=G(N(v)∪{v})
令 S v u = S v ∩ S u S_{vu}=S_v\cap S_u Svu=Sv∩Su
给每条边计算权值: A v u = ω ( S v , S v u ) A_{vu}=\omega(S_v,S_{vu}) Avu=ω(Sv,Svu)
文中 ω \omega ω 定义为: ω ( S v , S v u ) = ∣ E v u ∣ ∣ V v u ∣ λ − 1 ∣ V v u − 1 ∣ \omega(S_v,S_{vu})=\frac{|E_{vu}||V_{vu}|^{\lambda-1}}{|V_{vu}-1|} ω(Sv,Svu)=∣Vvu−1∣∣Evu∣∣Vvu∣λ−1,其中 λ > 0 \lambda>0 λ>0
归一化的边权为 A ~ v u = A v u ∑ u ∈ N ( v ) A v u \tilde{A}_{vu}=\frac{A_{vu}}{\sum_{u\in\mathcal{N}(v)}A_{vu}} A~vu=∑u∈N(v)AvuAvu
每层 h v ( t + 1 ) = M L P θ ( γ ( t ) ( ∑ u ∈ N ( v ) A ~ v u + 1 ) h v ( t ) + ∑ u ∈ N ( v ) ( A ~ v u + 1 ) h u ( t ) ) h_v^{(t+1)}=\mathsf{MLP}_\theta\Big(\gamma^{(t)}\Big(\sum_{u\in\mathcal{N}(v)}\tilde{A}_{vu}+1\Big)h_v^{(t)}+\sum_{u\in\mathcal{N}(v)}\Big(\tilde{A}_{vu}+1\Big)h_u^{(t)}\Big) hv(t+1)=MLPθ(γ(t)(∑u∈N(v)A~vu+1)hv(t)+∑u∈N(v)(A~vu+1)hu(t))
时间 O ( m d 2 ) O(md^2) O(md2) 空间 O ( m ) O(m) O(m)