作者 | Chilia

哥伦比亚大学 nlp搜索推荐

整理 | NewBeeNLP

图神经网络已经在NLP、CV、搜索推荐广告等领域广泛应用,今天我们就来整体梳理一些经典常用的图网络模型:DeepWalk、GCN、Graphsage、GAT!

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维的矩阵 ,然后各个节点之间的关系也会形成一个N×N维的矩阵A(就是邻接矩阵)

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

这个公式中:

  • , 是单位矩阵。

  • 是度矩阵(degree matrix),D[i][i]就是节点i的度。

  • H是每一层的特征,对于第一层(输入层)的话,就是矩阵 。

  • σ是非线性激活函数

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

402 Payment Required

其中, .

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

  • 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(前向传播算法)

Embedding generation算法共聚合K次,总共有K个聚合函数(aggregator),可以认为是K层,来聚合邻居节点的信息。假如 用来表示第k层每个节点的embedding,那么如何 从 得到呢?

  • 就是初始的每个节点embedding。

  • 对于每个节点v,都把它随机采样的若干邻居k-1层的所有向量表示 、以及节点v自己的k-1层表示聚合成一个向量,这样就得到了第层的表示 。这个聚合方法具体是怎么做的后面再详细介绍。

文中描述如下:

随着层数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做归一化:

402 Payment Required

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

402 Payment Required

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

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

4.2 与GCN的联系

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

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

END -

往期精彩回顾适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑
AI基础下载机器学习交流qq群955171419,加入微信群请扫码:

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

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

    本文共2700字,建议阅读5分钟 今天我们就来整体梳理一些经典常用的图网络模型:DeepWalk.GCN.Graphsage.GAT! 图神经网络已经在NLP.CV.搜索推荐广告等领域广泛应用. 1. ...

  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. ​一文梳理ICML 2022中图机器学习热点和趋势

    ©作者 | Mikhail Galkin,Zhaocheng Zhu 译者 | Zhaocheng Zhu 单位 | Mila研究所/麦吉尔大学/蒙特利尔大学 研究方向 | 图机器学习,知识图谱 每年 ...

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

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

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

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

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

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

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

    选自Medium 作者:Michael Galkin 机器之心编译 机器之心编辑部 图机器学习领域的热门趋势和重大进展. 又一年又接近尾声,还有三天我们就要告别 2021 年了. 各个 AI 领域也迎 ...

最新文章

  1. ES failed shard on node[XXX]: failed recovery, failure RecoveryFailedException XXX Too many openfile
  2. centos6.4安装使用wine 持续更新中
  3. stm32 图像处理_假如STM32也有朋友圈
  4. python软件是哪个国家的品牌_有哪些好用的软件被国人误认为是外国研发的?
  5. fastlane use_legacy_build_api true
  6. nodejs_NodeJS历险记
  7. oracle排名怎么去除空值影响,Oracle排序中null值处理方法讲解
  8. 检查本地是否存在某个文件
  9. HDU 4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)
  10. padavan固件如何设置打印机
  11. python 中文字符串 编码转换_Python合集之Python字符串编码转换
  12. ASP运行环境--.NetBox 软件使用方法,怎样使用.NETBOX运行asp项目?
  13. pandas 数据类型之 DataFrame
  14. SQL2000无法安装,提示挂起
  15. css 文本超出...
  16. 大型网站技术架构-读后感
  17. OpenStack Blazar 架构解析与功能实践
  18. 葵花宝典:WPF自学手册(奋斗的小鸟)_PDF 电子书
  19. linux查询hba卡地址,怎样查看unix和linux的HBA卡的WWN地址
  20. Spring 编程式事务实例

热门文章

  1. 网页设计界面 电脑版设计
  2. 数据库系列之T-SQL(触发器)
  3. ubuntun 下安装 node-v0.10.26
  4. 转 用户注册及输入框js检测范例(reg.asp)
  5. C# .Net中的类型转换
  6. Python档案袋( Sys 与 Import 模块)
  7. Misunderstood-Missing-逆向DP
  8. 如何开发一个npm包并发布
  9. JavaScript---事件监听
  10. PLSQL 的简单命令之四