从Graph的视角看CNN,上图左右两个部分是等价的。左子图每一个网格的通道,对应右子图每一个节点的一个属性,左子图卷积核的参数至关于右子图边的权重。所谓3x3卷积就是右子图9个节点属性的加权平均(注意右子图中中间节点本身指向本身的边)。html
CNN目前主流的应用场景都是规则的空间结构数据,好比图像是2D grids,语音和文本是1D grids。node
在Graph上应用CNN,面临了较大的挑战:空间结构不规整,每一个节点的邻接节点数量不一样,如何将变长的空间结构转化为定长的空间结构。git
目前,将变长转化为定长的思路主要有两个:一个方法比较直接,也比较暴力,就是对节点之间的关系进行排序,强行按照预设好的参数取出排序最前面的几个节点做为邻接节点,从而将Graph的不定长结构转化为定长结构,典型表明Patchy-SAN;另外一个方法稍微优雅一些,也属于典型的不定长变定长的思路,本质是加权求和,典型表明是Kipf & Welling (ICLR 2017),目前GCN讨论的都是该做者提供的思路。github
上图讲解了PATCHY-SAN方法的整体流程。第一步是node sequence selection,输入数据是最底层的Graph,将Graph节点按照度进行排序,取出前w个节点。第二步是Neighborhood Assembly,即对于选出来的每一个节点逐个构建邻域,方法很简单就是BFS,先搜索直接相邻的一级邻域,再搜索下一级邻域,直到找到超过k个邻居位置。第三步是Neighborhood Normalization,由于BFS搜索出来的邻域有可能超过k个,也有可能不足k个,须要normalize为k个,具体方法是以选出来的每一个节点为root,从邻域中找出前k个与root最接近的节点。网络
上图讲解了neighborhood normalization后怎么转化为标准的CNN问题进行求解。对于每一个节点,normalized neighborhoods能够理解为CNN中receptive fields,节点和边的属性attributes能够理解为CNN中的channel。扁平状的长方体表示节点attribute,正方体表示边的attribute(能够理解为边是经过邻接矩阵k*k的方式表示)iphone
对于选出的每一个节点,normalize后的数据维度是[wk, n],使用M个一维的receptive fields为k,stride为k的卷积核,对n个通道的节点属性进行卷积,就能够获得上图所示的效果,输出数据维度是[w, M]。一样的,对于每条边,normalize后的数据维度是[wk^2, n],使用M'个一维的receptive fields为k^2,stride为k^2的的卷积核,对m个通道的边属性进行卷积,输出数据维度是[w, M']。以后就可使用任意的神经网络结构对Graph进行建模了。ide
Neighborhood Normalization是这篇文章的关键,上图是做者对这个步骤的讲解,具体含义尚未搞明白。函数
问题定义:学习一个函数,输入数据是节点的属性和图的邻接矩阵,输出是一个NXF的特征矩阵,F是每一个节点的输出特征数。学习
For these models, the goal is then to learn a function of signals/features on a graph G=(V,E) which takes as input:spa
- A feature description xi for every node i; summarized in a N×D feature matrix X (N: number of nodes, D: number of input features)
- A representative description of the graph structure in matrix form; typically in the form of an adjacency matrix A (or some function thereof)
and produces a node-level output Z (an N×F feature matrix, where F is the number of output features per node). Graph-level outputs can be modeled by introducing some form of pooling operation
先看一个简单的函数定义:
先看括号内的式子,含义很简单,就是当前节点的输出等于邻接节点的加权平均。sigma函数是作一次非线性变换,以加强模型的能力,文章用ReLU。
上面这个式子有两个局限性,一是A只考虑了邻接节点,缺乏自身节点的信息,能够用A+I来替换A,以保持与传统卷积定义一致。二是加权平均没有归一化处理,能够用节点的出入度来归一化,咱们用度矩阵D表示。综上,做者作了如下调整,获得了图卷积操做:
看一下做者搭建的GCN结构。第一层,输出的每一个节点只包含了一级邻接节点的信息;第二层,输出的每一个节点包含了上一个隐层的一级邻接节点的信息,至关于输入层多级邻接节点的信息。层级越高,信息越宏观。
SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS