图卷积神经网络(GCN)理解与tensorflow2.0代码实现

图(Graph),一般用 G = ( V , E ) G=(V,E) G=(V,E) 表示,这里的 V V V是图中节点的集合, E E E 为边的集合,节点的个数用 N N N表示。在一个图中,有三个比较重要的矩阵:

  1. 特征矩阵 X X X:维度为 N × D N\times D N×D ,表示图中有N个节点,每个节点的特征个数是D。
  2. 邻居矩阵 A A A:维度为 N × N N\times N N×N ,表示图中N个节点之间的连接关系。
  3. 度矩阵 D D D:维度为 N × N N\times N N×N ,是一个对角矩阵,即只有对角线上不为零,其他位置元素都是 0 ,表示图中N个节点与其他节点相连的边的个数。对于无权图而言, D i i = ∑ j A i j D_{ii}=\sum_j A_{ij} Dii=jAij

邻接矩阵与度矩阵例子如下图所示:

在这里插入图片描述

对于图像(Image)数据,我们可以用卷积核来提取特征,无论卷积核覆盖在图像的哪个部分,其内部结构都是一样的,这是因为图片结构具有平移不变性,如下图左半部分所示:

在这里插入图片描述

但是对于图(Graph)数据而言,其形状是不规则的,不具有平移不变性。于是 GCN,也就是图卷积神经网络,其目标就是设计一种特征提取器,进而完成节点分类、变预测等任务,还顺便可以得到每个节点的 embedding 表示。

上面展示了一个简单的 3x3 的卷积核,每次自左向右,自上而下扫描图片(Image)时,都是将 3x3 的像素进行加权求和,即: ∑ i = 1 9 w i x i \sum_{i=1}^9 w_i x_i i=19wixi,然后将求和的结果作为该 3x3 区域的特征。

那么在图(graph)中要怎么提取特征?这里给出两种思路。

图卷积

思路一

CNN加权求和的思想也可以应用到图(Graph)的特征提取上,如下图所示:

在这里插入图片描述

对于节点 i i i,我们可以用其邻接节点加权求和的结果来表示当前节点,这个操作我们称为“聚合(aggregate)”:
a g g ( X i ) = ∑ j ∈ n e i g h b o r ( i ) A i j X j agg(X_i) = \sum_{j \in neighbor(i)} A_{ij} X_j agg(Xi)=jneighbor(i)AijXj
考虑到与节点 i i i 没有边连接的节点 j j j ,对应的权重 A i j A_{ij} Aij 为 0 ,因此上面的公式又可以改写为:
a g g ( X i ) = ∑ j ∈ N A i j X j agg(X_i) = \sum_{j \in N} A_{ij} X_j agg(Xi)=jNAijXj
那么,对于所有的节点而言,其聚合的结果可以用下面的公式表示:
a g g ( X ) = A X agg(X) = AX agg(X)=AX
上面的公式只考虑了邻居加权求和的结果,很多情况下,节点自身的信息是不可忽略的,因此一般情况下会把自身的特征也加回来:
a g g ( X i ) = ∑ j ∈ N A i j X j + X i agg(X_i) = \sum_{j \in N} A_{ij} X_j + X_i agg(Xi)=

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值