【note】GNN

WL-test

https://dl.acm.org/doi/10.5555/1953048.2078187

WL-test 是一个判断图同构问题的启发式算法(可能会把非同构判断成同构)。

1-WL-test 是最简单的一个版本,方法如下:

  1. 初始时,点 v v v 特征为 l 0 ( v ) l_0(v) l0(v)
  2. 每次迭代时,用邻点特征的多重集 更新每个点的特征,即令 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)})
  3. 最终比较两张图所有点特征的多重集是否相等

迭代 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(a T[Wh i∥Wh k]))exp(LeakyReLU(a T[Wh i∥Wh j]))

时间 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) h i′= k=1Kσ(∑j∈NiαijkWkh j)

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)

相关推荐
Mintopia29 分钟前
OpenClaw 对软件行业产生的影响
人工智能
陈广亮1 小时前
构建具有长期记忆的 AI Agent:从设计模式到生产实践
人工智能
会写代码的柯基犬1 小时前
DeepSeek vs Kimi vs Qwen —— AI 生成俄罗斯方块代码效果横评
人工智能·llm
Mintopia2 小时前
OpenClaw 是什么?为什么节后热度如此之高?
人工智能
爱可生开源社区2 小时前
DBA 的未来?八位行业先锋的年度圆桌讨论
人工智能·dba
叁两5 小时前
用opencode打造全自动公众号写作流水线,AI 代笔太香了!
前端·人工智能·agent
前端付豪5 小时前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain
strayCat232555 小时前
Clawdbot 源码解读 7: 扩展机制
人工智能·开源
程序员打怪兽5 小时前
详解Visual Transformer (ViT)网络模型
深度学习