版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013006675/article/details/81098466 </div>
<div id="content_views" class="markdown_views prism-atom-one-dark">
<!-- flowchart 箭头图标 勿删 -->
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg>
<p>之前承诺要写一个关于graph network的介绍,因为随着deep learning的发展达到一个很高的水平,reasoning(推理)能力的具备变得异常迫切。而knowledge graph则是实现reasoning的重要途径之一,如何从复杂的graph中学习到潜在的知识是一项非常challenging的任务,图作为knowledge的存储媒介,deep learning作为信息抽取的重要工具,二者的结合可谓是必然趋势。下面我将结合之前看过的一篇国外的博客,为大家入门graph neural network抛一块砖。</p>
在开始之前,多说几句,关于graph和deep learning结合的工作,想必大家都能猜到名字该怎么取,无非是这几个关键词的组合:Graph,Neural,Network,Convolution…所以,许多工作从paper名字来看并没有多大的区分性。
前言
现实世界许多数据都是以graph的形式存储的,比如social networks(社交网络), knowledge graphs(知识图谱), protein-interaction networks(蛋白质相互作用网络), the World Wide Web(万维网),最近有一些研究者把目光投向建立一种通用的神经网络模型来处理graph数据。在此之前,该领域的主流方法是一些基于kernel的方法或基于graph的正则化技术,不过从deep learning的角度来讲,这些已经属于“传统方法”了,不是我们要讨论的主题,不了解也没有关系。
GCNs:定义
由于大家的思想普遍是如何将CNN等神经网络的思想迁移到graph上,所以往往设计出来的结构都有一定的共性,使用类似convolution权重共享的思想,我们可以把这类网络暂且都称作Graph Convolutional Networks(GCNs)。这类网络从数学上来看,是想学习 G = ( V , E ) G = ( V , E ) G = ( V , E ) G=(V,E)G=(V,E) G=(V, E) G=(V,E)G=(V,E)G=(V,E)f(H(l),A)=σ[D−1/2(A+I)D−1/2H(l)W(l)]
这样,本质上我们就实现了Kipf & Welling (ICLR 2017)中设计的传播模型。
GCNs : 实例
本节我们利用上面介绍的模型实现一个分类问题。首先大家可以先看一下Zachary’s karate club network数据集以及它的背景,该数据集可以以下图的形式呈现,简单介绍的话就是说一个空手道俱乐部内部出现矛盾要被拆分为两波人,我们需要依据队员们平时的交往关系来判断他们会站哪一支队伍,图中每个节点表示一个队员,若两个节点之间存在边,则表示对应两个队员之间关系密切。下图使用clustering做个一个简单的划分,仅做参考,颜色相同的表示最后分在一组(这里作者貌似没有分为2类,而是4类)。
![](https://i-blog.csdnimg.cn/blog_migrate/ef88e5567c0e89cf74a74f3c01cc5187.png)
这里使用上述介绍的模型对每个node做embedding(这里网络设置为3层,使用了半监督,具体可以看原文Kipf & Welling ,不过大可以当做有监督来看),embedding后的效果就是同一组特征在空间上距离相近,下面的video展示了embedding的过程,效果还是相当明显的:
width="560" height="315" src="https://youtu.be/EuK4L61JmcQ" allowfullscreen="">显示不了的话可移步https://youtu.be/EuK4L61JmcQ观看
GCNs:启发式的解释
我们发现一个很有意思的现象,就是当我们还没有开始训练,仅仅是随机初始化上述模型的参数之后,也产生了一定的embedding效果,如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/23c7db10ec079d8636673b31fc729d98.png)
近期一个叫DeepWalk (Perozzi et al., KDD 2014)的工作表明他们可以使用无监督的方式产生一个相似的embedding效果,这听起来挺不可思议的,我们试图从Weisfeiler-Lehman算法的角度来解释,并把GCNs看做该算法的通用、可微版。
其实下面的部分可看可不看,因为我并没与觉得作者的解释有多少说服力,感兴趣的可以看一下原文。
之前做过一个PPT,也简单的介绍了一下三种graph neural network,需要的可以点击这里浏览一下。
由于水平所限,可能文中很多地方解释的不好,欢迎大家批评指正,相互进步,谢谢~
reference
http://tkipf.github.io/graph-convolutional-networks/
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-7b4cdcb592.css" rel="stylesheet">
</div>