图神经网络(GNN)入门学习笔记(直观且简单)

news2024/9/23 19:16:56

文章目录

    • 图的定义和表示
    • 可以使用图数据结构的问题
    • 将图结构用于机器学习的挑战
    • 最基本的图神经网络概述
    • 汇聚操作
    • 基于信息传递的改进图神经网络
    • 全局向量信息的利用

本篇文章参考发表于Distill上的图神经网络入门博客: A Gentle Introduction to Graph Neural Networks。同时,所有的图片也都来源于该博客。本文主要是记录本人自己的学习体会与心得,帮助其他初学者能够更快入门图神经网络而无需看冗长的英文原文。

图的定义和表示

在这里插入图片描述
图可以用三个符号进行表示:

  • 顶点集(V):图中的所有顶点构成一个顶点集;
  • 边集(E):图中的所有边构成一个边集;
  • 图整体(U):完整考虑一个图的所有顶点和边以及对应的拓扑结构,图的整体被称为U。

在计算机中,无论是顶点集、边集或者图整体都可以使用向量进行表示。顶点向量中的各个值表示顶点的属性;边向量中的各个值表示边的属性;图向量同理。

另外,一张图也可以使用离散数学中的邻接矩阵进行表示,具体内容可以参见离散数学课程教材。

很多现实中的问题,都可以把问题中的实体转化为图的顶点,把实体之间的关系转换为图中的边,从而使用图来表示该现实问题。

可以使用图数据结构的问题

可以使用图数据结构的问题可以分为三个类型,分别是图层面的问题、顶点层面的问题和边层面的问题。

  • 图层面的问题:找出含有两个环的图;
    在这里插入图片描述

  • 顶点层面的问题:将图中的所有顶点划分为两类;
    在这里插入图片描述

  • 边层面的问题:给图中的所有边判定类型。
    在这里插入图片描述

将图结构用于机器学习的挑战

将图结构应用于机器学习领域的最大挑战是如何表示图结构,使得其能够与搭建的神经网络兼容,并被计算机计算和处理。

图结构中包含有四类信息:顶点集信息、边集信息、图整体信息和连接性信息。前面三种类型的信息都可以通过向量或矩阵的方式进行表示,但是连接性信息的表示会更加麻烦。

表示连接性的最直观方法就是使用邻接矩阵,但是很多情况下邻接矩阵都是稀疏的,因此会无意义地占用非常大的存储空间。即使通过稀疏化的方式表示邻接矩阵也会有计算机难以处理的问题。

为此,可以通过邻接表的形式表示邻接矩阵。邻接表的大小与边的数量成正比,其中的每一个元素记录了哪两个顶点之间存在一条边。

在这里插入图片描述
下面将正式开始介绍图神经网络。

最基本的图神经网络概述

图神经网络本质上就是一个特用于图模型的神经网络。

图神经网络的基本思路如下:由于上面我们已经提到,图中除了连通性信息外,其他的三个属性(顶点集、边集和整体)都可以用能够代入神经网络进行计算的向量来进行表示,因此,我们对于三类属性,分别构造一个神经网络。

也就是说,一个神经网络以顶点集向量作为输入,一个神经网络以边集向量作为输入,另一个神经网络以整体向量作为输入。这样的三个网络组合在一起,就构成了图神经网络的一个层。多个图神经网络层叠加在一起,就构成了完整的图神经网络。

需要注意的有两点:首先,是每一个图神经网络层中的神经网络的输出形状都与输入形状相同,也就是说,输入的向量长度和输出的向量长度相同;其次,对于图的连通性,图神经网络不会对其进行修改,也就是说,一张图经过了图神经网络,其连通性不会发生改变:原来相连的两个顶点仍然相互连接。

面对分类任务,只需要在最后一层输出加上全连接层和softmax分类即可。基本原理也如下图所示:

在这里插入图片描述

汇聚操作

有时在实际问题中会遇到一些特殊的情况,使得无法同时获得顶点集的向量、边集的向量和整体的向量,这个时候,就可以使用汇聚的思想来补充生成当前没有的向量。下面将以缺失顶点集为例进行说明,其他情况可以类比推理。

当顶点集缺失时,每一个顶点连接了多条边,因此可以把每个顶点连接的多条边的向量进行叠加,最后再加上整体的向量,即可替代该顶点的向量。

在这里插入图片描述

基于信息传递的改进图神经网络

上面所提到的基本图神经网络存在一个问题,那就是没有利用图的连通性,从而损失了图中的一部分信息。

为了能够利用连通性,下面将给出一种基于信息传递的改进的图神经网络。

以顶点集为例。在改进的网络中,当一个顶点的向量需要准备待入顶点对应的神经网络进行更新时,并不是直接将该点的结果代入,而是将该顶点以及与该顶点直接相连的顶点的向量相加后进行代入,从而利用上之前未被利用的连通性信息。

边集的信息传递改进图神经网络原理类似。

全局向量信息的利用

之前的介绍中,我们只是说了全局向量是需要计算的以及其计算方法,但是并没有介绍其使用过程,下面将进行介绍。

全局向量可以抽象为一个虚拟的顶点(被称为master node),该顶点与图中的所有顶点相连,同时与图中的所有边相连(点如何与边相连?这是因为这个顶点是抽象的,也可以把这个虚拟顶点想象为一个又是顶点又是边的东西)。

基于上面介绍的信息传递的原理,每次该虚拟顶点在经过全局神经网络更新之前,需要叠加图中当前状态其他所有顶点和边的向量信息。通过这样的方式,就成功利用了图的全局信息。

在这里插入图片描述

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

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

相关文章

网络防御之IDS

1. 什么是IDS? IDS是入侵检测系统,一种对于网络传输进行及时监视,在发现可疑的传输时发出警报或者采取主动反应措施的网络安全设备。IDS是一种积极地主动的防御技术。 2. IDS和防火墙有什么不同? 防火墙是一种隔离并过滤非授权用…

CV前沿方向:Visual Prompting 视觉提示工程下的范式

prompt在视觉领域,也越来越重要,在图像生成,作为一种可控条件,增进交互和可控性,在多模态理解方面,指令prompt也使得任务灵活通用。视觉提示工程,已然成为CV一个前沿方向! 下面来看看…

Python Numpy入门基础(二)数组操作

入门基础(二) NumPy是Python中一个重要的数学运算库,它提供了了一组多维数组对象和一组用于操作这些数组的函数。以下是一些NumPy的主要特点: 多维数组对象:NumPy的核心是ndarray对象,它是一个多维数组对…

TCP/IP协议详解(二)

目录内容 TCP协议的可靠性 TCP的三次握手 TCP的四次挥手 C#中,TCP/IP建立 三次握手和四次挥手常见面试题 在上一篇文章中讲解了TCP/IP的由来以及报文格式,详情请见上一篇文章,现在接着来讲讲TCP/IP的可靠性以及通过代码的实现。 在TCP首部的…

Javadoc comment自动生成

光标放在第二行 按下Alt Shift j 下面是Java doc的生成 Next Next-> Finish

java多线程(超详细)

1 - 线程 1.1 - 进程 进程就是正在运行中的程序(进程是驻留在内存中的) 是系统执行资源分配和调度的独立单位 每一进程都有属于自己的存储空间和系统资源 注意:进程A和进程B的内存独立不共享。 1.2 - 线程 线程就是进程中的单个顺序控制…

【数据预测】基于蜣螂优化算法DBO的VMD-KELM光伏发电功率预测 短期功率预测【Matlab代码#53】

文章目录 【可更换其他算法,获取资源请见文章第6节:资源获取】1. 蜣螂优化算法DBO2. 变分模态分解VMD3. 核极限学习机KELM4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法,获取资源请见文章第6节:资源获取】 1. 蜣螂…

【雕爷学编程】Arduino动手做(175)---机智云ESP8266开发板模块8

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

二、vagrant中安装centos-7

篇章二、vagrant中安装centos-7 前言 使用Vagrant创建镜像时,需要指定一个镜像,也就是box,若不存在Vagrant则会先从网上下载,而后缓存在本地目录下。 Vagrant有一个 镜像网站 ,可以根据需要在这个网站中下载所需镜像…

Banana Pi 推出带有 2 个 2.5GbE 端口的迷你路由器开源硬件开发板

Banana Pi 今天推出了一款迷你路由器板,基于 MediaTek MT7986 无线网络片上系统,针对路由器进行了优化。Banana Pi BPI-R3 迷你路由器板还支持无线连接,起价约为 78.95 美元。 产品公告显示,这款新路由器板集成了 MediaTek Filog…

LAL v0.34.3发布,G711音频来了,Web UI也来了

Go语言流媒体开源项目 LAL 今天发布了v0.34.3版本。 LAL 项目地址:https://github.com/q191201771/lal 老规矩,简单介绍一下: ▦ 一. 音频G711 新增了对音频G711A/G711U(也被称为PCMA/PCMU)的支持。主要表现在: ✒ 1) rtmp G71…

《向量数据库指南》——使用Milvus Cloud操作员安装Milvus Cloud独立版

Milvus cloud操作员HelmDocker Compose Milvus cloud Operator是一种解决方案,帮助您在目标Kubernetes(K8s)集群上部署和管理完整的Milvus cloud服务堆栈。该堆栈包含所有Milvus cloud组件和相关依赖项,如etcd、Pulsar和MinIO。本主题介绍如何使用Milvus cloud Operator安…

Git的安装以及本地仓库的创建和配置

文章目录 1.Git简介2.安装Git2.1在Centos上安装git2.2 在ubuntu上安装git 3.创建本地仓库4.配置本地仓库 1.Git简介 Git是一个分布式版本控制系统,用于跟踪和管理文件的更改。它可以记录和存储代码的所有历史版本,并可以方便地进行分支管理、合并代码和协…

01_补充)docker学习 centos7 yum指令在线安装docker

安装前环境确认 目前,CentOS 仅发行版本中的内核支持 Docker。 Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。 Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。 1.查看Linux 版本 …

DLA :pytorch添加算子

pytorch的C extension写法 这部分主要介绍如何在pytorch中添加自定义的算子,需要以下cuda基础。就总体的逻辑来说正向传播需要输入数据,反向传播需要输入数据和上一层的梯度,然后分别实现这两个kernel,将这两个kernerl绑定到pytorch即可。 a…

iOS开发-聊天emoji表情与自定义动图表情左右滑动控件

iOS开发-聊天emoji表情与自定义动图表情左右滑动控件 之前开发中遇到需要实现聊天emoji表情与自定义动图表情左右滑动控件。使用UICollectionView实现。 一、效果图 二、实现代码 UICollectionView是一种类似于UITableView但又比UITableView功能更强大、更灵活的视图&#x…

window.location.href is not a function

在使用uniapp跳转到外部页面时,使用window.location.href报错 解决: 当出现"window.location.href is not a function"的错误时,这通常是因为在某些浏览器中,window.location.href被视为只读属性,而不是函…

时频分析方法的matlab实现

傅里叶变换 function [ output_args ] example3_7( input_args ) %EXAMPLE3_7 Summary of this function goes here % Detailed explanation goes here clc; clear; fs12800;%采样频率 s1load(Sig1.txt); s2load(Sig2.txt); lslength(s1); figure(1) subplot(211) plot…

c++11 标准模板(STL)(std::basic_filebuf)(八)

定义于头文件 <fstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_filebuf : public std::basic_streambuf<CharT, Traits> std::basic_filebuf 是关联字符序列为文件的 std::basic_streambuf 。输入序…

【力扣每日一题】2023.7.29 环形链表

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个链表&#xff0c;让我们判断这个链表是否有环。我们可以直接遍历这个链表&#xff0c;最后能走到链表末尾也就是空指针那就…