MPNNs模型中,将图卷积的前向传播定义为两个阶段:
1)信息传递阶段
2)读出阶段
当信息传递到第 t t t步时,就以节点自身 h v t h_v^t hvt、该节点定义好的邻域的隐藏状态 h w t ( w ∈ N ( v ) ) h_w^t(w\in N(v)) hwt(w∈N(v))以及边的权重 e v w e_{vw} evw为输入,送入信息聚合函数 M t ( ∗ ) M_t(*) Mt(∗),:
m v t + 1 = ∑ w ∈ N ( v ) M t ( h v t , h w t , e v w ) (1) m_v^{t+1}=\sum_{w\in N(v)}{M_t(h_v^t,h_w^t,e_{vw})}\tag1 mvt+1=w∈N(v)∑Mt(hvt,hwt,evw)(1)
这个函数得到的是邻域节点信息的聚合表示。
得到 m v t + 1 m_v^{t+1} mvt+1后,再次结合节点当前的隐藏状态 h v t h_v^t hvt,送入顶点更新函数 U t ( ∗ ) U_t(*) Ut(∗):
h v t + 1 = U t ( h v t , m v t + 1 ) (2) h_v^{t+1}=U_t(h_v^t,m_v^{t+1})\tag2 hvt+1=Ut(hvt,mvt+1)(2)
该函数将 h v t , m v t + 1 h_v^t,m_v^{t+1} hvt,mvt+1以函数 U t U_t Ut的方式组合得到下一步 t + 1 t+1 t+1的节点表示。
所以整个信息传递阶段的过程就是将节点邻域信息聚集,结合中心节点状态来更新中心节点,得到下一阶段的隐藏状态:
h v t + 1 = U t ( h v t , ∑ w ∈ N ( v ) M t ( h v t , h w t , e v w ) ) (3) h_v^{t+1}=U_t(h_v^t,\sum_{w\in N(v)}{M_t(h_v^t,h_w^t,e_{vw})})\tag3 hvt+1=Ut(hvt,w∈N(v)∑Mt(hvt,hwt,evw))(3)
该阶段主要是将第 t t t步节点的隐藏状态输入读出函数 R ( ∗ ) R(*) R(∗),对整个图或者每个节点进行分类任务:
y ^ = R ( h v T ∣ v ∈ G ) (4) \hat y=R({h_v^T|v\in G})\tag4 y^=R(hvT∣v∈G)(4)
DCNNs可以按照MPNNs框架进行划分:
在信息传递阶段,DCNNs将节点相同跳的邻域节点信息聚合,不同跳的聚合后信息拼接,得到每个节点的扩散卷积表示:
∑ w ∈ N ( v ) M t ( h v t , h w t , e v w ) = ∑ l = 1 N t ( P t ∗ ) i j l ( X t ) l m (5) \sum_{w\in N(v)}{M_t(h_v^t,h_w^t,e_{vw})}=\sum_{l=1}^{N_t}{ {(P^*_t)}_{ijl}{(X_t)}_{lm}}\tag5 w∈N(v)∑Mt(hvt,hwt,evw)=l=1∑Nt(Pt∗)ijl(Xt)lm(5)
式(5)可以理解为节点 i i i的邻域节点定义为图上所有的节点, ( X t ) l m {(X_t)}_{lm} (Xt)lm表示 h v t , h w t h_v^t,h_w^t hvt,hwt的信息;由于 P t ∗ P^*_t Pt∗是由图的邻接矩阵 A A A计算得来,表示了图的结构信息,所以可以认为 ( P t ∗ ) i j l {(P^*_t)}_{ijl} (Pt∗)ijl表示 e v w e_{vw} evw, ∑ l = 1 N t ( P t ∗ ) i j l ( X t ) l m \sum_{l=1}^{N_t}{ {(P^*_t)}_{ijl}{(X_t)}_{lm}} ∑l=1Nt(Pt∗)ijl(Xt)lm是以概率方式对节点 i i i的 j j j跳节点的一个信息聚合。
式(5)的张量表示形式为:
M t = P t ∗ X t (6) M_t=P^*_t{X_t}\tag6 Mt=Pt∗Xt(6)
其中, M t ∈ R N t × H × F M_t\in R^{N_t\times H\times F} Mt∈RNt×H×F表示每个节点的各个跳 [ 0 , H − 1 ] [0,H-1] [0,H−1]的聚合信息。在利用 P t ∗ P^*_t Pt∗进行信息聚合时,对每个节点每个跳每个特征都有不同的权值,所以在此处没有体现权值共享的优势。
顶点更新函数 U ( ∗ ) U(*) U(∗)在DCNNs模型中未使用。
在DCNNs中,实现了节点分类的读出以及图分类的读出:
节点分类:
在节点分类时,DCNNs对得到的聚合信息 P t ∗ X t P^*_t{X_t} Pt∗Xt用可学习的权值以及激活函数进行调整,之后再调整后的聚合信息展平,并将其送入全连接层和 s o f t m a x softmax softmax层:
P ( Y ∣ X ) = s o f t m a x ( f ( W d f l a t t e n ( f ( W c ⨀ M t ) ) ) ) (7) P(Y|X)=softmax(f(W^dflatten(f(W^c\bigodot M_t))))\tag7 P(Y∣X)=softmax(f(Wdflatten(f(Wc⨀Mt))))(7)
其中, ⨀ \bigodot ⨀表示逐元素相乘, W c ∈ R H × F W^c \in R^{H\times F} Wc∈RH×F,为训练权重;在计算 W c ⨀ P t ∗ X t W^c\bigodot P^*_tX_t Wc⨀Pt∗Xt,存在广播机制,会将 W c W^c Wc复制 N t N_t Nt遍,然后逐元素相乘; f ( W c ⨀ P t ∗ X t ) ∈ R N t × H × F f(W^c\bigodot P^*_tX_t)\in R^{N_t\times H\times F} f(Wc⨀Pt∗Xt)∈RNt×H×F。 f l a t t e n ( ∗ ) flatten(*) flatten(∗)表示展平,将 f ( W c ⨀ M t ) f(W^c\bigodot M_t) f(Wc⨀Mt)变成二维矩阵 R N t × ( H F ) R^{N_t\times (HF)} RNt×(HF), W d ∈ R ( H F ) × C W^d\in R^{(HF)\times C} Wd∈R(HF)×C, C C C表示分类种数。
对比式(4),式(7)可以理解为读出函数 R ( ∗ ) R(*) R(∗),将每个节点的隐藏状态 M t M_t Mt送入读出函数 R ( ∗ ) R(*) R(∗),得到每个节点的分类结果。
图分类:
对于图分类而言,与节点分类不同之处在于读出函数多了一个加权的步骤,图分类的读出函数是将每个节点的聚合信息通过加权求和去取均值,之后用可学习的权值以及激活函数进行调整,再送入全连接层和 s o f t m a x softmax softmax层:
P ( Y ∣ X ) = s o f t m a x ( f ( W d f l a t t e n ( f ( W c ⨀ ( 1 N t ) T M t N t ) ) ) ) (8) P(Y|X)=softmax(f(W^dflatten(f(W^c\bigodot \frac{(1_{N_t})^TM_t}{N_t}))))\tag8 P(Y∣X)=softmax(f(Wdflatten(f(Wc⨀Nt(1Nt)TMt))))(8)
其中 M t M_t Mt的意义不变, 1 N t ∈ R N t × 1 1_{N_t}\in R^{N_t\times 1} 1Nt∈RNt×1表示将各个节点信息 ∈ R H × F \in R^{H\times F} ∈RH×F聚合的权重;除以 N t N_t Nt得到平均值。 W c W^c Wc训练得到的加权权值。
PATCHY-SANs模型也可以概括为信息传递阶段和读出阶段,它和DCNNs模型的不同之处为在于邻域节点的选择和聚合信息的方法。
确定节点邻域:
1)根据选定的图标注函数 l l l对图中的节点进行排序,得到有序节点集合 V _ s o r t V\_sort V_sort。
2)根据 V _ s o r t V\_sort V_sort,以 s s s为步长等间隔取出 w w w个节点,当节点数量 ∣ V _ s o r t ∣ |V\_sort| ∣V_sort∣不足以取出 w w w个节点时,则创建感受野值为 0 0 0作为填充。得到 w w w个节点的序列。
3)对于选出的节点序列中的每一个节点 v v v,取它的 1 1 1邻域,如果自身和 1 − 1- 1−邻域的节点数目 ∣ N ∣ ≥ k |N|\geq k ∣N∣≥k,则得到 v v v的感受野的候选,否则继续取它的 2 − 2- 2−领域等等,直到满足 ∣ N ∣ ≥ k |N|\geq k ∣N∣≥k。对所有选定节点进行上述操作。
构建子图
可以认为节点 v v v和它的邻域候选节点构成原图 G G G的子图 U U U,如果邻域候选节点的数目 ∣ U ∣ > k |U|>k ∣U∣>k,则利用再次图标注函数 l l l对子图进行节点排序,在图归一化这个步骤中节点排序都必须满足约束:对于 ∀ u , w ∈ U \forall u,w \in U ∀u,w∈U, 当 d ( u , v ) < d ( w , v ) d(u,v) < d(w,v) d(u,v)<d(w,v)时,满足 r ( u ) < r ( w ) r(u) < r(w) r(u)<r(w),然后取前 k k k个节点作为 v v v真正的的邻域,并得到新的新的子图 U ′ U^{'} U′,并对新的子图进行节点排序用来形成邻接矩阵 A l ( U ′ ) A^{l}(U^{'}) Al(U′);如果邻域候选节点的数目 ∣ U ∣ < k |U|
邻域信息聚合
设 a n a_n an为顶点特征维度, a m a_m am为边特征维度。对于每个输入图G,在确定节点邻域和构建子图后,得到一个 ( w , k , a n ) (w,k,a_n) (w,k,an)顶点特征的张量和 ( w ; k ; k ; a m ) (w;k;k;a_m) (w;k;k;am)边特征的张量。如下图所示( k = 4 k=4 k=4):
这些可以被重塑为一个 ( w ∗ k ; a n ) (w*k;a_n) (w∗k;an)和 ( w ∗ k ∗ k ; a m ) (w*k*k;a_m) (w∗k∗k;am)的张量。注意, a n , a m a_n,a_m an,am是输入通道的数量。现在可以用一维的卷积层,对子图的节点特征和结构特征进行卷积。对子图节点的卷积核为 R k × a n × F n R^{k\times a_n\times F_n} Rk×an×Fn,步长为 k k k;对子图边的卷积核为 R k 2 × a m × F m R^{k^2\times a_m\times F_m } Rk2×am×Fm,步长为 k 2 k^2 k2。如下图所示节点信息的1维卷积( k = 4 k=4 k=4):
对边的1维卷积也类似,卷积后得到节点的聚合信息( ∈ R w × F n \in R^{w\times F_n} ∈Rw×Fn)和边的聚合信息( ∈ R w × F m \in R^{w\times F_m} ∈Rw×Fm),之后直接将这两个矩阵拼接得到最后的聚合信息( ∈ R w × ( F n + F m ) \in R^{w\times (F_n+F_m)} ∈Rw×(Fn+Fm))。到此将图结构数据转化为欧式结构的数据。之后的卷积只需要利用传统的1维卷积即可。
(2)读出阶段
在前面的信息传递阶段,已经将图结构数据转化为欧式结构的数据,所以读出阶段的做法也和传统的欧式数据一样,利用全连接和 s o f y m a x sofymax sofymax得到每个节点或者整个图的分类概率。
相比于DCNNs模型,在聚合信息时,PATCHY-SANs将不同跳的邻域节点利用卷积的方式直接得到隐藏状态( ∈ R w × F n \in R^{w\times F_n} ∈Rw×Fn),而不是像DCNNs那样,将相同跳的节点聚合不同跳的节点拼接得到隐藏状态。相比于DCNNs模型,在PATCHY-SANs中,对每个子图而言,卷积核是权值共享的。
与PATCHY-SANs模型相比较,GraphSage将获得子图的过程简化了,没有使用卷积的方式,而是定义了出了具体聚合函数形式,对节点的邻域信息进行聚合。
确定邻域节点构建子图
首先需要先给定一个部分节点集合 B B B,这个集合是需要之后输出嵌入向量。 N k ( v ) N_k(v) Nk(v)表示从节点 v ∈ B k v\in B^k v∈Bk的 k k k-邻域进行均匀采样得到节点数量固定为 s s s的节点集合( k ∈ [ 1 , K ] k\in [1,K] k∈[1,K]),如果 k k k-邻域节点数量大于 s s s,则无放回抽样;如果小于 s s s,则有放回抽样。这个部分确定了在整个前向传播过程中需要使用到的节点,可以理解为以 B B B中每个节点为中心构建相应的树状子图的过程,把其他不相关的节点除去。
邻域信息聚合
1)均值聚合函数
信息聚合函数 M ( ∗ ) M(*) M(∗):
M k = m e a n ( h v k − 1 , { h u k − 1 , ∀ u ∈ N ( v ) } ) (9) M_k=mean(h_v^{k-1},\{h_u^{k-1},\forall u\in N(v)\})\tag{9} Mk=mean(hvk−1,{ huk−1,∀u∈N(v)})(9)
顶点更新函数 R ( ∗ ) R(*) R(∗):
h v k = σ ( W k ⋅ M k ) (10) h_v^k=\sigma(W^k\cdot M_k)\tag{10} hvk=σ(Wk⋅Mk)(10)
这种k层的均值聚合网络与 k k k层的1stChebNet网络近似。训练的参数为 W k W^k Wk。
2)池化聚合函数
信息聚合函数 M ( ∗ ) M(*) M(∗):
h N ( v ) k = m a x ( { σ ( W p o o l k h u i k + b ) , ∀ u i ∈ N ( v ) } ) (11) h_{N(v)}^k=max(\{\sigma(W^k_{pool}h^k_{u_i}+b),\forall u_i\in N(v)\})\tag{11} hN(v)k=max({ σ(Wpoolkhuik+b),∀ui∈N(v)})(11)
其中, W p o o l k h u i k + b W^k_{pool}h^k_{u_i}+b Wpoolkhuik+b表示多层感知机,为了简单表示,只表现了单层的结构,其目的是为了计算出每个邻域节点的特征。 m a x ( ∗ ) max(*) max(∗)表示逐元素取最大值,即取每个特征的最大值以捕获邻居集合上在每个维度的最突出表现(均值池化和最大池化结果没有明显区别)
顶点更新函数 R ( ∗ ) R(*) R(∗):
h v k = σ ( W k ⋅ c o n c a t ( h N ( v ) k , h v k − 1 ) ) (12) h_v^k=\sigma(W^k\cdot concat(h_{N(v)}^k,h_{v}^{k-1}))\tag{12} hvk=σ(Wk⋅concat(hN(v)k,hvk−1))(12)
训练的参数为 W p o o l k , W k W^k_{pool},W^k Wpoolk,Wk。
利用全连接层和 s o f y m a x sofymax sofymax得到每个节点分类概率。
LGCN模型使用了与GraphSage相同的随机方法获取子图(节点的邻域信息),然后对PATCHY-SANs模型的卷积部分进行了优化。
确定邻域节点构建子图
1)首先从所有节点 N N N中,随机采样 N i n i t N_{init} Ninit个节点,表示为 i n i t N o d e s initNodes initNodes,并加入采样节点集合 S S S;(代码第2-3行)
2)初始化 n e w A d d N o d e s newAddNodes newAddNodes,令 n e w A d d N o d e s newAddNodes newAddNodes等于 i n i t N o d e s initNodes initNodes(代码第四行)
3)从 n e w A d d N o d e s newAddNodes newAddNodes节点的1-邻域中再随机采样 N m N_m Nm个节点,更新 n e w A d d N o d e s newAddNodes newAddNodes,并将新的 n e w A d d N o d e s newAddNodes newAddNodes加入采样节点集合 S S S;(代码6-10行)
3)循环过程(3)直到采样节点总数 S S S大于等于 N s N_s Ns停止循环;每次迭代过程中的 N m N_m Nm都为不同值。
4) S > N s S>N_s S>Ns时,需要把最后一次过程(3)得到的采样节点再次采样 N r N_r Nr个节点,使得 S = N s S=N_s S=Ns。(代码11-14行)
伪代码如下图所示:
邻域信息聚合
1)利用子图的 A A A矩阵,找到节点 i i i的所有1-邻域节点 { i 1 , . . . , i n } \{i_1,...,i_n\} { i1,...,in}。将这 n n n个节点拼接成矩阵 M l i ∈ R n × C M_l^i \in R^{n\times C} Mli∈Rn×C;如果 n < k n
2)对 M l i M_l^i Mli矩阵每一列的值进行由大到小的排序,并选出前 k k k个值,得到 M ^ l i ∈ R k × C \hat M_l^i\in R^{k\times C} M^li∈Rk×C矩阵,目的是选出邻域节点的各个特征中良好表现该特征的值,之后将节点 i i i拼接于 M ^ l i \hat M_l^i M^li的第一行,得到最后的网格化数据 M ~ l i ∈ R k + 1 × C \tilde M_l^i\in R^{k+1\times C} M~li∈Rk+1×C,对所有节点上述操作后得到表示节点特征的张量 X l ~ ∈ R N × ( k + 1 ) × C \tilde{X_l}\in R^{N\times (k+1)\times C} Xl~∈RN×(k+1)×C。
3)利用一维卷积核卷积实现信息聚合操作,得到最后的输出。 X l ~ ∈ R N × ( k + 1 ) × C \tilde{X_l}\in R^{N\times (k+1)\times C} Xl~∈RN×(k+1)×C中, N N N可以视为批大小 ( b a t c h s i z e ) (batch\ size) (batch size), ( k + 1 ) (k+1) (k+1)可以视为一维图像(样本)的大小, C C C可以认为每个像素的通道数。所以与传统卷积类比,卷积核的大小,与批大小无关,与输入样本的特征维度 C C C,输出样本维度 D D D,以及自定义的卷积核大小 m m m有关,卷积核 ∈ R m × C × D \in R^{m\times C \times D} ∈Rm×C×D。可以使用多层1-D卷积神经网络,但是对每个节点而言,多层1-D卷积神经网络之后的输出,必须还是一维向量 ∈ R 1 × D \in R^{1\times D} ∈R1×D,才可以再次输入k-最大节点选择部分。最简单的卷积为卷积核大小选择为 k + 1 k+1 k+1,可以直接得到 X l + 1 ∈ R N × D X_{l+1}\in R^{N\times D} Xl+1∈RN×D。
邻域信息聚合过程如下图所示:
利用全连接层和 s o f y m a x sofymax sofymax得到每个节点分类概率。