李宏毅深度学习-图神经网络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.贪吃蛇地图优化及算法说明
上节代码示例: #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(…...
国外电商系统开发-运维系统拓扑布局
点击列表中设备字段,然后定位到【拓扑布局】中,可以看到拓扑发生了变化 再回头,您再次添加一个服务器到系统中,并且选择该服务器的连接节点为您刚才创建的“SDN路由器”,保存后,您可以看到这个服务器连接着…...
使用winsock和ip相关指令重置Window网络配置
netsh winsock reset 和 netsh int ip reset 是 Windows 中用于修复网络问题的命令。它们分别用于重置 Winsock 和 TCP/IP 网络配置,以解决可能由于配置错误或网络堆栈损坏而导致的网络连接问题。 1. netsh winsock reset 1.1 作用 重置 Winsock 目录。Winsock 是…...
用AI做电子萌宠,快速涨粉变现
今天给大家分享一个很热门的小副业—AI宠物视频 项目介绍 前一阵刷到一个萌宠账号,爆款率可真高,涨粉可真快呀。 28篇笔记涨粉3.2万,点赞更是达到了十几万。其中有6篇点赞上万。 至于究竟是不是AI其实没那么重要,重要的是&…...
如何在 Axios 中封装事件中心EventEmitter
在 Axios 中封装一个事件中心 EventEmitter 允许你在请求的不同阶段(如请求开始、请求成功、请求失败等)触发事件。这可以通过创建一个自定义的 Axios 实例,并结合 Node.js 的 events 模块来实现。以下是一个详细的步骤指南和示例代码&#x…...
计算机网络——ftp
在网络通信中,控制连接和数据连接是两种不同类型的连接,它们各自具有特定的功能和用途。 一、控制连接 定义与功能: 控制连接主要用于在通信双方之间传输控制信息,以建立、维护和终止数据连接。它负责协调和管理数据传输的过程&am…...
Redis:set类型
Redis:set类型 set命令SADDSMEMBERSSISMEMBERSCARDSPOPSRANDMEMBERSMOVESREM 集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 内部编码intsethashtable 当把一些关联的数据放到一起,就构成一个集合。在Redis中,使用set类型维护…...
九大排序之插入排序
1.前言 插入排序是把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。实际中我们玩扑克牌时,就用了插入排序的思想。 本章重点:主要着重的介绍两种插入排序…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
