图神经网络 (GNN)

news2024/11/19 20:39:13

目录

  • 一、GNN介绍
    • 1.1引入
      • 1.1.1图的介绍
      • 1.1.2怎样将内容表示成图
      • 1.1.4图神经网络是在做什么
    • 1.2基本概念
  • 二、GNN流程
    • 2.1聚合
    • 2.2更新
      • 2.2.1一次GNN操作
    • 2.3循环
      • 2.3.1多层GNN操作
      • 2.3.2能做什么
  • 三、GNN算法原理
    • 3.1数据
    • 3.2变量定义
    • 3.3GNN算法
      • 3.3.1Forward
      • 3.3.2Backward
  • 四、GNN优势
  • 五、GNN应用
    • 5.1应用领域
      • 5.1.1芯片设计
      • 5.1.2场景分析与问题推理
      • 5.1.3 推荐系统
      • 5.1.4欺诈检测与风控相关
      • 5.1.5知识图谱
      • 5.1.6道路交通的流量预测
      • 5.1.7自动驾驶(无人机等场景)
      • 5.1.8化学,医疗等场景
      • 5.1.9物理模型相关
    • 5.2GNN在分子生物领域的应用
      • 5.2.1电子健康记录建模
      • 5.2.2药物发现和合成化合物

一、GNN介绍

1.1引入

1.1.1图的介绍

我们以民国最出名的七角恋人物关系图为例进行讲解,如下图所示:
在这里插入图片描述
这是一张图,包括人物实体以及人物关系。我们抽象成下面的形式,人物是图的顶点(Vertex)、人物关系是图的边(Edge)。顶点和边都可以附带各自的属性(如:姓名、关系类型等)

  1. V:点,每个点都有自己的特征向量(特征举例:邻居点数量、一阶二阶相似度)
  2. E:边,每个边都有自己的特征向量(特征举例:边的权重值、边的定义)
  3. U:整个图,每个图都有自己的特征向量(特征举例:节点数量、图直径)

1.1.2怎样将内容表示成图

  1. 一张图片可以表示为一个244x244x3的tensor,244x244个像素,3个rgb通道。就可以像下图这样表示,点表示的是像素,边表示的是像素间的邻接关系。
    在这里插入图片描述
  2. 句子中的每个单词可以表示成一个节点,有向边表示这些单词的链接关系。在这里插入图片描述
    3.分子结构表示成图,每个原子表示成一个节点,原子间的连接键表示成一个边在这里插入图片描述
    在这里插入图片描述

1.1.4图神经网络是在做什么

目的:整合特征

  1. 为每个节点整合特征向量,根据其对节点做分类或者回归
  2. 为每条边整合特征向量,根据其对边做分类或者回归
  3. 为每张图整合特征向量,根据其对图做分类或者回归

1.2基本概念

GNN 可以理解为是由 Graph(图) + Nerual Networks 组合而成的

  1. 图神经网络(Graph Neural Network,GNN)是一类用于处理图结构数据的深度学习模型。图结构数据中的实体以节点的形式表示,实体之间的关系以边的形式表示。GNN的目标是从图结构数据中学习有用的表示,并利用这些表示进行各种任务,例如节点分类、图分类、链接预测等。
  2. 图神经网络的核心思想是通过消息传递机制(message-passing mechanism)来聚合节点的邻居信息,并更新节点的特征表示。这个过程通常会进行多轮迭代,以便捕获图中更远距离的信息。最终,每个节点的特征表示将包含其邻居和更远节点的信息。
  3. 图神经网络的基本组成部分包括:
    节点特征矩阵:用于表示图中每个节点的初始特征。
    邻接矩阵:用于表示图中节点之间的连接关系。
    图卷积层:用于聚合邻居节点的信息并更新节点特征。
    输出层:根据任务需求设计的输出层,用于输出预测结果。

二、GNN流程

在这里插入图片描述
上图中 (1,1,1,1,1) (2,2,2,2,2,) 等,代表节点的特征,这个特征可以是提取到的,也可以是标签,如果没有标签也没有特征,也可以初始化一个特征,做为可训练的变量,参与后续的训练。

2.1聚合

核心思路:将邻居的信息结合到自己身上,作为自己特征的补充

  • 假设现在需要判断A节点的分类,但有时单看A节点自己的特征无法确定其属于哪个类别,从图中可以看出,A节点和B、C、D都有关系,这时B、C、D的特征就可以从一定程度上决定A的类别。

    通俗解释:假如现在不知道A是否有钱,但知道他的三个朋友BCD都很有钱,那么就基本上可以判断A也很有钱。

  • 以A节点为例,邻居信息N = a ∗ \ast (2,2,2,2,2) + b ∗ \ast (3,3,3,3,3) + c ∗ \ast (4,4,4,4,4),其中a,b,c是边的权重,假如b对a很重要,则a的值就可以设置的高一些,假如c对a不是很重要,则c的值就可以设置的低一些。

2.2更新

2.2.1一次GNN操作

  • A节点的总特征,就是自己的特征 加上 α \alpha α倍的邻居信息N,再乘权重W,再经过一个激活函数,最终得到的是经过一层GNN操作之后A的最终信息。
  • A的信息= σ \sigma σ(W((1,1,1,1,1)+ α \alpha α ∗ \ast N))
    其中, α \alpha α为激活函数 (relu,sigmoid等),W是模型需要训练的参数

2.3循环

2.3.1多层GNN操作

  • 经过一次聚合后:A中有B,C,D的信息;B中有A,C的信息;C中有A,B,D,E的信息;D中有A,C的信息;E中有C的信息;第二次聚合之后以此类推。GNN层数越多,GNN的“感受野”越大,每个点考虑其他点的信息越多,考虑越全面.
  • 以A节点为例,此时A聚合C的时候,由于C中有上一层聚合得到的E的信息,所以这时A获得了二阶邻居E的特征。

2.3.2能做什么

  • 通过聚合更新,我们能够得到每个节点的表达,也就是特征feature,此时:节点分类就可以直接拿去分类,计算loss,优化权重W;关联预测则将两个节点的特征拼接起来,做分类,计算loss,做优化。
    归根到底,GNN就是一个提取特征的方法

三、GNN算法原理

3.1数据

利用networkx简单生成一个无向图

import networkx as nx
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

G = nx.Graph()
node_features = [[2, 3], [4, 7], [3, 7], [4, 5], [5, 5]]
edges = [(1, 2), (1, 3), (2, 4), (2, 5), (1, 3), (3, 5), (3, 4)]
edge_features = [[1, 3], [4, 1], [1, 5], [5, 3], [5, 6], [5, 4], [4, 3]]
colors = []
edge_colors = []

# add nodes
for i in range(1, len(node_features) + 1):
    G.add_node(i, feature=str(i) + ':(' + str(node_features[i-1][0]) + ',' + str(node_features[i-1][1]) + ')')
    colors.append('#DCBB8A')

# add edges
for i in range(1, len(edge_features) + 1):
    G.add_edge(edges[i-1][0], edges[i-1][1], feature='(' + str(edge_features[i-1][0]) + ',' + str(edge_features[i-1][1]) + ')')
    edge_colors.append('#3CA9C4')

# draw
fig, ax = plt.subplots()
pos = nx.spring_layout(G)
nx.draw(G, pos=pos, node_size=2000, node_color=colors, edge_color='black')
node_labels = nx.get_node_attributes(G, 'feature')
nx.draw_networkx_labels(G, pos=pos, labels=node_labels, node_size=2000, node_color=colors, font_color='r', font_size=14)
edge_labels = nx.get_edge_attributes(G, 'feature')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_size=14, font_color='#7E8877')
ax.set_facecolor('deepskyblue')
ax.axis('off')
fig.set_facecolor('deepskyblue')
plt.show()

如下图所示:
在这里插入图片描述
其中,每一个节点都有自己的一些特征,比如在社交网络中,每个节点(用户)有性别以及年龄等特征。

5个节点的特征向量依次为:

[[2, 3], [4, 7], [3, 7], [4, 5], [5, 5]]

同样,6条边的特征向量为:

[[1, 3], [4, 1], [1, 5], [5, 3], [5, 6], [5, 4], [4, 3]]

3.2变量定义

在这里插入图片描述
特征向量实际上也就是节点或者边的标签,这个是图本身的属性,一直保持不变。

3.3GNN算法

完整描述如下:Forward向前计算状态,Backward向后计算梯度,主函数通过向前和向后迭代调用来最小化损失。
在这里插入图片描述
主函数中:
在这里插入图片描述

3.3.1Forward

早期的GNN都是RecGNN,即循环GNN。这种类型的GNN基于信息传播机制: GNN通过不断交换邻域信息来更新节点状态,直到达到稳定均衡。节点的状态向量x由以下fw函数来进行周期性更新:
在这里插入图片描述
解释上述公式:
在这里插入图片描述
GNN的Forward描述如下:

在这里插入图片描述
解释:
在这里插入图片描述

3.3.2Backward

在节点嵌入中,我们最终得到了每个节点的表征向量,此时我们就能利用这些向量来进行聚类、节点分类、链接预测等等。

GNN中类似,得到这些节点状态向量的最终形式不是我们的目的,我们的目的是利用这些节点状态向量来做一些实际的应用,比如节点标签预测。

在GNN中,我们定义z(t)如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、GNN优势

相对于传统的神经网络模型,GNN在处理图数据时有一些优势:

  1. 能够学习到节点和边之间的复杂关系。与传统神经网络只能处理类似向量或矩阵的数据不同,GNN天然地适用于处理有复杂关系的数据,如社交网络、蛋白质结构中残基之间的关系等。

  2. 具有很强的泛化性能。不同于传统的机器学习方法,GNN可以在没有预训练的情况下进行端到端的学习和推理。这意味着GNN可以更好地适应广泛的数据和任务,并且可以避免过度拟合。

  3. 涉及节点和边的信息量非常大,对于节点和边上存在多种属性或者情境信息的任务,在GNN中可以很自然地将这些信息进行整合。这些属性可以来自节点和边的语义信息、拓扑信息、上下文信息和其他相关信息。

  4. 强大的可扩展性:GNN已经在多个领域实现预测性能的颠覆,但其最大优势是可扩展性。 我们可以在GNN中添加更多的参数并训练它们以适用于特定的问题。

五、GNN应用

5.1应用领域

5.1.1芯片设计

芯片的设计比较耗费人力和物力,如果可以通过AI算法自动设计芯片,则可以大大提高芯片制造的效率,降低芯片制造的成本
在这里插入图片描述

5.1.2场景分析与问题推理

例如剧本杀中的推理,警匪片中嫌疑人的图推理等
在这里插入图片描述

5.1.3 推荐系统

例如,刷抖音,经常看英雄联盟的游戏视频,那么说明你对游戏比较感兴趣,系统会根据网络图结构推荐更多和英雄联盟相关的内容给你
在这里插入图片描述

5.1.4欺诈检测与风控相关

贷款软件,读取用户的通讯录信息和app使用情况,从而测评用户的还款能力,然后决定用户的借款额度
在这里插入图片描述

5.1.5知识图谱

智能客服
在这里插入图片描述

5.1.6道路交通的流量预测

预测道路上每条边的流量
在这里插入图片描述

5.1.7自动驾驶(无人机等场景)

在这里插入图片描述

5.1.8化学,医疗等场景

在这里插入图片描述

5.1.9物理模型相关

根据分子结构进行相关分析
在这里插入图片描述

5.2GNN在分子生物领域的应用

5.2.1电子健康记录建模

我们可以用图来建立医学本体的模型。下面是一个使用DAG(有向无环图)表示本体的例子
在这里插入图片描述
为了利用本体论,我们通过将嵌入的eᵢ与其父节点结合使用,学习出一个为节点cᵢ嵌入的网络gᵢ。为了进行预测,我们将本体知识G与当前访问的xt相乘,并通过神经网络进行传递。例如,它们可以是诊断预测任务或心力衰竭预测任务。
在这里插入图片描述
以下是使用t-SNE对不同疾病的最终代表gᵢ的散点图。
在这里插入图片描述

5.2.2药物发现和合成化合物

DNN可以训练成千上万的化学结构来编码和解码分子,还可以构建预测因子,根据潜在的表征来估计化学性质。例如,我们可以学习一个自编码器来编码一个分子的图形表示,然后用解码器重建分子。目的是学习一个潜在的表示,最大限度地减少重建损失。我们可以使用这个潜在表示来预测合成可及性和药物与另一个DNN(下面的绿色网络)的相似性。
在这里插入图片描述

这些潜在的表达方式允许研究人员在潜在空间中通过扰乱已知的化学结构或插入分子之间的简单操作自动生成新的化学结构。

这是麻省理工学院的另一个项目,将深度学习应用于图形对象,从而发现新的抗生素。
在这里插入图片描述
Open Catalyst项目是利用人工智能发现用于可再生能源存储的新催化剂的另一个例子。

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

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

相关文章

Unity 调用自己封装好的DLL库

因为做项目时会用到很多重复的方法,每次都重新写有点浪费时间,就可以将这些方法封装成DLL类库,用的时候直接引入调用就行。 首先在VS里面创建类库文件 注:.NET Framework要选3.5以下 然后定义好命名空间名字和类名就可以写自己要…

互联网按摩预约小程序开发;

随着移动互联网的普及,越来越多的人开始通过手机预约按摩服务。按摩预约小程序是一种方便快捷的预约方式,可以让用户随时随地预约按摩服务。那么,按摩预约小程序的开发周期要多久?按摩预约小程序的功能有哪些呢?本文将…

振南技术干货集:研发版本乱到“妈不认”? Git!(1)

注解目录 1、关于 Git 1.1Git 今生 (Git 和 Linux 的生父都是 Linus,振南给你讲讲当初关于 Git 的爱恨情愁,其背后其实是开源与闭源两左阵营的明争暗斗。) 1.2Git的爆发 (Git 超越时代的分布式思想。振南再给你讲讲旧金山三个年轻人创办 GitHub&…

ABAQUS分析步笔记

定义原则: 每个step的所有边界条件,载荷条件累加构成本step的仿真效果; step2需要在step1的状态基础上进行载荷运动等限定时,需要确保在step2中传递了step1的想要保留的特征,如: 1、BC-1 这里的BC-1的固…

2024最新fl studio 21.2.0.3842中文版完整下载

FL Studio 21.2.0.3842中文版完整下载是最好的音乐开发和制作软件也称为水果音乐软件。它是最受欢迎的工作室,因为它包含了一个主要的听觉工作场所。2024最新fl studioFL Studio 21版有不同的功能,如它包含图形和音乐音序器,帮助您使完美的配…

JRebel热部署——效率提升100倍(程序员工具必备)

1. 下载JRebel 2.激活程序 这里推荐一个免费获取jrebel激活服务器地址和激活邮箱的地址:点击进入 进入网站之后就可以获取到激活链接和邮箱 点击进入激活 复制过去激活就可以 然后就可以看到激活成功了 3.如何使用 代码修改后,直接CtrlShitF9 即可重新启动 4…

阿里云服务器怎么样?阿里云服务器优势、价格及常见问题介绍

阿里云(Alibaba Cloud)是阿里巴巴集团旗下的云计算服务提供商,其提供的云服务器(ECS)是其核心服务之一。在云计算市场中,阿里云服务器备受用户的青睐,那么,阿里云服务器究竟怎么样呢…

基于SSM的房屋租售信息管理系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

“基于RflySim平台飞控底层算法开发”系列专题培训 (第三期)

>> RflySim平台系列专题培训 RflySim平台是一个生态系统或工具链(官网:https://doc.rflysim.com),发起于北航可靠飞行控制研究组,主要用于遵循基于模型设计的思想进行无人系统的控制和安全测试。本平台选择MATL…

合成数据加速机器视觉学习

虽然机器学习在基于视觉的自动化中的应用正在增长,但许多行业都面临着挑战,并难以在其计算机视觉应用中实施它。这在很大程度上是由于需要收集许多图像,以及与准确注释这些图像中的不同产品相关的挑战。 该领域的最新趋势之一是利用合成数据…

51单片机PCF8591数字电压表数码管显示设计( proteus仿真+程序+设计报告+讲解视频)

PCF8591数字电压表数码管显示 1.主要功能:讲解视频:2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单&&下载链接资料下载链接(可点击): 51单片机PCF8591数字电压表数码管设计( proteus仿真程序设计报告讲解视…

C++以数组作为参数,传递数组地址

文章目录 函数如何使用指针来处理数组将数组作为参数意味着什么数组名和指针对应是好的吗? 参考资料 函数如何使用指针来处理数组 在大多数情况下,C和 C 语言一样,也将数组名视为指针。 C将数组名解释为其第一个元素的地址: cookies &…

YOLOv8 Ultralytics:使用Ultralytics框架训练RT-DETR实时目标检测模型

YOLOv8 Ultralytics:使用Ultralytics框架训练RT-DETR实时目标检测模型 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows 制作自己的数据集训练自己的数据集创建自己数据集的yaml文件football.yaml文件内容 进行训练进行验证进行预测 数据集获取参考文献 …

NAS 扩容简明指南:使用各种外设给 NAS 们扩容

说起来有趣,NAS 除了“不同设备共享存储”这个功能之外,最重要的功能就是为设备扩容,但是 NAS 自己的存储容量不够了,又该如何。 ​这篇文章分享下我目前使用外设给 NAS 扩容的思路,如何以相对低的成本来获取更大的容…

IPV6网络技术详细介绍

无状态和有状态并不是相互对立的,他们可以同时存在,也就是一张网卡上可以同时出现通过RA生成的IP以及通过DHCPv6获得的IP。 从图中可以看到,顺序为: 1、Stateless自动配置“链路本地地址”2、Stateless自动配置“全球地址”&…

mysql基础 --子查询

文章目录 子查询 子查询 一个查询语句,嵌套在另一个查询语句内部;子查询先执行,其结果被外层主查询使用;子查询放入括号内;子查询放在比较条件的右侧;子查询返回一条,为单行子查询;…

普华永道于进博会首发“企业数据资源会计处理一体化平台”

11月6日,在第六届中国国际进口博览会上,普华永道发布企业数据资源会计处理一体化平台(英文名为Data Accounting Platform,简称DAP)。该产品以普华永道“五步法”数据资源入表路径为理论依据,依托多年来普华…

c: CLion 2023.1.1

/** # encoding: utf-8 # 版权所有 2023 涂聚文有限公司 # 许可信息查看:https://www.learnc.net/c-data-structures/c-linked-list/ # 描述:https://blog.jetbrains.com/clion/2016/05/keep-your-code-documented/ # Author : geovindu,Geovin Du 涂…

2023年10 种用于最佳稳定扩散最佳方案

在过去的一年里,您可能已经看到了很多关于 ChatGPT 和其他 AI 自动纹理的新闻。但是,页面(或屏幕)上的文字远非现代组织和设计师使用人工智能的唯一方式。Stable Diffusion 等工具可帮助您创建令人惊叹的 AI 图像,供个…

CS224W5.1——消息传递和节点分类

从之前的文中,学习了如何使用图表示学习进行节点分类。在这节中,将讨论另一种方法,消息传递。将引入半监督学习,利用网络中存在的相关性来预测节点标签。其中一个关键概念是集体分类,包括分配初始标签的局部分类器、捕…