本文为中文笔记翻译,其英文原文地址为Graph Neural Network
在上一节中,我们学习了如何使用“浅层编码器”表示图。这些技术为我们提供了在向量空间中表示图的强大方式,但也有其局限性。在本节中,我们将探索使用图神经网络克服限制的三种不同方法。
幸运的是,图神经网络可以解决上述限制。
传统上,神经网络是为固定大小的图设计的。例如,我们可以将图像视为网格图,或将一段文本视为线图。但是,现实世界中的大多数图具有任意大小和复杂的拓扑结构。因此,我们需要不同地定义GCN的计算图。
假设给定图 G = ( V , A , X ) G=(V,A,X) G=(V,A,X) :
计算图和广义卷积
假设示例图(上图左图)为图 G G G 。我们的目标是定义在图 G G G 上的GCN计算图。计算图应同时保持图 G G G 的结构和合并节点的相邻要素。例如,节点的嵌入向量 A A A 应该包括它的邻居 { B , C , D } \left\{B,C,D\right\} {B,C,D} 并且和 { B , C , D } \left\{B,C,D\right\} {B,C,D} 的顺序无关。一种方法是简单地取 { B , C , D } \left\{B,C,D\right\} {B,C,D} 的平均值。通常,聚合函数(上图右图中的方框)必须是阶不变的(最大值,平均值等)。上图具有两层计算图 G G G 如下所示:
这里,每个节点都基于其邻居定义一个计算图。特别的,节点 A A A 的计算图结构如下所示:(第0层是输入层,输入为节点特征 X i X_{i} Xi ):
有了以上想法,这是节点 v v v 使用平均聚合函数的每一层的数学表达式 :
h v k − 1 h_{v}^{k-1} hvk−1 是节点 v v v 从上一层开始的嵌入。 ∣ N ( v ) ∣ |N(v)| ∣N(v)∣ 是节点 v v v 的邻居数。$\sum_{u \in N(v)}\frac{h_{u}^{k-1}}{|N(v)|} $ 的目的是聚合节点 v v v 上一层的所有邻居特征。 σ \sigma σ 是引入非线性的激活函数(例如ReLU)。 W k W_{k} Wk 和 B k B_{k} Bk 是可训练的参数。
等效地,以上计算可以以写成整个图矩阵乘法的形式:
H l + 1 = σ ( H l W 0 l + A ~ H l W 1 l ) such that A ~ = D − 1 2 A D − 1 2 H^{l+1}=\sigma\left(H^{l} W_{0}^{l}+\tilde{A} H^{l} W_{1}^{l}\right) \text { such that } \tilde{A}=D^{-\frac{1}{2}} A D^{-\frac{1}{2}} Hl+1=σ(HlW0l+A~HlW1l) such that A~=D−21AD−21
我们可以为这些嵌入提供给任何损失函数,并进行随机梯度下降训练参数。例如,对于二进制分类任务,我们可以将损失函数定义为:
L = ∑ v ∈ V y v log ( σ ( z v T θ ) ) + ( 1 − y v ) log ( 1 − σ ( z v T θ ) ) L=\sum_{v \in V} y_{v} \log \left(\sigma\left(z_{v}^{T} \theta\right)\right)+\left(1-y_{v}\right) \log \left(1-\sigma\left(z_{v}^{T} \theta\right)\right) L=v∈V∑yvlog(σ(zvTθ))+(1−yv)log(1−σ(zvTθ))
y v ∈ { 0 , 1 } y_{v}\in\left\{0,1\right\} yv∈{0,1} 是节点类标签。 z v z_{v} zv 是编码器的输出。$\theta $ 是分类权重。 σ \sigma σ 可以是 sigmoid 函数。 σ ( z v T θ ) \sigma(z^T_{v}\theta) σ(zvTθ) 表示节点 v v v 的预测概率。因此,如果标签为正 ( y v = 1 ) (y_{v}=1) (yv=1),则损失函数方程将计算前半部分,否则,损失函数方程将计算后半部分。
我们还可以通过以下方式以无监督的方式训练模型:随机游走,图形分解,节点接近等。
GCN可以应用在图中看不见的节点。例如,如果使用节点 A , B , C A,B,C A,B,C 训练模型,由于参数在所有节点之间共享,新添加的节点 D , E , F D,E,F D,E,F 因此也可以进行评估。
本文为中文笔记翻译,其英文原文地址为Graph Neural Networks
到目前为止,我们已经探索了一种简单的邻域聚合方法,但是我们还可以将聚合方法概括为以下形式:
h v K = σ ( [ W k A G G ( { h u k − 1 , ∀ u ∈ N ( v ) } ) , B k h v k − 1 ] ) h_{v}^{K}=\sigma\left(\left[W_{k} A G G\left(\left\{h_{u}^{k-1}, \forall u \in N(v)\right\}\right), B_{k} h_{v}^{k-1}\right]\right) hvK=σ([WkAGG({huk−1,∀u∈N(v)}),Bkhvk−1])
对于节点 v v v,我们可以应用不同的汇总方法( A G G AGG AGG)与将其邻居和节点 v v v 本身的特征相连接。
下面是一些常用的聚合函数:
平均值:取其邻居的加权平均值。
A G G = ∑ u ∈ N v h u k − 1 ∣ N ( v ) ∣ AGG=\sum_{u\in N_{v}}\frac{h_{u}^{k-1}}{|N(v)|} AGG=u∈Nv∑∣N(v)∣huk−1
池化:转换邻居向量并应用对称向量函数( γ \gamma γ 可以是按元素的均值或最大值)。
A G G = γ ( { Q h u k − 1 , ∀ u ∈ N ( v ) } ) AGG=\gamma(\left\{Qh_{u}^{k-1},\forall u\in N(v)\right\}) AGG=γ({Qhuk−1,∀u∈N(v)})
LSTM:使用LSTM应用于重组后的邻居。
A G G = L S T M ( { h u k − 1 , ∀ u ∈ π ( N ( v ) ) } ) AGG=LSTM(\left\{h_{u}^{k-1},\forall u\in \pi (N(v))\right\}) AGG=LSTM({huk−1,∀u∈π(N(v))})
如果某些相邻节点携带的信息比其他节点更重要怎么办?在这种情况下,我们希望通过使用注意力技巧将不同的权重分配给不同的相邻节点。
假设 α v u \alpha_{vu} αvu 是节点 u u u 向节点 v v v 传递的信息的加权因子(重要性)。 根据上面的平均聚合函数,我们定义了 α = 1 ∣ N ( v ) ∣ \alpha=\frac{1}{|N(v)|} α=∣N(v)∣1。但是,我们也可以基于图的结构特性显式定义 α \alpha α。
设 α u v \alpha_{uv} αuv 为计算注意力机制 a a a 的副产物,它根据节点对 u , v u,v u,v 的消息计算注意力系数 e v u e_{vu} evu:
e v u = a ( W k h u k − 1 , W k h v k − 1 ) e_{vu}=a(W_{k}h_{u}^{k-1}, W_{k}h_{v}^{k-1}) evu=a(Wkhuk−1,Wkhvk−1)
e v u e_{vu} evu 表示了节点 u u u 向节点 v v v 传递的信息的重要性,然后,我们使用 softmax 函数归一化系数以比较不同邻居之间的重要性:
α = exp ( e v u ) ∑ k ∈ N ( v ) exp ( e v k ) \alpha=\frac{\exp(e_{vu})} {\sum_{k\in N(v) \exp (e_{v k})}} α=∑k∈N(v)exp(evk)exp(evu)
因此有:
h v k = σ ( ∑ u ∈ N ( v ) α v u W k h u k − 1 ) h_{v}^{k}=\sigma(\sum_{u \in N(v)}\alpha_{v u}W_{k}h_{u}^{k-1}) hvk=σ(u∈N(v)∑αvuWkhuk−1)
该方法与的选择的 a a a 无关,并且可以与 W k W_{k} Wk 一起训练参数。
以下是有用的参考资料列表:
教程和概述:
基于注意力的邻居节点聚合:
整个图嵌入:
节点嵌入:
图神经网络的谱方法:
其他GNN方法