GCN学习笔记
GCN
GCN(Graph Convolutional Network) ,图卷积网络,是深度学习算法应用最成功的领域之一。图卷积网络其实就是一个特征提取的过程,要学习图卷积,不妨先来来一维的卷积神经网络的原理是什么样的。下面我们来看一个例子。
现在我们假定这样一个场景,有一个信号发生器,每一秒会射一个信号
然后我们有一个信号接收器,这个接受器会接受之前所有发生器发射的信号,但是因为信号的强度会随时间衰减,所以实际上并不能接受之前所有的信号。我们假设这个信号的衰减强度 每过一秒减少一半,信号量为1/4之后消失。即衰减率分别为
我们来看看
以图像的方式就是下面这样
某一时刻
这个系数组合
接下来,我们来了解下二维的CNN是如何工作的
Source Pixel 表示的是待提取特征的数据,可以给他赋予一些含义,如这是一张图片三原色中某一色的色值,三张这样的图片可以组成一张完整图片。然后我们现在给这个数据进行卷积提取特征的过程,就是将这个子图局部颜色特征提取到下一层,下一层数据的每一个点都包含了上一层数据的局部特征。中间Convolution 即为卷积和,也是一个系数矩阵。用这个系数矩阵(卷积核)去历遍SourcePixel即可以得到下一层的数据。上图中一下层的数据的维度会比原始数据维度低一些,这个取决于卷积核和步长等等因素,这个大小是可以调整的,如果你想,下一层的数据维度也可以比原始数据高。经过多层的特征提取后,最后我们会得到一个m维的向量,这个向量就是这张图的特征向量,然后用这个向量去做正常的机器分类。
好了,到此为止你已经理解了CNN,而GCN和CNN的区别就是,GCN将CNN应用到了图结构。原来的CNN应用的原始数据必须是满足欧式距离的网络,而GCN则重新定义了卷积核使其满足了有着非欧式距离的图结构
举个例子,在CNN,最核心的一部分就是一个固定的,可平移的卷积核(系数矩阵)。事实上CNN就是全连接网络的缩小版,但在图结构上,如何将这个卷积核进行移动?因为图结构中每个节点的连接数量不一样,如果你的卷积核是一个
解决这个问题非常简单,我只需要对每一个中心节点定义出9个节点(假设我的卷积核是九宫格,当然这是随意的,上图是5个点),这9个节点可以是离中心点最近的九个(当然如何定义距离也是可选择的)。然后给这个九个节点排序,从近到远。这样就实现了参数共享。如果中心节点的边不足9,可以从他的二级连接点中选取。然后我们历遍所有节点,就实现了卷积。
卷积之后,新产生的节点特征就整合了原来图中所有他邻居的特征。然后我们就可以拿这个特征向量去做普通的机器学习。
现在我们来看看图卷积神经网络(GCN)的公式,来深刻的认识一下
我们来举一个例子一步一步推导。现在我有这样一个图网络:
一共是四个节点,每个节点我们假设他有一个特征向量,比如A,B,C,D 是四个人,他们的边是他们的社会关系,有边代表认识,无边代表不认识,特征向量就是每个人的身高,年龄,体重等固定的属性。我们假设这四个节点的特征向量如下:
有
那么
这个聚合的步骤只是将每个节点的邻居加了起来,或许我们可以给他平均一下,避免他的值过大。如何平均?当然是除以相加节点的数量,即要得到下面这样的式子
显然每个新的“特征向量”除的值是这个节点的度。我们来写成矩阵的形式,在此之前先定义一个度矩阵。为了美观我们之后写成对角的形式
那么我们的
实际上就是对特征向量X做一个系数变换这个系数就是
注意到,节点对于每个边的权重是相等的,但事实上是不合理的,显然在我们的例子中,D节点对于A的影响是大于C对A的影响的(因为C节点有更多的连接,分散了其作用),因此如何定义这个权重比较合理?GCN中是这样定义这个权重的——通过两个节点边的数量来定义。如果两个节点所连的边越多,则分配的权重越小。反之越大。用公式来表示就是
我们来看看现在系数矩阵
AB之间的系数和AC之间的系数是相同,他是如何计算的呢?实际上就是分子为1,分母为A的边乘以B(C)的边即
同样的我写出系数矩阵的具体值
进一步的理解,
最后我们就可以得到GCN 的完整公式
W 是一个可学习的参数。他是一个
然后最后一个问题是,这个新产生的特征向量矩阵
给每一个节点加上一个自连的边,然后重新计算邻接矩阵和度矩阵,这样就完成了。即
到此为止GCN的基本原理就结束。GCN的本质就是将图中的各种信息提取到节点的特征向量中。用新的特征向量去做分类或者其他进一步的机器学习。