Bootstrap

基于attention的半监督GCN【包括极简例子理解图卷积神经网络的传播过程】


  基于图像的卷积神经网络对输入的局部连接区域进行操作,但是这种局部区域是固定的,也就是通常说的 k × k k\times k k×k卷积核。对于图数据来说是没有办法直接利用CNN进行高效的处理的, 但是将图像看作一种特殊的图谱,就可以建立图数据与图像之间的联系,从而将CNN泛化到处理图数据。

原文:Attention-based Graph Neural Network for Semi-supervised Learning
【注:我没有看Graph Attention Networks和Attention-based Graph Neural Network for Semi-supervised Learning的实现,但是写完这篇文章之后,认为GAT是以一种宽泛的思想提出在图网络中加入attention机制,给出了一种很好的思路,没有指出具体地共享注意力机制,也就是相似性的计算方法,本文在GCN的基础上引入参数化的注意力引导机制,不仅利用每一层的特征输出以余弦相似性计算attention,并且每一层对attention有一个参数化处理(我还没弄清楚这个参数 β \beta β的作用),并且去除了GCN中的感知层】

  图卷积神经网络(GCN)因此非常流行,GCN是一种用于图数据的神经网络结构,功能非常强大,即使随机初始化两层GCN也可以生成图网络节点有用的特征表示。例如:下图,摘自机器之心,表示一个两层的GCN根据左边图数据生成该图数据的二维特征表示,如右图,可以看到二维特征表示能够保存图数据节点的相对邻近性。本文根据图卷积网络到底怎么做,这是一份极简的Numpy实现以及基于attention的半监督GCN整理,以极简单的例子了解图卷积处理的过程。

以简单图结构分析GCN的传播层

基本形式

  根据图神经网络综述指出,GCN有谱域图卷积和空域图卷积,本文基于空间GCN得到一份极简numpy实现,推导过程简单易懂。首先给出GCN 的基本过程
  给定图 G=(V,E),GCN 的输入为:

  • 特征矩阵 X X X【输入维度为 N × F 0 \mathrm{N} \times \mathrm{F}^{0} N×F0,其中N是图数据中的节点个数, F 0 \mathrm{F}^{0} F0表示每个节点的输入特征数。】
  • 一个图结构的矩阵表征【维度为N*N】
    例如,图的邻接矩阵A

  这时GCN 的隐藏层为 H i = f ( H i − 1 , A ) H^{i}=f\left(H^{i-1}, A\right) Hi=f(Hi1,A),其中 f f f表示一种传播规则, H 0 = X H^0 = X H0=X。每一个隐藏层 H i H^i Hi都对应一个维度为 N × F i \mathrm{N} \times \mathrm{F}^{\mathrm{i}} N×Fi的特征矩阵,该矩阵中的每一行都是某个节点的特征表征。在每一层中,GCN 会使用传播规则 f 将这些信息聚合起来,从而形成下一层的特征。这样一来,在每个连续的层中特征就会变得越来越抽象。在该框架下,GCN 的各种变体只不过是在传播规则 f f f 的选择上有所不同 【传播规则 f f f 范围比较广,包含特征传播,激活等】。
  传播规则的简单示例,使用非线性激活函数σ

f ( H i , A ) = σ ( A H i W i ) \mathrm{f}\left(\mathrm{H}^{\mathrm{i}} ,\mathrm{A}\right)=\sigma\left(\mathrm{AH}^{\mathrm{i}} \mathrm{W}^{i}\right) f(Hi,A)=σ(AHiWi)  其中 W i W^i Wi是第 i i i层的权重矩阵,维度为 F i × F i + 1 F^{i} \times F^{i+1} Fi×Fi+1,即权重矩阵第二个维度的大小决定了下一层的特征数,由于这些权重在图中的节点间共享,该操作与卷积核滤波操作类似,σ 是非线性激活函数(如 ReLU 函数)。最后输出维度为 N × N × N × F i × F i + 1 N \times N \times N \times F^{i} \times F^{i+1} N×N×N×Fi×Fi+1—> N × F i + 1 N \times F^{i+1} N×Fi+1,也就是每个节点的特征由 F i F^i Fi变成 F i + 1 F^{i+1} Fi+1,更加抽象了。

在简单的层次上研究传播规则

  上面给出GCN的基本传播过程就是 f ( H i , A ) = σ ( A H i W i ) \mathrm{f}\left(\mathrm{H}^{\mathrm{i}} ,\mathrm{A}\right)=\sigma\left(\mathrm{AH}^{\mathrm{i}} \mathrm{W}^{i}\right) f(Hi,A)=σ(AHiWi),为了用numpy模拟整个过程,理解传播规则,将在简单的层次上研究传播规则,这时令:

  • i = 1,(约束条件 f f f 就是作用于输入特征矩阵的函数)
  • σ 设置为恒等函数(也就是无任何作用的函数,即 f ( x ) = x f(x)=x f(x)=x,输入=输出)
  • 选择权重设置为均为1(约束条件变为: AH⁰W⁰ =AXW⁰ = AX)

也就是 f ( X , A ) = A X f(X, A) = AX f(X,A)=AX,AX 等价于多层感知机的输入层。
在这里插入图片描述
  假设有向图如上所示,邻接矩阵即为A,注意:有向图的邻接矩阵是非对称的,手动设置特征矩阵为X,是基于节点索引生成的整数特征,每一行表示每个节点的特征,AX可以得到上图矩阵,每一行表示经过传播层后每个节点的特征,根据得到的矩阵,可以看出每一行为其相邻节点特征的和,也就是图卷积层会将每个节点表示为其相邻节点特征的聚合。【在这种情况下,如果存在从 v 到 n 的边,则节点 n 是节点 v 的邻居。】
上面简单示例中存在的问题:

  • 节点的聚合表征不包含它自己的特征!
    该表征是相邻节点的特征聚合,因此只有具有自环(self-loop)的节点才会在该聚合中包含自己的特征 [1]。
  • 度大的节点在其特征表征中将具有较大的值,度小的节点将具有较小的值。这可能会导致梯度消失或梯度爆炸 [1, 2],也会影响随机梯度下降算法(随机梯度下降算法通常被用于训练这类网络,且对每个输入特征的规模(或值的范围)都很敏感)。

解决问题
1.增加自环
  针对第一个问题,节点聚合不包括自己的特征,直接为每个节点添加一个自环,具体实现可以在应用传播规则之前将邻接矩阵 A 与单位矩阵 I 相加。
  这时,由于每个节点都是自己的邻居,每个节点在对相邻节点的特征求和过程中也会囊括自己的特征

2.对特征表征进行归一化处理
  针对第二个问题,通过将邻接矩阵 A 与度矩阵 D 的逆相乘,对其进行变换,从而通过节点的度对特征表征进行归一化。
在这里插入图片描述
  注意,将邻接矩阵 A 与度矩阵 D 的逆相乘后,邻接矩阵中每一行的权重(值)都除以该行对应节点的度。然后应用传播规则,得到与相邻节点的特征均值对应的节点表征,这是因为(变换后的)邻接矩阵的权重对应于相邻节点特征加权和的权重。
3.整合
  自环+归一化特征+权重+激活函数
添加权重
  首先要做的是应用权重。请注意,这里的 D_hat 是 A_hat = A + I 对应的度矩阵,即具有强制自环的矩阵 A 的度矩阵。设置权重为W,现在是22矩阵,如果想要缩小输出特征的维度就可以减小W的规模,例如21,增大同理。
在这里插入图片描述
添加激活函数
在这里插入图片描述
完全隐藏层即为 f ( H i , A ) = σ ( D − 1 A H i W i ) f\left(H^{i}, A\right)=\sigma\left(D^{-1} A H^{i} W^{i}\right) f(Hi,A)=σ(D1AHiWi)

基于attention的半监督GCN

  一个完全隐藏层为 f ( H i , A ) = σ ( D − 1 A H i W i ) f\left(H^{i}, A\right)=\sigma\left(D^{-1} A H^{i} W^{i}\right) f(Hi,A)=σ(D1AHiWi), D − 1 A D^{-1} A D1A等价于下面要说的传播矩阵,也就是归一化矩阵, H i H^i Hi对应一个 N × F i N \times F^{i} N×Fi的特征矩阵,那么一个卷积层(隐藏层)就是σ(归一化矩阵 × \times ×特征矩阵 × \times ×权重矩阵),如果用于分类,再加一个卷积层用于分类,最后用softmax(归一化矩阵 × \times ×特征矩阵 × \times ×权重矩阵)。
  摘要:本文中作者首先移除图卷积中的非线性变换,发现1)在GCN中起关键作用的是传播层,而不是非线性感知层。2)然后提出AGNN模型,在传播层引入attention机制,使中心节点特征的聚合过程中,对邻居节点的注意力产生差异。模型在benchmark测试用的文献引用数据集上的效果优于其他state-of-the-art的方法。并且,通过传播矩阵计算节点之间的关联强度,得到了一些更有趣的信息。在预测目标节点类别时,与预测类别相同的邻居节点将会在此过程中,承担了比其他邻居节点更重要的角色。

GNN

  学习模型为:
   Z = f ( X , A ) ∈ R n × d y Z=f(X, A) \in R^{n \times d y} Z=f(X,A)Rn×dy Z i c Z_{ic} Zic为给定特征X和图A条件下,第 i i i个节点属于 c c c类的概率, ∈ [ d y ] \in[d_y] [dy]

  典型的GNN中正向传递再传播曾和单层感知器之间交替进行
  令 t t t表示网络中层的标号, H ( t ) ∈ R n × d h H^{(t)} \in R^{n \times d_{h}} H(t)Rn×dh表示当前隐藏状态,也就是当前获得的特征矩阵, H i ( t ) H_{i}^{(t)} Hi(t)表示矩阵的第 i i i行,表示节点 i i i d h d_h dh维隐藏状态(特征)。
  此时传播层为: H ~ ( t ) = P H ( t ) \tilde{H}^{(t)}=P H^{(t)} H~(t)=PH(t)  P表示传播矩阵,例如,在随机游走应用中, P = D − 1 A P=D^{-1} A P=D1A,从前面简单的例子可以看到,传播矩阵P最后的结果就是邻居节点对中心节点产生的影响的和除以其节点个数的总和==等价于每个邻居节点对中心节点的影响是一样的。用公式表示即: H i ( t ) = 1 ∣ N ( i ) ∣ ∑ j ∈ N ( i ) H j ( t ) H_{i}^{(t)}=\frac{1}{|N(i)|} \sum_{j \in N(i)} H_{j}^{(t)} Hi(t)=N(i)1jN(i)Hj(t)加粗样式其中N(i)表示节点 i i i的邻居节点。
  感知器为
H ( t + 1 ) = σ ( H ~ ( t ) W ( t ) ) H^{(t+1)}=\sigma\left(\tilde{H}^{(t)} W^{(t)}\right) H(t+1)=σ(H~(t)W(t))  传播层+感知器也就是 H ( t + 1 ) = σ ( P H ( t ) W ( t ) ) = σ ( D − 1 A H i W i ) H^{(t+1)}=\sigma\left(P H^{(t)} W^{(t)}\right)=\sigma\left(D^{-1} A H^{i} W^{i}\right) H(t+1)=σ(PH(t)W(t))=σ(D1AHiWi),这也就是我们前面根据简单例子推导出的公式。

GCN

  半监督GCN是GNN的一种特殊情况,是堆叠两层特定的传播和感知器形成的,形式为 H ( 1 ) = ReLU ⁡ ( ( P X ) W ( 0 ) ) H^{(1)}=\operatorname{ReLU}\left((P X) W^{(0)}\right) H(1)=ReLU((PX)W(0)) Z = f ( X , A ) = softmax ⁡ ( ( P H ( 1 ) ) W ( 1 ) ) Z=f(X, A)=\operatorname{softmax}\left(\left(P H^{(1)}\right) W^{(1)}\right) Z=f(X,A)=softmax((PH(1))W(1))  其中, P = D ~ − 1 / 2 A ~ D ~ − 1 / 2 , A ~ = A + I P=\tilde{D}^{-1 / 2} \tilde{A} \tilde{D}^{-1 / 2}, \quad \tilde{A}=A+\mathbb{I} P=D~1/2A~D~1/2,A~=A+I,ReLU为非线性激活函数,经过softmax可以得到每一个类别的概率。其中的参数 W ( 0 ) W^{(0)} W(0) W ( 1 ) W^{(1)} W(1)通过在所有标记样本上最小化交叉熵损失函数 L \mathcal{L} L得到 L = − ∑ i ∈ L ∑ c = 1 d y Y i c ln ⁡ Z i c \mathcal{L}=-\sum_{i \in L} \sum_{c=1}^{d_{y}} Y_{i c} \ln Z_{i c} L=iLc=1dyYiclnZic

GLN

  为了更好的理解GCN,作者将GCN中的非线性变换剔除,只保留传播层,称为GLN,这对于标记样本非常少的半监督学习是非常有意义的,因为会减少很多参数;也为设计更新颖的传播层提供了空间。这样GLN模型就是一个简单的线性模型。 Z = f ( X , A ) = softmax ⁡ ( ( P 2 X ) W ( 0 ) W ( 1 ) ) Z=f(X, A)=\operatorname{softmax}\left(\left(P^{2} X\right) W^{(0)} W^{(1)}\right) Z=f(X,A)=softmax((P2X)W(0)W(1))  两个传播层只是简单的对邻居节点特征加权求平均,权重为节点的度,输出层也是一个线性分类器。如此,分离出线性传播层和非线性感知层。GLN与其他方法的表现对比,比较GCN和GLN,GLN的准确度甚至更高,这表明对提升模型表现至关重要的是传播层,而不是感知层。其他不使用图卷积的方法对比,GLN模型在准确度上有明显差距。基于这个结果,考虑使用attention机制,替换GLN中的线性传播。

AGNN

  原始的GCN和其他图神经网络使用的是静态,无法自适应的传播法则。无法捕捉中心节点的哪个邻居节点对于中心节点的分类贡献更大。真实数据并非所有的边都是代表着相同的关联强度,其中必然有一些才是至关重要的。基于GLN的实验结果,提出了作用与邻居节点集合的attention机制,它可以学习到分类模型中,那些邻居与中心节点更相关,并相应的权衡他们的贡献。
  【思考:在前面的所有陈述中,GCN的第二个输入为图结构的矩阵表征,举例子为图的邻接矩阵,也就是两个点之间有边为1,无边为0,边的权重是未知的,这就导致每个邻居节点对中心节点的影响比重是一样的,但是现实中,很多图,边的权重影响很大,例如一条边是10,另一条边是1,这里说的attention是不是就是根据节点的特征计算节点之间的距离,这个节点相似性就是边上的权重。Such propagations(静态传播规则) are not able to capture which neighbor is more relevant to classifying a target node, which is critical in real data where not all edges imply the same types or strengths of relations】

  AGNN第一层网络与原始GCN一样,首先从一个词嵌入层开始,该层将文件的词袋表示映射成平均词嵌入,然后将词嵌入的参数矩阵 W ( 0 ) ∈ R d x × d h W^{(0)} \in \mathbb{R}^{d_x \times d_h} W(0)Rdx×dh作为该模型的一部分进行训练,会将节点特征X转化为长度为 d h d_h dh的特征向量,激活函数使用ReLU。【词嵌入了解不多,这里不太明白,可能就是特征转换?】
H ( 1 ) = ReLU ⁡ ( X W ( 0 ) ) H^{(1)}=\operatorname{ReLU}\left(X W^{(0)}\right) H(1)=ReLU(XW(0))  在每个传播层加入参数化的注意力引导机制,参数为 β ( t ) ∈ R \beta^{(t)} \in \mathbb{R} β(t)R,得到 H ( l + 1 ) = P ( l ) H ( l ) H^{(l+1)}=P^{(l)} H^{(l)} H(l+1)=P(l)H(l)  具体参数为: H i ( l + 1 ) = ∑ j ∈ N ( i ) ∪ { i } P i j ( l ) H i j ( l ) H_{i}^{(l+1)}=\sum_{j \in N(i) \cup\{i\}} P_{i j}^{(l)} H_{i j}^{(l)} Hi(l+1)=jN(i){i}Pij(l)Hij(l) P i ( l ) = softmax ⁡ ( [ β ( l ) cos ⁡ ( H i ( l ) , H j ( l ) ) ] j ∈ N ( i ) ∪ { i } ) P_{i}^{(l)}=\operatorname{softmax}\left(\left[\beta^{(l)} \cos \left(H_{i}^{(l)}, H_{j}^{(l)}\right)\right]_{j \in N(i) \cup\{i\}}\right) Pi(l)=softmax([β(l)cos(Hi(l),Hj(l))]jN(i){i})   β ( l ) \beta^{(l)} β(l)是参数,cos计算相似性,softmax保证传播矩阵每行和为1,代表邻居节点对中心节点的影响力总和为1,这样从节点 j j j到节点 i i i的注意力为 P i j ( l ) = ( 1 / C ) e β ( l ) cos ⁡ ( H i , H j ) P_{i j}^{(l)}=(1 / C) e^{\beta^{(l)} \cos \left(H_{i}, H_{j}\right)} Pij(l)=(1/C)eβ(l)cos(Hi,Hj) C = ∑ j ∈ N ( i ) ∪ { i } e β ( l ) cos ⁡ ( H i , H j ) C=\sum_{j \in N(i) \cup\{i\}} e^{\beta^{(l)} \cos \left(H_{i}, H_{j}\right)} C=jN(i){i}eβ(l)cos(Hi,Hj)  计算节点i和节点j在第l层隐含状态的余弦距离,它捕捉了节点 j j j到节点 i i i的关联程度,相似性越大,对中心节点的影响力越大。注意力机制更倾向于选择那些与中心节点相同类别的邻居节点,给予更强的关联强度。之所以将attention引入模型,有一部分是因为,它提供了一定的解释性。学习得到的传播矩阵P,反映特征聚合过程中,中心节点i,对邻居节点j的关注度,它代表在对节点i分类过程中,节点j起到的作用。
  这里没有设计到实验部分的内容,在机器之心的文章中提到了实验部分的结果,效果非常不错,需要可以查看这篇文章或者直接阅读paper。

权值矩阵问题思考及作者回复

在文章的第四部分,即AGNN模型的设计中,只有两个权值矩阵W0和W1,分别用于特征转换和最终分类。也就是说,将传播层的权值矩阵替换为设计的动态注意模块,那么权值矩阵与注意机制有什么区别呢?
作者的回复总的来说就是权值矩阵似乎作用不大,而且训练耗时,简单均匀聚合影响网络性能,加入attention每一层只有一个标量参数需要学习,非常简单。

根据原文的回复对论文可能会有更好的理解。
  In a regular Graph Neural Network, each layer could be classified into two parts according to the task it performs. The tasks are (1) graph neighbor feature aggregation through edges (done by P) and (2) feature vector transformation (done by W).

  (1) First task is performed by the “propagation layer” P (first equation on page 3), which aggregates/combines the features of its neighbours from the previous layer (with or without an attention layer).
  (2) Second task is performed by the “single layer perceptron” layer with weight W and activation sigma (second equation on page 3), which does feature transformation like a regular neural network layer (does NOT combine features of neighbours).

  We basically split the P and W parts of the regular GNN layer, which where considered as a SINGLE layer: sigma(PxHxW) , in previous works.

  In Paragraph about Graph Linear Network (GLN) (page 4), we proved that GNN really NEEDS ONLY ONE weight vector. Inspired from this observation, our architecture AGNN, uses only two Weight vectors (W0 and W1); one at the first layer (eqn 4) and another at the final layer (eqn 6). All the other layers in between are propagation layers of the form P (eqn 5). We added attention because it intuitively seemed to help the network in better aggregating the information.

  But I have a small question I would like to ask you. In the fourth part of the article, that is, the design of the AGNN model, there are only two weight matrices W0 and W1, which are used for feature conversion and final classification, respectively. In other words, you replace the weight matrix of the propagation layer with the dynamic attention module of the design, so what is the difference between the weight matrix and the attention mechanism? I am not sure whether my understanding is correct. I wish you can answer it in your busy schedule.

  Yes, effectively it looks like I replaced weights with attention, however
  (1) removing weight vectors from the in-between layers, and,
  (2) adding attention mechanism for the propagation layers, were two SEPARATE actions for two separate reasons.

  (1) I removed the weight matrices because they seem to be not useful and making the model very complex and slow (Section 3: Dissection of Graph Neural Network).
  (2) I added attention mechanism because simple aggregating by uniform sum is adversely affecting the performance of the network (Section 4: Attention-based Graph Neural Network (AGNN)).

;