图卷积网络(GCN)运行细节


图1 图卷积网络

图1 图卷积网络

Z = f ( X , A ) = s o f t m a x ( A ^  ReLU ( A ^  X W ( 0 ) ) W ( 1 ) ) . . . . . . . . . . . ( 1 ) Z = f\left( X,A \right) = softmax(\widehat{A}\text{\ ReLU}\left( \widehat{A}\text{\ X}W^{(0)} \right)W^{(1)})...........(1) Z=f(X,A)=softmax(A  ReLU(A  XW(0))W(1))...........(1)


一、公式说明

  式(1)就代表着一个单隐藏层的图卷积神经网络的数学模型。下面对这个公式中每个变量的含义进行说明:
  其中 A ^ \widehat{A} A 是邻接矩阵的一个变体,但是本质上还是邻接矩阵,把它当邻接矩阵看就行,在整个图卷积网络运行过程中, A ^ \widehat{A} A 是不会变化的; X X X代表的就是输入的图结构中全部节点组合而成的特征矩阵; W ( 0 ) W^{(0)} W(0)是输入层 C C C与第1层隐藏层之间的连接权值矩阵,   W ( 1 ) \ W^{(1)}  W(1)是第1层隐藏层与输出层 Z Z Z之间的连接权值矩阵; R e L U ( ) ReLU() ReLU() s o f t m a x ( ) softmax() softmax()是激活函数,目的在于引入非线性; ReLU ( A ^  X W ( 0 ) ) \text{ReLU}\left( \widehat{A}\text{\ X}W^{(0)} \right) ReLU(A  XW(0))这个整体就是输入图结构处在第1层隐藏层时,全部节点组合而成的特征矩阵,如果参照公式中 W W W的标号方法,那么 ReLU ( A ^  X W ( 0 ) ) = X ( 1 ) \text{ReLU}\left( \widehat{A}\text{\ X}W^{(0)} \right) = X^{(1)} ReLU(A  XW(0))=X(1),这样如果再叠加一层隐藏层,上面的公式怎么改也明了了。

二、实例假设

  随机举个图结构的例子,如图2所示。

图2 图结构

图2 图结构

  那么邻接矩阵 A ^ \widehat{A} A 的维度就是 5 × 5 5 \times 5 5×5(5个节点)。对于图2, A ^ \widehat{A} A 就为(考虑了归一化等等因素,其实节点之间的权值分配就相当于 a ij = 1 d e g ( v i ) d e g ( v j ) a_{\text{ij}} = \frac{1}{\sqrt{deg(v_{i})deg(v_{j})}} aij=deg(vi)deg(vj) 1 a ij a_{\text{ij}} aij是节点i给节点j分配的权重,因为是无向图,所以是对称矩阵,其中 d e g ( v i ) deg(v_{i}) deg(vi)就是节点i的度)

A ^ = \widehat{A} = A =在这里插入图片描述

  假设取每个节点的特征为3个(假设分别为长度、宽度、高度)。那么 X X X的维度就是 5 × 3 5 \times 3 5×3(5个节点、3个特征),假设 X X X为:

X X X= 在这里插入图片描述

  假设 W ( 0 ) W^{(0)} W(0)的维度为 3 × 3 3 \times 3 3×3,因为只有 W ( 0 ) W^{(0)} W(0)的维度是这样, ReLU ( A ^  X W ( 0 ) ) = X ( 1 ) \text{ReLU}\left( \widehat{A}\text{\ X}W^{(0)} \right) = X^{(1)} ReLU(A  XW(0))=X(1)的维度才会跟 X X X的原本的维度( 5 × 3 5 \times 3 5×3)相同(当然你也可以选择不相同,比如你这次把 W ( 0 ) W^{(0)} W(0)的维度为 3 × 10 3 \times 10 3×10,那么下一层 W ( 1 ) W^{(1)} W(1)的第一维必须是 10 10 10,不然矩阵没法乘),假设 W ( 0 ) W^{(0)} W(0)被随机初始化为:

W ( 0 ) = W^{(0)} = W(0)=在这里插入图片描述 W ( 1 ) = W^{(1)} = W(1)=在这里插入图片描述

  根据 W ( 0 ) W^{(0)} W(0)的假设, W ( 1 ) W^{(1)} W(1)的第一维度必须为3,假设这些节点的类别总共只有两类,那么 W ( 1 ) W^{(1)} W(1)的第二个维度就为2,那么 W ( 1 ) W^{(1)} W(1)是一个 3 × 2 3 \times 2 3×2的矩阵,这样的话最终输出 Z Z Z就是一个 5 × 2 5 \times 2 5×2,每一行代表对应的节点,每一列代表所属类别的概率,比如第一列代表属于类别1的概率,第二列代表属于类别2的概率。

三、运行细节

  下面,根据式(1)对图卷积网络的运行过程进行步骤分解。

(1) A ^  X \widehat{A}\text{\ X} A  X

  经过 A ^  X \widehat{A}\text{\ X} A  X操作之后,相当于已经对整个图的每个节点做了一次卷积操作,即每个节点都包含了邻居节点的部分信息,也就是信息融合。具体为节点1包含了节点2、3的部分信息,节点2包含了节点1、3的部分信息,节点3包含了节点2、3、4、5的部分信息,节点4包含了节点3、5的部分信息,节点5包含了节点3、4的部分信息。 A ^  X \widehat{A}\text{\ X} A  X相乘之后的结果为

在这里插入图片描述

(2) A ^  X W ( 0 ) \widehat{A}\text{\ X}W^{(0)} A  XW(0)

   W ( 0 ) W^{(0)} W(0)是为了让图卷积网络更加关注重要的某些特征,忽视某些次要特征(与信号处理中的滤波器的意义差不多)。 A ^  X \widehat{A}\text{\ X} A  X乘以 W ( 0 ) W^{(0)} W(0)的结果为:

在这里插入图片描述

(3) ReLU ( A ^  X W ( 0 ) ) \text{ReLU}\left( \widehat{A}\text{\ X}W^{(0)} \right) ReLU(A  XW(0))

  再经过 R e L U ( ) ReLU() ReLU()函数引入非线性,得到(跟上一步的结果一样,是因为 R e L U ( ) ReLU() ReLU()函数的形式如式(2)所示),  ReLU ( A ^  X W ( 0 ) ) \text{\ ReLU}\left( \widehat{A}\text{\ X}W^{(0)} \right)  ReLU(A  XW(0))的运行结果为

在这里插入图片描述
在这里插入图片描述          (2)

(4)   A ^  ReLU ( A ^  X W ( 0 ) ) \ \widehat{A}\text{\ ReLU}\left( \widehat{A}\text{\ X}W^{(0)} \right)  A  ReLU(A  XW(0))

  这一步与步骤(1)类似,不同的是通过步骤(1),各个节点包含了一阶邻居的部分信息(信息融合),而通过步骤(4),每个节点还包含了二阶邻居的信息。 A ^  ReLU ( A ^  X W ( 0 ) ) \widehat{A}\text{\ ReLU}\left( \widehat{A}\text{\ X}W^{(0)} \right) A  ReLU(A  XW(0))的运行结果为

在这里插入图片描述

(5) A ^  ReLU ( A ^  X W ( 0 ) ) W ( 1 ) \widehat{A}\text{\ ReLU}\left( \widehat{A}\text{\ X}W^{(0)} \right)W^{(1)} A  ReLU(A  XW(0))W(1)

   W ( 1 ) W^{(1)} W(1) W ( 0 ) W^{(0)} W(0)的目的是类似的,为了让图卷积网络更加关注重要的某些特征,忽视某些次要特征。 A ^  ReLU ( A ^  X W ( 0 ) ) W ( 1 ) \widehat{A}\text{\ ReLU}\left( \widehat{A}\text{\ X}W^{(0)} \right)W^{(1)} A  ReLU(A  XW(0))W(1)的运算结果为:

在这里插入图片描述

(6) s o f t m a x ( A ^  ReLU ( A ^  X W ( 0 ) ) W ( 1 ) ) softmax(\widehat{A}\text{\ ReLU}\left( \widehat{A}\text{\ X}W^{(0)} \right)W^{(1)}) softmax(A  ReLU(A  XW(0))W(1))

  对每一行再进行softmax,将其映射到(0,1)之间,一般是取最大值为类别。那么在这里就是每个节点都是类别1。本步骤运行的结果为

在这里插入图片描述

  针对softmax再打个比分,假设有一个向量 V = [ 0.5 ; 1.7 ; − 0.3 ] V = \lbrack 0.5;1.7; - 0.3\rbrack V=[0.5;1.7;0.3],那么经过softmax之后,每个元素的值为[0.2097,0.6961,0.0942]。Softmax()函数的实际运算过程(以0.2097为例):

0.2097= e V 1 ∑ j e V j = e 0.5 e 0.5 + e 1.7 + e − 0.3 \frac{e^{V_{1}}}{\sum_{j}^{}e^{V_{j}}} = \frac{e^{0.5}}{e^{0.5} + e^{1.7} + e^{- 0.3}} jeVjeV1=e0.5+e1.7+e0.3e0.5。softmax的公式为: S i = e V i ∑ j e V j S_{i} = \frac{e^{V_{i}}}{\sum_{j}^{}e^{V_{j}}} Si=jeVjeVi

(7)误差反向传播更新权值 W ( 0 ) W^{(0)} W(0) W ( 1 ) W^{(1)} W(1)

  对softmax后的矩阵取对数的结果如下所示(softmax后的值都是(0,1)之间,那么取对数后的取值范围为( − ∞ - \infty ,0))。因为是半监督分类,假设节点1(类别1)和节点5(类别2)已知类别,假设损失函数为NLL_Loss,NLL_Loss的结果就是把输出与Label对应的那个值拿出来,再去掉负号,再求均值。那么在这里就是(0.5777+0.9401)/2=0.7589,(只计算节点1、5,是因为只知道这两个类别的Label)然后再对这个误差进行反向传递,更新权值 W ( 0 ) W^{(0)} W(0) W ( 1 ) W^{(1)} W(1)(具体的更新过程数据推导太多,就不详细说明了,反正就是类似梯度下降法)。

在这里插入图片描述

  再进行步骤(1-7),直到达到终止条件。

四、附加说明

  关于步骤(6)、(7),我再进一步说明一下为什么这样能有效的利用误差更新权值。考虑一个完美情况,在某一迭代步时,经过softmax后,节点1、5分别为[0.9999,0.0001]、[0.0001,
0.9999],那么取对数之后就为[-0.0001, -9.2103]、[-9.2103,-0.0001],那么根据损失函数NLL_Loss得到的误差为(0.0001+0.0001)/2=0.0001,这个时候误差就很小了,迭代可能就终止了。

  还有一个问题就是,大家可以发现,每次节点1、2以及节点4、5的值是向同的,这是因为节点1、2的邻居节点是相同的(如果把自己也算上的话,那他们的邻居都是节点1、2、3)节点4、5同理。

  总而言之,图卷积网络做的事情就是:每个节点融合邻居节点的部分信息,再引入非线性,然后对带标签数据的误差(预测值和真实值之间的误差,预测值是由神经网络输出的)进行反向传递,以更新各隐藏层的权值。

  图注意力神经网络与图卷积网络的最大区别就是:图卷积网络的邻接矩阵值是永远不变的,即 a ij = 1 d e g ( v i ) d e g ( v j ) a_{\text{ij}} = \frac{1}{\sqrt{deg(v_{i})deg(v_{j})}} aij=deg(vi)deg(vj) 1,而在图注意力神经网络里,这个 a ij a_{\text{ij}} aij是会更新的,更新过程就是依靠注意力机制。
,即 a ij = 1 d e g ( v i ) d e g ( v j ) a_{\text{ij}} = \frac{1}{\sqrt{deg(v_{i})deg(v_{j})}} aij=deg(vi)deg(vj) 1,而在图注意力神经网络里,这个 a ij a_{\text{ij}} aij是会更新的,更新过程就是依靠注意力机制。

本人也是初学者,其中难免存在一些问题,大家可以与我评论交流

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值