http://www.52ml.net/20031.html

【新智元导读】Graph Convolutional Network(GCN)是直接作用于图的卷积神经网络,GCN 允许对结构化数据进行端到端的学习,也即输入可以是任意大小和形状的图。本文介绍 GCN 最新进展,讨论各种方法的优势和缺陷。GCN 未来如何拓展用于解决特定类型的问题,例如学习指示图或关系图,以及怎样用学习的图嵌入更多任务,也值得期待。

现实世界里很多重要的数据集都以图表或网络的形式呈现,例如:社交网络、知识图谱、蛋白质相互作用网络、万维网,等等。然而直到最近,神经网络模型对这些结构化数据集的泛化仍然很少得到关注。

过去几年,很多研究重新思考了推广神经网络用于任意结构化图表的问题(Bruna et al., ICLR 2014; Henaff et al., 2015; Duvenaud et al., NIPS 2015; Li et al., ICLR 2016; Defferrard et al., NIPS 2016; Kipf & Welling, 2016),其中有些已经在某些领域取得了非常不错的结果,而这些领域过去使用基于核函数的方法、基于图的正则化技术或其他方法。

在这篇文章里,我将对这个领域的最新进展作一个简要概述,并指出各种方法的强处和不足。这些讨论主要关注最近的两篇论文:

  • Kipf & Welling (2016), Semi-Supervised Classification with Graph Convolutional Networks (免责声明: 我是这篇的第一作者)
  • Defferrard et al. (NIPS 2016), Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering

以及 Ferenc Huszar 的评论文章:How powerful are Graph Convolutions? 这篇文章讨论了这些类型的模型的一些限制。

图神经网络模型(Neural Network Models on Graphs)简要介绍

图卷积网络有多强大?

推广成熟的神经模型例如RNN或CNN用于任意结构图表是个有挑战性的问题。最近的一些论文,介绍了针对特定问题的架构(e.g. Duvenaud et al., NIPS 2015; Li et al., ICLR 2016; Jain et al., CVPR 2016),还有一些利用谱图理论(Bruna et al., ICLR 2014; Henaff et al., 2015)的图卷积来定义用于多层神经网络模型的参数化滤波器,类似我们熟悉的“经典”CNN。

最近的研究关注缩小快速的启发式算法和较慢、但更有规则性的谱分方法间的差距。Defferrard 等人(NIPS 2016)用神经网络模型学习的自由参数的Chebyshev多项式模拟了谱域的平滑滤波。他们在正则区域(像是MNIST)得到了有说服力的结果,很接近简单2D CNN模型的结果。

Kipf & Welling (2016)的研究采用了类似的方法,从图谱卷积框架开始,介绍了许多情况下能同时显著加快训练时间和提高预测准确度的最简化方法,在许多基准图集上得到了极好的分类结果。

图卷积神经网络(GCN)定义

目前,大多数图神经网络模型都有一个某种程度上通用的普遍框架。我把这些模型称作图卷积网络(Graph Convolutional Networks, GCNs);卷积,是因为滤波器参数通常在图的所有位置中共享(或在其子集,参见 Duvenaud et al. NIPS 2015)。

对这些模型来说,目标是学习图的信号/特征函数G =(V, E),它的输入如下:

  • 对每个节点 i 的特征描述为 xi;概括在特征矩阵 N×D(N:节点数,D:输入特征数)
  • 以矩阵形式对图结构的代表描述;通常以邻接矩阵 A(或其他函数)的形式

然后生成一个节点层的输出 Z(N×F 特征矩阵,F是每个节点输出特征的数量)。图层面的输出可以引入一些池化操作(参见:e.g. Duvenaud et al., NIPS 2015)。

每个神经网络层可以写成一个非线性函数:

H(0) = X 和 H(L) = Z (或在图层面的输出时,z),L表示层数。模型不同的只有怎样选择f(··,·)的参数设定。

图谱卷积和图卷积神经网络

举个例子,让我们看下面这个十分简单的分层优化传播规律:

W(l) 是神经网络 l 层的权矩阵,σ(⋅)是像ReLU这样的非线性激活函数。虽然这个模型非常简单,但它已经是非常强大的。

但让我们先了解这个简单模型的两点局限性:A的增殖意味着对每个节点,我们需要把所有相邻节点的所有特征矢量相加,但不能加上节点本身(除非图上有自回路)。我们可以强迫图执行自回路:在单位矩阵中加上A。

第二个主要的局限是A 通常不是标准化的,所以A的增殖会完全改变特征矢量是规模。标准化A能解决这个问题,例如将所有列归一,即D−1A,D是对角线节点次数矩阵。用D−1A相乘符合相邻节点特征的平均值。在实践中,使用对称标准化,即

这就不仅是相邻节点的平均值,动态性会显得更有趣。把这两个小技巧结合在一起,我们最终得到了 Kipf &Welling(2016) 论文中介绍的传播规律:

其中,I 是单位矩阵,是的对角线节点的度矩阵。

总结

这个课题的研究才刚刚起步。过去几个月里已经能看到令人兴奋的成果,但我们可能才刚刚触及这些类型的表面。图神经网络将怎样应用于解决特定类型的问题,例如,对指示图或关系图的学习,以及怎样用学习的图嵌入更多任务等等。这里列举的还不是全部,我期待在不久的将来有更多人对应用和扩展感兴趣。

Graph 卷积神经网络:概述、样例及最新进展的更多相关文章

  1. PHPCMS中GET标签概述、 get 标签语法、get 标签创建工具、get 调用本系统演示样例、get 调用其它系统演示样例

    一.get 标签概述 通俗来讲,get 标签是Phpcms定义的能直接调用数据库里面内容的简单化.友好化代码,她可调用本系统和外部数据,仅仅有你对SQL有一定的了解,她就是你的绝世好剑!也就是适合熟悉 ...

  2. Pytorch_第十篇_卷积神经网络(CNN)概述

    卷积神经网络(CNN)概述 Introduce 卷积神经网络(convolutional neural networks),简称CNN.卷积神经网络相比于人工神经网络而言更适合于图像识别.语音识别等任 ...

  3. 吴裕雄 python 神经网络——TensorFlow TFRecord样例程序

    import numpy as np import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_dat ...

  4. 2020JAVA最新应对各种OOM代码样例及解决办法

    引言 作者:黄青石 链接:https://www.cnblogs.com/huangqingshi/p/13336648.html?utm_source=tuicool&utm_medium= ...

  5. 基于 SoC 的卷积神经网络车牌识别系统设计(1)概述

    NOTES: 这是第三届全国大学生集成电路创新创业大赛 - Arm 杯 - 片上系统设计挑战赛(本人指导的一个比赛).主要划分为以下的 Top5 重点.难点.亮点.热点以及创新点:1.通过 Arm C ...

  6. tensorflow学习笔记——图像识别与卷积神经网络

    无论是之前学习的MNIST数据集还是Cifar数据集,相比真实环境下的图像识别问题,有两个最大的问题,一是现实生活中的图片分辨率要远高于32*32,而且图像的分辨率也不会是固定的.二是现实生活中的物体 ...

  7. Caffe(卷积神经网络框架)介绍

    Caffe(卷积神经网络框架)Caffe,全称Convolution Architecture For Feature Extraction caffe是一个清晰,可读性高,快速的深度学习框架.作者是 ...

  8. 深度学习之卷积神经网络(CNN)的应用-验证码的生成与识别

    验证码的生成与识别 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10755361.html 目录 1.验证码的制 ...

  9. TensorFlow最佳实践样例

    以下代码摘自<Tensor Flow:实战Google深度学习框架> 本套代码是在 http://www.cnblogs.com/shanlizi/p/9033330.html 基础上进行 ...

随机推荐

  1. Xcode 模拟器复制解决方案

    网址:http://blog.csdn.net/zhangao0086/article/details/38491271

  2. CentOS启动OpenVPN报错:Failed to start OpenVPN Robust And Highly Flexible Tunneling Application On server.

    tailf /var/log/openvpn.log 查看日志,里面有最详细的错误解说. 参考: https://forums.openvpn.net/viewtopic.php?t=21561

  3. 任务调度框架FluentScheduler简介

    之前我在文章中介绍过.net中的任务调度框架Hangfire,HangFire虽然本身输入比较简单好用的,但是,如果我们的程序本身提供的服务不是任务调度,而任务调度只是里面并不重要的小功能的时候,用H ...

  4. Linux下的sqlserver简单试用

    微软自2017年就推出了可以在linux上使用的sql-server,最近接触到了一个用sqlserver的项目,便尝试使用了一下. 下载 为了简化安装,我还是使用的docker的方式,镜像可以直接从 ...

  5. How to tell if a file is an EXE or a DLL?

    How to tell if a file is an EXE or a DLL? void DumpFile(LPWSTR filename) { HANDLE hFile = CreateFile ...

  6. linux 内核crash 命令

    https://www.dedoimedo.com/computers/crash-book.html#download

  7. STL中经常使用数据结构

    STL中经常使用的数据结构: [1]  stack.queue默认的底层实现为deque结构. [2]  deque:用map管理多个size大小的连续内存块,方便头尾插入. [3]  vector: ...

  8. Java知识回顾 (3)运算符

    位运算符 Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型. 位运算符作用在所有的位上,并且按位运算.假设a ...

  9. url提交参数类

    url提交参数类 type /// <summary> /// 准备url /// </summary> TynUrl = class private FUrl, FComma ...

  10. firedac调用ORACLE的存储过程

    firedac调用ORACLE的存储过程 EMB官方原文地址:http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Using_Oracle_with_F ...