原文地址:https://zhuanlan.zhihu.com/p/27216346node
本文要介绍的这一篇paper是ICML2016上一篇关于 CNN 在图(graph)上的应用。ICML 是机器学习方面的顶级会议,这篇文章--<< Learning CNNs for Graphs>>--所研究的内容也具备很是好的理论和实用的价值。若是您对于图的数据结构并非很熟悉建议您先参考本文末的相关基础知识的介绍。算法
CNN已经在计算机视觉(CV)以及天然语言处理等领域取得了state-of-art 的水平,其中的数据能够被称做是一种Euclidean Data,CNN正好可以高效的处理这种数据结构,探索出其中所存在的特征表示。网络
&amp;lt;img src="https://pic2.zhimg.com/v2-3a226517f52a83f3edbeb019c8ad0109_b.png" data-rawwidth="410" data-rawheight="256" class="content_image" width="410"&amp;gt;图1 欧氏(欧几里德)数据(Euclidean Data)举例数据结构
所谓的欧氏(欧几里德)数据指的是相似于grids, sequences… 这样的数据,例如图像就能够看做是2D的grid数据,语音信号就能够看做是1D的grid数据。可是现实的处理问题当中还存在大量的 Non-Euclidean Data,如社交多媒体网络(Social Network)数据,化学成分(Chemical Compound)结构数据,生物基因蛋白(Protein)数据以及知识图谱(Knowledge Graphs)数据等等,这类的数据属于图结构的数据(Graph-structured Data)。CNN等神经网络结构则并不能有效的处理这样的数据。所以,这篇paper要解决的问题就是如何使用CNN高效的处理图结构的数据。机器学习
&amp;lt;img src="https://pic3.zhimg.com/v2-122afdad899925fcd6d19015d5824ace_b.png" data-rawwidth="567" data-rawheight="221" class="origin_image zh-lightbox-thumb" width="567" data-original="https://pic3.zhimg.com/v2-122afdad899925fcd6d19015d5824ace_r.jpg"&amp;gt;图2 Graph 数据举例ide
本文所提出算法思想很简单,将一个图结构的数据转化为CNN可以高效处理的结构。处理的过程主要分为两个步骤:1.从图结构当中选出具备表明性的nodes序列;2.对于选出的每个node求出一个卷积的邻域(neighborhood field)。接下来咱们详细的介绍算法相关的细节。学习
本paper将图像(image)看做是一种特殊的图(graph),即一种的grid graph,每个像素就是graph当中的一个node。那么我猜测文章的motivation主要来自于想将CNN在图像上的应用generalize 到通常的graph上面。idea
那么咱们首先来看一下CNN在Image当中的应用。如图3所示,左图表示的是一张图像在一个神经网络层当中的卷机操做过程。最底部的那一层是输入的特征图(或原图),经过一个卷积(这里表示的是一个3*3的卷积核,也就是文章当中的receptive filed=9)操做,输出一张卷积后的特征图。如图3 的卷积操做,底层的9个像素被加权映射到上层的一个像素;再看图3中的右图,表示从graph的角度来看左图底层的输入数据。其中任意一个带卷积的区域均可以看做是一个中心点的node以及它的领域的nodes集合,最终加权映射为一个值。所以,底部的输入特征图能够看做是:在一个方形的grid 图当中肯定一些列的nodes来表示这个图像而且构建一个正则化的邻域图(而这个邻域图就是卷积核的区域,也就是感知野)。spa
&amp;lt;img src="https://pic4.zhimg.com/v2-c309bc72bcbe1d3fcf3e77b62481c367_b.png" data-rawwidth="475" data-rawheight="236" class="origin_image zh-lightbox-thumb" width="475" data-original="https://pic4.zhimg.com/v2-c309bc72bcbe1d3fcf3e77b62481c367_r.jpg"&amp;gt;图3 图像的卷积操做3d
按照这样的方式来解释,那么如paper中Figure1所示,一张4*4大小的图像,实际上能够表示为一个具备4个nodes(图中的1,2,3,4)的图(graph),其中每个node还包括一个和卷积核同样大小的邻域(neighborhood filed)。那么,由此获得对于这种图像(image)的卷积实际上就是对于这4个node组成的图(graph)的领域的卷积。那么,对于一个通常性的graph数据,一样的只须要选出其中的nodes,而且求解获得其相关的固定大小(和卷积核同样大小)领域即可以使用CNN卷积获得图的特征表示。
&amp;lt;img src="https://pic2.zhimg.com/v2-3e36b0fa70e01c72a0dc98ad613a3dd5_b.png" data-rawwidth="484" data-rawheight="277" class="origin_image zh-lightbox-thumb" width="484" data-original="https://pic2.zhimg.com/v2-3e36b0fa70e01c72a0dc98ad613a3dd5_r.jpg"&amp;gt;图4 paper中的Figure1.
须要注意的是,图4(b)当中表示的是(a)当中的一个node的邻域,这个感知野按照空间位置从左到右,从上到下的顺序映射为一个和卷积核同样大小的vector,而后再进行卷积。可是在通常的图集当中,不存在图像当中空间位置信息。这也是处理图数据过程中要解决的一个问题。
基于以上的描述paper当中主要作了三个事情:1. 选出合适的nodes;2. 为每个node创建一个邻域;3. 创建graph表示到 vector表示的单一映射,保证具备类似的结构特征的node能够被映射到vector当中相近的位置。算法具体分为4个步骤:
1. 图当中顶点的选择Node Sequence Selection
首先对于输入的一个Graph,须要肯定一个宽度w(定义于Algorithm 1),它表示也就是要选择的nodes的个数。其实也就是感知野的个数(其实这里也就是代表,每次卷积一个node的感知野,卷积的stride= kernel size的)。那么具体如何进行nodes的选择勒?
实际上,paper当中说根据graph当中的node的排序label进行选择,可是本文并无对如何排序有更多的介绍。主要采起的方法是:centrality,也就是中心化的方法,我的的理解为越处于中心位置的点越重要。这里的中心位置不是空间上的概念,应该是度量一个点的关系中的重要性的概念,简单的举例说明。如图5当中的两个图实际上表示的是同一个图,对其中红色标明的两个不一样的nodes咱们来比较他们的中心位置关系。比较的过程中,咱们计算该node和其他全部nodes的距离关系。咱们假设相邻的两个node之间的距离都是1。
&amp;lt;img src="https://pic4.zhimg.com/v2-a6139481fa6581d2b6eca899bc24baa3_b.png" data-rawwidth="817" data-rawheight="163" class="origin_image zh-lightbox-thumb" width="817" data-original="https://pic4.zhimg.com/v2-a6139481fa6581d2b6eca899bc24baa3_r.jpg"&amp;gt;图5 图当中的两个nodes
那么对于图5当中的左图的红色node,和它直接相连的node有4个,所以距离+4;再稍微远一点的也就是和它相邻点相邻的有3个,距离+6;依次再相邻的有3个+9;最后还剩下一个最远的+4;所以咱们知道该node的总的距离为23。同理咱们获得右边的node的距离为3+8+6+8=25。那么很明显node的选择的时候左边的node会被先选出来。
固然,这只是一种node的排序和选择的方法,其存在的问题也是很是明显的。Paper并无在此次的工做当中作详细的说明。
2. 找到Node的领域Neighborhood Assembly
接下来对选出来的每个node肯定一个感知野receptive filed以便进行卷积操做。可是,在这以前,首先找到每个node的邻域区域(neighborhood filed),而后再从当中肯定感知野当中的nodes。假设感知野的大小为k,那么对于每个Node很明显都会存在两种状况:邻域nodes不够k个,或者是邻域点多了。这个将在下面的章节进行讲解。
&amp;lt;img src="https://pic3.zhimg.com/v2-84669297de00e2b5e77170997f71e0d6_b.png" data-rawwidth="632" data-rawheight="303" class="origin_image zh-lightbox-thumb" width="632" data-original="https://pic3.zhimg.com/v2-84669297de00e2b5e77170997f71e0d6_r.jpg"&amp;gt;图6 Neighborhood Assemble结果
如图选出的是6个nodes,对于每个node,首先找到其直接相邻的nodes(被称做是1-neighborhood),若是还不够再增长间接相邻的nodes。那么对于1-neighborhood就已经足够的状况,先所有放在候选的区域当中,在下一步当中经过规范化来作最终的选择。
3. 图规范化过程Graph Normalization
假设上一步Neighborhood Assemble过程中一个node获得一个领域nodes总共有N个。那么N的个数可能和k不相等的。所以,normalize的过程就是要对他们打上排序标签进行选择,而且按照该顺序映射到向量当中。
&amp;lt;img src="https://pic1.zhimg.com/v2-771287779ad086e6c23eb3351152f4cc_b.png" data-rawwidth="781" data-rawheight="120" class="origin_image zh-lightbox-thumb" width="781" data-original="https://pic1.zhimg.com/v2-771287779ad086e6c23eb3351152f4cc_r.jpg"&amp;gt;图7 求解node的receptive filed
若是这个node的邻域nodes的个数不足的话,直接所有选上,不够补上哑节点(dummy nodes),但仍是须要排序;若是数目N超过则须要按着排序截断后面的节点。如图7所示表示从选node到求解出receptive filed的整个过程。Normalize进行排序以后就可以映射到一个vector当中了。所以,这一步最重要的是对nodes进行排序。
&amp;lt;img src="https://pic1.zhimg.com/v2-6afbfd2936c380b4d7e3d0703065abb8_b.png" data-rawwidth="194" data-rawheight="269" class="content_image" width="194"&amp;gt;
图8 Normalize 过程
如图8所示,表示对任意一个node求解它的receptive filed的过程。这里的卷积核的大小为4,所以最终要选出来4个node,包括这个node自己。所以,须要给这些nodes打上标签(labeling)。固然存在不少的方式,那么怎样的打标签方式才是最好的呢?如图7所示,其实从这7个nodes当中选出4个nodes会造成一个含有4个nodes的graph的集合。做者认为:在某种标签下,随机从集合当中选择两个图,计算他们在vector空间的图的距离和在graph空间图的距离的差别的指望,若是这个指望越小那么就代表这个标签越好!具体的表示以下:
&amp;lt;img src="https://pic2.zhimg.com/v2-b0583558079a4d93167d2acb3a546535_b.png" data-rawwidth="634" data-rawheight="280" class="origin_image zh-lightbox-thumb" width="634" data-original="https://pic2.zhimg.com/v2-b0583558079a4d93167d2acb3a546535_r.jpg"&amp;gt;
获得最好的标签以后,就可以按着顺序将node映射到一个有序的vector当中,也就获得了这个node的receptive field,如图6最右边所示。
4. 卷积网络结构Convolutional Architecture
文章使用的是一个2层的卷积神经网络,将输入转化为一个向量vector以后即可以用来进行卷积操做了。具体的操做如图9所示。
&amp;lt;img src="https://pic4.zhimg.com/v2-b400a7ddc72bca42b6fcbb6ad7c70f8f_b.png" data-rawwidth="887" data-rawheight="320" class="origin_image zh-lightbox-thumb" width="887" data-original="https://pic4.zhimg.com/v2-b400a7ddc72bca42b6fcbb6ad7c70f8f_r.jpg"&amp;gt;
首先最底层的灰色块为网络的输入,每个块表示的是一个node的感知野(receptive field)区域,也是前面求解获得的4个nodes。其中an表示的是每个node的数据中的一个维度(node若是是彩色图像那就是3维;若是是文字,多是一个词向量……这里代表数据的维度为n)。粉色的表示卷积核,核的大小为4,可是宽度要和数据维度同样。所以,和每个node卷季后获得一个值。卷积的步长(stride)为4,代表每一次卷积1个node,stride=4下一次恰好跨到下一个node。(备注:paper 中Figure1 当中,(a)当中的stride=1,可是转化为(b)当中的结构后stride=9)。卷积核的个数为M,代表卷积后获得的特征图的通道数为M,所以最终获得的结果为V1……VM,也就是图的特征表示。有了它即可以进行分类或者是回归的任务了。
基础问题:
图的基本概念:主要有顶点和边构成,存在一个邻接矩阵A,若是对其中的nodes进行特征表示(Feat)的话以下右图。
&amp;lt;img src="https://pic4.zhimg.com/v2-634e92ce5d033a4a5ac7089b4d399267_b.png" data-rawwidth="873" data-rawheight="200" class="origin_image zh-lightbox-thumb" width="873" data-original="https://pic4.zhimg.com/v2-634e92ce5d033a4a5ac7089b4d399267_r.jpg"&amp;gt;