图深度学习入门教程(九)——图滤波神经网络模型

时间:2022-07-26
本文章向大家介绍图深度学习入门教程(九)——图滤波神经网络模型,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

本教程是一个系列免费教程,争取每月更新2到4篇。(由于精力有限,近期停止了一段时间,在此向大家道个歉)。

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

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

本教程主要针对的人群:

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

在上一篇的结尾出介绍了GfNN模型可以SGC网络可以弥补SGC模型无法拟合非线性数据的不足。本篇就来介绍下GfNN模型的结构、原理以及在DGL中的实现。

1 了解GfNN的网络结构

图滤波神经网络 (Graph filter Neural Network, GfNN)模型的主要思想就是在SGC模型后面加入深度学习中的非线性拟合功能。通过这种方式来弥补SGC网络无法拟合非线性数据的不足。

在掌握了SGC和深度神经网络的基础上,会很容易理解GfNN的结构。GfNN的结构只是在SGC后面加了1层全连接网络而已。如图10-17所示。

从图中,可以看到GfNN和GCN具有相似的高性能。由于GfNN在学习阶段不需要邻接矩阵的乘法,因此它比GCN要快得多。此外,GfNN对噪声的容忍度也更高。

GfNN模型更像是一个框架。框架中包含了两部分:

(1)通过多跳的方式,将图信息融合到图解点特征中。

(2)用深度学习的方法,对融合后的图节点特征进行拟合。

基于这个框架,可以不仅仅限于图10-17中的全连接神经网络结构。在实际应用中,可以像普通的深度学习任务一样,根据数据的特征和任务的特点,选用适合的神经网络来搭建模型。

有关GfNN的更多详细信息可以参考论文(arXiv: 1905.09550,2019)

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

在SGConv代码的基础稍加修改就可以实现一个带有全连接的GfNN模型。

2.1. DGL库中GfNN的代码实现

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

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

01 class GfNN(nn.Module):                #定义GfNN类
02    def __init__(self,in_feats, n_hidden, n_classes,
03                 k, activation, dropout, cached=True,bias=False):
04        super(GfNN, self).__init__()
05        self.activation = activation    #激活函数
06        self.sgc = SGConv(in_feats, n_hidden, k,cached, bias)
07        self.fc = nn.Linear(n_hidden, n_classes)
08        self.dropout = nn.Dropout(p=dropout)
09    def forward(self, g,features):
10        x = self.activation(self.sgc(g,features))#对SGC结果进行非线性变换
11        x = self.dropout(x)
12        return self.fc(x)        #对变换后的特征进行全连接处理
13    
14 model = GfNN(feats_dim,n_hidden=512,n_classes=n_classes, #实例化GfNN模型
15                   k=2,activation= nn.PReLU(512) ,dropout = 0.2)

代码第14行演示了实例化GfNN模型的过程。一般使用激活函数PReLU效果会更好一些。

2.2. 技术细节:什么是PReLU激活函数

PReLU:是一个ReLU激活函数的变种,其数学公式如下。

其中, a是一个调节参数,该参数可以通过自学习得来。

在PyTorch中,PReLU的原形定义如下:

torch.nn.PReLU(num_parameters=1, init=0.25)

其中参数num_parameters代表可学习参数的个数,init代表可学习参数的初始值。

2.3. GfNN模型的思想

GfNN模型的思想会比模型本身的意义更大。该模型提供了一个非常好的思路,可以使非欧数据与深度学习技术更好的结合到一起。