GNN图神经网络,神经网络技术运用于图数据的学习任务中去的一大类方法。
空域角度下的GCN本质上是一个迭代式地聚合邻居的过程,这启发了一大类模型对于这种聚合操作的重新设计,这些设计在某些方面大大加强了GNN对于图数据的适应性。解构这些设计能够提出一些GNN的通用表达框架,为GNN模型设计工作提供统一范式。
本节的GraphSAGE从两个方面对GCN做了改动:
根据梯度下降时小批量的思想,为了提高效率,我们也可以将这种思想迁移到聚合邻居的操作上。对邻居进行随机采样来控制实际运算时节点k阶子图的数据规模,在此基础上对采样的子图进行随机组合来完成小批量式的训练。
上图如果使用GCN,模型层数为2时,所有节点都需要参与计算。
如果我们只考虑节点的k阶子图,仍有以下问题:
解决:采样邻居时控制子图的发散率。设置第k层的邻居采样倍率为 S k S_k Sk,每个节点采样的一阶邻居数不能超过 S k S_k Sk。这里GraphSAGE选择了均匀分布,这样大量减少了计算复杂度。
提出了几种新的操作形式:
比较符合的操作算子:
平均/加和算子: W 和 b \pmb W和\pmb b WWW和bbb是聚合操作的学习参数:
A g g s u m = σ ( S U M { W h j + b j , ∀ v j ∈ N ( v i ) } ) Agg^{sum}=\sigma(SUM\{\pmb W\pmb h_j+\pmb b_j,\forall v_j\in N(v_i)\}) Aggsum=σ(SUM{WWWhhhj+bbbj,∀vj∈N(vi)})
池化聚合算子:最大池化操作如下:
A g g p o o l = M A X { σ ( W h j + b ) , ∀ v j ∈ N ( v i ) } Agg^{pool}=MAX\{\sigma(\pmb W\pmb h_j+\pmb b ),\forall v_j\in N(v_i)\} Aggpool=MAX{σ(WWWhhhj+bbb),∀vj∈N(vi)}
可以用DNN模型代替 W h j + b j \pmb W\pmb h_j+\pmb b_j WWWhhhj+bbbj.
上述算法的基本思路:先将小批量集合B内的中心节点聚合操作所要涉及的k阶子图全部一次性遍历处理,然后在这些节点上进行K次聚合操作的迭代式计算。
1-7行就是遍历操作,把所有需要计算的节点寻找到构成集合 B 0 , B 1 , B 2 , . . . , B k B^0,B^1,B^2,...,B^k B0,B1,B2,...,Bk,分别代表每层选取的点集合,其中 B 0 B^0 B0是最外层;9-15行是聚合操作,11行是调用聚合 操作完成对每个节点邻居特征的整合输出;12行是将聚合后的邻居特征与中心节点上一层的特征进行拼接,然后送到一个单层网络里得到中心节点新的特征向量,13行对节点的特征向量进行归一化处理,将所有节点的向量都统一到单位尺度上.
由上图可知,采样由内到外,聚合由外到内。B是中心节点的特征集合,可以看到最终聚合得到的是中心节点的特征向量。
这个算法计算过程没有拉普拉斯矩阵的参与,每个节点的特征学习过程仅仅只与其k阶邻居相关,而不需要考虑全图的结构信息,这样的方法适合做归纳学习(归纳学习,指可以对在训练阶段见不到的数据(新节点或者新图)直接进行预测而不需要重新训练的学习方法)。与之相对的是转导学习(所有的数据在训练阶段都可以拿到,学习过程是作用在这个固定的数据上的,一旦数据发生改变需要重新进行学习训练),典型的有图上的随机游走算法。
7.2 介绍了注意力机制和图注意力网络(GAT),7.3介绍了R-GCN和知识图谱,旨在解决异构图的问题,详细见书P134-P142。这两种均是GNN通用框架的特殊形式。书上介绍足够简洁。
三种通用框架:
基本思路:节点的表示向量通过消息函数M和更新函数U进行K轮消息传播机制的迭代后得到的,传播过程如下:
m i ( k + 1 ) = ∑ v j ∈ N ( v i ) M ( k ) ( h i ( k ) , h j ( k ) , e i j ) h i ( k + 1 ) = U ( k ) ( h i ( k ) , m i ( k + 1 ) ) \pmb m_i^{(k+1)}=\sum_{v_j\in N(v_i)}M^{(k)}(\pmb h_i^{(k)},\pmb h_j^{(k)},\pmb e_{ij} )\\ \pmb h_i(k+1)=U^{(k)} (\pmb h_i^{(k)} ,\pmb m_i^{(k+1)}) mmmi(k+1)=vj∈N(vi)∑M(k)(hhhi(k),hhhj(k),eeeij)hhhi(k+1)=U(k)(hhhi(k),mmmi(k+1))
e i j \pmb e_{ij} eeeij表示边上的特征向量,k表示第k次消息传播。
消息函数的输入由边本身以及两侧节点构成,使用RDF三元组表示这样的输入:
Source ⟶ Predict Object \text{Source}\stackrel{\text{Predict}}{\longrightarrow}\text{Object} Source⟶PredictObject
在消息函数作用下,图里面所有的RDF都会向外广播消息,之后这些消息沿着边方向传播到RDF的两侧节点处进行聚合,聚合后的消息会在之后的更新函数作用下对节点特征进行更新,如下图:
其实边也是可能具有特征向量的,如果对边始终维护一个状态向量,可以参见GN的做法。
由于MPNN的消息函数作用于三元组RDF,因此对各种类型的图数据都具有一定适应性,处理方式如下:
非局部神经网络是对注意力机制的一般性总结,GAT是它的一个个例,NLNN通过non-local操作将任意位置的输出响应计算为所有位置特征的加权和。位置可以是图像中的空间坐标,也可以是序列数据中的时间坐标。图数据中可以是节点:
non-local操作定义如下:
h i ′ = 1 C ( h ) ∑ ∀ j f ( h i , h j ) g ( h j ) \pmb h_i^{'}=\frac{1}{C(\pmb h)}\sum_{\forall j}f(\pmb h_i,\pmb h_j)g(\pmb h_j) hhhi′=C(hhh)1∀j∑f(hhhi,hhhj)g(hhhj)
i是输出位置的索引,j是枚举所有可能位置的索引。 f ( h i , h j ) f(\pmb h_i,\pmb h_j) f(hhhi,hhhj)是i和j位置上元素之间的相关度函数, g ( h j ) g(\pmb h_j) g(hhhj)表示对输入 h j \pmb h_j hhhj进行变换的变换函数,因子 1 C ( h ) \frac {1}{C(\pmb h)} C(hhh)1用于归一化。
g一般采用线性变换: g ( h j ) = W g h j g(\pmb h_j)=W_g\pmb h_j g(hhhj)=Wghhhj,这里 W g W_g Wg是需要学习的权重参数。f的一些选择:
内积
f ( h i , h j ) = θ ( h i ) T ϕ ( h j ) , 其 中 , θ ( h i ) = W θ h i , ϕ ( h j ) = W ϕ h j , 分 别 表 示 对 输 入 的 一 种 线 性 变 换 , C ( h ) = ∣ h j ∣ f(\pmb h_i,\pmb h_j)=\theta(\pmb h_i)^T\phi(\pmb h_j), \\其中,\theta(\pmb h_i)=W_\theta\pmb h_i,\phi(\pmb h_j)=W_\phi \pmb h_j,分别表示对输入的一种线性变换,C(\pmb h)=|\pmb h_j| f(hhhi,hhhj)=θ(hhhi)Tϕ(hhhj),其中,θ(hhhi)=Wθhhhi,ϕ(hhhj)=Wϕhhhj,分别表示对输入的一种线性变换,C(hhh)=∣hhhj∣
全连接
使用输出为一维标量的全连接层定义 f f f:
f ( h i , h j ) = σ ( w f [ θ ( h i ) ∣ ∣ ϕ ( h j ) ] ) , 其 中 , w f 是 将 向 量 投 影 为 标 量 的 权 重 参 数 , C ( h ) = ∣ h j ∣ f(\pmb h_i,\pmb h_j)=\sigma(w_f[\theta (\pmb h_i)|| \phi(\pmb h_j) ]),\\ 其中,w_f是将向量投影为标量的权重参数,C(\pmb h)=|\pmb h_j| f(hhhi,hhhj)=σ(wf[θ(hhhi)∣∣ϕ(hhhj)]),其中,wf是将向量投影为标量的权重参数,C(hhh)=∣hhhj∣
高斯函数
f ( h i , h j ) = e θ ( h i ) T ϕ ( h j ) , 其 中 , C ( h ) = ∑ ∀ f f ( h i , h j ) f(\pmb h_i,\pmb h_j)=e^{\theta(\pmb h_i)^T\phi(\pmb h_j) },\\其中,C(\pmb h)=\sum_{\forall f}f(\pmb h_i,\pmb h_j) f(hhhi,hhhj)=eθ(hhhi)Tϕ(hhhj),其中,C(hhh)=∀f∑f(hhhi,hhhj)
对于给定的i, 1 C ( h ) \frac{1}{C(\pmb h)} C(hhh)1表示沿维度j进行归一化之后的值,此时 h i ′ = softmax j ( θ ( h i ) ϕ ( h j ) ) g ( h j ) \pmb h_i^{'}=\text{softmax}_j(\theta(\pmb h_i)\phi(\pmb h_j))g(\pmb h_j) hhhi′=softmaxj(θ(hhhi)ϕ(hhhj))g(hhhj)。如果自然对数e的幂指数改成全连接形式,就是GAT。
基本计算单元包含3个要素:节点的状态 h \pmb h hhh,边的状态 e i j \pmb e_{ij} eeeij,图的状态 u \pmb u uuu.围绕这3个元素,有三个更新函数 ϕ \phi ϕ,三个聚合函数 ρ \rho ρ,具体如下:
e i j ′ = ϕ e ( e i j , h i , h j , u ) e i ′ ˉ = ρ e → h ( [ e i j ′ , ∀ v j ∈ N ( v i ) ] ) h i ′ = ϕ h ( e i ′ ˉ , h i , u ) e ′ ˉ = ρ e → u ( [ e i j ′ , ∀ v j ∈ E ] ) h ′ ˉ = ρ h → u ( [ h i ′ = ∀ v i ∈ V ] ) u ′ = ϕ u ( e ′ ˉ , h ′ ˉ , u ) \pmb e_{ij}^{'}=\phi^e(\pmb e_{ij},\pmb h_i,\pmb h_j,\pmb u)\\ \bar {\pmb e_i^{'}}=\rho^{e\rightarrow h}([\pmb e_{ij}^{'},\forall v_j\in N(v_i)])\quad\pmb h_i^{'}=\phi^h(\bar {\pmb e_i^{'}},\pmb h_i ,\pmb u )\\ \bar {\pmb e^{'}}=\rho^{e\rightarrow u}([\pmb e_{ij}^{'},\forall v_j\in E])\quad\bar{ \pmb h^{'}}=\rho^{h\rightarrow u}([\pmb h_i^{'}=\forall v_i\in V])\quad \pmb u^{'}=\phi^u(\bar {\pmb e^{'}},\bar {\pmb h^{'}},\pmb u) eeeij′=ϕe(eeeij,hhhi,hhhj,uuu)eeei′ˉ=ρe→h([eeeij′,∀vj∈N(vi)])hhhi′=ϕh(eeei′ˉ,hhhi,uuu)eee′ˉ=ρe→u([eeeij′,∀vj∈E])hhh′ˉ=ρh→u([hhhi′=∀vi∈V])uuu′=ϕu(eee′ˉ,hhh′ˉ,uuu)
r{ \pmb h{'}}=\rho{h\rightarrow u}([\pmb h_i^{‘}=\forall v_i\in V])\quad \pmb u{'}=\phiu(\bar {\pmb e^{’}},\bar {\pmb h^{'}},\pmb u)
$$
GN对图里的节点、边、全图都维护了相应的状态,这三者可以分别对应上节点层面的任务、边层面的任务、全图层面的任务。