当前位置: 首页 > news >正文

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

文章目录

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

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

图的定义和表示

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最基本的图神经网络概述

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

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

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

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

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

在这里插入图片描述

汇聚操作

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

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

在这里插入图片描述

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

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

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

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

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

全局向量信息的利用

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

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

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

在这里插入图片描述

相关文章:

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

文章目录 图的定义和表示可以使用图数据结构的问题将图结构用于机器学习的挑战最基本的图神经网络概述汇聚操作基于信息传递的改进图神经网络全局向量信息的利用 本篇文章参考发表于Distill上的图神经网络入门博客: A Gentle Introduction to Graph Neural Network…...

【Java开发】 Mybatis-Flex 01:快速入门

Mybatis 作为头部的 ORM 框架,他的增强工具可谓层出不穷,比如出名的 Mybatis-Plus 和 阿里云开源的 Fluent-MyBatis,如今出了一款 Mybatis-Flex ,相比前两款功能更为强大、性能更为强悍,不妨来了解一下。 目录 1 Myba…...

企业级业务架构学习笔记<二>

一.业务架构基础 业务架构的定义 以实现企业战略为目标,构建企业整体业务能力规划并将其传导给技术实现端的结构化企业能力分析方法 (业务架构可以从企业战略触发,按照企业战略设计业务及业务过程,业务过程时需要业务能力支撑的&#xff0…...

Minio在windows环境配置https访问

minio启动后,默认访问方式为http,但是有的时候我们的访问场景必须是https,浏览器有的会默认以https进行访问,这个时候就需要我们进行配置上的调整,将minio从http访问升级到https。而查看minio的官方文档,并…...

安装JDK环境(Windows+Linux双教程)

今日一语:今天的事情不去做,到了明天就成了麻烦,到了下个月就成了隐患,到了明年只剩下悔恨和惋惜 Linux 从Oracle网站下载linux的rpm包java -version 查询java环境是否已经安装 如果已经安装,可以选择卸载重装或者直接…...

SVG图标,SVG symbols,SVG use标签

SVG图标,SVG symbols 项目中图标的使用,趋势是使用svg作图标的,优点如下 兼容现有图片能力前提还支持矢量 可读性好,有利于SEO与无障碍 在性能和维护性方面也比iconfont要强很多 怎么在项目中优雅的使用svg图标,下面…...

常用css 笔记

0、定义变量 :root { --primary-color: #007bff;} .button { background-color: var(--primary-color);} 1、水平垂直居中 div {width: 100px;height: 100px;position: absolute;top: 0;right: 0;bottom: 0;left: 0;margin: auto; }父级控制子集居中 .parent {display: fle…...

git的ssh方式对接码云

一、环境准备: 1、git下载,360管家或是百度。 2、vs2022,百度下载。 二、配置git: 1、打开准备存放文件的文件夹,右键,选择“Git Bash here”,弹出命令窗口, 输入:ss…...

Golang之路---02 基础语法——变量

Golang变量 变量的声明 声明变量的一般形式是使用 var 关键字 Go 语言是静态类型语言,编译时,编译器会检查变量的类型,所以要求所有的变量都要有明确的类型。 1 :一个变量单行声明 语法格式: var name type var是关…...

Webpack5 DefinePlugin的作用

在Webpack 5中,DefinePlugin是一个插件,用于创建全局常量,这些常量可以在编译过程中被引用。它的作用是允许开发人员在代码中定义全局变量,这些变量在构建过程中将被替换为其对应的值。 DefinePlugin并不是必须的,但它…...

Verilog语法学习——LV7_求两个数的差值

LV7_求两个数的差值 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 描述 根据输入信号a,b的大小关系,求解两个数的差值:输入信号a,b…...

C#匿名函数,lambda表达式笔记

一.匿名函数 匿名函数是一种定义时不起函数名的技术,因此无法直接调用,通常用来赋值给委托后被委托调用。在匿名方法中您不需要指定返回类型,它是从方法主体内的 return 语句推断的 它的语法形式为:delegate (input-parameters)…...

【图论】LCA(倍增)

一.LCA介绍 LCA通常指的是“最近共同祖先”(Lowest Common Ancestor)。LCA是一种用于解决树或图结构中两个节点的最低共同祖先的问题的算法。 在树结构中,LCA是指两个节点的最近层级的共同祖先节点。例如,考虑一棵树,…...

QT 使用串口

目录 1.1.1 添加库,添加类 1.1.2 定义串口 1.1.3 搜索串口 1.1.4 设置和打开串口 1.1.5 读取数据 1.1.6 发送数据 1.1.7 关闭串口 1.1.1 添加库,添加类 首先,QT5 是自带 QSerialPort(Qt5 封装的串口类)这个类的,使用时…...

GitHub上怎么寻找项目?

前言 下面由我精心整理的关于github项目资源搜索的一些方法,这些方法可以帮助你更快更精确的搜寻到你需要的符合你要求的项目。 写文章不易,如果这一篇问文章对你有帮助,求点赞求收藏~ 好,下面我们直接进入正题——> 首先我…...

如何快速用Go获取短信验证码

要用Go获取短信验证码,通常需要连接到一个短信服务提供商的API,并通过该API发送请求来获取验证码。由于不同的短信服务提供商可能具有不同的API和授权方式,我将以一个简单的示例介绍如何使用Go语言来获取短信验证码。 在这个示例中&#xff0…...

详解Mybatis查询之resultType返回值类型问题【4种情况】

编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 Mybatis版本:3.5.6 文章目录 引言一、查询单行数据返回单个对象二、查询多行数据返回对象的集合三、 查询单行数据返回Map[Key,…...

Python-Python基础综合案例:数据可视化 - 折线图可视化

版本说明 当前版本号[20230729]。 版本修改说明20230729初版 目录 文章目录 版本说明目录知识总览图Python基础综合案例:数据可视化 - 折线图可视化json数据格式什么是jsonjson有什么用json格式数据转化Python数据和Json数据的相互转化 pyecharts模块介绍概况如何…...

CSS盒子模型(HTML元素布局)

CSS盒子模型是一种用于描述HTML元素布局的模型,它将每个元素看作是一个矩形的盒子,每个盒子由内容、内边距、边框和外边距组成。 盒子模型包括以下几个部分: 内容区域(Content) 内容区域是盒子中实际显示内容的部分&am…...

PostgreSQL-Centos7源码安装

卸载服务器上的pg13 本来是想删除原来的postgis重新源码安装就行,但是yum安装的PostgreSQL不能直接使用,会提示以下问题: 之前服务是用yum安装的,现在需要删除 -- 删除数据的postgis插件 drop extension postgis; drop extension postgis cascade;删除相关安装包 # 查询…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...