【深度学习】可交互讲解图神经网络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

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

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

相关文章

Java 入门基础题

目录 1.输出一个整数的每一位 2.判定素数 3.求最大值方法的重载 4.输出闰年 5.打印 X 图形 6.数字9 出现的次数 7.计算分数的值 8. 模拟登陆 9.使用函数求最大值 10.斐波那契数列 星光不负赶路人,加油铁子们!!! 1…

RT-DETR算法优化改进:Backbone改进 | VanillaNet一种新视觉Backbone,极简且强大!华为诺亚2023

💡💡💡本文独家改进: VanillaNet助力RT-DETR ,替换backbone,简到极致、浅到极致!深度为6的网络即可取得76.36%@ImageNet的精度,深度为13的VanillaNet甚至取得了83.1%的惊人性能。 推荐指数:五星 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/cat…

11-13 /11-14代理模式 AOP

调用者 代理对象 目标对象 代理对象除了可以完成核心任务,还可以增强其他任务,无感的增强 代理模式目的: 不改变目标对象的目标方法的前提,去增强目标方法 分为:静态代理,动态代理 静态代理 有对象->前提需要有一个类,那么我们可以事先写好一个类&a…

【Python基础篇】字面量

博主:👍不许代码码上红 欢迎:🐋点赞、收藏、关注、评论。 格言: 大鹏一日同风起,扶摇直上九万里。 文章目录 一 Python中字面量的定义二 常见的字面量类型1 数字(Number)2 字符串(String)3 列表(List)4 元…

微信小程序:仅前端实现对象数组的模糊查询

效果 核心代码 //对数组进行过滤&#xff0c;返回数组中每一想满足name值包括变量query的 let result array.filter(item > { return item.name.includes(query); }); 完整代码 wxml <input type"text" placeholder"请输入名称" placeholder-styl…

前端工具nvm实现node自由

node的自由之路 前言 大家使用vue框架开发的朋友可能会遇到首次运行公司项目环境的时候&#xff0c;会出现使用npm install命令安装依赖包的时候出现各种各样的问题&#xff0c;其中很重要的一个错误原因就是因为你的nodejs版本和当时搭建环境的版本不一致造成的。今天就来给…

R语言——taxize(第一部分)

ropensci 系列之 taxize &#xff08;中译手册&#xff09; taxize 包1. taxize支持的网络数据源简介目前支持的API&#xff1a;针对Catalogue of Life&#xff08;COL&#xff09; 2. 浅尝 taxize 的一些使用例子2.1. **从NCBI上获取唯一的分类标识符**2.2. **获取分类信息**2…

网络安全基础之php开发文件上传的实现

前言 php是网络安全学习里必不可少的一环&#xff0c;简单理解php的开发环节能更好的帮助我们去学习php以及其他语言的web漏洞原理 正文 在正常的开发中&#xff0c;文件的功能是必不可少&#xff0c;比如我们在论坛的头像想更改时就涉及到文件的上传等等文件功能。但也会出…

基于SpringBoot+Vue的宿舍管理系统

基于SpringBootVue的学生宿舍管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 宿舍公告 登录界面 管理员界面 维修人员 商家界面 学生界面 摘要 摘…

Azure 机器学习:在 Azure 机器学习中使用 Azure OpenAI 模型

目录 一、环境准备二、Azure 机器学习中的 OpenAI 模型是什么&#xff1f;三、在机器学习中访问 Azure OpenAI 模型连接到 Azure OpenAI部署 Azure OpenAI 模型 四、使用自己的训练数据微调 Azure OpenAI 模型使用工作室微调微调设置训练数据自定义微调参数部署微调的模型 使用…

Python---集合中的交集 、并集 | 与差集 - 特性

用 & 来求两个集合的交集&#xff1a;-----键盘上的7上的符号&#xff0c;shift 7 同时按 用 | 来求两个集合的并集&#xff1a; -----键盘上的7上的符号&#xff0c;shift 同时按&#xff08;就是enter键上面那个|\ &#xff09; 用 - 来求两个集合的差集&#xff…

抖斗音_快块手直播间获客助手+采集脚本+引流软件功能介绍

软件功能&#xff1a; 支持同时采集多个直播间&#xff0c;弹幕&#xff0c;关*注&#xff0c;礼*物&#xff0c;进直播间&#xff0c;部分用户手*号,粉*丝团采集 不支持采集匿*名直播间 设备需求&#xff1a; 电脑&#xff08;win10系统&#xff09; 文章分享者&#xff1…

Kerberos认证系统

文章目录 前提知识原理第一次对话第二次对话第三次对话 总结发现 前提知识 KDC&#xff1a;由AS、TGS&#xff0c;还有一个Kerberos Database组成。 Kerberos Database用来存储用户的密码或者其他所有信息&#xff0c;请求的时候需要到数据库中查找。 AS&#xff1a;为客户端提…

Python爬虫抓取微博数据及热度预测

首先我们需要安装 requests 和 BeautifulSoup 库&#xff0c;可以使用以下命令进行安装&#xff1a; pip install requests pip install beautifulsoup4然后&#xff0c;我们需要导入 requests 和 BeautifulSoup 库&#xff1a; import requests from bs4 import BeautifulSou…

No203.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

小H靶场学习笔记:DC-2

DC-2 Created: November 10, 2023 3:01 PM Tags: WordPress, git提权, rbash逃逸 Owner: 只会摸鱼 靶场过程 信息收集 扫描存活主机&#xff0c;找到靶机ip&#xff1a;192.168.199.131&#xff08;本机是192.168.199.129&#xff09; 扫描端口开放协议 发现有80端口和77…

2023nacos源码解读第3集——nacos-client核心功能之微服务调用和配置管理测试

文章目录 1、测试项目2、项目注意事项3、 测试核心功能3.1 测试服务调用与负载均衡3.2 测试配置监听 4、参考文档 1、测试项目 项目地址 nacos-service-a nacos-service-b 2、项目注意事项 项目初始化可以使用aliyun spring initializer ,以更方便的使用springcloud alibaba…

hive里因为列名用了关键字导致建表失败

代码 现象 ParseException line 6:4 cannot recognize input near percent String COMMENT in column name or primary key or foreign key 23/11/13 11:52:57 ERROR org.apache.hadoop.hive.ql.Driver: FAILED: ParseException line 6:4 cannot recognize input near percent …

雷达测角原理、测角精度、测角分辨率以及3DFFT角度估计算法汇总

1.角度测量方法 依据&#xff1a;电磁波的直线传播和雷达天线的方向性。 分类&#xff1a;振幅法测角、相位法测角 1.1 相位法测角 相位法测角利用多个天线所接收回波信号之间的相位差进行测角。如下图所示&#xff1b; 图 1 设在θ方向有一远区目标&#xff0c;则到达接收点…

一个破单机,也要用远程缓存?

大家好&#xff0c;豆小匠终于开始Coding了&#xff0c;这期来聊聊实战相关的杂谈。 正文开始&#xff01; 作为编程萌新的时候&#xff0c;总想着把程序做复杂&#xff0c;堆技术栈。 但是程序是为场景服务的&#xff0c;比如&#xff0c;我想提高接口的响应速度&#xff0c…