# 为什么需要图神经网络

随着时代发展,深度学习在语音、图像、自然语言处理方面有很大突破,针对这种很结构化的序列、网格数据,有很好的处理效果。然而,现实世界中,不是所有数据都能描绘成序列或网格化的数据的。图数据有这些特点

  • 图的大小是任意的,图的拓扑结构复杂,没有像图像一样的空间局部性
  • 图没有固定的节点顺序,或者说没有一个参考节点
  • 图经常是动态图,而且包含多模态的特征

# 图的基本概念

感恩算法竞赛,你应该大概已经懂了(有向图、无向图)

# 图的预备知识

  • 邻接矩阵
  • 度矩阵(如果仅已知度矩阵,不能还原出图)
    • 度矩阵 Di,i=d(i)D_{i,i} = d(i)d(i)d(i)ii 的度
  • 拉普拉斯矩阵L=DAL = D - A
    • 对称归一化拉普拉斯矩阵:L_{sym}=D^{-1/2}·L·D^
    • 随机游走归一化拉普拉斯矩阵:Lrw=D1LL_{rw}=D^{-1}·L
  • 聚类系数:描述一个节点的邻居之间有多少实际连边,相对于它们之间可能的最大连边数。取值为 [0,1][0, 1],连接越紧密,聚类系数越高
    • C_v = \frac{2 \times E_v}
      • EvE_v 指的是点 vv 的邻居之间,互相连边的边数
      • DvD_v 是点 vv 的度

# GCN

GCN(GraphConvolutionNetwork)GCN~(Graph~Convolution~Network) 是图神经网络的开山之作,它首次将图像处理中的卷积操作用到图结构的数据处理中来。

  • 目标:让每个节点吸收邻居的信息,更新自己的特征
  • 关键步骤
    • 收集邻居信息,把周围邻居特征加起来(或取平均)
    • 加权融合,考虑邻居的数量
    • 非线性变换,用激活函数让模型能学习到复杂的规律

# GCN 数学原理

单层 GCNGCN 的核心公式

Hl+1=σ(D^1/2A^D^1/2H(l)W(l))H^{l+1}=\sigma(\hat{D}^{-1/2}·\hat{A}·\hat{D}^{-1/2}·H^{(l)}·W^{(l)})

  • A^\hat{A}:图的邻接矩阵
  • D^\hat{D}:图的度矩阵
  • H(l)H^{(l)}:第 ll 层的节点特征
  • W(l)W^{(l)}:可学习的权重参数
  • σ\sigma:激活函数

这个公式做了森么呢?

  • D^1/2A^D^1/2\hat{D}^{-1/2}·\hat{A}·\hat{D}^{-1/2}:对邻居信息做归一化处理,防止节点邻居太多导致数值爆炸
  • H(l)W(l)H^{(l)}·W^{(l)}:对当前节点特征做线性变换

# GCN 的缺点

  • GCNGCN 要把整个图放入训练,难以处理大图
  • GCNGCN 在训练时需要知道整个图的结构信息(包括待预测的节点)

# Transductive​ learning 和 ​​Inductive learning 的对比

学习类型关键特点典型应用场景
直推学习(TransductiveTransductive训练时已知全部测试数据的结构信息(如图结构),但不知道部分标签社交网络分群、节点分类
归纳学习(InductiveInductive训练模型后可以预测完全未见过的数据图像分类、传统监督学习
方面TransductiveLearningTransductive~LearningInductiveLearningInductive~Learning
------------------------------------------------------
数据可见性测试数据(不含标签)在训练时可见测试数据完全不可见
图任务应用节点分类、链接预测新图分类、新节点预测
模型更新新增节点需重新训练可直接预测新数据
您的代码体现用整个图训练,预测图中已有节点需像 GraphSAGEGraphSAGE 那样采样邻居

# GraphSAGE

传统的 GNNGNN(如 GCNGCN),在训练时,就要把整个邻居信息一次性聚合,而 GraphSAGE(GraphSampleandAggregate)GraphSAGE~(Graph~Sample~and~Aggregate) 的创新便是

  • 不需要一次性看完所有邻居
    • 比如一个人有 1000 个朋友,你只取 10 个代表性的朋友来考虑。
  • 可以采样一部分邻居,然后做聚合
  • 可以生成节点表示,可以处理新节点(InductivelearningInductive~learning

# GraphSAGE 数学原理

  1. 采样邻居:假设我们要更新节点 vv 的表示(embeddingembedding),我们先从它的邻居 N(v)N(v) 中随机采样固定数量的节点
  2. 聚合邻居信息:把邻居特征压缩成一个固定维度的邻居意见GraphSAGEGraphSAGE 设计了多种 aggregator ,常见的有
    • MeanaggregatorMean~aggregator(平均聚合):hNs(v)(k)=mean({hu(k1),uNs(v)})h_{N_s(v)}^{(k)}=mean(\{h_u^{(k-1)},\forall u \in N_s(v)\})
    • LSTMaggregatorLSTM~aggregator(序列聚合):hNs(v)(k)=LSTM({hu(k1),uNs(v)})h_{N_s(v)}^{(k)}=LSTM(\{h_u^{(k-1)},\forall u \in N_s(v)\})
    • PoolingaggregatorPooling~aggregator(池化聚合):hNs(v)(k)=max(ReLU(Whu(k1)+b),uNs(v))h_{N_s(v)}^{(k)}=max(ReLU(W·h_{u}^{(k-1)}+b),\forall u \in N_s(v))
  3. 合并自身意见:聚合邻居信息后,把自己节点的特征和邻居的聚合结果结合起来(听朋友的意见,同时保持自己的立场,综合形成新的观点)
    • hv(k)=σ(W(k)CONCAT(hv(k1),hNs(v)(k)))h_v^{(k)} = \sigma(W^{(k)}·CONCAT(h_v^{(k-1)}, h_{N_s(v)}^{(k)}))
      • hv(k)h_v^{(k)}:节点 vv 在第 kk 层的表示
      • W(k)W^{(k)}:可训练权重矩阵
  4. 堆叠多层GraphSAGEGraphSAGE 可以堆叠多层,每层采样邻居并聚合,这样不仅能捕捉一阶邻居的信息,还能捕捉二阶、三阶甚至更远的节点信息
聚合器数学操作特点适用场景
MeanMeanmeanmean简单、效率高、信息粗略大规模图、邻居特征差异不大
LSTMLSTMLSTMLSTM捕捉顺序依赖、表达能力强小规模或邻居顺序有意义
PoolingPoolingReLU(Whu+b)+maxpoolingReLU(W \cdot h_u + b) + max-pooling保留重要信号、特征差异大的情况好邻居特征差异大,想强调突出特征

# GraphSAGE 的缺点

  • 只采取固定数量的邻居,而不是使用全部邻居,可能导致信息丢失
  • 针对 LSTMLSTM 聚合,邻居顺序会导致结果不同,但在图中,邻居应该是没有顺序的,会带来不稳定性
  • GraphSAGEGraphSAGE 堆叠层数有限,远距离信息难以获取
  • 采样没有考虑到不同邻居节点的重要性不同

# GAE(Graph Auto-Encoder)

# 自编码器

AutoEncoder(AE)Auto-Encoder~(AE) 通过学习数据的低维表示,尽可能重建原始输入。它的目标不是直接预测标签,而是通过 压缩解压 的过程,来提取数据的潜在特征

  • 编码器:将输入数据 xx 映射到低维潜在空间 zzz=fθ(x)z = f_\theta(x)
  • 解码器:从潜在表示 zz 重建输入数据,得到 \hat
  • 目标函数:最小化输入输出的差异,如均方误差(MSEMSE)等

AEAE 的最终目的就是通过训练,找到一个最优的 zz,使得我们可以通过 zz 来描述训练的数据
AEAE 是在网络中自由学习,所以 zz 的结果可能很奇怪,可能针对训练集效果很好,但泛化能力差

# 变分自编码器

VariationalAutoEncoder(VAE)Variational~Auto-Encoder~(VAE)AEAE 的基础上引入了概率图模型思想,使潜在空间具有概率分布结构,从而具备更好的生成能力。它不仅学习到一个固定的潜在向量,而是学习一个潜在分布

  • 潜在分布假设:假设潜在变量 zz 服从一个先验分布,如高斯分布 N(0,I)N(0, I)
  • 重参数化技巧:为了能够反向传播,采样过程写成 z=μ(x)+σ(x)ϵ,ϵN(0,I)z=\mu(x)+\sigma(x)\odot\epsilon,\quad\epsilon\sim N(0, I)
  • 解码器:从 zz 重建输入,pθ(zx)=N(z;μ(x),σ2(x)I)p_{\theta}(z\mid x) = N(z\,;\,\mu(x),\, \sigma^{2}(x)I ) ,与 AEAE 不同,VAEVAE 是重建分布的参数
  • 目标函数L=Eqθ(zx)[logpϕ(xz)]DKL(qθ(zx)p(z))\mathcal{L} = \mathbb{E}_{q_{\theta}(z\mid x)}\left[\log p_{\phi}(x\mid z)\right] - D_{\text{KL}}\left(q_{\theta}(z\mid x)\| p(z)\right)
    • 前半部分是对数似然,指的是还原的值和实际的值的误差
    • 后半部分是为了使得还原分布尽可能接近先验分布

VAEVAE 还原了分布,它学习的是分布而不是杂乱无章的点

# GAE 原理

GAE(GraphAutoEncoder)GAE~(Graph~Auto-Encoder) 本质上是 图上的自编码器

  • EncoderEncoder(编码器):把节点的特征和图结构信息编码成一个低维向量
  • DecoderDecoder(解码器):通过这些向量,预测节点之间的连接