图神经网络 (GNN)

目录

  • 一、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.mfbz.cn/a/131780.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用idea插件快速生成arthas命令

这里分享一个插件,叫做arthas idea。 这个插件我主要是用来在本地生成一些要使用的arthas命令,然后复制到线上使用,这样可以避免记忆大量的arthas命令,加速排查效率,不过哪种情况要用哪些arthas命令,还是需…

直播间自动评论神器的运行分享,与开发需要到的技术分析

先来看实操成果,↑↑需要的同学可看我名字↖↖↖↖↖,或评论888无偿分享 随着互联网的发展,直播带货越来越受欢迎。为了更好地服务观众,许多直播间开始使用自动回复机器人。本文将介绍直播间自动回复机器人需要用到的技术和流程。…

合成数据如何改变制造业

人工智能正在工厂车间使用,以识别生产线中的低效率。它可以有效地预测设备何时需要维护,以避免停机。人工智能被用于发现产品中的缺陷。 为了完成所有这些工作,使用从人工智能应该学习的过程中收集的数据来创建或训练模型。对于缺陷识别&…

如何将NetCore Web程序独立发布部署到Linux服务器

简介 在将 .NET Core 应用程序部署到 Linux 服务器上时,可以采用独立发布的方式,以便在目标服务器上运行应用程序而无需安装 .NET Core 运行时。本文介绍如果将NetCore Web程序独立发布部署到Linux服务器。 1、准备一台服务器 服务器配置:2核2G 系统环境:Alibaba Cloud…

如果有一款专门用于3D纹理贴图的工具,大家会愿意用吗?

专业建模软件通常具有丰富的功能和工具,能够帮助用户进行三维建模、模拟分析、可视化呈现等多个方面的工作,几乎可满足用户所有的建模相关工作。 1、专业建模软件的使用门槛 学习曲线陡峭:专业建模软件通常需要较长时间来学习和掌握&#xf…

图论10-哈密尔顿回路和哈密尔顿路径+状态压缩+记忆化搜索

文章目录 1 哈密尔顿回路2 哈密尔顿回路算法实现2.1 常规回溯算法2.2 引入变量记录剩余未访问的节点数量 3 哈密尔顿路径问题4 状态压缩4.1 查看第i位是否为14.2 设置第i位是为1或者04.3 小结4.4 状态压缩在哈密尔顿问题中的应用 5 记忆化搜索5.1 记忆化搜索与递推区别5.2 记忆…

【Unity细节】Failed importing package???Unity导包失败?

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 😶‍🌫️收录于专栏:unity细节和bug 😶‍🌫️优质专栏 ⭐【…

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

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

现在个人想上架微信小游戏已经这么难了吗...

点击上方亿元程序员关注和★星标 引言 大家好,最近我突然想起来我还有一款微信小游戏还没有上架,于是捣鼓了一天把游戏完善了一下,然后准备提交审核,却发现异常的艰难… 1.为什么难? 相信大家都大概知道&#xff0c…

基于SSM的数据结构课程网络学习平台

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

基于SpringBoot的SSMP整合案例(实体类开发与数据层开发)

实体类开发 导入依赖 Lombok&#xff0c;一个Java类库&#xff0c;提供了一组注解&#xff0c;简化POJO实体类开发<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId> </dependency>lombok版本由SpringB…

02MyBatisPlus条件构造器,自定义SQL,Service接口

一、条件构造器 1.MyBatis支持各种复杂的where条件&#xff0c;满足开发的需求 Wrapper是条件构造器&#xff0c;构建复杂的where查询 AbstractWrapper有构造where条件的所有方法&#xff0c;QueryWrapper继承后并有自己的select指定查询字段。UpdateWrapper有指定更新的字段的…

c: CLion 2023.1.1

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

将VS工程转为pro工程及VS安装Qt插件后没有create basic .pro file菜单问题解决

目录 1. 前言 2. VS工程转为pro工程 3. 没有create basic .pro file菜单 1. 前言 很多小伙伴包括本人&#xff0c;如果是在Windows下开发Qt程序&#xff0c;偏好用Visual Studio外加装个Qt插件进行Qt开发&#xff0c;毕竟Visual Studio确实是功能强大的IDE&#xff0c;但有时…

【Truffle】四、通过Ganache部署连接

目录 一、下载安装 Ganache&#xff1a; 二、在本地部署truffle 三、配置ganache连接truffle 四、交易发送 除了用Truffle Develop&#xff0c;还可以选择使用 Ganache, 这是一个桌面应用&#xff0c;他同样会创建一个个人模拟的区块链。 对于刚接触以太坊的同学来说&#x…

LeetCode16的最接近的三数之和

目录 优化解法暴力搜索 优化解法 看了题解之后的根据题解的意思编写的优化解法,感觉还行,代码算是比较简短了,没有复杂的逻辑,就是写的时候总是只记得记录那个sum,忘记要记录最小的差值,更新min_minus. class Solution {public int threeSumClosest(int[] nums, int target) {…

NLP领域的突破催生大模型范式的形成与发展

当前的大模型领域的发展&#xff0c;只是范式转变的开始&#xff0c;基础大模型才刚刚开始改变人工智能系统在世界上的构建和部署方式。 1、大模型范式 1.1 传统思路&#xff08;2019年以前&#xff09; NLP领域历来专注于为具有挑战性的语言任务定义和设计系统&#xff0c…

【算法与数据结构】93、LeetCode复原 IP 地址

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;参照【算法与数据结构】131、LeetCode分割回文串的思路&#xff0c;需要将IP字符串进行分割&#xff0…

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

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

使用MVS-GaN HEMT紧凑模型促进基于GaN的射频和高电压电路设计

标题&#xff1a;Facilitation of GaN-Based RF- and HV-Circuit Designs Using MVS-GaN HEMT Compact Model 来源&#xff1a;IEEE TRANSACTIONS ON ELECTRON DEVICES&#xff08;19年&#xff09; 摘要—本文阐述了基于物理的紧凑器件模型在研究器件行为细微差异对电路和系统…
最新文章