本片论文是2016ICML的一篇论文,将的是如何将CNN应用在graph上的一种新的思路。关于graph 这个数据结构如果不熟悉的话,可以看一下文章末的简单的整理。
1.概要
对于图卷积,总体来说,就是用w个固定size=(k+1)的子图来表示输入的graph,再将这w个子图正则化后,生成w(k+1)维的向量,作为传统的CNN网络的输入,进行学习。其实就是做了一个从graph到向量的映射的一个预处理的过程。
下图是算法的架构图:
2.导读
CNN在Euclidean Data(欧式数据,也即欧几里德数据)已经取得了瞩目的成就,CNN能够很好的处理这中数据结构,探索出其中所存在的特征表示,例如在计算机视觉、自然语言处理。
所谓的欧式数据就是类似于grid、sequence这样的数据,例如图像就可以看做是一个2D的grid数据,语音信号就可以看做是一个1D的grid数据,但是现实生活中存在大量的非欧的数据,例如社交多媒体(Social Network)数据,化学成分(Chemical Compound)结构数据、生物基因蛋白(Protein)数据以及知识图谱(Knowledge Graphs)数据等等,这类数据属于图结构的数据(Graph-structured Data)。CNN等神经网络结构并不能直接的有效处理这样的数据。这篇Paper就是来讲述如何用CNN来高效的处理图结构的数据。
这个paper提出的将图像转变为一种特殊的图(graph),即一种grid graph,每一个像素就是graph的一个node。大概的可以猜测文章的motivation是将CNN在图像上的应用推广到一般的graph上。
那么我们首先来看一下CNN在Image当中的应用。如下图所示,左图表示的是一张图像在一个神经网络层当中的卷机操作过程。最底部的那一层是输入的特征图(或原图),通过一个卷积(这里表示的是一个3*3的卷积核,也就是文章当中的receptive filed=9操作,输出一张卷积后的特征图。如图卷积操作,底层的9个像素被加权映射到上层的一个像素;再看图3中的右图,表示从graph的角度来看左图底层的输入数据。其中任意一个带卷积的区域都可以看作是一个中心点的node以及它的领域的nodes集合,最终加权映射为一个值。因此,底部的输入特征图可以看作是:在一个方形的grid 图当中确定一些列的nodes来表示这个图像并且构建一个正则化的邻域图(而这个邻域图就是卷积核的区域,也就是感知野)。
按照这样的方式来解释,那么如paper中Figure 1所示,一张4*4大小的图像,实际上可以表示为一个具有4个nodes(图中的1,2,3,4,红色点)的图(graph),其中每一个node还包括一个和卷积核一样大小的邻域(neighborhood filed)。那么,由此得到对于这种图像(image)的卷积实际上就是对于这4个node组成的图(graph)的领域的卷积。那么,对于一个一般性的graph数据,同样的只需要选出其中的nodes,并且求解得到其相关的固定大小(和卷积核一样大小)领域便可以使用CNN卷积得到图的特征表示。
3.算法步骤
(1).确定node(Node Sequence Selection)
在Learning Convolutional Neural Network for Graphs中用的方法是一种根据graph当中的node的排序label进行选择,但是本文并没有对如何排序有更多的介绍。主要采取的方法是:centrality,也就是中心化的方法,个人的理解为越处于中心位置的点越重要。这里的中心位置不是空间上的概念,应该是度量一个点的关系中的重要性的概念,简单的举例说明。如图4当中的两个图实际上表示的是同一个图,对其中蓝色标明的两个不同的nodes我们来比较他们的中心位置关系。比较的过程当中,我们计算该node和其余所有nodes的距离关系。我们假设相邻的两个node之间的距离都是1
当然,这只是一种node的排序和选择的方法,其存在的问题也是非常明显的。
(2)找到Node的领域Neighborhood Assembly
接下来对选出来的每一个node确定一个感知野receptive filed以便进行卷积操作。但是,在这之前,首先找到每一个node的邻域区域(neighborhood filed),然后再从当中确定感知野当中的nodes。假设感知野的大小为k,那么对于每一个Node很明显都会存在两种情况:邻域nodes不够k个,或者是邻域点多了。
(3)图规范化过程(Graph Normalization)
假设上一步Neighborhood Assemble过程当中一个node得到一个领域nodes总共有N个。那么N的个数可能和k不相等的。因此,normalize的过程就是要对他们打上排序标签进行选择,并且按照该顺序映射到向量当中。
得到最好的标签之后,就能够按着顺序将node映射到一个有序的vector当中,也就得到了这个node的receptive field,如图6最右边所示。
(4)卷积神经网路Convolutional Architecture
文章使用的是一个2层的卷积神经网络,将输入转化为一个向量vector之后便可以用来进行卷积操作了。具体的操作如图8所示。
首先最底层的灰色块为网络的输入,每一个块表示的是一个node的感知野(receptive field)区域,也是前面求解得到的4个nodes。其中 a n a_n an表示的是每一个node的数据中的一个维度(node如果是彩色图像那就是3维;如果是文字,可能是一个词向量……这里表明数据的维度为n)。粉色的表示卷积核,核的大小为4,但是宽度要和数据维度一样。因此,和每一个node卷积后得到一个值。卷积的步长(stride)为4,表明每一次卷积1个node,stride=4下一次刚好跨到下一个node。(备注:paper 中Figure1 当中,(a)当中的stride=1,但是转化为(b)当中的结构后stride=9)。卷积核的个数为M,表明卷积后得到的特征图的通道数为M,因此最终得到的结果为 V 1 … … V M V_1……V_M V1……VM,也就是图的特征表示。有了它便可以进行分类或者是回归的任务了。
4.总结
论文中算法的流程可以总结为以下过程:
输入:一张图片
输出:每一个channel输出w个receptive filed
- graph labeling(对图的节点做标记,比如可以用节点的度做标记,做图的划分,也可以叫做color refinement or vertex classification),论文中采用的是The Weisfeiler-Lehman algorithm做图的划分。由此可以得到每个节点的rank值(为了不同的图能够有一个规范化的组织方式)
- 对labeling好的节点排序,取前w个节点,作为处理的节点序列(这样就可以把不同size的graph变成同一个size),若不足w个节点,则在输出中加全零的receptive filed,相当于padding。
- 采用stride=s来遍历w个节点,文中s=1,为了输出有w个receptive field,也就是2的方式补全。
- 对遍历到的每个节点v(称作root),采用bfs的方式获得此节点的k(卷积核的大小,即receptive field size)个1-neighborhood, 如果不足k个,再遍历1-neighborhood的1-neighborhood。直到满足k个,或者所有的邻居节点都遍历完。此节点和他的邻居节点就生成了neighborhood graph。
- step4就生成了w个(s=1)neighborhood graph。需要对着w个graph 进行labeling, 根据离root节点v的远近来计算每个节点的rank,根据算法4是离v越近,r越小。 如果每个neighborhood graph不足k个节点,用0节点补充。
- 规范化step5得到了已经label好的graph,因为需要把它变成injective,使每个节点 的标签唯一,采用nauty的算法。
- 经过6之后,就得到了graph转换后的vector,将vector扔到卷积之中,进行后续的操作。
通过这w个receptive field就能得到一个w(k+1)维的向量。
5.Graph补充
(1)图(Graph)
针对非欧机构化的问题,引入了图论中抽象意义上的图(Graph)来表示欧式结构化数据。
(2)图(Graph)的定义
图的定义形式为
G
=
(
V
,
E
)
G=(V,E)
G=(V,E),V 表示顶点,E表示边。其结果如下图所示:
一个有标号的简单图,点集
V
=
V=
V={
1
,
2
,
3
,
4
,
5
,
6
1,2,3,4,5,6
1,2,3,4,5,6},
边集为
E
=
E=
E={
1
,
2
,
1
,
3
,
1
,
5
,
2
,
3
,
3
,
4
,
4
,
5
,
4
,
6
{1,2},{1,3},{1,5},{2,3},{3,4},{4,5},{4,6}
1,2,1,3,1,5,2,3,3,4,4,5,4,6}
V
=
V=
V={
v
i
∣
i
=
1
,
.
.
.
.
.
,
N
v_i|i=1,.....,N
vi∣i=1,.....,N}表示顶点或节点,其中N表示节点的个数。
E
=
E=
E={
e
i
j
∣
v
i
,
v
j
∈
V
e_{ij}|v_i,v_j\in V
eij∣vi,vj∈V},
∣
E
∣
≤
N
2
|E| \le N^2
∣E∣≤N2表示顶点与顶点之间多连接的边;
(3) 图的表示形式----邻接矩阵(Adjacency )
邻接矩阵是一个元素为bool值或权值的 N × N N\times N N×N矩阵,该矩阵的定义如下:
A
∈
R
N
×
N
,
A
i
,
j
=
{
a
i
j
≠
0
e
i
j
∈
ϵ
0
o
t
h
e
r
w
i
s
e
A\in R^{N\times N},A_{i,j}=\left\{ \begin{aligned} a_{ij} & \neq & 0 &&&&& e_{ij}\in \epsilon \\ 0 &&&&&&& otherwise \end{aligned} \right.
A∈RN×N,Ai,j={aij0=0eij∈ϵotherwise
若图中存在一条连接顶点
v
i
v_i
vi和
v
j
v_j
vj的边
e
i
j
e_{ij}
eij,则
a
i
j
≠
0
a_{ij}\neq0
aij=0,否则为0。当图是稠密时,邻接矩阵是比较合适的表达方法。如下图所示
(4)图的表示形式-----度矩阵(Degree matrix)
度矩阵(Degree matrix)是一个
D
i
,
j
D_{i,j}
Di,j为节点
v
i
v_i
vi的度的对角矩阵,其定义如下所示:
D
∈
R
N
×
N
,
D
i
i
=
∑
j
A
i
j
D\in R^{N\times N},D_{ii}=\sum_{j}{A_{ij}}
D∈RN×N,Dii=∑jAij
(5)图的表示方式----邻域(Neighborhood)
邻域(Neighborhood)表示与某个顶点有边连接的点集,其定义如下所示: N ( v i ) = N(v_i)= N(vi)={ v j ∣ e i j ∈ ϵ v_j|e_{ij}\in \epsilon vj∣eij∈ϵ},例如节点1点邻域为{2,3,5}
(6) 图上的学习任务
在机器学习中,图的数据结构可以进行的任务:
1、图节点分类任务:图中每个节点都有对应的特征,当我们已知一些节点的类别的时候,可以设计分类任务针对未知节点进行分类。 GCN、GraphSAGE、GAT模型都是对图上的节点分类。
2、图边结构预测任务:图中的节点和节点之间的边关系可能在输入数据中能够采集到,而有些隐藏的边需要我们挖掘出来,这类任务就是对边的预测任务,也就是对节点和节点之间关系的预测。
3、图的分类:对于整个图来说,我们也可以对图分类,图分类又称为图的同构问题,基本思路是将图中节点的特征聚合起来作为图的特征,再进行分类。