零基础多图详解图神经网络(GNN/GCN)【论文精读】

news2024/9/21 2:41:09

原文链接:

A Gentle Introduction to Graph Neural Networks (distill.pub)

我们不仅仅关系整个图的架构,其实我们更关心的是每个顶点每条边和整个图所表示的信息。

 我们如何把我们想要的信息表示成以上这些向量,以及这些向量是否能够通过数据来学到。

这也是整个图神经网络要关注的重点。

一、数据如何表示成图

如何把一张图片表示成图,假如我们有一张图,其高宽都是244.然后有三个通道(RGB),一般来说我们会把他表示为有三个维度的Tensor。我们在输入我们的神经网络的时候用的是一个Tensor,但是从另外一个角度来说,我们可以将其当做是一个图,其每一个像素,是一个点,如果一个像素跟其是邻接关系的话,我们就连条边。

 上边这个图片就是我们如何把一张图片表示成一个图。

左边是我们的图片,右边是我们表示成的邻接矩阵,(0-0)表示的图的第0列第0行,图上对应也是(0-0)。第二列第二行(2-2)对应的图上也是第二列第二行(2-2)。这样我们把图片上的每一个像素都映射成了图上面的一个点。

 我们点一下像素会发现,左边右边对角线认成了自己的邻居

 中间的话,有八个邻居

 中间的这个图是邻接矩阵,每一行和每一列都是一个顶点,如果第i行和第j列之间,值为1的话,记为蓝色,白色没有边。

那我们如何把文本表示成图呢?
文本可以认为是一条序列,我们可以把其中每一个词,表示成一个顶点,一个词和下一个词之间有一条有向边

我们把数据表示成图之后, 我们在图上可以定义什么样的问题?

主要有三大类问题,一个是在图层面的,一个顶点层面,一个是边层面。

图层面

给我们一个图,我们对图进行分类。

顶点层面:

一个俱乐部的A和B老师决裂了,分成了两大派系,各个顶点是站队A还是站队B。 

 边层面

给一个图片,我们首先通过语义分割把图片里面的人物,背景都拿出来之后,然后这个人物之间是什么关系,顶点有了,我们主要学习顶点之间边的属性是什么。

将机器学习用在图上会遇到什么样的挑战? 

 核心问题是:如何表示我们的图使得它可以和我们的神经网络是兼容的。

图上有四种信息:顶点的属性、边的属性、全局的一些信息、以及连接性(每条边连接的是哪两个点)

前三个我们都可以使用向量来表示。问题在于我们表示连接性?

连接性我们当然可以使用我们之前提到的邻接矩阵来表示,但是,可能会有问题:

第一个问题:这个矩阵可能会非常的大,当然我们可以使用稀疏矩阵,但是稀疏矩阵进行高效计算是一个比较难的事情。特别是将稀疏矩阵用在GPU上面。一直是一个比较难的基础问题。

第二个问题:我们的邻接矩阵,我们把任意行和任意列的顺序进行交换,都不会影响到它。

视觉上看着是不一样,但是实际表示同一个东西。

这意味着我们如果设计一个神经网络,不管是用左边的还是右边的,放弃神经网络之后,我们都需要保证我们最后得到的结果是一样的,因为其表示的是同一张图片。

如果我们又想要存储高效,又想我们整个排序不会影响到我们的话,我们可以使用下面这个存储方法。

 

我们有8个顶点,7条边,每个点的属性用的是一个标量来表示,我们换成向量也并不影响,每条边也是用一个标量来表示,也可以用向量,全局信息Global同理。

维护一个邻接列表,其长度和我们的边数是一样的,它的第i项表示的是第i条边它连接的哪两个节点。在存储上,只有把边和所有的属性存储下来,所以存储是高效的。且对于顺序是不在意的,我们可以把边的顺序任意打乱,只要我们把邻接列表的顺序也相应的变了就可以。顶点也可以打乱,同理对邻接列表进行相应更新即可。

这样,存储高效且对顺序无关。

我们给这样一个输入的形式,我们如何用神经网络对其进行处理? 

Graph Neural Networks(GNN)

GNN是一个对图上所有的属性,包括顶点、边和全局的上下文,进行一个可以优化的变换。这些变化可以保持住图的对称信息。所谓对称信息是,我们把顶点进行另外的排序之后,整个结果不会改变。GNN输入是一个图,输出也是一个图,会对属性(顶点、边和全局的向量)进行变换,但是不会改变图的连接性。

假设我们想对一个顶点做预测,但是这个顶点我们并没有他的向量,这个时候我们会用到一个技术叫做pooling(汇聚)。

 以上图片便是最简单的GNN,给我们一个输入的图,首先进入一系列的GNN层,每一个层里有三个有三个MLP,对应三中不同的属性,逐一过去最后的输出会得到保持整个图结果的输出,但是里面所有的属性已经发生变化,然后根据我们要对哪些属性做预测,添加合适的输出层,缺失信息的话我们加入合适的汇聚层,便可以完成我们需要的一个预测。

虽然简单,但是有局限性,主要问题是GNN blocks步,我们并没有对其使用图的结构信息,我们对每个属性做变换的时候,是每个属性自己进入自己的MLP,并没有看到这个顶点是跟哪条边进行相连或者顶点相连,没有考虑到连接信息,没有将图的信息更新到我们的图里面,导致我们最后的结果可能是并不能够充分利用我们图的信息。

改进使其能够将图的信息放入进去

用到的技术是信息传递

假设我们需要对一个顶点的向量进行更新,之前我们的做法是把其向量直接拿过来进入到MLP,进行变换之后得到我们更新的向量。

但在信息传递里,我们将其向量和它邻居的向量都加在一起,得到一个汇聚的向量,把汇聚的向量再进入MLP就会得到我们一个点的向量的更新。

 

我们为何要有一个全局的信息?

 之前我们每一次只看我们的邻居,假设我们的图真的比较大而且连接没有那么紧密的时候,会导致,一个消息从一个点传递到一个很远的点,需要走很多步才行。

一个解决方法是我们加入一个master node或者context vector的东西,这个点是一个虚拟的点,其可以跟所有的顶点相连,跟所有的边相连。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uni-app打开第三方地图软件进行导航

最近在开发字节小程序的过程中遇到地图导航的需求,相信大家也会遇到所以我为大家整理了一篇干货内容。 下面是我整理的代码案例---------记得喝水(太“干”了,复制就能用)。 效果图如下: 1.点击图标弹出弹框进行选择…

数据结构与算法基础——算法分析(1)

算法的定义 算法:对特定问题的求解方法和步骤的描述,在计算机中,他是指令的有限集合。 举例:求解一元二次方程的根 描述算法的基本方式: (1)自然语言 (2)流程图 &…

CSS3 弹性盒子(flex、flex-direction属性、flex-wrap属性、align-items属性、align-content属性)详解

文章目录flexflex-direction 属性flex-wrap 属性align-items 属性align-content 属性的使用flex 在 CSS3 中给 display 属性增加了新的属性值 flex,如果一个元素被设置 display:flex,说明该元素为弹性布局,也就是个弹性盒子。 flex 主要由两…

Linux traceroute 原理及使用

Linux traceroute 原理及使用 序 在某次接入数据的场景中,需要到对方 SFTP 服务器上,获取数据,但是在配置时发现在配置正确的情况下, 连接总是超时,最终排查后发现网络不通,打通网络后才正确连接&#xf…

【C++】函数重载

函数重载1.函数重载的背景2.函数重载的概念2.1参数类型不同的重载2.2参数个数不同的重载2.3参数类型顺序不同的重载2.4注意事项:仅仅是返回值不同无法构成函数重载3.C函数重载的原理---函数名字修饰4.函数重载总结1.函数重载的背景 在C语言中,我们写一个…

通信原理 | 基本概念

1 通信及通信系统 通信(Communication)是实现信息和消息传输的过程 通信系统(Communication System)的组成: 实现通信的所有硬件和软件设备、传输媒介以及各种通信协议等 消息(Message)、信息(Information)、信号(Signal)的区别: 消息通常指人的感官能够感受到的…

无刷电机高压与低压的选择与未来发展前景

近几年来,伴随无刷马达被戴森吸尘器全力以赴运用在家用电器上,颠覆了传统家电的3个产品运用场景,吹风筒就是这样的一个例子。 迅速风筒由于其加工工艺的创新能力,给大家增添了不一般的产品体验度。新型的迅速风筒,搭配…

2023我的前端面试小结

对事件委托的理解 (1)事件委托的概念 事件委托本质上是利用了浏览器事件冒泡的机制。因为事件在冒泡过程中会上传到父节点,父节点可以通过事件对象获取到目标节点,因此可以把子节点的监听函数定义在父节点上,由父节点…

Elasticsearch:利用搜索提高医疗保健公平 - 用多语言 NLP 模型和分析来改善最终用户体验

随着更高生产力和更健康的人群寿命更长,医疗保健将成为社会最重要的方面之一。 COVID-19 大流行加速了现代技术的采用,并凸显了患者体验的重要性。 随着越来越多的消费者开始控制他们的数据,医疗保健系统变得捉襟见肘。 根据德勤和斯科茨代尔…

【High 翻天】Higer-order Networks with Battiston Federico (5)

目录扩散高阶扩散题外话高阶随机游走扩散 在给出建模之后,接下来讨论如何将传统意义下的扩散拓展到高阶系统。扩散是一个线性过程,但在许多不同的情况下都有强相关性。扩散这个词实际可指代两个不同的过程: 标准的扩散过程,或者…

课题-基于安卓androidstudio的校园外卖app

一、课题介绍 客户端: 1:登录注册:用户可以通过自己的信息进行账号的注册 2:商家搜索:可以对商家的信息进行模糊搜索 3:查看菜单:点击商家可以查看具体的菜单信息 4:添加购物车&…

SAP FICO 财务月结--自动清账

一、基本概念 清账是会计科目的借贷挂账后的核销,其中包括客户、供应商以及实行未清账管理的总账科目等。 客户和供应商的清账通常会在收款或者付款的时候同时完成,也就是边收边清或者边付边清,也可以后续手工清账(客户F-32&…

人脸清晰化神器codeFormer图形界面包GUI

1. codeFormer介绍 在NeurIPS 2022上,南洋理工大学-商汤科技联合研究中心S-Lab提出了一种基于VQGANTransformer的人脸复原模型CodeFormer,效果是真的强大,先展示下效果,用的官方案例效果图。 官方给出的代码见这里 传送门 2. 图…

Python数组存储方式与向量化、按行按列展平/展开

文章目录1 逻辑存储与内存存储1.1 高维张量1.2 按行展开和按列展开2 矩阵向量化、按行按列展开2.1 numpy中:numpy.ravel()ndarray.flatten()2.2 Pytorch中:3 pytoch中的view,reshape,permute对比3.1 view3.2 reshape3.3 permute链…

Redis缓存雪崩缓存击穿缓存穿透

Redis缓存雪崩&缓存击穿&缓存穿透一 缓存更新策略二 缓存雪崩三 缓存击穿四 缓存穿透一 缓存更新策略 目前redis缓存更新存在3种主流策略,分别是:内存淘汰、超时剔除、主动更新。 1、内存淘汰 LRU/LFU/FIFO算法剔除:例如maxmemory-…

【云原生进阶之容器】第二章Controller Manager原理2.4节--Informer机制剖析

1 Informer机制剖析 如上图所示,client-go 包中一个非常核心的工具就是 informer,informer 可以让与 kube-apiserver 的交互更加优雅。 Informer的主要作用包括如下两个方面: 同步数据到本地缓存。Informer 会不断读取 Delta FIFO 队列中的 Object,在触发事件回调之…

MySQL8.0锁情况排查

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者: 杨延昭文章来源:GreatSQL社区投稿 在数据库中,除传统的计算资源(CPU、RAM、IO)的争用…

【C语言】-关于指针的知识你真的都知道了??快进来看看这里面的指针会让你眼前一亮

🎇作者:小树苗渴望变成参天大树 🎊作者宣言:认真写好每一篇博客 🎉 作者gitee:link 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 指针进阶💦前言💖一、…

MYSQL 数据行列交换(交换数据) 存储过程实现

行列转换的存储过程 初始图: 效果图: 实现过程: 1:建表、建数据 CREATE TABLE changeprice ( id bigint(20) NOT NULL auto_increment, sid bigint(20) NOT NULL, datecreated timestamp NOT NULL defaultCURRENT_TIMESTAMP…

nvue2中使用axios和插槽

一、组件的生命周期1、组件的生命周期经历的阶段:(1)创建阶段:beforeCreate、created、beforeMount、mounted(2)运行阶段:beforeUpdate、update(3)销毁阶段:2…