本教程是一个系列免费教程,争取每月更新2到4篇。

主要是基于图深度学习的入门内容。讲述最基本的基础知识,其中包括深度学习、数学、图神经网络等相关内容。该教程由代码医生工作室出版的全部书籍混编节选而成。偏重完整的知识体系和学习指南。在实践方面不会涉及太多基础内容 (实践和经验方面的内容,请参看原书)。

文章涉及使用到的框架以PyTorch和TensorFlow为主。默认读者已经掌握Python和TensorFlow基础。如有涉及到PyTorch的部分,会顺带介绍相关的入门使用。

本教程主要针对的人群:

  • 已经掌握TensorFlow基础应用,并想系统学习的学者。
  • PyTorch学习者
  • 正在从TensorFlow转型到PyTroch的学习者
  • 已经掌握Python,并开始学习人工智能的学者。

本篇文章主要介绍简化图卷积模型的结构、原理以及在DGL中的实现。

1 了解SGC的网络结构

在GCN中,如果抛开全连接部分的计算,在每一层中使用拉普拉斯矩阵与节点特征相乘的过程,可以理解为对该层各节点的邻居特征做一次平均值计算。每做一次计算代表对邻居节点1跳距离的信息聚合。

这种多层叠加的图卷积操作可以起到类似深度学习中的卷积作用——通过多次卷积的叠加操作,来增大模型的感受视野,实现高维特征的拟合,从而实现最终的特征分类。

SGC模型突破了GCN的层数限制,将GCN每层的激活函数去掉(不需要非线性变换)。利用图中的节点关系,直接计算图节点间局部邻居的平均值。通过多次计算节点间1跳距离的平均值来实现卷积叠加的效果。

这种简化版本的图卷积模型就叫做简化图卷积模型(Simple Graph Convolution 简称SGC)。该模型主要由两部分组成,见公式1-2、10-3。

公式1-3表示一个分类器,该过程与深度学习中的分类器完全一致。对特征提取后的数据进行全连接神经网络处理,然后再通过SoftMax进行分类。

由公式1-2和1-3可以看出SGC将图中节点关系的信息融合过程提到了样本处理环节,而不是像图卷积那样在模型的特征拟合过程中再去融合,从而简化了图神经网络模型逻辑也方面了模型训练。

GCN与SGC的处理关系见下图。

图1-1 GCN与SGC的结构

SGC之所以可以设计成这种结构,主要源于其固定的卷积核(图节点间的关系),在神经网络中,卷积核的权重是需要通过训练得到的。而在图神经网络中,卷积核的权重则是样本中自带的。这是二者的最大差异。即SGC使用了一个固定的低通滤波器,然后是线性分类器。这种结构大大简化了原有GCN的训练过程。其完整的网络结构图如图1-2所示。

图1-2 GCN与SGC的完整结构对比

2 了解DGL库中SGN的实现方式

直接使用DGL库中的简化图卷积层SGConv可以很方便的搭建SGC模型。在DGL库中,SGC的使用方法与注意力图卷积层GATConv非常相似,输入参数同样是样本特征和加入自环后的邻接矩阵图。

2.1. DGL库中SGConv的处理过程

SGConv类的内部实现步骤如下:

(1)计算图中的度矩阵(获得求平均值的分母)。

(2)按照指定的次数k,循环计算每一跳节点特征的平均值。

(3)在每一次循环内,按照图的传播方式对每个节点除以该节点的边数,得到特征平均值。

(4)对k次特征计算之后的结果做全连接处理,输出分类结果。

2.2. DGL库中GATConv的代码实现

实现SGConv类的主要代码如下:

代码文件:sgconv.py(片段)

该代码是DGL库中SGConv类的forward方法,代码第6行调用了in_degrees获取图graph中每个节点的被连接边数来作为该节点的度。此时,图对在象graph中,in_degrees与out_degrees的值都是相同的,这是因为在预处理阶段,已经将邻接矩阵转化成了无向图对称矩阵。

提示:

代码第6行中的clamp函数作用是对张量值按照指定的大小区间进行截断。代码clamp(min=1)的含义是将度矩阵中边长小于1的值都变为1。

利用这种方法可以很方便的为图中节点加入自环。

Clamp函数还可以用作梯度截断,通过对其参数min与 max进行指定,即可将梯度限定在指定范围之内。

代码第19行,对参数_cached进行判断,并根据该参数是否为True来决定是否保存处理特征抽取器的处理结果。如果_cached为True,则在多层SGConv中,只对初始的特征做一次基于图节点关系的特征抽取。剩下的计算与深度学习中的全连接网络完全一致。

想要更详细的了解SGConv实现过程,可以参考SGConv类的源码。具体位置在DGL安装库路径下的npytorchconvsgconv.py中。例如作者的本机路径为:

D:ProgramDataAnaconda3envspt13Libsite-packagesdglnpytorchconvsgconv.py

3 扩展:SGC模型的不足

简化图卷积模型(SGC)通过依次消除非线性并折叠连续层之间的权重矩阵来减少这种过多的复杂性。消去了图卷积运算中不必要的复杂性和冗余计算。这些简化不会在许多下游应用中对准确性产生负面影响,同样可以扩展到更大的数据集。

虽然SGC模型在基准数据集上计算速度快、精度高。但该模型是建立在节点特征本身线性可分的基础之上的。如果原始的节点特征不是线性可分,则每个节点经过k次1跳传播之后的特征也不是线性可分(因为中间没有非线性变换)。

SGC只是在图结构信息与节点特征的融合部分对图卷积做了优化,而对于图卷积的非线性学习部分没有任何贡献。

为了弥补SGC模型无法拟合非线性数据的不足,可以在网络中加入更多深入学习的非线性拟合神经元。即,使用多层SGC,并在层与层之间加入非线性激活函数。或是使用GfNN模型。

判断深度学习模型的稳定性_图深度学习连载八,入门教程之简化图卷积模型相关推荐

  1. 图深度学习连载八,入门教程之简化图卷积模型

    本教程是一个系列免费教程,争取每月更新2到4篇. 主要是基于图深度学习的入门内容.讲述最基本的基础知识,其中包括深度学习.数学.图神经网络等相关内容.该教程由代码医生工作室出版的全部书籍混编节选而成. ...

  2. 判断深度学习模型的稳定性_基于深度学习的三维模型检索算法研究

    三维模型检索github项目地址​github.com 大量的实验和比赛都证明了深度学习在图像检索中的效果很好,本文也将利用神经网络,研究刚体三维模型检索算法,并借助实验结果,来说明本文提出的网络模型 ...

  3. walking机器人入门教程-视觉建图-rtabmap使用视觉建图和导航

    系列文章目录 walking机器人入门教程-目录 walking机器人入门教程-硬件清单 walking机器人入门教程-软件清单 walking机器人入门教程-测试底盘 walking机器人入门教程- ...

  4. 最【通俗易懂】的 canvas 入门教程(多图预警)

    最[通俗易懂]的 canvas 入门教程(多图预警) canvas画布的宽度与高度 canvas 标签只有两个常用的标签属性:width 和 height. 当没有设置宽度和高度的时候,canvas ...

  5. C4D快速入门教程——C4D贴图

    C4D快速入门教程--C4D贴图 单面贴图 贴图基础(添加材质) 单面贴图 贴图调整 C4D版本R24 之前贴了一张比较low的图,没做调整,回去发现是在太难看,不想弄.今天重新整理了一下贴图,感觉顺 ...

  6. sklearn快速入门教程:补充内容 -- sklearn模型评价指标汇总(聚类、分类、回归)

    sklearn集成了大多数模型评价指标,这可以很大程度上方便我们的使用,尤其在对进行进行自动调参时可以方便我们进行选择. 做下这个笔记主要是为了补充之前的内容:sklearn快速入门教程:(四)模型自 ...

  7. 判断深度学习模型的稳定性_全自动搭建定制化深度学习模型

    EasyDL服务自动化生成与部署 EasyDL定制化训练和服务平台基于百度业界领先算法,旨在为用户量身定制业务专属AI模型.通过灵活的配置,用户可以将模型发布为公有云API.设备端离线SDK.本地服务 ...

  8. 深度学习模型建立过程_所有深度学习都是统计模型的建立

    深度学习模型建立过程 Deep learning is often used to make predictions for data driven analysis. But what are th ...

  9. 深度学习数字仪表盘识别_【深度学习系列】手写数字识别实战

    上周在搜索关于深度学习分布式运行方式的资料时,无意间搜到了paddlepaddle,发现这个框架的分布式训练方案做的还挺不错的,想跟大家分享一下.不过呢,这块内容太复杂了,所以就简单的介绍一下padd ...

最新文章

  1. SpringBoot源码分析之@Scheduled
  2. STL源码剖析---红黑树原理详解
  3. 如何用笔记本建立wifi热点
  4. .NET 产品组问卷调查|和我们分享你的 .NET 使用情况
  5. 一张图看懂云栖大会·上海峰会重磅产品发布
  6. [再寄小读者之数学篇](2014-05-30 平均值不等式)
  7. 携程启动“2021混合办公试验”,梁建章:拥抱疫情之外的在家办公
  8. spring 数组中随机取几个_最新redux-spring前端模块化框架
  9. poj 3630 简单Trie树的应用
  10. 手机突然变卡,不得不重置
  11. java 圣思园视频资源
  12. 计算机主板日常维护主要做到什么,对计算机硬件日常维护的热点研究
  13. 一种电阻电感电容自动识别及阻抗值测量电路
  14. Android接入融云即时通讯SDK,实现单聊和发送自定义消息。
  15. nds运行java_NDS看漫画软件 Comic Book DS 1.0 正式版!
  16. 170323 PyQt5 ListWidget的删除
  17. pandas如何处理列转行
  18. SpringCloud+Kubernetes 微服务容器化交付实战(9):JFrog Artifactory安装 配置
  19. OSChina 周四乱弹 —— 如果你追到我,我就和你……
  20. c++商店信息管理系统的设计与实现

热门文章

  1. 计算机管理在扩展器,tplogin.cn扩展器设置教程(电脑版)
  2. C语言实现 猴子吃桃子问题 超级详解
  3. python一维数组和二维数组_Python numpy实现二维数组和一维数组拼接的方法
  4. c++自制背单词应用
  5. ZEMAX非序列设计教程
  6. docker快速搭建几个常用的第三方服务
  7. url 微信公众号开发 配置失效_微信公众号开发者中心配置 Token验证失败 终极解决方案...
  8. 中国雪深长时间数据集处理与使用
  9. 计算机应用基础的实验心得,计算机应用基础心得体会3篇
  10. 计算机网络技术自考刷题APP,计算机网络自考app