初探图神经网络——GNN


title: 图神经网络(GNN)
date:
tags:

  • 随笔
  • 知识点
    categories:
  • [学习笔记]

初探图神经网络(GNN)

文章来源:https://distill.pub/2021/gnn-intro/

前言:说一下为什么要写这篇文章,因为自己最近一直听说“图神经网络”,但是一直不了解这是什么,因此这次有机会对图神经网络有一个简单的认识了解好了,开始步入正题。

整片文章并没有对内容进行章节部分的划分,只是从头到尾进行了讲解,因此这里就根据原文的顺序依次做笔记的填写了。

文章首先说了这样的一句话We are starting to see.....。这句话的提出就说明了现在的图神经网络还是正在兴起的阶段,因此还是有一定的发展前景的——既是挑战也是机遇。

作者从以下四个方面来说明和解释什么是图神经网络(也是本文的主要讲述的点):

  1. 什么样子的数据可以表示成为图;
  2. 图跟其他的数据有什么不一样的地方;
  3. 构建一个GNN;
  4. 提供一个GNN playground

什么是图

图表示实体节点之间的关系,如下图所示:

image-20211129201442254

其中U表示的是整张图。

为了进一步说明什么是节点、关系和整张图,我们可以用下面的方式来表示出什么是图(用向量的方式来表示出):

image-20211129201925513

另外,图可以表示为无向图和有向图两种图:

image-20211129202136128

数据表示成图

那么其他的数据是怎么可以表示成图的呢?

Imgae as graphs

我们将图片数据的像素点看成是一个节点,这样的话就可以构造出一个图:

image-20211129202820443

Text as graphs

用图来表示一段文本的话,那就是一个有向图来表示了,那么一段话中,每一个字符、单词、token等都可以作为图的节点:

image-20211129203321360

当然,文章也说明了,目前来说的图片和文本用图的形式来表示的话,并非是两者常用的编码方法,因为用图的形式来表示的话,会产生冗余的表示形式。

其他形式的数据表示

  • 分子图的表示:

    image-20211129204058449

  • 社交网络的表示:

image-20211129204110758

  • 比赛关系的表示(简单说一下这个例子:就是在跆拳道比赛中,每个人与其他人比赛之间的关系——是否进行比赛,可以用图的形式来表示):

image-20211129204826923

解决的问题方向或应用

那么图可以解决什么问题呢,可以从以下三个方面来考虑:

  • 图层面(graph-level)
  • 节点层面(node-level)
  • 边层面(edge-level)

首先是图层面的任务,文章中说到了一个任务就是查看或者说检查一个分子图中是否存在两个环:

image-20211129205703476

这类问题在图像中与分类问题很像,在文本中与情感分析的任务很想。


节点层面的任务,文中所举的例子是跆拳道的比赛问题——假设在比赛过程中指导员Mr. Hi和管理员John H产生了分歧,节点表示参与竞赛的人员,边表示关系,那么任务就是——正确分类参与人员是Mr. Hi一方的人还是John H一方的人:

image-20211129210328340

那么在图像中,就类似是图像的分割任务,每一个节点代表是一个像素;

在文本中,就类似预测句子中的单词的词性——词性标注;


那么边层面上考虑,文中提出了这样一个场景——假设在一场比赛中,人物都用节点来表示,那么边就用来表示节点之间的关系:

image-20211129210829481

也就是说,任务转为预测节点之间的关系,那么就很像是知识图谱中的关系抽取一样的作用:

image-20211129210943171

在机器学习中存在的问题

文章主要是针对在神经网络中存在的问题做了论述,即将神经网络用到图上该怎么表示图。

到目前,我们知道图有四种属性是需要我们来考虑的:

  • 节点;
  • 边;
  • 全图属性信息;
  • 连接性

前三个还可以表示——用向量来表示,最难来表示的就是最后一个——图的连接性,即如何来表示两个节点的连通性呢?

有人说可以用邻接矩阵来实现连通性的存储表示,但是这样会存在一些问题:

  1. 数据量很大的前提下 ,图是存储不了的;

  2. 如果用稀疏矩阵来表示地话,在GPU上计算是不能实现并行计算的(这也是目前来说待解决的问题);

  3. 邻接矩阵还有一个特点就是——一个图的信息可以用不同的邻接矩阵来表示,那么针对不同的数据的输入,神经网络该如何处理呢?也就是如何处理数据来实现无顺序性的表示。

    image-20211129213719468

文中提出了下面这样的表示方法:

image-20211129214841530

  • 对于图中的节点,用一个标量来表示(将图中的节点进行编号),类似One-hot的表示方法;
  • 对于图中的边,也用一个标量来表示,同样地还是用类似One-hot的方法来表示;
  • 这里的连接性用邻接列表来表示,列表的长度代表来边的个数,列表中的元素是一个二元组,分别表示的是边的两边联通的是哪两个节点;

图神经网络是什么?

文中先是给出了一个GNN的概念:

A GNN is an optimizable transformation on all attributes of the graph (nodes, edges, global-context) that preserves graph symmetries (permutation invariances).

翻译过来就是,图神经网络是一个能够在图的属性上进行转换,且能够保持图上的对称信息的。

对称信息的意思就是,将节点的位置进行重新打乱排序之后,图的结构还是不变的。

文中说使用了message passing neural network框架来进行构建GNN,当然还有其他的网络来进行表示。在该网络中,输入的是一个图网络,输出的还是一个图网络。

The simplest GNN

我们来构造一个最简单的GNN的例子,如下图所示,对于顶点向量(也就是我们前面提到的节点向量),边向量和全局向量,我们分别构造一个多层感知机。

image-20211130161320595

这样三个MLP就构成了一个GNN的层。

这个层的作用就是根据输入的顶点向量、边向量和全局向量,对应地输入到MLP中,然后输入对应的图,其中只是图的属性做出了改变,但是联通性或者说结构没有发生改变。

如何预测

那么接下来就考虑,如何去预测了?

  • 简单情况

先考虑最简单的二分类问题,对于顶点我们已经有了全部的顶点向量信息,通过这些顶点向量信息我们可以在其后面追加一个输出大小为2的全连接层,最后再用一个softmax做一个分类即可;

同样地,对于一个多分类问题,也是只需要在输出后面添加一个输出大小为n的全连接层,最后添加一个softmax作为预测即可。

对于线性回归问题,只需要一个输出大小为1的连接层即可。

下图的意思就是,给定最后一层的输出(是一个图),然后将顶点输入到全连接层中,最后得到预测的输出。

需要注意的是,所有的节点都共享同一个全连接层的参数;同理,所有的边也是共享同一个全连接层的参数。

image-20211130163028677

  • 复杂情况

如果没有顶点信息,但是仍然需要做顶点的情况预测,那么该怎么处理呢?

文中提到了一种方法就是——Pooling,该方法分两步:

  1. 对于需要被pool的元素(这里的元素是指与没有顶点信息相邻的边),收集它们向量表示;
  2. 对于收集到的全部向量做加法求和,得到一个新的向量,此时这个向量就是我们要求得的顶点向量;
  3. (其中还需要添加一个全局向量,但是文中并未提及,但是会在全局信息的共享中说明这个东西是什么)
image-20211130165121454

用公式的方法来表示的话,就是用下图来表示:

image-20211130170143142

上图中是说没有点,只有边的情况,那么对于只有点信息没有边的情况,那么可以用下面的方法来表示:

image-20211130170350855

因此,针对于上述的方法,我们可以看出,不管缺少哪种数据,我们都可以根据pool的方法来获得缺少的数据。

那么总结一个简单的GNN,就用下图来表示,先是输入一个图,然后通过MLP,得到最后的输出,如果缺少了数据,可以用pooling层来处理,然后再经过分类层得到最后的预测结果。

image-20211130171021377

信息传递

上述的方法有一个很大的局限性就是不能够利用图的结构信息来预测,可以看出上述的方法只是分别独立地对于点,边,全局信息作属性的修改,没有利用连接关系,那信息传递就可以很好地来解决这个问题。

其实消息传递的过程跟pooling的过程很是相似,过程可以用下图来表示(用相邻的节点信息来加和):

image-20211130172512604

用公式化的形式表示如下:

image-20211130173447125

前面讲到的pooling都是在最后的输出层之后做的,那么是否可以根据这个方法来提前对属性进行补全呢?

答案是可以的。

下面是根据这个方法,可以将图中的信息进行共享分布,本质上还是向量的相加(都是相邻的才能相加,换句话说就是只有是相邻与点V相连的边才能加到把点V的向量加到边上,同理边加到点上的道理也一样。)

image-20211130174210484

但是呢,究竟是先从点集加到边集好,还是先从边集加到点集好(两种方法会产生不一样的结果),尚未有定论。另外文中还给出了其他的方法,比如交替汇聚pool,这里就不做论述了。

全局信息的共享

到目前为止,我们所讨论的情况是存在这样的一个问题:无法共享不直接相邻点或边的信息。

这就是我们为什么要引入全局变量这个信息或概念的原因。

文中提出的说到方法就是引入一个图U——被称作master nodecontext vector.这个U,连接了图中所有的边和点,因此可以作为信息传递的桥梁,具体来说可以用下图来表示:

image-20211130214542140

搭建一个GNN

这一部分就是在文中有一个交互图了,体现了GNN对超参数的调整是很敏感的,虽然也不清楚图表示的是什么意思,在这里就不做阐述了。

文章后面还做了大量的讨论,有时间再补上吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/27766.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pycharm使用之torch_sparse安装

正式安装之前要先查看一下torch的版本 一、查看torch版本 1、winR ,输入cmd 2、输入python 3、 输入import torch,然后输入torch.__version__,最后回车 可以看到我的torch版本是1.10.0 二、下载合适的torch_sparse版本 1、打开链接 https…

接口反应慢优化

遇到某个功能,页面转圈好久,需要优化 1.F12 查看接口时间 2.看参数 总共耗时9.6s Waiting for sercer response 时间是2秒 Content Download 7秒 慢在Content Download F12查看接口响应 显示Failed to load response data:Request content was e…

spark入门 高可用部署HA(五)

一、standalone基于修改部署 https://blog.csdn.net/weixin_43205308/article/details/131070277?spm1001.2014.3001.5501 二、安装ZOOKEEPER zookeeper 安装下载与集群 三、修改conf下的spark-env.sh vim conf/spark-env.sh注释以下内容(根据自己环境修改&am…

visual studio 2022,ADO.NET 实体数据模型添加 sqlite数据库对象

文章目录 前言前期环境博客github 文档解析文件安装说明文件下载省流版nuget环境配置成功标志sqlite连接测试 前言 我们知道ADO.NET 实体数据模型特别适合动态开发数据库。因为ADO.NET可以使用DB First 开发 我们在开发一个程序的时候,经常会动态更新数据库字段&a…

算法模板(3):搜索(4):高等图论

高等图论 有向图的强连通分量 相关概念 强连通分量:Strongly Connected Component (SCC).对于一个有向图顶点的子集 S S S,如果在 S S S 内任取两个顶点 u u u 和 v v v,都能找到一条 u u u 到 v v v 的路径,那么称 S S…

C++多态和文件读写

C黑马,每天1.5倍速2个视频(1小时),看到9月1日完成314个视频 目录 🔑多态 🌳基本语法 🌳原理剖析 🌳案例1 -- 计算器类 🌳纯虚函数和抽象类 🌳案例2 --…

redis知识复习

redis知识复习 redis基础知识一. redis的认识1. 非关系型数据库 与 传统数据库 的区别2. 安装redis并设置自启动3. 熟悉命令行客户端4. 熟悉图形化工具RDM 二. redis的命令与数据结构1. 数据结构介绍2. redis通用命令(熟练掌握) 三. redis的Java客户端1.…

SpringBoot整合Flyway实现数据库的初始化和版本管理

文章目录 一、Flyway1、介绍2、业务痛点3、个人理解 二、SpringBoot整合flyway1、整合2、SQL文件命名3、版本号校验算法4、工作流程5、注意事项 一、Flyway 1、介绍 Flyway 是一款开源的数据库版本管理工具。它可以很方便的在命令行中使用,或者在Java应用程序中引入…

【MySQL】数据表的基本操作

目录 1. 创建表 2. 创建表案例 2.1 创建一个users表 2.2 查看表结构 2.3 修改表 3. 删除表 MySQL🌷 1. 创建表 语法: CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储…

chatgpt赋能python:如何升级Python的pip版本

如何升级Python的pip版本 如果你使用Python来进行程序开发,那么你一定需要用到pip,它是Python的包管理器,用于安装和管理各种Python库。 不过,一旦你开始使用pip,你可能会遇到一个问题:你的pip版本可能会…

几种技巧让大模型(ChatGPT、文心一言)帮你提高写代码效率!

代码神器 自从大模型推出来之后,似乎没有什么工作是大模型不能做的。特别是在文本生成、文案写作、代码提示、代码生成、代码改错等方面都表现出不错的能力。下面我将介绍运用大模型写代码的几种方式,帮助程序员写出更好的代码!(…

利用AI点亮副业变现:5个变现实操案例的启示

AI变现副业实操案例 宝宝起名服务AI科技热点号头像壁纸职业头像收徒:萌娃头像定制头像平台挂载 小说推广号流量营销号百家号AI共创计划公众号流量主 知识付费知识星球小报童: 整体思维导图: 在这里先分享五个实操案例: 宝宝起名服务AI科技热…

cvte 前端一面 凉经

cvte 前端一面 凉经 原文面试题地址:https://www.nowcoder.com/discuss/353159272857018368?sourceSSRsearch 1. vuex原理 和vuerouter的原理差不多 2. vuerouter的原理 ​ 首先在main.js中,import router from ‘./router’ 引入在router文件夹下面…

学习WooCommerce跨境电商社交媒体营销

WooCommerce 长期以来一直为电子商务店主提供多样化的服务。大约 500 万家商店啓用安装了免费的 WooCommerce 插件。 官方 WooCommerce 插件从 WordPress.org 下载了161,908,802次,并且还在增加。 超过5,106,506 个网站正在使用 WooCommerce。 本文网址: https…

一文搞懂什么是Docker

一、什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署,环境不一定一致,会遇…

LVS+Keepalived 群集

目录 一、keepalived概述 1.keepalived工作原理 2.keepalived体系主要模块及其作用 3.判断服务器主备,及如何配置浮动IP 二、keepalived的抢占与非抢占模式 三、部署LVSkeepalived 1.配置负载调度器(主备相同) 1.1配置keepalived&…

NVM安装教程

我是小荣,给个赞鼓励下吧! NVM安装教程 简介 nvm 是node.js的版本管理器,设计为按用户安装,并按 shell 调用。nvm适用于任何符合 POSIX 的 shell(sh、dash、ksh、zsh、bash),特别是在这些平台…

chatgpt赋能python:Python编程:如何删除前面的代码?

Python编程:如何删除前面的代码? 在Python编程中,我们有时会需要删除之前写的一些代码,以便更好地组织我们的代码结构和逻辑。那么,Python中如何删除前面的代码呢?在本文章中,我们将为您详细介…

工程训练 -江苏海洋大学-mooc-最终答案

这不点赞评论一下嘛???呜呜呜 判断题(共217道) 1.舂实模样周围及砂箱边或狭窄部分的型砂,通常采用砂舂的平头端舂砂。 2.造型时,分型面上通常使用的是面砂,覆盖模样的则使用背砂。 3…

软件测试正在面试银行的可以看下这些面试题

前言 最近呢有很多的小伙伴问我有没有什么软件测试的面试题,由于笔者之前一直在忙工作上的事情,没有时间整理面试题,刚好最近休息了一下,顺便整理了一些面试题,现在就把整理的面试题分享给大家,废话就不多说…