【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)

相关推荐
alphaTao14 分钟前
LeetCode 每日一题 2024/11/18-2024/11/24
算法·leetcode
kitesxian23 分钟前
Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)
数据结构·算法·leetcode
余生H42 分钟前
transformer.js(三):底层架构及性能优化指南
javascript·深度学习·架构·transformer
果冻人工智能1 小时前
2025 年将颠覆商业的 8 大 AI 应用场景
人工智能·ai员工
代码不行的搬运工1 小时前
神经网络12-Time-Series Transformer (TST)模型
人工智能·神经网络·transformer
VertexGeek1 小时前
Rust学习(八):异常处理和宏编程:
学习·算法·rust
石小石Orz1 小时前
Three.js + AI:AI 算法生成 3D 萤火虫飞舞效果~
javascript·人工智能·算法
罗小罗同学1 小时前
医工交叉入门书籍分享:Transformer模型在机器学习领域的应用|个人观点·24-11-22
深度学习·机器学习·transformer
孤独且没人爱的纸鹤1 小时前
【深度学习】:从人工神经网络的基础原理到循环神经网络的先进技术,跨越智能算法的关键发展阶段及其未来趋势,探索技术进步与应用挑战
人工智能·python·深度学习·机器学习·ai
阿_旭1 小时前
TensorFlow构建CNN卷积神经网络模型的基本步骤:数据处理、模型构建、模型训练
人工智能·深度学习·cnn·tensorflow