当前位置: 首页 > 编程日记 > 正文

图神经网络综述:方法及应用 | Deep Reading

640?wx_fmt=jpeg


整理 | 耿玉霞,浙江大学直博生。研究方向:知识图谱,零样本学习,自然语言处理等。

来源 | 开放知识图谱(公众号id:OpenKG-CN)

责编 | Jane


近日,清华刘知远老师组在 arXiv 上发表了一篇关于图神经网络的综述,本次论文浅尝在分享这篇论文的基础上,对图神经网络的相关方法及应用作一次梳理。


640?wx_fmt=png


一、前言


图神经网络(GraphNeural Networks, GNNs),主要针对非欧几里得空间结构(图结构)的数据进行处理。具有以下特点:


  • 忽略节点的输入顺序;

  • 在计算过程中,节点的表示受其周围邻居节点的影响,而图本身连接不变;

  • 图结构的表示,使得可以进行基于图的推理。


640?wx_fmt=png


二、图神经网络模型


通常,图神经网络由两个模块组成:传播模块(PropagationModule)和输出模块(Output Module),具体地:


(1)Propagation Module:图中节点之间传递信息并更新状态;


  • aggregator: 对于一个节点v, 通过聚合其周围节点的信息,学习其潜在表示h_v (state embedding)。



640?wx_fmt=png


其中,x_v为节点v的features,x_co[v]为其周围边的features,h_ne[v]表示节点v周围邻居节点的state embedding,x_ne[v]表示周围节点的features。


  • updater: 更新节点的stateembedding。


640?wx_fmt=png


(2)Output Module:基于节点和边的向量表示根据不同的任务定义目标函数


640?wx_fmt=png


在监督学习场景中,对于一个特定的节点,其监督信号表示为:t_v,lossfunction定义为:


640?wx_fmt=png 


常见的图神经网络有:图卷积神经网络(GraphConvolutional Networks, GCNs),门控图神经网络(Gated Graph Neural Networks,GGNNs)以及基于Attention机制的GraphAttention Networks(GAT),下面详细介绍这三种网络:

640?wx_fmt=png

 

1、图卷积神经网络(GCN)


(1)基于谱方法(Spectral Methods):

相关论文:<ICLR-17> Kipf T N, Welling M.Semi-supervised classification with graph convolutional networks.


640?wx_fmt=png


通过计算图拉普拉斯算子(Graph Laplacian)的特征分解,在Fourier域定义卷积计算。对于输入信号x和卷积核?_?=????(?):


640?wx_fmt=png


其中,表示图结构的Graph Laplacian矩阵可分解为:


640?wx_fmt=png


上式的计算将卷积核近似为切比雪夫多项式,并进行化简:


640?wx_fmt=png

640?wx_fmt=png


最终得到GCN网络中的表示:


  • aggregator:

640?wx_fmt=png

  • updater:

640?wx_fmt=png


但是以上方法有几点不足,卷积核的学习依赖图拉普拉斯矩阵的特征分解,对于图结构有一定的要求,在固定结构上学习的模型,无法迁移到其他结构的模型上。

 

(2)基于非谱方法(Non-spectral Methods):


在图上直接定义卷积计算,将不同size的邻居节点考虑在内,同时保持像CNN一样的局部卷积不变性。


  • DCNNs:基于扩散卷积的思想的网络;

  • GraphSAGE:采样固定size的邻居节点,同时通过mean,LSTM, pooling等方式聚合周围节点的信息。


640?wx_fmt=png


2、门控图神经网络(GGNN)


相关论文:<ICLR-16> Li Y, Tarlow D, Brockschmidt M,et al. Gated graph sequence neural networks.


  • 提高图结构信息的long-term传播能力

  • 将图中的edge信息考虑在内


将图矩阵作如下表示,不同类型的边采用不同类型的传播矩阵,同时,用 A^(out)和 A^(in) 分别表示节点的入度信息和出度信息。


640?wx_fmt=png     

计算图传播信息:


(1)Propagation module

  • initialization step

    640?wx_fmt=png


  • pass information:矩阵A中包含了当前节点与其他节点的交互信息




    640?wx_fmt=png


节点的state embedding h_{v^(t-1)},与其他节点的交互信息a_{v^(t)}通过GRU单元进行融合:


  • update gate

    640?wx_fmt=png


  • reset gate

    640?wx_fmt=png


  • activate


640?wx_fmt=png

640?wx_fmt=png


(2)Output module


  • node-level

    640?wx_fmt=png


  • graph-level

    640?wx_fmt=png


            其中,i,j表示两个全连接神经网络。

 

3、注意力图神经网络(GAT)


相关论文:<ICLR-18> Velickovic, Petar, et al. Graphattention networks.


  • 为节点的不同的邻居节点指定不同权重

  • 节点-邻居节点对的计算可并行化,相比于GCN等网络,速度较快


    640?wx_fmt=png


节点权重的计算:


640?wx_fmt=png

       

节点信息的更新:

640?wx_fmt=png


由“Attentionis all you need”一文中提出的 head attention,GAT 网络中也使用了 headattention:


640?wx_fmt=png

640?wx_fmt=png

 

三、图神经网络应用


640?wx_fmt=png


1、Structural Scenarios


主要应用于其数据结构为图结构的场景,如蛋白质分子结构图、KnowledgeGraph 等。以 KnowledgeGraph 中应用 GNN 为例:

 

相关论文:<IJCAI-17> Hamaguchi T, et al. Knowledgetransfer for out-of-knowledge-base entities: a graph neural network approach.


论文主要针对 KG 中的 out-of-knowledge-base(OOKB) 实体,进行知识库补全等任务。


a、OOKB实体定义:


在训练过程中未被训练到的实体,无法得到其 embedding 表示,从而无法预测其与知识库中其他实体之间的关系。如下图中在测试期间新出现的实体“Blade-Runner”,或者说新出现的三元组“(Blade-Runner,based-on, Do-Androids-Dream-of-Electric-Sheep?)”(图中红线所示部分)。


640?wx_fmt=png


我们的任务则定义为:基于知识库中已存在的三元组(2)和当前新出现的三元组(1),预测当前新实体与知识库中其他实体之间的关系(即三元组3)。


同时,OOKB 实体即哪些与知识库中已存在的实体直接相连的实体,基于此,可以通过知识库中现有的实体表示得到 OOKB 实体表示。

 

b、这篇文章利用 GNN 中节点表示的方式,对 OOKB 实体进行表示:


640?wx_fmt=png


其中,T_head 表示以 OOKB 实体为尾实体的三元组集合,T_tail 表示以 OOKB 实体为头实体的三元组集合,通过其周围邻居的头尾实体对当前实体进行表示。


T_head, T_tail 分别表示聚合三元组信息的函数,论文中为 batchnormalization function。


经 GNN 传播的节点状态表示为:


640?wx_fmt=png


c、模型的输出模块利用 TransE 等经典模型,进行知识库补全任务。


640?wx_fmt=png


2、Non-structural Scenarios


主要应用于其数据结构为非图结构的场景,如图片、文本等。在此类场景中,应用GNN通常有两种方式:


  • 利用具有图结构信息的外部资源,如 KnowledgeGraph 等;

  • 探索此类数据中隐含的图结构,如文本的句法数结构。

 

(1)图片相关任务:

  • Image Classification, i.e., zero-shot, few-shot

  • Visual Reasoning, i.e., VQA

  • Semantic Segmentation


其中,图片分类任务零样本学习和少样本学习的相关论文有:


  • Zero-shot recognition via semantic embeddings and knowledge graphs

  • Rethinking knowledge graph propagation for zero-shot learning

  • Multi-label zero-shot learning with structured knowledge graphs

  • The more you know: Using knowledge graphs forimage classification

  • Few-shot learning with graph neural networks


(2)NLP相关任务:


  • Text Classification

  • Sequence Labeling

  • Neural machine translation

  • Relation Extraction

  • Event Extraction

 

以机器翻译的一篇论文为例,通过将 sourcelanguage 的句法结构图输 GNN 进行 encode,继而附加 Attention layer 和 decoder 层,输出 target language 序列。

 

相关论文:<ACL-18> Beck D, Haffari G, Cohn T.Graph-to-sequence learning using gated graph neural networks.

           

这篇文章以“Graph tosequence”为要点,实验部分包括两个任务,其中一个是 AMR 图输出序列,另一个做 syntax-aware 的机器翻译任务。


其中,AMR Graph 为从句子的句法表示中抽象出来的语义表示语言,具体相似语义的句子有相同的 AMR Graph。如下图左所示。


640?wx_fmt=png


模型在 Seq2seq 模型的基础上,以 AMR graph 为输入,通过 GGNN 网络进行 encode,经过 Attention 层和 RNNdecoder 输出序列。GGNN encoder 部分表示为:

640?wx_fmt=png


其中,640?wx_fmt=png 表示当前节点与周围节点相连边的参数,l_e 表示不同边的类型。


但随着 Graph 中边类型的增多,很容易引起参数爆炸的问题,因此,本文提出了一种融合 Graph 中 edge 信息的方式,即将 edge 转化为附加的节点(no labelled edges)。具体地,通过将 Graph 转化为对应的二分图。上图中的句法结构图对应的二分图如下所示:


640?wx_fmt=png


由此,graph 中的边的类型只有一种。

 

四、Open problems


图神经网络目前虽被广泛利用,但存在不少问题亟待解决:


(1)Shallowstructure:多层的图神经网络,可能会导致 over-smoothing的问题,如 GCN 等网络,一些论文中也尝试用 Skip connection 的方式加以解决;

(2)Dynamicgraphs:GNN 目前仅能处理一些静态图,对于实时增加/减少的节点和边则无法很好地处理;

(3)Non-structuralscenarios:在处理非图结构的数据时,希望利用其中内在的结构,而目前从 raw data 中生成 graph 的方法仍需改善;

(4)Scalability

 

五、总结


本文中总结了近年来常用的几种图神经网络模型,并就其应用场景进行了进一步的探讨。总的来说,图神经网络强大的计算能力,对图结构数据的友好处理,深受研究者们的喜爱,但其仍存在很多需要解决的问题,也是我们可以进一步研究的方向。


最后,送上这份值得大家收藏的论文地址

论文链接:

https://arxiv.org/pdf/1812.08434.pdf

GNN相关论文列表链接:

https://github.com/thunlp/GNNPapers

原文链接:

https://mp.weixin.qq.com/s/043sK8IDmdTYDpbCfPLIxw 


(本文为AI科技大本营转载文章,转载请联系作者,禁止二次转载)



推荐荐阅读:

  • 3.15曝光:40亿AI骚扰电话和11家合谋者

  • 微软亚研院提出用于语义分割的结构化知识蒸馏 | CVPR 2019

  • Google又逆天:语音输入离线实时输出文字,仅占80MB!然而……

  • 西工大开源拥挤人群数据集生成工具,大幅提升算法精度 | CVPR 2019

  • R和Python谁更好?这此让你「鱼与熊掌」兼得

  • 10行Python,搭建一个游戏AI | 视频教程

  • 云计算时代运维的出路在哪?

  • 30岁的万维网活不长了! 蒂姆·伯纳斯·李要借去中心化亲手杀死它, 你再也不用担心...

  • 互联网裁员潮亲历者:那些阵痛、挣扎与去向

640?wx_fmt=png

❤点击“阅读原文”,查看历史精彩文章。

相关文章:

【linux】top命令详解

1、参数详解 $ top -helpprocps-ng version 3.3.9 Usage:top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]-b&#xff1a;打印所有程序 -c&#xff1a;以命令行的形式显示程序名 -d&#xff1a;设置刷新间隔时间 -h&#xff1a;显示帮助 -H&#xf…

关于近期的总结

北京的黄金三月&#xff0c;应去年的计划&#xff0c;年初换工作&#xff0c;这是回来之后找工作的第四个周&#xff0c;目前收到offer一份&#xff0c;在昨天之前我还深深的觉得自己真的是失败&#xff0c;菜的不行&#xff0c;去年一年的努力都努力到哪里去了&#xff0c;越想…

让QQ按时上下班

朋友在临近的一所幼儿园当头儿&#xff0c;说最近发现有小老师在上班期间用QQ聊天&#xff0c;影响孩子的看护&#xff0c;问我有没有办法限制她们在上班期间聊天&#xff0c;顺便看看他们上班期间都在干什么&#xff0c;我说试试吧&#xff0c;估计得花钱。 说干就干&#xff…

算法面试经常需要你手写的三个排序算法(Python语言)

作者 | 程序员小吴来源 | 五分钟学算法&#xff08;ID: CXYxiaowu&#xff09;1. 归并排序1.1 算法步骤申请空间&#xff0c;使其大小为两个已经排序序列之和&#xff0c;该空间用来存放合并后的序列&#xff1b;设定两个指针&#xff0c;最初位置分别为两个已经排序序列的起始…

【linux】Valgrind工具集详解(十三):DRD(线程错误检测器)

一、概述 多线程编程需要注意的问题: 数据竞争;锁竞争;POSIX线程API使用不当;死锁; 二、使用 1、例子main.c源码 #include <stdio.h> #include <pthread.h> #include <sys/types.h> #include <unistd.h>

前段技术学习网站

1. 七天学会nodejs http://nqdeng.github.io/7-days-nodejs/ 2. Web 常用UI库 kissy https://www.oschina.net/p/kissy 3. 通用 WEB 框架 Webx https://www.oschina.net/p/webx 转载于:https://www.cnblogs.com/mengjianzhou/p/8610793.html

性能测试分析之带宽瓶颈的疑惑

第一部分&#xff0c; 测试执行 先看一图&#xff0c;再看下文 这个当然就是压力过程中带宽的使用率了&#xff0c;我们的带宽是1Gbps的&#xff0c;合计传输速率为128MB/s&#xff0c;也正因为这个就让我越来越疑惑了&#xff0c;不过通过压力过程中的各项数据我又不得不相信。…

心中无码,自然高清 | 联合去马赛克与超分辨率研究论文Pytorch复现

作者 | 知凡&#xff0c;个人公众号&#xff1a;林木蔚然读书会&#xff08;ID:EspressoOcean&#xff09;&#xff0c;知乎ID&#xff1a;Uno Whoiam本文授权转载自知乎本文结构简单扫盲什么是去马赛克什么是超分辨率《Deep Residual Network for Joint Demosaicing and Super…

【linux】Valgrind工具集详解(十四):Cachegrind(缓存和分支预测分析器)

一、概述 Cachegrind,它模拟CPU中的一级缓存I1,Dl和二级缓存,能够精确地指出程序中cache的丢失和命中。如果需要,它还能够为我们提供cache丢失次数,内存引用次数,以及每行代码,每个函数,每个模块,整个程序产生的指令数。这对优化程序有很大的帮助。 Cachegrind模拟程…

使用mvc框架搭建跟人站点

1、使用工具 vs 、iis 2、新建一个ASP.net mvc 项目。并写好必要的代码 3、解决方案管理器&#xff0c;项目右键、发布 4、 创建配置文件 弹出网站发布设置面板&#xff0c;点击自定义,创建新的发布配置文件&#xff1a; 输入你自己定义的配置文件名&#xff08;这里随便输入&…

GitHub上7000+ Star的Python常用代码合集

作者 | 二胖并不胖来源 | 大数据前沿&#xff08;ID:bigdataqianyan&#xff09;今天二胖给大家介绍一个由一个国外小哥用好几年时间维护的Python代码合集。简单来说就是&#xff0c;这个程序员小哥在几年前开始保存自己写过的Python代码&#xff0c;同时把一些自己比较常用的代…

MIS通用管理组件_通用管理组件V2.1.0发布

MIS通用管理组件是一个基于.NET4.0的MIS微型框架&#xff0c;实现单点登录&#xff0c;MIS类管理系统集群化管理配置&#xff0c;操作权限细化&#xff0c;数据集权限逐级授权&#xff1b;提供C/S代码生成器&#xff0c;丰富的类库&#xff1b;提供全部相关的源代码&#xff0c…

python 十大经典排序算法

排序算法可以分为内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据很大&#xff0c;一次不能容纳全部的排序记录&#xff0c;在排序过程中需要访问外存。常见的内部排序算法有&#xff1a;插入排序、希尔排序、选择排序…

【linux】Valgrind工具集详解(十五):Callgrind(性能分析图)

一、概述 1、Callgrind Callgrind用于记录程序中函数之间的调用历史信息,对程序性能分析。默认情况下,收集的数据包括执行的指令数,它们与源码行的关系,函数之间的调用者、被调用者关系以及此类调用的数量。可选项是,对高速缓存模拟和分支预测(类似于Cachegrind)。 2…

WCF服务重构实录(上)

项目需求 之前的项目中采用了WCF&#xff0c;绑定模式选择的是netTcpBinding&#xff0c;宿主选择了控制台方式&#xff0c;主要考虑两方面优点&#xff1a; 方便管理宿主的生命周期提升服务性能但是在实际的开发过程中产生了许多问题&#xff0c;比如&#xff1a; 调试项目时必…

【Qt】QTest:编译Qt单元测试程序

一、使用方法 1、测试程序源码 TestQString.pro QT += testlib QT -= gui TARGET = tst_TestQStringTest CONFIG += console CONFIG -= app_bundle TEMPLATE = app SOURCES += tst_TestQStringTest.cpp DEFINES += SRCDIR=\\\"$$PWD/\\\"tst_Test…

1/10个iPhone Xs = 英伟达最便宜AI计算机,这是唯一的“核弹”?

整理 | 一一、阿司匹林出品 | AI科技大本营&#xff08;ID:rgznai 100&#xff09;北京时间 3 月 19 日 8 点左右&#xff0c;在美国加州圣何塞的圣何塞大学活动中心&#xff0c;第十届 GTC 大会的主会结束。与往年相比&#xff0c;尽管 99 美元的 AI 计算机备受关注&#xff0…

Python链接MySQL

本文介绍Python3连接MySQL的第三方库--PyMySQL的基本使用。 PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库&#xff0c;Python2中则使用mysqldb。 Django中也可以使用PyMySQL连接MySQL数据库。 PyMySQL安装 使用pycharm安装PyMySQL 点击File-->右…

利用sendEmail-v1.55转发邮件

设置&#xff1a; /sendEmail-v1.55/sendEmail -f testtest.com -t 532126277qq.com -s s.test.com -xu testtest.com -xp 123456789 -a 文件的路径 -u 主题 -m 内容转载于:https://blog.51cto.com/holy2010/537968

【Git】git系统学习(一):常用指令

1、配置工具 $ git config --global user.name "[name]"设置用户名 $ git config --global user.email "[email address]"设置邮箱 $ git config --global color.ui auto自动配置命令行的输出颜色 $ git config --global color.ui true全部打开颜色配置…

腾讯裁撤中层干部,拥抱年轻人

据 36Kr 最新报道&#xff0c;数名消息人士证实&#xff0c;2018 年 12 月内部员工大会后&#xff0c;腾讯开始裁撤一批中层干部。整个腾讯大概有两百多名中干&#xff0c;此轮调整比例约为10%&#xff0c;有战略发展部的腾讯员工认为&#xff0c;实际甚至超过了这个比例。截止…

cmder里ls、pwd、自定义的alias等一系列命令都无法使用

win10下cmder很多命令history pwd无法使用&#xff0c;ls字体也没有颜色显示&#xff0c;其根本原因是win10下cmd控制台版本问题&#xff0c;切换回老版本就OK了 转载于:https://www.cnblogs.com/hdk1993/p/8620799.html

文件操作01 - 零基础入门学习C语言60

第十一章&#xff1a;文件操作01 让编程改变世界 Change the world by program C文件概述 所谓“文件”是指一组相关数据的有序集合。这个数据集有一个名称&#xff0c;叫做文件名。实际上在前面的各章中我们已经多次使用了文件&#xff0c;例如源程序文件、目标文件、可执…

iPad mini时隔四年更新,搭载A12芯片,起售价2999

整理 | 非主流出品 | AI科技大本营&#xff08;公众号id&#xff1a;rgznai100&#xff09;距离苹果的春季发布还有一周&#xff0c;但就在昨天&#xff0c;苹果毫无征兆地给广大果粉来了一场预热。3 月 18 日下午&#xff0c;苹果官网进行更新&#xff0c;悄悄地推出了两款新品…

【Qt】通过QtCreator源码学习Qt(一):pro文件

1、学习目的 学习pro文件的语法规则,这在跨平台项目中会经常用到。和条件编译相似,在pro中可以根据平台选择不同的编译模块、文件,还可以向源码中传递变量等。 2、学习方法 通过学习QtCreator源码中的pro文件,来掌握pro文件语法规则,下面以qtcreator.pro文件为例,先看…

TCP和UDP相关记录

有关于计算机网络的知识&#xff0c;准确来说我也忘得差不多了&#xff0c;现在要开始找实习了。努力从新学一下&#xff0c;记录在这里以防丢失。 --------------------------------------------------------- 首先对于网络层次有很多种分法。大致有7层结构、5层结构、4层结构…

win2003服务器iis6.0环境下php5.3.2安装配置

IIS6PHP5.3.2配置&#xff1a; 在windows下使用ApachePHP的&#xff0c;请选择VC6版本&#xff1b; windows下使用IISPHP的&#xff0c;请选择VC9版本 首先要知道的是&#xff0c;那个服务器平台对应PHP那个版本&#xff1a; 1、在windows下使用ApachePHP的&#xff0c;请选择…

李飞飞宣布成立斯坦福“以人为本AI研究院”

本位首发于公众号极客公园&#xff08;ID&#xff1a;GeekPark&#xff09;作者 | 沈知涵、biu编辑 | 宋德胜AI 不是要取代我们&#xff0c;而是让我们做得更好。这一次&#xff0c;台上的李飞飞不是 Google Cloud 的首席科学家&#xff0c;也不是斯坦福人工实验室&#xff08;…

【Qt】菜单栏、工具栏、状态栏、右键菜单的实现

在QMainWidget基础上实现菜单栏、工具栏、状态栏、右键菜单。 头文件: #ifndef GWDEMO_H #define GWDEMO_H#include <QMainWindow> #include <QMenu> #include

云计算公司Zuora提交IPO申请 预计募资1亿美元

2019独角兽企业重金招聘Python工程师标准>>> 总部位于硅谷的云计算公司 Zuora 周五向美国证券交易委员会&#xff08;SEC&#xff09;提交招股说明书&#xff0c;计划通过首次公开募股&#xff08;IPO&#xff09;募集 1 亿美元资金。 Zuora 已发布针对云计算提供商…