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

李宏毅深度学习-图神经网络GNN

图卷积的开源代码网站DGL

好用的还是 GAT, GIN(指出最好的卷积 就是 hi + 邻居特征(而且只能用 sum))

Introduction

GNN 可以理解为是由 Graph(图) + Nerual Networks 组合而成的,图结构应该都在数据结构与算法里了解得很清楚,关键要解决的问题是:将图的结构和图中每个节点和边的特征转化为一般的神经网络的输入(张量)

常见GNN应用

可以做的事情主要包括:分类和生成
① 对化学分子结构特征进行分类,判断其特征是否属于会导致突变的那类
在这里插入图片描述

② 学习若干个分子结构特征后,能够去生成类似结构的分子(GraphVAE)

新冠靶向药的开发。
在生成的过程中可以加入很多constraint,例如:是新药,比较好合成,有效性等。
在这里插入图片描述

如何做

现有问题
1.How do we utilize the structures and relationship to help our model?关系杂
2.What if the graph is larger, like 20k nodes?模型大
3.What if we don‘t have the all the labels?无标签
看下面一个例子来理解,现有这样一个图结构:

蓝色是Unlabeled Node,褐色是Labeled Node
现在要推断黄圈中的节点的标签。
思想是A node can learn the structure from its neighbors(近朱者赤,近墨者黑), but how?
在这里插入图片描述
在这里插入图片描述
和filter相乘相加后就得到feature map。如何把卷积操作移植到Graph上?
Solution 1: Generalize the concept of convolution (corelation) to graph >> Spatial-based convolution空间
Solution 2: Back to the definition of convolution in signal processing>> Spectral-based convolution频域
第一种是把CNN的操作Generalize到GNN上。
第二种是借鉴信号处理中做法来进行卷积操作。

RoadMap

根据上面的两种Solutions,本次课程的内容如下:
在这里插入图片描述

Spatial-based GNN

基于空间特征的图神经网络

这个是solution 1,因此是根据CNN的卷积进行移植:
在这里插入图片描述
要把下面的图中箭头所指的节点进行更新得到下一层的状态

在这里插入图片描述
注意上图中的箭头所指的节点是
在这里插入图片描述
Terminology:
ØAggregate: 用 neighbor feature update 下一层的 hidden state
ØReadout: 把所有 nodes 的 feature 集合起來代表整个 graph(类似LSTM把整个句子向量压缩为一个向量)
在这里插入图片描述

法1:NN4G (Neural Networks for Graph)09年

input layer 首先经过基本的 embedding 之后到 hidden layer 0。然后更新的话是将其相邻的节点相加然后乘以权重再加上之前 input layer 的原始输入。

Aggregate 更新方法

每个隐藏层都是一个图,图中每个结点的权值 = 一个待学习的参数 w × 上一层这个结点所有相邻结点的权值和 + 原本在第一层 input layer 这个结点输入的值(例如: w 1 w_1 w1 * x 3 x_3 x3 就是 h 3 0 h_3^0 h30

需要注意的是,全连接神经网络的神经元是固定的,因此对于每个图输入后,最后进入全连接层的 vector 维度应该是一样的。因此 NN4G 使用的方法特点是:对于每个图都固定隐藏层数量,然后取每层的均值送入全连接神经网络,这样可以避免图大小的影响
在这里插入图片描述
关于为什么要相加的问题:如果不用相加的话,你就很难去处理节点间邻居数量不同这个巨大的区别 。另外,相加是最简单也是被证实最有效的利用邻点信息的方法。

Readout 方法:

通过求出整个图中的每个顶点间的特征均值(按照层数求平均),然后各自乘以相应的权重(需要学习)再把每个结点得到的结果相加。
在这里插入图片描述

法2:DCNN (Diffusion-Convolution Neural Network )15年

思想:对每一层进行更新时,第 n 层看离当前节点距离 n 的节点信息。
在这里插入图片描述

例如在第一层,更新结点 3 首先找到与它距离为 1 的节点(有 0、2、4),然后用这三个与节点距离为 1 的 结点的原始的输入相加取平均值(mean)再乘以权重;

在第二层,更新节点 3 首先找到与它距离为2的节点(有 1 和 自己本身,注意结点 3 和 3 本身的距离也是 2),然后用这几个符合条件的结点的原始的输入相加取平均值再乘以权重

这样就可以将每一层的节点特征组成一个矩阵,然后叠在一起。
当我们需要每个节点的feature 信息的时候,采用以下的方式来表示图中每个节点的特征:
在这里插入图片描述
每个节点的特征计算就把节点i对应的 h i 1 h_i^1 hi1 从堆叠结果中提取出来,然后点乘w即可。
在这里插入图片描述

如对节点 1 来说,也就是将每一层的结点 1 提出来,然后乘以权重得到最后结点 1 的表示。按照类似的操作可以得到其余结点的表示。

另一种方法:DGC (Diffusion Graph Convolution) —— 直接将每一层的结点 1 所在信息提出来相加求和
在这里插入图片描述

法3:MoNET (Mixture Model Networks)16年

特点:与之前只是将相关联结点信息相加求和相比,MoNET 考虑到一个节点的邻居跟之间的区别(例如,有的相邻结点和该结点之前的关系可能更重要一点)

思路

  • deg(x) 表示x的出入度数
  • u(x,y) 自定义的距离计算方式

这里定义的距离公式可以有不同的。也就是给每个节点不同的权重 weighted sum。
在这里插入图片描述

法4:GraphSAGE.18年

SAmple and aggreGatE
Can work on both transductive and inductive setting
GraphSAGE learns how to embed node features from neighbors
在这里插入图片描述
这个方法在提取邻居信息上提出了三种方式:
AGGREGATION: mean, max-pooling, or LSTM
在这里插入图片描述

法5:GAT (Graph Attention Networks).18年

特点:与 MoNET 相比,GAT 在定义距离公式时所用的权重 weighted sum 需要学习而得(相当于对邻居结点做 attention ,不同的邻居结点给出不同的 weight ),而不是事先规定好的。

在这里插入图片描述
在这里插入图片描述
GAT文献

理论:GIN (Graph Isomorphism Network)

提供了一些关于图神经网络什么方式的aggregate能够work的理论证明和结论。

更新第k层第v个节点的时候要把它的邻居做求和,然后加上该节点与某个常数的乘积。这里提的是直接求和,不是求平均,也不是做maxpooling。为什么?

特点:首先把邻居结点都求加相见 + 结点自己本身信息 × 系数,不用 maxpooling 和 meanpooling(例如在下图中,a 中 每个结点的特征值都一样。在邻居数值相同的状况,若选择 maxpooling 和 meanpooling,都无法确定最后选择的到底是 v 的哪个邻居结点,只有sum可以区别两者。 )

b:在邻居最大值相同的情况,取最大值会失败

c:在邻居最大值相同且平均相同的情况,只有总和成功

在这里插入图片描述
思想:用 sum 的方式对每个相邻结点的特征值相加 + 选用多层感知器(而不是一层)

公式中 ε 可以为 0,代表 其实 Graph 中所有相邻结点和其本身节点相加就可以。

Graph Signal Processing and Spectral-based GNN

这节讲的是solution 2,就是用信号处理的方式来进行特征提取。之前讲过,直接对图中的节点做卷积是不行的,因为不能把节点的邻居和CNN中的卷积核位置一一对应,然后做运算,于是借鉴信号处理的方法,先用傅里叶变化分别处理节点和卷积核,然后相乘,然后再反傅里叶变化得到结果

GCN

Graph Convolutional Networks 就是用上面的公式,设置k=1
在这里插入图片描述
展开:
在这里插入图片描述
最后形式:
在这里插入图片描述
大概意思是邻居乘以w取平均,然后加上bias,经过激活函数得结果。

相关文章:

李宏毅深度学习-图神经网络GNN

图卷积的开源代码网站DGL 好用的还是 GAT, GIN(指出最好的卷积 就是 hi 邻居特征(而且只能用 sum)) Introduction GNN 可以理解为是由 Graph(图) Nerual Networks 组合而成的,图结构应该都在数据结构与…...

Redis篇(缓存机制 - 分布式缓存)(持续更新迭代)

目录 一、单点 Redis 的问题 1. 数据丢失问题 2. 并发能力问题 3. 故障恢复问题 4. 存储能力问题 5. 四种问题的解决方案 二、Redis持久化(两种方案) 1. RDB持久化 1.1. 简介 1.2. 执行时机 save命令 bgsave命令 停机时 触发RDB条件 1.3. …...

python交互式命令时如何清除

在交互模式中使用Python,如果要清屏,可以import os,通过os.system()来调用系统命令clear或者cls来实现清屏。 [python] view plain copy print? >>> import os >>> os.system(clear) 但是此时shell中的状态是:…...

Token,Cookie,Session,JWT详解

这四个技术虽然在功能上有所不同,但在web应用中常常一起使用,已实现用户身份验证,授权和会话管理。 Token:指的是用于身份验证,授权成信息交换的令牌,可以有不同的实现方式,例如JWT。 Cookie&…...

opencv-rust 系列: 1, 安装及运行自带示例和测试程序

opencv-rust 系列: 1, 安装及运行自带示例和测试程序 运行环境: ubuntu ; rust 已安装; 对rust的掌握为三脚猫程度一. opencv-rust安装:二. 运行自带examples和tests 运行环境: ubuntu ; rust 已安装; 对rust的掌握为三脚猫程度 一. opencv-rust安装: 安装软件: sudo apt in…...

Linux系统编程(一):Linux平台上静态库和动态库的制作与使用

本篇文章我们通过 gcc 或g编译器手动制作Linux 平台上的静态库和动态库。由于涉及的内容较多,所以后面分多次来完成本篇文章。做任何事情都是一样的,我们不可能一次性把处在舒适区的事情做好。 本讲主要内容如下: 库的基本概念Linux 平台上…...

Nginx的基础讲解之重写conf文件

一、Nginx 1、什么是nginx? Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。 2、用于什么场景 Nginx适用于各种规模的网站和应用程序,特别是需要高并发处理和负载均衡的场…...

RIFE: Real-Time Intermediate Flow Estimation for Video Frame Interpolation

Paper name RIFE: Real-Time Intermediate Flow Estimation for Video Frame Interpolation Paper Reading Note Paper URL: https://arxiv.org/pdf/2011.06294 Code URL: https://github.com/hzwer/ECCV2022-RIFE TL;DR 2022 年旷视出品的实时视频帧插值工作。提出 RIFE…...

rabbitMq-----broker服务器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言管理的字段 前言 搭建一个网络服务器,在内部提供各个业务接口即可。 在业务处理函数中,每次请求过来找到对应的信道,通过信…...

MAC备忘录空白解决方案

打开icloud->备忘录 取消勾选同步此MAC后再次勾选,然后点击完成即可。...

cnn突破七(四层bpnet网络公式与卷积核bpnet公式相关)

我们要有一个概念,就是卷积核就是我们的w1,w12,w2 那么我们的5*5卷积核怎么表达,当他在14*14的图像中流动时,对应的像素也在变化 这个和我们的上面w1,w12,w2不同,因为这几个都是全…...

PHP中的PEAR是什么

PHP中的PEAR是PHP Extension and Application Repository的缩写,即PHP扩展与应用库。它是一个PHP扩展及应用的代码仓库,提供了许多常用的PHP库和工具,涵盖了页面呈现、数据库访问、文件操作、数据结构、缓存操作、网络协议、WebService等许多…...

(C语言贪吃蛇)4.贪吃蛇地图优化及算法说明

上节代码示例&#xff1a; #include <curses.h>void initNcurse() {initscr();keypad(stdscr,1); }void gamePic() {int hang;int lie;for(hang 0;hang < 20;hang ){if(hang 0){for(lie 0;lie < 20;lie ){printw("--");}printw("\n");for(…...

国外电商系统开发-运维系统拓扑布局

点击列表中设备字段&#xff0c;然后定位到【拓扑布局】中&#xff0c;可以看到拓扑发生了变化 再回头&#xff0c;您再次添加一个服务器到系统中&#xff0c;并且选择该服务器的连接节点为您刚才创建的“SDN路由器”&#xff0c;保存后&#xff0c;您可以看到这个服务器连接着…...

使用winsock和ip相关指令重置Window网络配置

netsh winsock reset 和 netsh int ip reset 是 Windows 中用于修复网络问题的命令。它们分别用于重置 Winsock 和 TCP/IP 网络配置&#xff0c;以解决可能由于配置错误或网络堆栈损坏而导致的网络连接问题。 1. netsh winsock reset 1.1 作用 重置 Winsock 目录。Winsock 是…...

用AI做电子萌宠,快速涨粉变现

今天给大家分享一个很热门的小副业—AI宠物视频 项目介绍 前一阵刷到一个萌宠账号&#xff0c;爆款率可真高&#xff0c;涨粉可真快呀。 28篇笔记涨粉3.2万&#xff0c;点赞更是达到了十几万。其中有6篇点赞上万。 至于究竟是不是AI其实没那么重要&#xff0c;重要的是&…...

如何在 Axios 中封装事件中心EventEmitter

在 Axios 中封装一个事件中心 EventEmitter 允许你在请求的不同阶段&#xff08;如请求开始、请求成功、请求失败等&#xff09;触发事件。这可以通过创建一个自定义的 Axios 实例&#xff0c;并结合 Node.js 的 events 模块来实现。以下是一个详细的步骤指南和示例代码&#x…...

计算机网络——ftp

在网络通信中&#xff0c;控制连接和数据连接是两种不同类型的连接&#xff0c;它们各自具有特定的功能和用途。 一、控制连接 定义与功能&#xff1a; 控制连接主要用于在通信双方之间传输控制信息&#xff0c;以建立、维护和终止数据连接。它负责协调和管理数据传输的过程&am…...

Redis:set类型

Redis&#xff1a;set类型 set命令SADDSMEMBERSSISMEMBERSCARDSPOPSRANDMEMBERSMOVESREM 集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 内部编码intsethashtable 当把一些关联的数据放到一起&#xff0c;就构成一个集合。在Redis中&#xff0c;使用set类型维护…...

九大排序之插入排序

1.前言 插入排序是把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新的有序序列 。实际中我们玩扑克牌时&#xff0c;就用了插入排序的思想。 本章重点&#xff1a;主要着重的介绍两种插入排序…...

DNABERT: 一个基于 Transformer 双向编码器表征的预训练 DNA 语言模型

本文结合 DNABERT 的原文&#xff0c;主要介绍了&#xff1a; Overview of DNABERT 开发 DNABERT 的背景 DNABERT 的 tokenization DNABERT 的模型架构 DNABERT 的预训练 基于微调 DNABERT 的应用 1. Overview of DNABERT 我们之前介绍了 BERT&#xff0c;它是一个基于 Transfo…...

基于Hive和Hadoop的电商消费分析系统

本项目是一个基于大数据技术的电商消费分析系统&#xff0c;旨在为用户提供全面的电商消费信息和深入的消费行为分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 S…...

记一次炉石传说记牌器 Crash 排查经历

大家好这里是 Geek技术前线。最近在打炉石过程中遇到了HSTracker记牌器的一个闪退问题&#xff0c;尝试性排查了下原因。这里简单记录一下 最近炉石国服回归&#xff1b;由于设备限制&#xff0c;我基本只会在 Mac 上打炉石。并且由于主要打竞技场&#xff0c;所以记牌器是必不…...

精益驱动的敏捷开发

1. 什么是精益&#xff1f;精益能给软件开发带来什么&#xff1f; 精益是一种起源于制造业的管理哲学&#xff0c;尤其是从丰田的生产体系中发展而来。它的核心目标是通过最小化浪费、提高效率和优化流程来实现高效的生产。精益的核心原则包括&#xff1a; 消除浪费&#xff…...

SolidWorks机器转ROS2 URDF

文章目录 开发环境SolidWords插件使用生成urdf文件之后的处理CMakeLists文件修改package.xml变更Launch更改运行 开发环境 Linux系统&#xff1a;Ubuntu 22.04 Ros2版本&#xff1a;humble Solidwords版本&#xff1a;2023 &#xff08;2019以上版本应该都是可以的&#xff09…...

(Linux驱动学习 - 6).Linux中断

一. Linux 中断 API 函数 1.中断号 每个中断都有一个中断号&#xff0c;通过中断号即可区分不同的中断&#xff0c;有的资料也把中断号叫做中 断线。在 Linux 内核中使用一个 int 变量表示中断号。 2.申请中断 - request_irq 函数原型&#xff1a; int request_irq(unsigne…...

SpringBoot驱动的明星周边产品电商解决方案

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…...

C++、Ruby和JavaScript

C C最初被称为带类的C, 兼容C的语法&#xff0c;此既是C得以流行的前提&#xff0c;也是C某些语法被捆绑的根源。C的来源于C语言的递增运算符&#xff0c;代表增加&#xff0c;意义为扩展。 C的历史 C类的设计思想来源于Simula. Simula为模拟的意思&#xff0c;被称为最早的面向…...

32单片机 低功耗模式

以下是一个基于STM32的低功耗模式示例代码&#xff0c;展示如何将STM32微控制器置于低功耗模式&#xff0c;并在特定条件下唤醒它。这个示例使用的是STM32 HAL库。 ### 示例代码&#xff1a;进入睡眠模式并使用外部中断唤醒 c #include "stm32f4xx_hal.h" // 函数声明…...

501、二叉搜索树中的众数

1、题目描述 . - 力扣&#xff08;LeetCode&#xff09; 要求&#xff1a;给一个包含重复值的BST&#xff0c;找出并返回BST中的众数(出现频次最高的元素)。 注&#xff1a;如果树中有不止一个众数可以按任意顺序返回&#xff0c;即如果有多个众数多个都要返回。 ps&#xff1…...