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

图神经网络GNN介绍

目录标题

    • 图神经网络基础
      • 图基本模块定义
      • 图的邻接矩阵
      • 点特征的更新(重构)
      • 多层GNN
    • 图卷积GCN模型
      • GCN基本思想
      • 网络层数:
      • 基本计算
    • 图注意力机制graph attention network
      • T-GCN序列图神经网络
    • 图相似度

图神经网络基础

图基本模块定义

三个特征:

  • 点–特征向量表示
  • 边–表示关系(分有向/无向)
  • 图—图向量(全局)

无论事整的多么复杂,我们利用图神经网络的目的就是整合特征,重构特征
目的:做好点特征,边特征,最后做好整体的图特征。借助图结构把这些特征做好(点、边、全局的)embedding
输出结果:对点/边/图 做分类、回归

图的邻接矩阵

邻接矩阵:告诉计算机每个点的邻居都有谁
在这里插入图片描述
有连接关系的标1,无关系的标0.
双向边的邻接矩阵对称的
GNN(A,X)传入模型中,邻接矩阵,点的特征

文本数据也可以表示图的形式,邻接矩阵表示的连接关系
在这里插入图片描述
蓝色表示1,白色表示0,比较稀疏的矩阵。
注:在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵

邻接矩阵在代码中传入的一般不是N * N的,而是2 * N
在这里插入图片描述
[source,target]:从。。到。。

点特征的更新(重构)

点的更新,不仅考虑自身信息,也考虑邻居的信息
结合邻居与自身信息:
在这里插入图片描述
sigam激活函数,w权重,可学习的权重参数
聚合操作可以当作全连接层,更新的方法有很多,可以自己设置(求和,求均值,最大,最小)
在这里插入图片描述

多层GNN

GNN也可以有多层:

  • GNN的本质就是更新各部分特征
  • 其中输入是特征,输出也是特征,邻接矩阵也不会变的
    在这里插入图片描述
    原始输入–第一次结果–第二次结果
    图结构与邻接矩阵不变,在变的是点特征

感受野:随着卷积的进行,每个点能感受到的区域越来越大

图卷积GCN模型

图中常见任务:

  • 节点分类,对每个节点进行预测,不同点是否有连接预测
  • 整个图分类,部分图分类等,不同子图是否相似,异常检测等
  • GCN归根到底还是要完成特征提取操作,只不过输入对象不需要是固定格式

通常交给GCN两个东西就行:1.各节点输入特征;2.网络结构图
交给图神经网络,用损失函数去迭代去更新

GCN并不是纯的有监督学习,这个也是GCN优势:不需要全部标签,用少量标签也能训练。
计算损失时只用有标签的(交通预测中,偏远地区没有人工标签数据)
要让某一个点的损失小,那么它的邻居也要损失小,所以适合做半监督问题。

GCN基本思想

针对橙色节点,计算它的特征:平均其邻居特征(包括自身)后传入神经网络:
如何重构/更新黄色点:先聚合综合(平均)— 经过神经网络,即加上可训练参数—得到两维向量
在这里插入图片描述

网络层数:

这个跟卷积类似,GCN也可以做多层,每一层输入的还是节点特征
然后将当前特征与网络结构图继续传入下层就可以不断算下去了
在这里插入图片描述
原邻接矩阵–每个点更新–激活函数RELU— 第二次更新–激活函数RELU—经过图卷积的洗,最后得到每个点对应的向量。

但一般不用做太多层(通过6个人可以认识任何一个人),上图栗子中,做两次就能看到其余所有点。

基本计算

图中基本组成:
G就是咱们的图
A是邻接矩阵
D是各个节点的度
F是每个节点的特征
在这里插入图片描述

特征计算方法:其实就是邻接矩阵与特征矩阵进行乘法操作,表示聚合邻居信息
在这里插入图片描述
问题1:光想着别人,没考虑自己呢。
在这里插入图片描述
在这里插入图片描述
问题2:只考虑了加法,没考虑平均
其实就是对度矩阵乘以度矩阵D的逆矩阵,这样就相当于平均的感觉了
在这里插入图片描述
在这里插入图片描述

这里1/2相当于是对第一行做归一化操作,列也应该做归一化:

在这里插入图片描述在这里插入图片描述
这样相当于归一化了两次,数导致更小了,应该开一个根号:
在这里插入图片描述
为什么这样做:
下面的小红和小绿,A和B两个人的度都要考虑进来,
在这里插入图片描述
在这里插入图片描述
因为小绿的度大会把其关系的权重变的很小,造成对小红的影响没有那么大。

最终公式:
例如完成一个十分类任务的,F就为10表示输出层

在这里插入图片描述
第一层:邻接矩阵,重新组合特征X,做一组预设乘上权重参数,套上激活函数relu
第二层:一样的

其中邻居矩阵是更新过的,
在这里插入图片描述

GCN的层数:
理论上来说肯定越大越好
但是实际的图中可能不需要那么多
在社交网络中,只需6个人你可以认识全世界
所以一般的GCN层数不会特别多
经过实验:在多个图数据集中,都发现两三层的比较合适,多了反而变差

图注意力机制graph attention network

哪个节点影响大,哪个节点影响小,需要权重来区分
栗子:5个点,每个点是四维数据。
通过权重来区分影响大小,2,3点对1的影响是否应该一样?
在这里插入图片描述
在这里插入图片描述
邻接矩阵[5×5] :N×N
特征矩阵[5×4] :5个点,每个点是四维数据。
可训练权重参数w[4×8]
聚合更新:[5,8]

这是前面的内容,这一节主要是引入一个权重项
在这里插入图片描述
公式:
在这里插入图片描述
hi,hj:点i与点j的特征
w:可训练的权重参数,先进行维度映射
拿到两个特征后,做内积—来体现权重值
a:指attention
在这里插入图片描述softmax:归一化,2对1的权重和3对1的权重,之和要为1
exp(eij):指对eij做ex 的幂次映射,让结果差异大一些

残留问题:a的计算

1×5维特征向量,称上一个5×8的向量,变成8维向量。并拼接
加入一个可训练可学习的权重参数矩阵
再称一个16×1的矩阵,得到一个值,作为我们的权重.
因为权重要为正值,加上relu激活函数,
最后归一化一下
在这里插入图片描述
attention其实就是对邻接矩阵进行了加权,多加了一次处理
1对2的权重e12,其实改的就是邻接矩阵中a12处的数值。

T-GCN序列图神经网络

有些图随时间变化而变化
1,随着时间变化,点的特征在变
2,随着时间变化,点的特征在变,图结构也在变
套进RNN中
应用:疫情蔓延图,交通流量随时间变化

图相似度

论文链接

输入:两个/多个图结构
输入到图神经网络
输出:进行匹配相似度,输出得分

相关文章:

图神经网络GNN介绍

目录标题图神经网络基础图基本模块定义图的邻接矩阵点特征的更新(重构)多层GNN图卷积GCN模型GCN基本思想网络层数:基本计算图注意力机制graph attention networkT-GCN序列图神经网络图相似度图神经网络基础 图基本模块定义 三个特征&#x…...

【面试】TCP、UDP、Socket、HTTP网络编程面试题

文章目录什么是网络编程网络编程中两个主要的问题网络协议是什么为什么要对网络协议分层计算机网络体系结构1 TCP / UDP1.1 什么是TCP/IP和UDP1.2 TCP与UDP区别:1.3 TCP和UDP的应用场景:1.4 形容一下TCP和UDP1.5 运行在TCP 或UDP的应用层协议分析。什么是…...

Python语言的文件读写

🥑高级语言有很多共同之处,在文件读写这一部分我们就可以类比着之前我们过的C语言的文件读写的操作进行处理。 🥑还记得我们C语言当中的文件进行操作时所需要的哪些步骤吗?文件打开,文件读/写操作,文件关闭。我们的Py…...

面向对象 ( 上 )

Java面向对象 ( 上 ) 观看b站尚硅谷视频做的笔记 1、 面向过程 (POP) 与面向对象 (OOP) 2、类和对象 2.1、Java 类及类的成员 属性:对应类中的成员变量 行为:对应类中的成员方法。 2.2、类与对象的创建及使用 一、设计类,就是设计类的…...

Node.js学习笔记——会话控制

一、介绍 所谓会话控制就是对会话进行控制 HTTP 是一种无状态的协议,它没有办法区分多次的请求是否来自于同一个客户端, 无法区分用户 而产品中又大量存在的这样的需求,所以我们需要通过 会话控制 来解决该问题 常见的会话控制技术有三种&a…...

tsconfig.json参数详解

tsconfig.json是ts编译器的配置文件,ts编译器可以根据他的信息来对代码进行编译。 想要学习这篇文章小伙伴,可以先去看看下面文章,可以明白tsconfig.json的由来以及如何编译: 在vscode中使用Typescript并运行_typescript vscode…...

Pyecharts Geo绘制可视化地图并展示坐标位置

文章目录 Pyecharts Geo绘制可视化地图安装需要的模块绘制出地图生成空白地图修改参数,调整地图输出格式地图上展示坐标位置输入坐标点将坐标点添加入系列并配置系列完整代码参考文献Pyecharts Geo绘制可视化地图 安装需要的模块 pip install pyecharts绘制出地图 生成空白…...

什么是Hbuilder?--前端工具IDE

一,简介HBuilder 1.1HBuilder HBuilder是DCloud(数字天堂)推出的一款支持HTML5的Web开发IDE。HBuilder的编写用到了Java、C、Web和Ruby。HBuilder本身主体是由Java编写。它基于Eclipse,所以顺其自然地兼容了Eclipse的插件从Fron…...

07-centos-更改数据源、打补丁、查看内核

本文主要是介绍linux-centos的常用操作 更改数据源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo 查看内核 [rootcentos02 ~]# uname -a Linux centos02 2.6.32-642.el6.x86_64 #1 SMP Tue May 10 17:27:01 UTC 2016 x86_64 …...

flac格式如何转mp3,3种简单方法值得收藏

flac格式如何转mp3?mp3是小伙伴们所熟知的音频格式,相信flac格式也一定有小伙伴知道,它是一种无损音频压缩格式,是目前流行的数字音乐文件格式之一。那么为什么要将flac格式转换成mp3格式呢,这里小编就给大家讲一讲fla…...

停车位 蓝桥杯模拟

【问题描述】 小蓝要在路边划分停车位。 他将路边可停车的区域划分为L个整数小块,编号1至L。一个车位需要连续的K 个小块,停车位不能重 叠。有的小块属于井盖、消防通道等区域,不能停车。 请问小蓝最多划分出多少个停车位? 【输入…...

ftrace使用实战

诉求:遇到一个问题 echo blocked > /sys/class/block/sdb/device/state 报非法参数,想要知道根因,但是对这块内核代码不熟悉,不知道从哪里下手,那就先用ftrace看看内核调用栈,如下所示。 rootrlk:/home…...

【C#进阶】C# 不安全代码

序号系列文章20【C#进阶】C# 泛型21【C#进阶】C# 匿名方法22【C#进阶】C# 多线程文章目录前言1、什么是不安全代码?2、如何编译不安全代码?3、指针类型4、指针执行的运算符和语句5、固定大小的缓冲区6、函数指针7、不安全代码的总结结语前言 &#x1f4d…...

Docker安装部署ElasticSearch

1.部署单点ElasticSearch 1.1.创建网络 因为我们还需要部署kibana容器,因此需要让ElasticSearch和kibana容器互联。这里先创建一个网络: docker network create es-net1.2.拉取镜像 考虑到ElasticSearch的兼容性,这里ElasticSearch、kiba…...

【新2023Q2模拟题JAVA】华为OD机试 - 快递业务站

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:快递业务站 题目 快递业务范…...

OpenCV入门(二十四)快速学会OpenCV 23 傅里叶变换

OpenCV入门(二十四)快速学会OpenCV 23 傅里叶变换1.傅里叶变换理论概述2.Numpy实现傅里叶变换2.1 傅里叶变换2.2 傅里叶逆变换2.3 高通滤波3.OpenCV实现傅里叶变换3.1 实现傅里叶变换3.2 实现傅里叶逆变换3.3 低通滤波作者:Xiou 1.傅里叶变换…...

线段树合并

前置知识:权值线段树,动态开点。 引入 我们先来看一道题: 永无乡包含 nnn 座岛,给出每座岛的重要度的排名,名次用 111 到 nnn 来表示。一开始有 mmm 条边连接,接下来有 qqq 次操作。操作分两种&#xff…...

研发效能 | DevOps如何改变游戏公司工作方式?

如果你是游戏开发者,那么在过去几年里,你可能会觉得有人给了你一把双刃剑。 整个行业不断蓬勃发展,但玩家的预期值也越来越高。玩家们总是希望游戏体验能够更快、更真实、更具创造性。此外,他们还希望能够定期推出新的游戏和更新…...

Mongo聚合和Springboot整合Mongo聚合

聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。 语法格式:db.集合名称.aggregate({管道:{表达式}}) 常用管道如下: $group: 将集合中的⽂…...

第06章_索引的数据结构

第06章_索引的数据结构 🏠个人主页:shark-Gao 🧑个人简介:大家好,我是shark-Gao,一个想要与大家共同进步的男人😉😉 🎉目前状况:23届毕业生,目…...

【Oracle APEX开发小技巧12】

有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

C++使用 new 来创建动态数组

问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

Selenium常用函数介绍

目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

腾讯云V3签名

想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...