本文共2700字,建议阅读5分钟
今天我们就来整体梳理一些经典常用的图网络模型:DeepWalk、GCN、Graphsage、GAT!

图神经网络已经在NLP、CV、搜索推荐广告等领域广泛应用。

1. DeepWalk [2014]

DeepWalk是来解决图里面节点embedding问题的。Graph Embedding技术将图中的节点以低维稠密向量的形式进行表达,要求在原始图中相似(不同的方法对相似的定义不同)的节点其在低维表达空间也接近。得到的表达向量可以用来进行下游任务,如节点分类(node classification),链接预测(link prediction)等。

1.1 DeepWalk 算法原理

虽然DeepWalk是KDD 2014的工作,但却是我们了解Graph Embedding无法绕过的一个方法。

我们都知道在NLP任务中,word2vec是一种常用的word embedding方法,word2vec通过语料库中的句子序列来描述词与词的共现关系,进而学习到词语的向量表示。

DeepWalk的思想类似word2vec,使用图中节点节点的共现关系来学习节点的向量表示。那么关键的问题就是如何来描述节点与节点的共现关系,DeepWalk给出的方法是使用**随机游走(RandomWalk)**的方式在图中进行节点采样。

RandomWalk是一种可重复访问visited节点的深度优先遍历算法。给定当前访问起始节点,从其邻居中随机采样节点作为下一个访问节点,重复此过程,直到访问序列长度 = K。获取足够数量的节点访问序列后,使用skip-gram进行向量学习,这样能够把握节点的共现信息。这样就得到了每个节点的embedding。

2. GCN [2016]

GCN的概念首次提出于ICLR 2017:SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS。

为什么要用GCN呢?这是因为对于图结构的数据,CNN、RNN都无法解决。

对于图片来说,我们用卷积核来提取特征,这是因为图片有平移不变性:一个小窗口无论移动到图片的哪一个位置,其内部的结构都是一模一样的,因此CNN可以实现参数共享。RNN主要用在NLP这种序列信息上。图片,或者语言,都属于欧式空间的数据,因此才有维度的概念,欧式空间的数据的特点就是结构很规则。

但是图结构(拓扑结构)如社交网络、知识图谱、分子结构等等是十分不规则的,可以认为是无限维的一种数据,所以它没有平移不变性。每一个节点的周围结构可能都是独一无二的,这种结构的数据,就让传统的CNN、RNN瞬间失效。

GCN,图卷积神经网络,实际上跟CNN的作用一样,就是一个特征提取器,只不过它的对象是图。GCN精妙地设计了一种从图数据中提取特征的方法,从而让我们可以使用这些特征去对图数据进行:

  • 节点分类(node classification)

  • 图分类(graph classification)

  • 链接预测(link prediction)

2.1 GCN的核心公式

假设我们手头有一个图,其中有N个节点,每个节点都有自己的特征embedding,我们设这些节点的特征组成一个N×D维的矩阵X ,然后各个节点之间的关系也会形成一个N×N维的矩阵A(就是邻接矩阵)。

GCN也是一个神经网络层,它的层与层之间的传播方式是:

这个公式中:

用这个公式就可以很好地提取图的特征。假设我们构造一个两层的GCN,激活函数分别采用ReLU和Softmax,则整体的正向传播的公式为:

其中,.

那么, 为什么这个公式能提取图的特征呢?

  • A+I 其实是保证对于每个节点,都能够关注到其所有邻居节点和自己的embedding。

  • 左右乘上度矩阵D是为了对A做一个标准化处理,让A的每一行加起来都是1。

当然,原论文中用非常复杂的数学公式做了很多证明,由于笔者数学不好,只能如此不求甚解的来粗略理解,感兴趣的同学可以自行阅读原论文。

3. GraphSAGE

3.1. GCN的局限

GCN本身有一个局限,即没法快速表示新节点。GCN需要把所有节点都参与训练(整个图都丢进去训练)才能得到node embedding,如果新node来了,没法得到新node的embedding。所以说,GCN是transductive的。(Transductive任务是指:训练阶段与测试阶段都基于同样的图结构)。

而GraphSAGE是inductive的。inductive任务是指:训练阶段与测试阶段需要处理的graph不同。通常是训练阶段只是在子图(subgraph)上进行,测试阶段需要处理未知的顶点。

要想得到新节点的表示,需要让新的node或者subgraph去和已经优化好的node embedding去“对齐”。然而每个节点的表示都是受到其他节点的影响(牵一发而动全身),因此添加一个节点,意味着许许多多与之相关的节点的表示都应该调整。

3.2 GraphSAGE

针对这种问题,GraphSAGE模型提出了一种算法框架,可以很方便地得到新node的表示。

3.2.1 Embedding generation(前向传播算法)

文中描述如下:

随着层数K的增加,可以聚合越来越远距离的信息。这是因为,虽然每次选择邻居的时候就是从周围的一阶邻居中均匀地采样固定个数个邻居,但是由于节点的邻居也聚合了其邻居的信息,这样,在下一次聚合时,该节点就会接收到其邻居的邻居的信息,也就是聚合到了二阶邻居的信息了。这就像社交图谱中“朋友的朋友”的概念。


3.2.2 聚合函数选择
  • Mean Pooling

这个比较好理解,就是当前节点v本身和它所有的邻居在k-1层的embedding的mean,然后经过MLP+sigmoid。

  • LSTM Aggregator:把当前节点v的邻居随机打乱,输入到LSTM中。作者的想法是说LSTM的模型capacity更强。但是节点周围的邻居明明是没有顺序的,这样做似乎有不妥。

  • Pooling Aggregator:

把节点v的所有邻居节点都单独经过一个MLP+sigmoid得到一个向量,最后把所有邻居的向量做一个element-wise的max-pooling。

3.2.3 GraphSAGE的参数学习

GraphSAGE的参数就是聚合函数的参数。为了学习这些参数,需要设计合适的损失函数。

对于无监督学习,设计的损失函数应该让临近的节点的拥有相似的表示,反之应该表示大不相同。所以损失函数是这样的:

其中,节点v是和节点u在一定长度的random walk上共现的节点,所以它们的点积要尽可能大;后面这项是采了Q个负样本,它们的点积要尽可能小。这个loss和skip-gram中的negative sampling如出一辙。

对于有监督学习,可以直接使用cross-entropy loss等常规损失函数。当然,上面的这个loss也可以作为一个辅助loss。

3.3 和GCN的关系

原始GCN的方法,其实和GraphSAGE的Mean Pooling聚合方法是类似的,即每一层都聚合自己和自己邻居的归一化embedding表示。而GraphSAGE使用了其他capacity更大的聚合函数而已。

此外,GCN是一口气把整个图都丢进去训练,但是来了一个新的节点就不免又要把整个图重新训一次。而GraphSAGE则是在增加了新的节点之后来增量更新旧的节点,调整整张图的embedding表示。只是生成新节点embedding的过程,实施起来相比于GCN更加灵活方便了。

4. GAT (Graph Attention Network)

4.1 GAT的具体做法

对于每个节点,注意力其在邻居顶点上的注意力。对于顶点 ,逐个计算它的邻居们和它自己之间的相似系数:

首先一个共享参数 的线性映射对于顶点的特征进行了增维,当然这是一种常见的特征增强(feature augment)方法;之后,对变换后的特征进行了拼接(concatenate);最后 a(·)把拼接后的高维特征映射到一个实数上,作者是通过单层的MLP来实现的。

然后,再对此相关系数用softmax做归一化:

最后,根据计算好的注意力系数,把特征加权求和一下。这也是一种aggregation,只是和GCN不同,这个aggregation是带注意力权重的。

就是输出的节点的embedding,融合了其邻居和自身带注意力的权重(这里的注意力是self-attention)。

为了增强特征提取能力,用multi-head attention来进化增强一下:

4.2 与GCN的联系

GCN与GAT都是将邻居顶点的特征聚合到中心顶点上(一种aggregate运算)。不同的是GCN利用了拉普拉斯矩阵,GAT利用attention系数。一定程度上而言,GAT会更强,因为 顶点特征之间的相关性被更好地融入到模型中。

GAT适用于有向图。这是因为GAT的运算方式是逐顶点的运算(node-wise),每一次运算都需要循环遍历图上的所有顶点来完成。逐顶点运算意味着,摆脱了拉普利矩阵的束缚,使得有向图问题迎刃而解。也正因如此,GAT适用于inductive任务。与此相反的是,GCN是一种全图的计算方式,一次计算就更新全图的节点特征。

编辑:于腾凯

校对:林亦霖

硬核!一文梳理经典图网络模型相关推荐

  1. 【GNN】硬核!一文梳理经典图网络模型

    作者 | Chilia 哥伦比亚大学 nlp搜索推荐 整理 | NewBeeNLP 图神经网络已经在NLP.CV.搜索推荐广告等领域广泛应用,今天我们就来整体梳理一些经典常用的图网络模型:DeepWa ...

  2. 7. 重磅硬核 | 一文聊透对象在JVM中的内存布局,以及内存对齐和压缩指针的原理及应用

    重磅硬核 | 一文聊透对象在JVM中的内存布局,以及内存对齐和压缩指针的原理及应用 大家好,我是bin,又到了每周我们见面的时刻了,我的公众号在1月10号那天发布了第一篇文章?<从内核角度看IO ...

  3. 依图芯片服务器,AI 芯片行业再添硬核新玩家:依图推出云端 AI 芯片 questcore™...

    原标题:AI 芯片行业再添硬核新玩家:依图推出云端 AI 芯片 questcore™ 5 月 9 日,依图科技在上海的 "极智·求索" 产品发布会上 "放大招" ...

  4. 超硬核 | 一文带你入门用户画像

    本文已收录github:https://github.com/BigDataScholar/TheKingOfBigData,里面有大数据高频考点,Java一线大厂面试题资源,上百本免费电子书籍,作者 ...

  5. Redis 多线程网络模型全面揭秘|网络硬核系列

    目录 导言 Redis 有多快? Redis 为什么快? Redis 为何选择单线程? 避免过多的上下文切换开销 避免同步机制的开销 简单可维护 Redis 真的是单线程? 单线程事件循环 多线程异步 ...

  6. 3 万字 51 张图教你 CPU、内存、操作系统硬核知识!

    作者|cxuan 来源 |Java建设者(ID:javajianshe) 我们每个程序员或许都有一个梦,那就是成为大牛,我们或许都沉浸在各种框架中,以为框架就是一切,以为应用层才是最重要的,你错了.在 ...

  7. 硬核,学习 Java 的一点小建议(思维导图,建议收藏)!

    CSDN 收到一条读者的私信,情真意切,所以我承诺他今天一定写篇文章好好回复他一下.先来看一下他的私信内容吧. 首先映入我的眼帘的是这个称呼--"老前辈",我一下子没忍住,笑了! ...

  8. 2021年图机器学习有哪些新突破?麦吉尔大学博士后一文梳理展望领域趋势

    ©作者 | 机器之心编辑部 来源 | 机器之心 图机器学习领域的热门趋势和重大进展. 又一年又接近尾声,还有两天我们就要告别 2021 年了. 各个 AI 领域也迎来了年度总结和未来展望,今天来讲一讲 ...

  9. 《伊拉图斯死之主》:硬核游戏也有相对放松的游戏体验

    <伊拉图斯死之主>作为一个比较冷门的游戏,其在steam的评价是非常不错的,在两千个评价情况下取得了特别好评. 谈及本作最多的质疑还是在其玩法和<暗黑地牢>的相似性上.在战斗界 ...

最新文章

  1. OpenCASCADE:绘制测试线束之命令语言
  2. 通过spark-submit,本地测试SparkStreaming
  3. ML.NET 推荐引擎中一类矩阵因子分解的缺陷
  4. LIS(Longest Increasing Subsequence)最长上升(不下降)子序列
  5. MySQL 创建用户
  6. 服务器操作系统类型怎么查,服务器查看操作系统类型
  7. 安装Microsoft Visual Studio 2008的时候,经常会出现Microsoft Visual Studio Web创作组件安装失败的情况
  8. python常用代码总结-常见的排序算法的总结及python代码实现
  9. Python基础(作用域)
  10. 记录一个扫描二维码报错问题
  11. Java实现二维码扫码授权登陆
  12. python xlwt 表格样式
  13. qq游戏大厅 android,手机QQ游戏大厅Android版正式发布
  14. 易观千帆 | 2022年11月银行APP月活跃用户规模盘点
  15. 快来看,你的盒子也能用OpenCV NPU后端啦
  16. matlab画平行x轴的图,【MATLAB】画平行于坐标轴的曲线
  17. 小米云备份的正确打开方式,你学会了吗
  18. Ubuntu硬盘挂载
  19. 『注册中心』Consul微服务注册中心的使用及相关集群搭建
  20. 【机器学习算法介绍】朴素贝叶斯

热门文章

  1. git stage 暂存_Git撤销暂存区stage中的内容
  2. 迷宫搜索问题最短路_[源码和文档分享]基于C语言实现的勇闯迷宫游戏
  3. python多程优化_Python 基本功: 13. 多线程运算提速
  4. 深度学习项目实战-关键点定位视频课程
  5. Hadoop MapReduce工作详细流程(Partitioner/SortComparator/GroupingComparator)
  6. 在vmware的Solaris虚拟机中安装vmtool
  7. 升级BIOS解决DELL R730XD虚拟机死机问题
  8. vue.js+socket.io打造一个好玩的新闻社区
  9. [转]OData and Authentication – Part 6 – Custom Basic Authentication
  10. mysql中的意向锁IS,IX