系列文章目录

博客依托于国外GNN综述
结合沐神视频


文章目录

  • 系列文章目录
  • 图神经
  • 一、图是什么?
  • 二、机器学习中使用图
    • 1、邻接矩阵的表达
    • 2、GNN
      • 1.独自更新
      • 2.VE交互更新
      • 3.UVE交互更新
    • 3、GCN
  • 总结

图神经

什么是图:
图是一种对节点和节点间关系建模的数据结构,是机器学习中唯一的非欧几里得数据,图分析可用于节点分类、链接预测和聚类。

GNN的来源:
CNN:CNN可以提取大量本地紧密特征并组合为高阶特征,但CNN只能够操作欧几里得数据。CNN的关键在于局部连接、权值共享、多层使用;
graph embedding:在低维向量上学习表示图节点、边或者子图。思想源于特征学习和单词嵌入,第一个图嵌入学习方法是DeepWalk,它把节点看做单词并在图上随机游走,并且在它们上面使用SkipGram模型;

基于以上两种思想,GNN会在图结构上聚合信息,因此可以对输入/输出的元素及元素间的独立性进行建模。GNN还可以同时使用RNN核对图上的扩散过程进行建模。

GNN的优势:

  1. 标准神经网络(CNN、RNN)无法解决图输入无序性,因为它们将点的特征看做是特定的输入;
  2. 两点之间的边代表着独立信息,在标准神经网络中,这种信息被看做是点的信息,而GNN可以通过图结构来进行传播,而不是将其看做是特征;通常而言,GNN更新隐藏节点的状态,是通过近邻节点的权值和;
  3. 高级人工只能需要更高的可解释性;标准神经网络可以生成合成图像或文档,但无法生成图;GNN可以生成无结构的数据(多种应用:文字分类、神经机器翻译、关系提取、图像分类);

GNN不足:

  1. 更新节点的隐藏状态是低效的;
  2. 在迭代中使用相同的参数,更新节点隐藏状态是时序的;
  3. 在边上有一些信息化的特征无法在原始GNN中建模;如何学习边的隐藏状态也是问题;

一、图是什么?

图是由一个实体顶点(nodes)和关系边(edges)构成

1、 全局U:包含节点数、最长路径。是全局的图,有时称为主节点,是一个虚构的节点,用一种抽象的方法与点和边相连。
2、 顶点V:包含节点身份、邻居数量
3、 边E:包含边缘身份、边缘权重。可以通过将方向性与边(有向、无向)相关联来专门化图。


图片与稀疏矩阵与图之间的转换:
1、 image Pixels:图片的像素点位置
2、 Adjacency Matrix:稀疏矩阵
3、 Graph:无向图网络

可以看见image Pixels的1-1和2-2的像素位置信息可以通过二维稀疏矩阵和三维图网络表达出来,一个像素可以通过与邻居像素确定坐标方位,从而固定所在区域。

二、机器学习中使用图

1、邻接矩阵的表达

机器学习模型通常采用矩形或网格状数组作为输入。图有多达四种类型的信息,希望使用这些信息进行预测:节点V、边E、全局上下文U和边与点的连接性。

其中图的连接性更为复杂,也许最较好的选择是使用邻接矩阵去表达,因为这较容易使用张量表示。然而这种表示存在一些缺点。一些复杂的图中节点数可能达到数百万级,每个节点的边距可能变化很大,这会产生非常稀疏的邻接矩阵,不仅空间效率低下,而且想通过GPU去处理较大的稀疏矩阵,还是一个比较难的基础问题。

除此之外,还有一个问题就是有许多邻接矩阵可以通过不同的编码方式来表达相同的连通性,但这不能保证这些不同的矩阵在深度神经网络中会产生相同的结果(也就是说,它们不是置换不变的)。意思也就是对于同一张图片有多种编码方式来将他转换成不同的邻接矩阵,但这些邻接矩阵表达的点边连接性是一样的,是同一张图片,而神经网络面对这些不同矩阵迭代学习出来的结果区别可能很大。就像下图ABCD四个相连节点就已经存在24种邻接矩阵方案。

对于这些问题,有人提出了一种优雅且节省内存的方法——邻接列表。
邻接列表包含了边的数量和节点之间连接关系,有多少条边就有多少个项,每个项都记载了对应边所连接的两个节点序号。可以避免在图的不连接部分进行计算和存储,另一个方面来说顺序对邻接列表影响不大,既是储存高效也是与顺序无关。

2、GNN

1.独自更新

GNN 采用“图入图出”架构,这些模型类型接受图作为输入,加载到其节点、边和全局上下文到模型中,并逐步更新这些传入信息,而不改变输入的连接性图形,也就是只对属性进行变化但是不改变图的结构。

比如说对U、V、E使用单独的多层感知器 (MLP),对于每个节点向量应用 MLP 并返回一个学习的节点向量。对每条边做同样的事情并返回学习每个边的信息。对于全局上下文向量并返回学习整个图的信息。

与神经网络模块或层一样,我们可以将这些 GNN 层堆叠在一起构建一个简单的 GNNs。
GNN最后一层的输出如何在任务中进行预测呢,比如面对二分类的情况,可以很容易地扩展到多类或回归的情况。

向量信息储存在节点时,进行二元或N分类预测,并且图已经包含节点信息,那么方法很简单——对于每个节点更新,应用全连接层+softmax得到输出。

向量信息存储在边时,但节点中没有信息仍需要对节点进行预测时,可以从边E收集信息并将这些信息提供给节点进行预测。可以通过pooling汇聚来做到这一点,应用全连接层+softmax得到输出。池化分两步进行:

  1. 收集每个节点连接边E的向量信息与全局上下文U信息,并将它们连接成一个矩阵。
  2. 然后对于聚合收集的向量,通常进行求和操作。

还有很多比如向量信息储存在边时预测边,向量信息储存在节点时预测边,向量信息储存在节点和边时预测全局上下文等等方案,不管
向量信息存储在哪里都可以通过汇聚操作得到想要的那个属性的向量信息。

以下就是一个简单GNNs模型图:

  1. 输入一个GNN图
  2. 对U、V、E分别进行对应的MLP处理
  3. 输出属性更新结构不变的图
  4. 汇聚层+全连接层+softmax
  5. 输出结果

2.VE交互更新

但在这个最简单的 GNNs 模型中,我们根本没有在 GNN 层内使用图的连通性。每个节点都是独立处理的,每条边也是如此,以及全局上下文。我们只在汇集信息进行预测时使用连接性,并没有很充分利用好图的信息。

这里是复用pooling汇聚来做到这一点,在把节点V传入MLP模型前,根据点线连接找到对应的邻接节点也就是一近邻,并把他们进行汇聚层产生新的向量后,再传入MLP中,也就是加多了一个简单聚合步,类似于没有加权和的卷积操作,这也是图卷积神经网络的思路。

通过将消息传递 GNN 层堆叠在一起,一个节点最终可以整合获取来自整个图的信息,比如在三层之后,一个节点拥有离它三步之遥的节点的信息,完成整个图的较长距离的信息传递过程。

从点与点之间引出一个问题,关于VE两者之间的信息交换。

根据之前的点边聚合信息思路,组合成新的节点和边表示:节点到节点(线性)、边到边(线性)、节点到边(边缘层)、边到节点(节点层),多种组合方式,不同方式有不同结果:

  1. 从顶点到边-边更新-边到顶点-点更新
  2. 从边到顶点-点更新-顶点到边-边更新
  3. 交替更新,同时进行

3.UVE交互更新

网络存在一个缺陷:当图中存在两个相距很远的节点,可能无法有效的快速的相互传递信息。对于一个节点,如果我们有 k 层,则信息将最多传播 k 步,从而产生信息滞后。如果这个处于网络边缘的节点很重要的话,那可能会造成一定的影响。一种解决方案是让所有节点能够相互传递信息。不幸的是,对于大型图,这很快就会变得计算成本高昂(尽管这种称为“虚拟边”的方法已用于诸如分子之类的小型图)。

这个问题的一种解决方案是使用图 (U) 的全局表示,有时称为主节点 或上下文向量。这个全局上下文向量连接到网络中的所有其他节点和边,并且可以充当它们之间的桥梁以传递信息。

  1. U与V相连,信息从顶点汇聚到边时,U也会传进去。
  2. U与E相连,信息从边汇聚到顶点时,U也会传进去。
  3. U自更新时,其实就是将顶点和边的信息汇合去更新。

3、GCN

GCN也是一个神经网络层。它的层与层之间的传播方式是:

其中:

  1. Aˇ=A+I,I是单位矩阵
  2. Dˇ是Aˇ的度矩阵(degree matrix),公式为 Dˇii=∑jAˇii
  3. H是每一层的特征,对于输入层的话,H就是X
  4. σ是非线性激活函数

图卷积神经网络是用其他节点的信息来推导该节点的信息。
另外,图中的每个结点无时无刻不因为邻居和更远的点的影响而在改变着自己的状态直到最终的平衡,关系越亲近的邻居影响越大。

图数据中的空间特征具有以下特点:
1) 节点特征:每个节点有自己的特征;(体现在点上)
2) 结构特征:图数据中的每个节点具有结构特征,即节点与节点存在一定的联系。(体现在边上)

总地来说,图数据既要考虑节点信息,也要考虑结构信息,图卷积神经网络就可以自动化地既学习节点特征,又能学习节点与节点之间的关联信息。


总结

所有图属性都学习了表示,因此我们可以在池化期间通过调节我们感兴趣的属性相对于其余属性的信息来利用它们。例如,对于一个节点,可以考虑来自相邻节点、连接边和全局信息的信息。为了使新节点嵌入所有这些可能的信息源,可以简单地将它们连接起来。此外,还可以通过线性映射将它们映射到同一空间并添加它们或应用特征调制层,这可以被认为是一种特征化注意机制。

建议去看一下这篇国外博客,尝试去操作一下这些交互图,可以有效提高理解。

神经网络学习笔记4——GNN图神经和GCN图卷积网络相关推荐

  1. 【图神经网络】图神经网络(GNN)学习笔记:GNN的通用框架

    图神经网络GNN学习笔记:GNN的通用框架 1. MPNN 2. NLNN 3. GN 参考资料 所谓通用框架,是对多种变体GNN网络结构的一般化总结,也是GNN编程的通用范式,这里介绍3类通用框架: ...

  2. 深度学习笔记(47) 神经风格迁移

    深度学习笔记(47) 神经风格迁移 1. 神经风格迁移 2. 代价函数 1. 神经风格迁移 近,卷积神经网络最有趣的应用是神经风格迁移 来看几个例子,比如这张照片,照片是在斯坦福大学拍摄的 如果想利用 ...

  3. 神经网络学习笔记(一) RBF径向基函数神经网络

    神经网络学习笔记(一) RBF径向基函数神经网络 2018年08月06日 13:34:26 吃机智豆长大的少女乙 阅读数:2735 RBF径向基函数神经网络 初学神经网络,以下为综合其他博主学习材料及 ...

  4. 神经网络学习笔记3——Transformer、VIT与BoTNet网络

    系列文章目录 神经网络学习笔记1--ResNet残差网络.Batch Normalization理解与代码 神经网络学习笔记2--VGGNet神经网络结构与感受野理解与代码 文章目录 系列文章目录 A ...

  5. # PyTorch学习笔记(15)--神经网络模型训练实战

    PyTorch学习笔记(15)–神经网络模型训练实战     本博文是PyTorch的学习笔记,第15次内容记录,主要是以一个实际的例子来分享神经网络模型的训练和测试的完整过程. 目录 PyTorch ...

  6. 神经网络学习笔记-02-循环神经网络

    神经网络学习笔记-02-循环神经网络 本文是根据WildML的Recurrent Neural Networks Tutorial写的学习笔记. 循环神经网络 循环神经网络适用于处理序列化信息,比如: ...

  7. 径向基(Radial Basis Function:RBF)神经网络学习笔记

    原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080 一. 从BP神经网络到RDF神经网络 在上一篇文章BP(Back ...

  8. Java学习笔记(7)——Java基础之IO多线程网络思维导图

    Java面向对象学习笔记之:包括IO(字节流,字符流,节点流,处理流).线程(线程创建,线程控制,线程同步).网络(TCP Scoket,  UDP Scoket)(全屏观看Java学习笔记(7)-- ...

  9. 脉冲神经网络学习笔记(综述)

    脉冲神经网络学习笔记 一. 基本框架 脉冲神经网络的监督算法目标是实现对脉冲序列中包含的时空模式的信息的学习,脉冲序列的定义: S(t)对一个Dirac函数进行求和,f代表发放的第f个脉冲,Dirac ...

最新文章

  1. 【Dubbo源码阅读系列】之远程服务调用(上)
  2. 听说你有病,我这儿可有对症的药
  3. 算法---------数组-----------寻找峰值
  4. java程序服务不能启动不了_JavaService.exe注册的windows服务无法启动问题
  5. python的特性注定了代码无法保密_python 基础
  6. java中整数和字符串间的转换方法
  7. PyQt5教程 - QtDesigner窗口设计工具的使用
  8. 结构化CSS设计思维
  9. 【深入浅出精华版视频】-刘意day13思维导图整理
  10. Live2D在Unity中的使用
  11. windows 垃圾广告软件清除
  12. 前端 psd切片生成html.css,1个将PSD网页模板切片输出为DIV+CSS架构网页教程
  13. D. Take Your Seat
  14. 定制Linux系统安装盘,syslinux定制系统启动盘
  15. 互联网日报 | 格力首款5G手机开售;拼多多内测多多钱包功能;跟谁学宣布定增融资8.7亿美元...
  16. Win10任务栏卡死解决方案
  17. Linux下连接mongoDB出现no reachable servers以及mongoDB创建用户
  18. 测试方法介绍-计算模型复杂度(GMac)、模型大小(M)、计算速度(FPS)
  19. Excel文档安全性设置
  20. React + webpack 开发单页面应用简明中文文档教程(一)一些基础概念

热门文章

  1. 【sympy】python 求常微分方程 sympy库
  2. 2020最新kali设置root用户(直接设置root用户/单用户模式设置root用户)
  3. 视音频学习基础篇(一)----YUV采样格式和存储格式
  4. MyBatis逆向工程(一)
  5. Metasploit 对 IE 浏览器的极光漏洞进行渗透利用
  6. php redis配置,在PHP中配置Redis | Soo Smart!
  7. 基于Pandas和PyEcharts的当当网图书信息可视化分析
  8. 【Python脚本进阶】2.1、端口扫描器(上):TCP全连接扫描
  9. php实现商城购物车的思路以及源码分析
  10. C++里已知三个三维点,求他们的平面方程,怎么做?