图学习 [1]

news2024/11/25 3:31:00

图学习 [1]

图学习的主要任务

  1. 节点预测。节点预测任务是指利用图结构中已有的节点和边信息,通过机器学习算法对图中新添加的节点进行分类或回归预测的任务。
  2. 链路预测。链路预测任务是指利用图结构中已有的节点和边信息,通过机器学习算法预测未来可能存在的边或连接关系的任务。链路预测任务通常是二分类任务,模型预测节点之间是否有连接。
  3. 图嵌入。图嵌入(Graph Embedding)是指将一个图或一个节点映射为低维向量的过程,即将图结构中的节点和边映射到一个连续的向量空间中。这个过程可以看作是将图结构中的离散信息转化为连续的特征向量,使得可以应用于其他机器学习任务,例如分类、聚类、链路预测等。

图神经网络

基本概念

什么是GNN?GNN是对保持图对称性(排列不变性)的图的所有属性(节点、边、全局上下文)的可优化转换。对称信息指的是把这个顶点进行另外一个排序后,整个结果是不会变的。

GNN层:对顶点向量、边向量和全局向量分别构造一个多层感知机(MLP),输入的大小和输出的大小是相同的,这三个MLP就组成了一个GNN的层,输入是一个图,输出也是一个图,并且连接性不变。满足了上文中对GNN的第一个要求,只对属性进行变换,并不改变图的结构。
在这里插入图片描述
但是,如果顶点中没有信息,信息储存在边中,我们就需要一种收集边信息的方法,将其用作顶点预测。如下图,该池化方法是将与该顶点相连接的边的信息与全局信息求和,用得到的信息做顶点预测。
在这里插入图片描述
同理也可以将此方法用作其他情况,比如用顶点信息池化来预测边,用顶点信息池化来预测全局属性等等。

我们可以将最简单的GNN模型总结成如下的结构:
一张图输入,经过GNN层(实质上就是三个分别对应点、边和全局的MLP),输出一个属性已经变换但是连接性不变的图,在经过全连接层,得到输出。
在这里插入图片描述
没有用到图之间的连接性,点、边、全局都是分别用单独的多层感知机进行特征提取的,仅仅在池化的时候用到了其他的信息。

图的各部分之间传递信息

  • 对于图中的每个节点,收集所有相邻节点嵌入(或消息)。
  • 通过聚合函数(如sum)聚合所有消息。
  • 所有合并的消息都通过一个更新函数传递,通常是一个学习过的神经网络。
    在这里插入图片描述
    点与点之间的消息传递:通过将消息传递GNN层堆叠在一起,节点最终可以合并来自整个图的信息:在三层之后,节点具有距离它三步之遥的节点的信息。
    在这里插入图片描述
    边与点之间的信息传递:先把与边连接的顶点信息池化,传递到边上,边通过更新后,再把与顶点相连接的边信息池化传递给顶点,再通过MLP进行更新。如果顶点和边向量的长度不一样,需要先通过投影到相同维度,在做传递。
    在这里插入图片描述
    加入全局信息:U是全局信息,它可以和图中的任何信息相连接。在汇聚顶点信息到边的时候,也会把U一起汇聚,把边信息传递给顶点的时候,也会把U一起传递;然后更新边和顶点后,将边和顶点的信息一起汇聚给U,之后做MLP更新。
    在这里插入图片描述

GNN中的采样和batch

GNN有很多层,就算每一次只做1近邻,到最后一层中的一个节点可能包含有整个图的信息。在神经网络中计算梯度的时候,我们需要将整个梯度给保存下来,如果对最后一个顶点计算梯度的时候,我们需要保存整个图的中间结果,如果图很大,这可能会导致我们是无法承受的。所以我们也需要做小批量梯度,就是每次从图中随机采集一个小图,然后在这个小图上面做汇聚,计算梯度的时候只需要保存小图上面的结果就足够了。

由于每个节点的相邻节点是不同的,怎样才能把小样本做成小批量?这样我们就能对一个大的矩阵做运算,实现并行。

经典图学习模型

图卷积神经网络(GCN)

核心公式(层与层之间的传播方式):
H ( l + 1 ) = σ ( D ~ − 1 2 A ~ D ~ − 1 2 H ( l ) W ( l ) ) . H^{(l+1)}=\sigma\Big(\tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}}H^{(l)}W^{(l)}\Big). H(l+1)=σ(D~21A~D~21H(l)W(l)).
假设有N个节点,每个节点有D维的特征,那么节点的特征可以组成一个N × \times ×D维的矩阵X,各个节点的关系也可以形成一个N × \times ×N维的矩阵A(邻接矩阵)。这两个矩阵就是模型的输入。

  • A波浪是矩阵A加单位矩阵。
  • D波浪是A波浪的度矩阵。
  • H是每一层的特征,对于输入层,H就是X

假设构造了一个两层的GCN,激活函数采用Relu和Softmax,则传播公式为:
Z = f ( X , A ) = s o f t m a x ( A ^ R e L U ( A ^ X W ( 0 ) ) W ( 1 ) ) . Z=f(X,A)=\mathrm{softmax}\Big(\hat{A}\mathrm{ReLU}\Big(\hat{A}XW^{(0)}\Big)W^{(1)}\Big). Z=f(X,A)=softmax(A^ReLU(A^XW(0))W(1)).
再针对带标签的节点计算交叉熵损失函数,就可以用来分类了。由于即使只有很少的节点有标签也能训练,作者称之为半监督分类。

为什么公式是这个样子?

  • 最初实际上是A ⋅ \cdot X,这样能够将当前节点的相邻节点的特征附加到当前节点特征上。
  • 但是由于A的对角线全是0,如果这样乘的话,将会之关注相邻节点,完全摒除了自身节点的特征。因此公式变为了(A+I) ⋅ \cdot X。
  • 但是又会有一个问题,有的节点的邻居节点少,有的节点的邻居节点多,而特征又是相加的,如果不进行标准化将会改变特征原本的分布。因此要对A做一个标准化处理,就是让A的每一行加起来为1,乘一个 D − 1 D^{-1} D1。为了保证乘过之后仍然是对称的,则将其拆开,就变成了 D − 1 2 A D − 1 2 D^{-\frac{1}{2}}AD^{-\frac{1}{2}} D21AD21.
  • 再使用激活函数激活,就变成了现在的样子。

GraphSAGE模型

将GCN扩展到归纳无监督学习的任务。利用节点特征(例如,文本属性、节点概要信息、节点度)来学习一个将不可见节点泛化的嵌入函数。

目的不是为每个节点学习一个嵌入向量,而是训练一组聚合器函数,每个聚合器函数从一个给定节点的不同跳数或搜索深度聚合信息。同时设计了一个无监督的损失函数,允许GraphSAGE在没有特定任务监督情况下进行训练。

节点嵌入生成(Embedding Generation)

假设已经该算法假设模型已经过训练,参数是固定的。特别地,我们假设我们已经学习了K个聚合器函数的参数,记为 A G G R E G A T E k , ∀ k ∈ { 1 , . . . , K } ) {\mathrm{AGGREGATE}}_{k},\forall k\in\{1,...,K\}) AGGREGATEk,k{1,...,K}),同时有一组权重矩阵: W k ~ , ∀ k ∈ { 1 , . . . , K } \mathbf{W}^{\tilde{k}},\forall k\in\{1,...,K\} Wk~,k{1,...,K}

算法流程:
在这里插入图片描述
解释:
1:将每个节点的初始化特征赋给 h v 0 h_{v}^{0} hv0,表示第0层的结果。
2: 表示每个节点的邻域的大小,或者说每个节点搜寻相邻节点的深度,再或者说每个节点想要聚合特征的节点范围的大小。
3: 遍历图中的每个节点,每一层的聚合更新,都要更新整个图的所有节点。
4: 将当前节点的所有邻居节点的特征进行聚合,得到 h N ( v ) k h^{k}_{N(v)} hN(v)k
5: 由于上一步得到的结果只是融合了邻居节点的特征,缺少最重要的自身的特征,因此将自身的特征和上一步的特征进行一个拼接,然后乘一个权重,一方面是变换维度,另一方面也可以提升模型表达能力,最后再进行激活。
7: 算是一个归一化。
学习GraphSAGE的参数

  • 随机采样。在每个节点的邻域集合中采样固定个数的邻居节点进行聚合。
  • 无监督学习。基于图形的loss函数鼓励附近的节点有相似的表示,同时强制不同节点的表示是高度不同的。(感觉并不是很合理)

聚合器

  • 平均聚合器: h v k ← σ ( W ⋅ M E N ( { h v k − 1 } ∪ { h u k − 1 , ∀ u ∈ N ( v ) } ) . \mathbf{h}_v^k\leftarrow\sigma(\mathbf{W}\cdot\mathrm{MEN}(\{\mathbf{h}_v^{k-1}\}\cup\{\mathbf{h}_u^{k-1},\forall u\in\mathcal{N}(v)\}). hvkσ(WMEN({hvk1}{huk1,uN(v)}).
  • LSTM聚合器:将lstm应用于节点邻居的随机排列,可以使lstm适应于无序集合进行操作。
  • 池化聚合器: A G G R G A T E k p o o l = max ⁡ ( { σ ( W p o o l h u i k + b ) , ∀ u i ∈ N ( v ) } ) \mathrm{AGGRGATE}_k^{\mathrm{pool}}=\max(\{\sigma\left(\mathbf{W}_{\mathrm{pool}}\mathbf{h}_{u_i}^k+\mathbf{b}\right),\forall u_i\in\mathcal{N}(v)\}) AGGRGATEkpool=max({σ(Wpoolhuik+b),uiN(v)}),max是逐元的max算子

思考:GraphSAGE相较于GCN,提升了可扩展性,注重于训练聚合器而不是为节点训练一个embedding,而且可以分批训练,提升收敛速度。

图注意力网络

优势:

  • 操作高效,因为它跨节点-邻居对是可并行的。
  • 可以应用于具有不同度的图节点。
  • 可应用于归纳(inductive)学习问题。
    Graph Attention Layer

输入: h = { h ⃗ 1 , h ⃗ 2 , … , h ⃗ N } , h ⃗ i ∈ R F \mathbf{h}=\{\vec{h}_1,\vec{h}_2,\dots,\vec{h}_N\},\vec{h}_i\in\mathbb{R}^F h={h 1,h 2,,h N},h iRF,N为节点数量,F是节点特征的维度。图注意力层是为了产生一组新的特征: h ′ = { h ⃗ 1 ′ , h ⃗ 2 ′ , … , h ⃗ N ′ } , h ⃗ i ′ ∈ R F ′ \mathbf{h}'=\{\vec{h}'_1,\vec{h}'_2,\ldots,\vec{h}'_N\},\vec{h}'_i\in\mathbb{R}^{F'} h={h 1,h 2,,h N},h iRF,为了能够获取更高维度的特征,首先加一个共享的权重矩阵参数 W ∈ R F ′ × F \mathbf{W}\in\mathbb{R}^{F'\times F} WRF×F,该权重参数应用与每个节点。然后对每个节点做自注意力a: W ∈ R F ′ × F \mathbf{W}\in\mathbb{R}^{F'\times F} WRF×F,计算注意力系数:
e i j = a ( W h ⃗ i , W h ⃗ j ) e_{ij}=a(\mathbf{W}\vec{h}_i,\mathbf{W}\vec{h}_j) eij=a(Wh i,Wh j)
这个系数表示了节点j的特征对节点i的重要程度。通过使用mask attention将图结构的信息注入到其中。对于节点i,我们只计算该节点所有的邻居节点j的权重,并且对权重进行归一化:
α i j = s o f t m a x j ( e i j ) = exp ⁡ ( e i j ) ∑ k ∈ N i exp ⁡ ( e i k ) . \alpha_{ij}=\mathrm{softmax}_j(e_{ij})=\frac{\exp(e_{ij})}{\sum_{k\in\mathcal{N}_i}\exp(e_{ik})}. αij=softmaxj(eij)=kNiexp(eik)exp(eij).
最后使用归一化的注意力系数来计算与它们相对应的特征的线性组合,以用作每个节点的最终输出特征(在潜在地计算之后)。

总公式:
h ⃗ i ′ = σ ( ∑ j ∈ N i α i j W h ⃗ j ) . \vec{h}'_i=\sigma\left(\sum\limits_{j\in\mathcal{N}_i}\alpha_{ij}\mathbf{W}\vec{h}_j\right). h i=σ jNiαijWh j .
发现采用多头注意力更好:

在这里插入图片描述

‖表示级联,个人认为应该是该层用了K个不同的参数矩阵W,K个不同的全连接层a,计算了K个不同的 h i ‘ h_i^` hi,然后加一块。进一步对此进行改进,不再每一次进行激活函数激活,而是最后加一起之后再激活一次:
h ⃗ i ′ = σ ( 1 K ∑ k = 1 K ∑ j ∈ N i α i j k W k h ⃗ j ) \vec{h}'_i=\sigma\left(\frac{1}{K}\sum\limits_{k=1}^K\sum\limits_{j\in\mathcal{N}_i}\alpha_{ij}^k\mathbf{W}^k\vec{h}_j\right) h i=σ K1k=1KjNiαijkWkh j
思考:普通的图卷积网络更像是一个卷积核内元素都为1的卷积运算,它没有考虑到不同的邻域节点对当前节点的重要程度。而图注意力网络,利用可训练的参数W和可训练的注意力网络a(实际上感觉就是一个全连接层,也是一个可训练的W)来模拟各个邻域节点对当前节点的重要程度,相当于真正实现了图像中的卷积神经网络中可训练的卷积核,因此在图学习的各个数据集上达到了新的高度,同时利用“多头注意力”,实际上更像是卷积神经网络中的多个卷积核,增加了特征提取的广度和深度,性能进一步得到提升。

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

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

相关文章

【C++初阶】友元 + 内部类 + 匿名对象

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

欢迎所有用户! Elastic 扩展知识中心和支持中心

作者:Cory Mangini 对于所有云用户,我们有一些好消息:你现在可以访问我们的知识中心,在云试用期间请求技术支持,并通过 Elastic Support Hub 提出账单案例。 这意味着你可以利用我们的 Elasticians 多年来积累的丰富知…

基于html+css的图展示90

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

day20 - 绘制物体的运动轨迹

在我们平常做目标检测或者目标追踪时,经常要画出目标的轨迹图。绘制轨迹图的一种方法就是利用光流估计来进行绘制。 本期我们主要来介绍视频中光流估计的使用和效果,利用光流估计来绘制运动轨迹。 完成本期内容,你可以: 掌握视…

通过js来判断是否是横屏如果是就自刷新页面解决横屏之后只有屏幕一半宽度的问题

判断页面是横屏还是竖屏 window.addEventListener("load", rotate, false);window.addEventListener("onorientationchange" in window ? "orientationchange" : "resize", rotate, false);function rotate() {if (window.orientatio…

首个机器学习实时特征平台测试基准论文被 VLDB 2023 录取

国际顶级数据库学术会议 VLDB 2023 将于 2023 年 8 月份在加拿大温哥华举办。近日,由清华大学、新加坡国立大学、以及 OpenMLDB 社区联合完成的科研成果 - 业界第一个严谨的机器学习实时特征平台测试基准,被大会录取并且受邀在现场报告。论文题目为&…

Mybatis-动态SQL

1.什么是动态SQL? Mabits是一个Java持久化框架,它提供了动态SQL的功能。动态SQL是一种根据不同条件动态生成SQL语句的技术。在Mabits中,动态SQL通常是通过使用一组特殊的标签和代码块来实现的,这些标签和代码块可以根据条件包含或排…

性能测试——jmeter实时压测结果收集

这里写目录标题 前言一、压测监控平台组成二、性能监控平台部署 - InfluxDB三、性能监控平台部署 - JMeter四、性能监控平台部署 - Grafana五、性能监控平台部署 – 运行与结果展示 前言 测试报告 .vs. 压测监控 JMeter原生测试报告带来的“痛苦” • 不具备实时性 • 报告中的…

单体项目偶遇并发漏洞!短短一夜时间竟让老板蒸发197.83元

事先声明:以下故事基于真实事件而改编,如有雷同,纯属巧合~ 眼下这位正襟危坐的男子,名为小竹,他正是本次事件的主人公,也即将成为熊猫集团的被告,嗯?这究竟怎么一回事?欲…

通过白噪声的频谱处理产生任意光谱斜率(f^a)噪声(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

首站中科院!百度商业AI技术创新大赛开启巡回宣讲

近日,百度商业AI技术创新大赛正式启动,并于5月18日起开启高校巡回宣讲。 宣讲会首站落地中国科学院大学,中国科学院大学人工智能学院副院长、教授、博士生导师肖俊教授,百度商业研发主任架构师焦学武,百度商业资深工程…

springboot 集成 Swagger3(速通)

→ springboot 集成 Swagger2 ← 目录 1. 案例2. info 配置3. Docket 配置1. 开关配置2. 扫描路径3. 路径匹配4. 分组管理 4. 常用注解1. 说明2. 案例 1. 案例 这次直接使用 2.5.6 的 spring-boot 。 依赖&#xff1a; <parent><groupId>org.springframework.…

亏损?盈利?禾赛科技Q1财报背后的激光雷达赛道「现实」

随着禾赛科技在去年登陆美股&#xff0c;作为全球为数不多已经开始前装量产交付的激光雷达上市公司&#xff0c;财务数据的变化&#xff0c;也在一定程度上反映了行业的真实状况。 根据禾赛科技最新发布的今年一季度财报显示&#xff0c;公司季度净营收为4.3亿元&#xff08;人…

基于html+css的图展示91

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

电表及配电监控系统的智能化发展

安科瑞虞佳豪 在电力领域&#xff0c;AI渗透率近年来也持续提升。今年3月&#xff0c;国家能源局发布《关于加快推进能源数字化智能化发展的若干意见》&#xff0c;文件中针对电力、、油气等行业数字化智能化转型&#xff0c;明确了指导思想和基本原则&#xff0c;从加快行业转…

Unity之ShaderGraph数据类型

前言 ShaderGraph是Unity引擎中的一个可视化着色器编辑器&#xff0c;它允许开发者使用节点和连接线的方式来创建自定义的着色器。使用ShaderGraph&#xff0c;开发者可以通过简单的拽和连接节点来创建复杂的着色器效果&#xff0c;而无需编写任何代码。 为了更好的学习Shader…

chatgpt赋能python:PythonWOL:简化计算机远程唤醒的一种方法

Python WOL&#xff1a;简化计算机远程唤醒的一种方法 随着人们越来越频繁地远程连接和控制计算机&#xff0c;计算机的远程唤醒功能变得越来越重要。WOL&#xff0c;即“Wake on LAN”&#xff0c;是一种使用网络信号远程唤醒计算机的技术。 在许多情况下&#xff0c;使用WO…

打家劫舍问题 Python题解

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

python 网络编程和http协议--网络编程,HTTP协议,Web服务器

一.网络编程 1.IP地址 给网络中的每一台设备进行编号. IPV4 IPV6 2.端口和端口号 端口的作用就是给运行的应用程序提供传输数据的通道。 端口号的作用是用来区分和管理不同端口的&#xff0c;通过端口号能找到唯一个的一个端口。 3.TCP协议 协议: 双方的约定. 网络传输协…

基于SpringBoot+微信小程序的点餐系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 小程序外卖扫码点餐为…