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

【深度学习】可交互讲解图神经网络GNN

在正式开始前,先找准图神经网络GNN(Graph Neural Network)的位置。

图片

图神经网络GNN是深度学习的一个分支。

深度学习的四个分支对应了四种常见的数据格式,前馈神经网络FNN处理表格数据,表格数据可以是特征向量,卷积神经网络CNN处理图像数据,循环神经网络RNN处理时序数据,图神经网络GNN处理图数据。

这里的FNN指的是如下图所示的带有输入层,隐藏层,输出层的网络。

图片

但这四种对应关系并不是一成不变。

如果将图像拉直成向量,同样可以用FNN来处理。

声音文本这类时序数据,用RNN类型的网络最适合,但如果你把一个句子当作一个1*N的矩阵,那就可以用CNN处理了,只不过,CNN需要堆叠多个层来抓取时序数据中的上下文信息,这在图像领域被称为感受野。

注意:虽然可以通过一定的技巧把句子表示成矩阵然后用CNN处理,但从本质上来说,CNN还是不如RNN更适合处理时序数据。

如果将图像划分成patch,这些pathces组成序列,同样也可以用Transformer处理,这就是Vision Transformer:ViT。

而今天要讲的GNN,既能处理表格数据,又能处理图像,文本。

更准确地说,只要能表示成GNN兼容的图数据结构就能用GNN处理。

今天的文章来自distill发布的一篇博文:A Gentle Introduction to Graph Neural Networks。

网址:https://distill.pub/2021/gnn-intro/
B站沐神视频讲解:https://www.bilibili.com/video/BV1iT4y1d7zP/?spm_id_from=333.999.0.0

这篇文章写的非常好,亮点是不光有交互式图表,还有PlayGround,可见作者是下了一番功夫的。

先科普一下什么是Playground?

Playground通常指在机器学习和人工智能领域用来交互式体验和可视化AI模型的一种系统或平台。

下面展示两个AI Playground。

https://catalog.ngc.nvidia.com/orgs/nvidia/teams/playground/models/clip

https://catalog.ngc.nvidia.com/orgs/nvidia/teams/playground/models/codellama

NVIDIA NGC或者Hugging face上有更多好玩的AI Playground,大家可以亲自去体验一下。
https://huggingface.co/
https://catalog.ngc.nvidia.com/

A Gentle Introduction to Graph Neural Networks
https://distill.pub/2021/gnn-intro/
但我不会将上面的文章原样照搬过来,而是进行概括性的总结,大家一定一定去阅读原文,因为原文里有大量的交互式图表和Playground,能加速对GNN的理解。

今天的主角是GNN,而GNN处理的对象是图Graph。跟其它神经网络一样,在其出现之前,都有传统的方法来处理对应的数据结构。

但是在数据量和算力的加持下,为了完成更复杂的任务,对应的神经网络应运而生,GNN也是如此。

后续内容主要分为四部分

1.什么样的数据可以很自然的表示成图
2.图与其它类型数据的不同之处以及如何应对这种不同
3.构建一个GNN
4.构建一个Playground在真实数据上进行训练

什么是图?

图是由节点和边组成的,用于表示对象之间关系的数据结构。

图也分为有向图和无向图,例如,社交媒体中,如果互相关注了则是无向图,如果像B站这样,我关注了你,但你并没有关注我,则是有向图。

图片

在这里插入图片描述

节点有自己的属性,边有自己的属性,整个图也有自己的属性,如上图,属性可以用标量或者向量表示。向量大小可以不一致。

前面已经透漏了GNN可以处理图像和文本,那么图像和文本就可以表示成图。

先透露一下计算机如何存储图,一种是邻接矩阵,一种是邻接表。

图像的每个像素即是一个节点,节点的属性自然就是RGB值,相邻像素之间用一条边来表示相邻关系,这里用邻接矩阵来表示连接性。

在这里插入图片描述

同理,一个句子中每个字符,每个单词,每个Token都可以看作是一个节点,相邻节点之间可以用一条有向边相连,这就构成了一个有向图。

在这里插入图片描述

除此之外,还有很多其它数据可以表示成图。

分子由两个或多个原子通过共用电子对构成化学键而连接成一个整体,分子之间不同的连接方式构成了不同的物质。

在这里插入图片描述

社会是一个大家庭,所有成员和之间的关系构成了一个复杂的社交网络。

在这里插入图片描述

如果能够充分利用这个网络,就能发挥巨大价值,例如,知识图谱,推荐系统。

引用关系也可以组织成图,例如,维基百科中每个网页都会列出引用资料。

好了,到此我们已经能够把很多事物表示成图的形式,这样就够用GNN来处理了,那到底能干什么呢?

GNN主要能处理三种类型的任务。

图层面任务

对图的整体进行预测,GNN输出对整个图的预测属性,例如,下图中分辨出具有两个环的图,这就是一个针对整个图的分类任务。

在这里插入图片描述

对于图像和文本而言,图层面的任务类似于MINIS数字分类,或者句子情感分析,例如。判断一个句子表达的是正向情绪还是负面情绪。

顶点层面任务

GNN预测图中每一个节点的属性,例如,下图,预测社交网络中的成员是否是诈骗分子。这就是一个节点分类任务。

在这里插入图片描述

对于图像和文本而言,顶点层面的任务类似于图像分割,图像分割不就是对每个像素分类嘛,对于文本,就是预测句子中每个单词的词性(例如名词、动词、副词等)。

边层面任务

边的存在与否是一种结构属性,也就是连接性,GNN也可以预测图中边的非结构属性,什么是非结构属性?对于一个社交网络而言,边代表节点之间有关系,但如何度量亲疏程度呢?这就涉及边的非结构属性了。

预测亲疏程度是一个回归任务,下图则是一个分类任务,每一条边只能是watching,fighting,standing on中的一种。

图片

图片

后面我们会看到,这三类任务可以用一个统一的GNN网络解决。

GNN所面对的挑战

前面对于节点,边,图的属性预测GNN都能处理,但对于节点之间的连接性预测却是一种挑战,前面说过用邻接矩阵来表示连接性,当节点数增加,矩阵会变得非常稀疏,内存利用率很低,

例如,下图,仅有四个节点的随机组合对应的邻接矩阵就非常庞大了。

何况更多节点呢?

在这里插入图片描述

另外,当你将矩阵转置后,GNN输出结果不应该改变,因为转置没有改变节点之间的关系。

图片图片
在这里插入图片描述

为了解决邻接矩阵带来的挑战,邻接列表应运而生。

在这里插入图片描述

到此我们已经扫清了所有障碍,接下来我们就构建一个简单的分类网络,来看看GNN是如何做预测的?

图片

前面我们说过节点,边,图的属性就是一堆向量,也就是前面说的表格数据,处理向量用MLP就可以了,当然你也可以用其他网络,如上图,节点,边,图各有一个MLP,所有点参数共享,也就是所有点共用一个MLP,所有边共用一个MLP。

另外,Layner n+1与上一层相比,图的连接性没变,只改变了属性。也就是可以继续使用初始的邻接链表。

上图构成了一个GNN block,也叫做GNN层,类似CNN中的卷积层,多个GNN 层可以进行累加形成更复杂的网络。

有了GNN block,如果要构建一个节点二分类任务,那么用下面这个网络就够了。

图片

但是,如果一个图只有边有信息,而节点没有存储信息,又要对节点进行分类,该怎么办?

此时就需要把边的信息利用起来了,这被称为信息聚合。

在这里插入图片描述

如上图,当对一个节点进行预测时,将所有与其相连的边的信息聚合起来作为节点的属性。

聚合操作可以时平均值,最大值,总和。

所以,有了信息聚合后,如果只有边的属性,要对节点分类,网络结构如下:

图片

同理,有了信息聚合后,如果只有节点信息,要对边分类,网络结构如下:

图片

有了信息聚合后,只有节点信息,对图分类:

图片

最终的GNN结构如下:

图片

有了信息聚合,就能构建更复杂的GNN网络,这个网络不仅能二分类同样适用于多分类问题。

但是你发现没,上面这个简单的GNN网络并没有利用连接性信息,每个节点以及每条边和全局上下文都是独立处理的。只有在聚合信息进行预测时才使用连接性。

所以,我们可以更进一步的利用聚合信息操作,这样就能进行更复杂的预测。

那么该怎么做呢?

我们可以使用消息传递的方法来实现这一点,即相邻节点或边之间交换信息并影响彼此更新的嵌入。

在这里插入图片描述

如上图,也就是在处理当前节点时,把相邻节点的信息聚合过来。

这跟卷积操作有点像,一个特征图的像素对应上一层的一个相邻区域。

在这里插入图片描述

有了信息传播操作后,我们的GNN网络更新如下:

节点层面任务:

图片

边层面任务:

图片

图层面任务:

图片

最后,展示了一个Playground,可以改变网络的层数,聚合操作类型,以及各个属性向量的长度,可以通过最终的模型性能来展示各个参数的影响。

在这里插入图片描述

参考资料:

[1]https://distill.pub/2021/gnn-intro/
[2]https://www.bilibili.com/video/BV1iT4y1d7zP/?spm_id_from=333.999.0.0

相关文章:

【深度学习】可交互讲解图神经网络GNN

在正式开始前,先找准图神经网络GNN(Graph Neural Network)的位置。 图神经网络GNN是深度学习的一个分支。 深度学习的四个分支对应了四种常见的数据格式,前馈神经网络FNN处理表格数据,表格数据可以是特征向量,卷积神经网络CNN处理…...

网工内推 | 运维工程师,软考认证优先,全额社保

01 北京中科网威信息技术有限公司 招聘岗位:运维工程师 职责描述: 1 熟悉网络安全标准,等级保护管理制度 2 负责等级保护管理制度的的企业管理要求编写; 3 熟系网络组网和相关安全产品; 4 负责用户需求挖掘、分析和…...

查找或替换excel换行符ctrl+j和word中的换行符^p,^l

一、excel中 直接上图。使用ctrlh调出替换,查找内容里按ctrlj(会出现一个闪的小点),即为换行符。 二、word中 在word中,^p和^l分别代表换行符(enter)和手动换行符(使用shiftenter&…...

pytorch_神经网络构建5

文章目录 生成对抗网络自动编码器变分自动编码器重参数GANS自动编码器变分自动编码器gans网络Least Squares GANDeep Convolutional GANs 生成对抗网络 这起源于一种思想,假如有一个生成器,从原始图片那里学习东西,一个判别器来判别图片是真实的还是生成的, 假如生成的东西能以…...

安卓常见设计模式5------桥接模式(Kotlin版)

1. W1 是什么,什么是桥接模式? 桥接模式是一种结构性模式。 桥接模式旨在将抽象与实现解耦,使它们可以独立地变化。可以这么理解,面向对象编程是单继承多实现的,如果我们有一个可扩展类,和多个相关的可扩展…...

tomcat web.xml文件中的session-config

<session-config>这个元素为该应用中创建的所有session定义默认超时时间&#xff0c;单位是分钟。这个值必须是整数。如果是0或者负数&#xff0c;表示不超时。如果该元素没有设置&#xff0c;容器设置一个默认值。 例如&#xff1a; <session-config><session…...

Hadoop知识点全面总结

文章目录 什么是HadoopHadoop发行版介绍Hadoop版本演变历史Hadoop3.x的细节优化Hadoop三大核心组件介绍HDFS体系结构NameNode介绍总结 SecondaryNameNode介绍DataNode介绍DataNode总结 MapReduce介绍分布式计算介绍MapReduce原理剖析MapReduce之Map阶段MapReduce之Reduce阶段 实…...

MSVCP140_CODECVT_IDS.dll丢失怎么办?推荐三个解决方法帮你解决

MSVCP140_CODECVT_IDS.dll是Microsoft Visual C 2015 Redistributable的一个组件&#xff0c;它包含了一些运行时库文件。当您在运行某些程序时&#xff0c;可能会遇到“msvcp140_codecvt_ids.dll丢失”的错误提示。为了解决这个问题&#xff0c;您可以尝试以下三种方法&#x…...

问题描述:64位计算机的寻址能力是多少TB

问题描述&#xff1a;64位计算机的寻址能力是多少TB 我在看到一个32位电脑的寻址能力计算时&#xff0c;看到是这么计算的。 虚拟内存的大小受到计算机地址位数的限制&#xff0c; 那么32位电脑的寻址能力计算应该是这样 为什么网上百度到的是16TB呢&#xff0c;如下图所示 中…...

【算法 | 数论 No.1】AcWing1246. 等差数列

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【AcWing算法提高学习专栏】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&a…...

竞赛 目标检测-行人车辆检测流量计数

文章目录 前言1\. 目标检测概况1.1 什么是目标检测&#xff1f;1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 行人车辆目标检测计数系统 …...

秋招进入尾声了,还有哪些公司和岗位可以投递?

24届秋招基本已经进入尾声了&#xff0c;接下来就是秋招补录了&#xff0c;最近在微信群看到一些同学再问哪些公司还在招人的。 在这里跟大家分享一份2024届秋招信息汇总表&#xff0c;目前已更新2000家&#xff0c;不仅有互联网公司&#xff0c;还有外企、国企、各类研究所&am…...

CSS 文字溢出省略号显示

1. 单行文本溢出显示省略号 需要满足三个条件&#xff0c;添加对应的代码&#xff1a; &#xff08;1&#xff09;先强制一行内显示文本&#xff1b; &#xff08;2&#xff09;超出的部分隐藏&#xff1b; &#xff08;3&#xff09;文字用省略号来替代省略的部分&#xf…...

POD创建与删除简单描述

创建一个 Pod 的过程可以分为以下几个步骤&#xff1a; 用户使用 kubectl create 命令或 YAML 文件向 API 服务器发送创建 Pod 的请求。API 服务器将请求转换为 Kubernetes 的内部对象&#xff0c;并将 Pod 的状态设置为 Pending。调度器根据 Pod 的资源需求和节点的资源情况&…...

AndroidStudio打包报错记录(commons-logging,keystore password was incorrect)

场景&#xff1a; AndroidStudio2022打包APK的时报错 1.commons-logging依赖冲突 报错主要信息如下 Error: commons-logging defines classes that conflict with classes now provided by Android. 通过报错信息可以看出&#xff0c;项目中的commons-logging与Android系统自带…...

如何构建企业数据资产?数据资产如何入资产负债表 ?

一、构建企业数据资产 1. 数据收集 需要从多渠道收集数据&#xff0c;包括企业内部系统、市场调研、社交媒体、客户反馈等。在收集数据时&#xff0c;需要注意数据的真实性、完整性和可靠性。同时&#xff0c;需要考虑如何将不同渠道的数据进行整合和标准化&#xff0c;以便后…...

代码随想录算法训练营Day 47 || 198.打家劫舍、213.打家劫舍II、337.打家劫舍 III

198.打家劫舍 力扣题目链接(opens new window) 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系…...

(论文阅读24/100)Visual Tracking with Fully Convolutional Networks

文献阅读笔记&#xff08;sel - CNN&#xff09; 简介 题目 Visual Tracking with Fully Convolutional Networks 作者 Lijun Wang, Wanli Ouyang, Xiaogang Wang, and Huchuan Lu 原文链接 http://202.118.75.4/lu/Paper/ICCV2015/iccv15_lijun.pdf 【DeepLearning】…...

第10章 文件和异常

目录 1. 从文件中读取数据1.1 读取整个文件1.2 逐行读取1.3 创建一个包含文件各行内容的列表 2. 写入文件2.1 写入空文件2.2 写入多行2.3 附加到文件 3. 异常使用try-except-else代码块 4. 存储数据使用json.dump()和json.load() 1. 从文件中读取数据 1.1 读取整个文件 with …...

【云栖2023】张治国:MaxCompute架构升级及开放性解读

简介&#xff1a; 本文根据2023云栖大会演讲实录整理而成&#xff0c;演讲信息如下 演讲人&#xff1a;张治国|阿里云智能计算平台研究员、阿里云MaxCompute负责人 演讲主题&#xff1a;MaxCompute架构升级及开放性解读 活动&#xff1a;2023云栖大会 MaxCompute发展经历了…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

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;供调用如何按…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...