图神经网络与图注意力网络

news2025/1/12 10:34:53

图片

        随着计算机行业和互联网时代的不断发展与进步,图神经网络已经成为人工智能和大数据的重要研究领域。图神经网络是对相邻节点间信息的传播和聚合的重要技术,可以有效地将深度学习的理念应用于非欧几里德空间的数据上。本期推送围绕图神经网络与图注意力网络相关知识进行概述。

1.什么是图

1.1 定义

    图表示的是一系列实体(节点)之间的关系(边)。

  • V:节点信息(节点标识、节点邻居数)

  • E:边信息(边标识、边权重)

  • U:全局信息(节点数、最长路径)

1.2 embedding

    为了深入表示每个节点、边和整个图,可以使用如下存储方式:

图片

        把节点信息、边信息和全局信息做embedding,通俗说即把这些信息存储为向量的形式。例如上图用向量来表示节点,形成一个长度为6的向量,表示节点的6个信息,高矮代表了值的大小。

1.3 将多种类型的数据表示成图

(1)images as graphs(将图片表示为图) 
  •  把每个像素作为一个点,存在邻接关系则形成一条边

图片

(2)text as graphs(将文本表示为图)
  • 把词表示为顶点,词与词存在有向边

图片

(3)将现实生活中的关系表示成图
  • 分子结构(原子之间的关系)、社交网络(人物交互图)、引用(文章引用关系)

  • 例如下图为话剧《奥赛罗》中的人物交互图,通过将同时出现在一个场景里的人物连上一条边,将人物关系表示成图。

图片

1.4 在图上可定义的问题类型

(1) 图层面的任务
  • 比如,给定一张图,对该图进行分类。

图片

        如上图,预测出哪些分子是具有两个环的。这个例子比较简单,可以用图的遍历来完成,当图非常复杂的时候,图神经网络可以发挥巨大作用。

(2)节点层面的任务
  • 比如,将节点分类到不同的阵营。

图片

    上图是空手道俱乐部数据集,将学员分类到两个老师的队伍中。

(3)边层面的任务    
  • 比如,已知节点,学习节点之间的边的信息。

图片

        在这个例子中,边的预测是通过语义分割把人物、背景拿出来,然后分析实体间的关系。也就是给出节点之间的图,对边上的属性进行预测。比如黄衣服的人在踢绿衣服的人,他们都站在地毯上。

1.5 在图上使用神经网络的挑战

        图上有节点属性、边的属性、全局信息、连接性四种类型的信息。

        前面三个比较容易与神经网络兼容,因为其可以表示成向量的形式。在利用连接性这种类型的信息时,通常会使用邻接矩阵——但是存在图太大无法存储、交换行列本质不变但矩阵变化的情况。于是很多情况下会使用邻接列表表示图上的连接性关系。

图片

        如上图,这张图有8个顶点,7条边。邻接列表的长度与边数相同,第i项表示第i条边连接的哪两个节点。

2.图神经网络

图神经网络的基本思想就是:

  • 基于节点的局部邻居信息对节点进行embedding。直观来讲,就是通过神经网络来聚合每个节点及其周围节点的信息。

图片

对于这个图来说,要计算节点A的Embedding,有以下的两条想法:

  • 节点A的Embedding,是它的邻接节点B、C、D的Embedding传播的结果

  • 而节点B、C、D的Embedding,又是由它们各自的邻接节点的Embedding传播的结果。

    为了避免无穷无尽,以下图为例,做两层,可以构造该图的传播关系。

图片

第0层即输入层,为每个节点的初始向量,称为初始Embedding。

第1层:

  • 节点B的Embedding来自它的邻接点A、C的Embedding的传播。

  • 节点C的Embedding来自它的邻接点A、B、E、F的Embedding的传播。

  • 节点D的Embedding来自它的邻接点A的Embedding的传播。

第2层:

  • 节点A的Embedding来自它的邻接点B、C、D的Embedding的传播。

        但是,目前我们还不知道传播到底是什么,图中的小方块在做什么,下面就对传播机制进行介绍。

小方块主要就做了两件事情:

  • 收集(Aggregation)

        对上一层的所有邻接节点的Embedding,如何进行汇总,获得一个Embedding,供本层进行更新。

  • 更新(Update)

        对本层已“收集完毕”的邻接点数据,是否添加自身节点的上一层Embedding,如果是,如何添加、如何激活等等,最终输出本层的Embedding。

下面使用公式介绍一个具体例子:

图片

符号解释:h表示节点的embedding,下标v或u表示节点的索引,上标k表示第几层,σ表示激活函数,  或  表示矩阵,N(v)表示节点v的邻接点集合。

公式解释:使用节点的输入特征向量来初始化第0层节点的embedding。为了计算第k层节点v的embedding,需要用到上一层中节点v本身的embedding、节点v的邻居节点在k-1层中的embedding平均值。

操作步骤:

  • 收集——对上一层邻居节点的Embedding求平均。

  • 更新——收集完毕的Embedding与本节点上一层的Embedding进行加权和,然后再激活。

3.图注意力网络

3.1 基本思想

根据每个节点在其邻节点上的attention,来对节点表示进行更新。

3.2 改进

  • GCN无法允许为邻居中的不同节点指定不同的权重,GAT和GCN的核心区别在于如何收集并累和距离为1的邻居节点的特征表示。

  • 图注意力网络GAT用注意力机制替代了GCN中固定的标准化操作。

3.3 优点

  • 在GAT中,图中的每个节点可以根据邻节点的特征,为其分配不同的权值。

  • 引入注意力机制之后,只与相邻节点有关,即共享边的节点有关,无需得到整张图的信息。

3.4 GAT架构

图注意力层的输入:N个节点特征的集合h

图注意力层的输出:经过学习之后的N个节点的特征向量h' 

特征增强:为了使得节点特征表达得更清晰,首先对每一个节点进行一个线性变换,即乘上一个权重向量。【W维度为𝐹′×𝐹,作用:比如将一个长向量转为一个短向量,使得特征更容易提取】

对每个节点实行自注意力机制:注意力系数为

e_{ij} = a(W\vec{h_i},W\vec{h_j})

其中,  代表节点j的特征对节点i的影响,a代表计算两个节点(特征向量)相关度的函数。

本文通过masked attention将图结构加入到机制中,masked attention的含义是:仅将注意力分配到节点i的邻居节点集上(包括i本身)。

为了使得注意力系数更容易计算和便于比较,引入了softmax对所有的i的相邻节点j进行正则化。

公式2的含义:节点j对i的影响/节点i一阶邻居对i的影响之和。

注:  和  都叫做“注意力系数”,只不过  是在  基础上进行归一化后的。

图片

    将公式1和2进行综合,注意力系数  的计算过程即如上图所示:W乘上i的特征,W乘上j的特征,然后连接起来,乘上权重向量a,形成圈里的值是  ,再使用  进行归一化,形成新的注意力系数。

    通过上述运算得到了归一化后的不同节点之间的注意力系数,可以用来预测每个节点的输出特征:

3.5 多头注意力机制

        因为多个注意力机制学习到的attention侧重点可能略有不同,所以将K个独立的注意力机制的结果进行级联或者求平均,确保GAT更加稳定。下图展示是K=3的情况,使得结果更加稳定。

图片

4.总结

        本期推送从什么是图、图神经网络的基本思想、图注意力网络的基本思想三个方面对图神经网络相关的基础知识进行了介绍。图神经网络从提出发展到现在,针对不同的领域一直在进行改进和优化,已经可以应用到非常多的方面,因为其解决图相关问题的能力强大,所以未来仍有非常大的发展空间,会有更多优秀的模型被提出,解决更加复杂的问题。

5.参考文献

[1] Distill《A Gentle Introduction to Graph Neural Networks》

[2] Hamilton W L, Ying R, Leskovec J. Representation learning on graphs: Methods and applications[J]. arXiv preprint arXiv:1709.05584, 2017.

[3] Velickovic P, Cucurull G, Casanova A, et al. Graph attention networks[J]. stat, 2017, 1050: 20.

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

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

相关文章

老生常谈之 JavaScript 中 0.1 + 0.2 != 0.3 的原因

先来一个模棱两可的说法:因为精度丢失、存储溢出的问题 先复习一下二进制的转换方法: 整数:除以基数,取余,自底向上小数:乘以基数,取整,自顶向下 接着,复习一下双精度…

QTableWidget——编辑单元格

文章目录 前言熟悉QTableWiget,通过实现单元格的合并、拆分、通过编辑界面实现表格内容及属性的配置、实现表格的粘贴复制功能熟悉QTableWiget的属性 一、[单元格的合并、拆分](https://blog.csdn.net/qq_15672897/article/details/134476530?spm1001.2014.3001.55…

ios qt开发要点

目前关于ios qt的开发资料比较少,这里整理了几个比较重要的开发要点,基于MacOS14 Xcode15 Qt15.5 cmake iphone真机。 cmake报错,报错信息如下 CMake Error at /Users/user/Qt/5.15.5/ios/lib/cmake/Qt5Core/Qt5CoreConfig.cmake:91 (m…

C++初阶 | [四] 类和对象(下)

摘要:初始化列表,explicit关键字,匿名对象,static成员,友元,内部类,编译器优化 类是对某一类实体(对象)来进行描述的,描述该对象具有哪些属性、哪些方法,描述完成后就形成…

shell脚本之循环语句(for、while、untli)

循环语句: 一定要有跳出循环条件 循环条件: 1.已知循环的次数(新来十个人,就要新建十个账号 2.未知循环的次数,但是要有跳出循环条件(对象生气,要道歉到原谅为止) for&#xff…

SpringBoot_websocket实战

SpringBoot_websocket实战 前言1.websocket入门1.1 websocket最小化配置1.1.1 后端配置1.1.2 前端配置 1.2 websocket使用sockjs1.2.1 后端配置1.2.2 前端配置 1.3 websocket使用stomp协议1.3.1 后端配置1.3.2 前端配置 2.websocket进阶2.1 websocket与stomp有什么区别2.2 webs…

【ThingJS】类型转换以及注册

前言 目前国家提倡加快数字化发展,建设数字中国,并于今年2月份中共中央、国务院印发的《数字中国建设整体布局规划》中明确,数字中国建设按照“2522”的整体框架进行布局。其中提到“构建以数字孪生流域为核心的智慧水利体系”,可…

HarmonyOS(三)—— 应用程序入口—UIAbility

前言 学习过android的同学都是知道Activity,Activity是Android组件中最基本也是最为常见用的四大组件之一,用户可以用来交互为了完成某项任务。 Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setCon…

Mac自带的看图如何连续查看多张图片

一、问题 mac看访达里的图片时,双击打开一张图片,然后按上下左右键都没法切换到另外的图片。而且也没找到像window一样单击缩略图可以看到预览图。其实是自己不懂得怎么使用,哈哈哈😂 二、方法 2.1、图标方式 可以看到缩略图&a…

原理Redis-QuickList

QuickList **问题1:**ZipList虽然节省内存,但申请内存必须是连续空间,如果内存占用较多,申请内存效率很低。怎么办? 为了缓解这个问题,我们必须限制ZipList的长度和entry大小。 **问题2:**但是…

【NLP】GPT 模型如何工作

介绍 2021 年,我使用 GPT 模型编写了最初的几行代码,那时我意识到文本生成已经达到了拐点。我要求 GPT-3 总结一份很长的文档,并尝试了几次提示。我可以看到结果比以前的模型先进得多,这让我对这项技术感到兴奋,并渴望…

[数据结构]-AVL树

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、AVL树基…

陪玩圈子系统APP小程序H5,详细介绍,源码交付,支持二开!

陪玩圈子系统,页面展示,源码交付,支持二开! 陪玩后端下载地址:电竞开黑陪玩系统小程序,APP,H5: 本系统是集齐开黑,陪玩,陪聊于一体的专业APP,小程序&#xff…

Github Copilot AI编码完成工具

目录 一、GitHub Copilot 1、简介 2、工作原理 3、功能 二、GitHub Copilot X 1、什么是 GitHub Copilot X 2、GitHub Copilot X 的功能 三、支持、使用 1、支持 2、使用 四、实际研究、验证(代码方向) 1、代码生成 2、代码提示 3、生成测试用例 4、代码解释 5…

排序算法--归并排序

实现逻辑 ① 将序列每相邻两个数字进行归并操作,形成floor(n/2)个序列,排序后每个序列包含两个元素 ② 将上述序列再次归并,形成floor(n/4)个序列,每个序列包含四个元素 ③ 重复步骤②,直到所有元素排序完毕 void pri…

Rust并发编程:理解线程与并发

大家好!我是lincyang。 今天我们来深入探讨Rust中的并发编程,特别是线程的使用和并发的基本概念。 Rust中的线程 Rust使用线程来实现并发。线程是操作系统可以同时运行的最小指令集。在Rust中,创建线程非常简单,但与此同时&…

SHAP - 机器学习模型可解释性工具

github地址:shap/docs/index.rst at master shap/shap (github.com) SHAP使用文档:欢迎使用 SHAP 文档 — SHAP 最新文档 SHAP介绍 SHAP(SHapley Additive exPlanations)是一种用于解释预测结果的方法,它基于Shapley…

ADB命令介绍

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

系列七、ThreadLocal为什么会导致内存泄漏

一、ThreadLocal为什么会导致内存泄露 1.1、ThreadLocalMap的基本结构 ThreadLocalMap是ThreadLocal的内部类,没有实现Map接口,用独立的方式实现了Map的功能,其内部的Entry也是独立实现的。源码如下: 1.2、ThreadLocal引用示意图…

逸学java【初级菜鸟篇】9.3 Stream流

hi,我是逸尘,一起学java吧 得益于Lambda所带来的函数式编程,引入了一个全新的Stream流概念(就是都基本使用lambda的形式)。 流处理 我们首先理解什么是流处理,它类似于sql语句,可以执行非常复…