果断的李子 · 美国服装设计师成网红:给蝴蝶补翅膀_手机新浪网· 1 月前 · |
魁梧的饭盒 · 龙舞在中国传统哲学视域中的审美特征· 4 月前 · |
热心的楼梯 · TikTok带货刚来,但垂类直播带货平台都拿 ...· 5 月前 · |
干练的打火机 · 渝昆高铁川渝段全线贯通_手机新浪网· 1 年前 · |
乐观的桔子 · 我的逃亡恶魔怎么样,主角怎么样 - 快看漫画· 1 年前 · |
摘要:
深度学习还没学完,怎么图深度学习又来了?别怕,这里有份系统教程,可以将0基础的你直接送到图深度学习。还会定期更新哦。
本教程是一个系列免费教程,争取每月更新2到4篇。
主要是基于图深度学习的入门内容。讲述最基本的基础知识,其中包括深度学习、数学、图神经网络等相关内容。该教程由代码医生工作室出版的全部书籍混编节选而成。偏重完整的知识体系和学习指南。在实践方面不会涉及太多基础内容 (实践和经验方面的内容,请参看原书)。
文章涉及使用到的框架以PyTorch和TensorFlow为主。默认读者已经掌握Python和TensorFlow基础。如有涉及到PyTorch的部分,会顺带介绍相关的入门使用。
本教程主要针对的人群:
本篇文章将正式开始介绍网络模型。在本篇文字中将介绍一下全连接神经网络。其中包括其结构、原理、对应的数学知识以及与图卷积神经网络的关系。
为了方便读者理解,这部分知识主要是从模型的正向结构讲起。再我们将正向结构理解了之后,会单独列出一篇文章从模型的训练方面入手,介绍反向结构的相关内容。
1 计算机界中的神经元结构
计算机界中的神经元数学模型如图所示。
1.1 神经元模型含义
下面通过两个例子来更好的理解一下该模型的含义:
该神经元相当于与一条直线的几何意义,如图所示。
这样的神经元可以将输入的x按照直线上所对应的y值进行输出。
(2)以含有两个输入节点的神经元为例,假设输入节点的名称为x1、x2,分别对应的w为3、2,b的值为1,激活函数activate为y=[0,1][x<0](相当于根据符号取值:如果小于0则返回1,否则返回0)
其公式可以写成
式中,该神经元的结构如图所示:
图中神经元结构的几何意义如下图所示。
在图中,横坐标代表x1,纵坐标代表x2,黄色和红色区域之间的线即是神经元所表达的含义。该神经元用一条直线将一个平面分开,其意义为:将黄色区域内的点输入神经元所得到的值为1;将红色区域内的点输入神经元所得到的值为0。
1.2神经元的本质——超平面方程
1.3 神经网络与深度学习的关系
人们在各个领域的人工智能研究中,设计出了很多不同结构的神经网络模型。其中最为常用的基础模型有3个。
这些基础模型可以作为一个网络层来使用。而一个具体的模型就是由多个网络层所组成的。
随着人工智能的发展,产生了越来越多的高精度模型被设计出来,这些模型有个共同的特点:层数越来越多。这种由很多层组成的模型便叫做深层神经网络。
深度学习是指用深层神经网络搭建模型,进行机器学习。
2 全连接神经网络
全连接神经网络是指将神经元按照层进行组合,相邻层之间的节点互相连接。它是最基础的神经网络。如图所示。
2.1 全连接神经网络的结构
将神经元取出3个,组合起来,便是一个简单的全连接网络。其中神经元1、神经元2叫做隐藏层,神经元3叫做输出层。
2.2 分析全连接网络中每个神经元的作用
下面通过一个例子来分析全连接网络中每个神经元的作用。
实例描述
针对图1-7的结构为各个节点的权重赋值,来观察每个节点在网络中的作用。
在实现过程中,具体步骤如下:
1.为神经元各节点的权重赋值
为上图中的3个神经元分别赋上指定的权重值,如下图所示:
3个神经元分别叫做Z1、Z2、Z3。分别对应如下公式1-4、1-6、1-5。
其中Z2所对应的公式在公式1-3中也介绍过。其所代表的几何意义是将平面直角坐标系分成大于0和小于0两个部分。
2.整个神经网络的几何意义
为节点Z1、Z2各设置一个根据符号取值的激活函数:y=[0,1][x<0](如果小于0则返回1,否则返回0)。则Z2所代表的几何意义与图1-5中所描述的一致,同理可以理解Z1节点的意义。Z1、Z2两个节点都把平面直角坐标系上的点分成了两部分。而Z3则可以理解成是对Z1、Z2两个节点输出结果的二次计算。
为节点Z3也设置一个根据符号取值的激活函数:y=[1,0][x<0](如果小于0则返回0,否则返回1)。则Z1、Z2和Z3节点作用在一起所形成的几何意义如图。
在图中,最右侧是全连接网络的几何意义。它会将平面直角坐标系分成了3个区域,这3个区域的点被分成了2类(中间区域是一类,其他区域是另一类)。
在复杂的全连接网络中,随着输入节点的增多其几何意义便由2维的平面空间上升至多维空间中对点进行分类的问题。而通过增加隐藏层节点和层数的方法,也使模型由能够在2维的平面空间中划分区域并分类的能力,升级到多维空间。
3.隐藏层神经节点的意义
将Z1、Z2节点在直角坐标系中各个区域对应的输出输入到Z3节点中,可以看到Z3节点其实是完成了逻辑门运算中的“与”运算(AND)。如图。
图1-10 Z3节点的AND逻辑门运算
从图中可以看出,第二层的Z3节点充当了对前层网络输出信号再计算的作用。它可以实现一定的逻辑推理功能。
2.3 全连接神经网络的拟合原理
如果人工对神经元这种模型结构进行权重设置,则可以搭建出更多的逻辑门运算。例如图1-11中举例了神经元实现的AND、OR、NOT等。
通过对基础逻辑门组合,还可以搭建出更复杂的逻辑门运算,例如图中(b)所示。
(a)逻辑门(与或非)
a xNOR b=NOT(a XOR b)=(a AND b) OR((NOT a)AND(NOT b)) NOT(x1)AND NOT(x2)
(b) 利用“与或非”门搭出异或
了解计算机原理的读者都会知道,CPU的基础运算都是在构建逻辑门基础之上完成的,比如,用逻辑门组成最基本的加减乘除四则运算,再用四则运算组成更复杂的功能操作,最终可以实现现在的操作系统并在上面开展各种应用。
神经网络的结构和功能,使其天生具有编程和实现各种高级功能的能力,只不过这个编程不需要我们人脑通过学习算法来拟合现实。而是使用模型学习的方式,直接从现实的表象来优化成需要的结构。
3 激活函数——加入非线性因素,解决线性模型缺陷
激活函数的主要作用就是用来加入非线性因素的,来解决线性模型表达能力不足的缺陷,在整个神经网络里起到至关重要的作用。
因为神经网络的数学基础是处处可微的,所以选取的激活函数要能保证数据输入与输出也是可微的。
在神经网络里常用的激活函数有Sigmoid、Tanh、relu等,下面一一介绍。
3.1 Sigmoid函数
Sigmoid是非常常见的激活函数了,一起看看它的样子。
Sigmoid 是常用的非线性的激活函数,它的数学形式见公式6-2。
其曲线如图6-3所示,它的x可以是正无穷到负无穷,但是对应的y却只有0到1,所以,经过它输出的函数都会落在0和1的区间里,也就是它能够把输入的连续实值“压缩”到0和1之间。
图6-3 Sigmoid曲线
从图像上看,随这x趋近正负无穷大,y对应的值越来越接近1或-1。这种情况叫做饱和。处于饱和态的激活函数意味着,当x=100和x=1000的反映都是一样的,这样的特性转换相当于将1000大于100十倍这个信息给丢失了。
所以,为了能有效使用Sigmoid函数,从图上看极限也只能是-6到6。而在-3到3之间应该是会有比较好的效果。
3.2 Tanh函数
Tanh可以是Sigmoid的值域升级版,由Sigmoid的0到1升级到-1到1。但是也不能完全替代Sigmoid,在某些输出需要是大于0的情况下,Sigmoid还是要用的。
Tanh 是也常用的非线性的激活函数,它的数学形式见公式6-3。
其曲线如图6-7所示,它的x也是正无穷到负无穷,对应的y变为从-1到1,相对与Sigmoid函数有更广的值域。
显而易见,Tanh跟Sigmoid有一样的缺陷,也是饱和问题,所以在使用Tanh时,也要注意,输入的值的绝对值不能过大,不然模型无法训练。
3.3 Relu
非常简单,大于0的留下,否则一律为0。具体的图像如图6-5所示。它的应用广泛性是跟它的优势分不开的,这种对正向信号的重视,忽略负向信号的特性与我们人类神经元细胞对信号的反映极其相似。
所以在神经网络中取得了很好的拟合效果。另外由于其运算简单,大大地提升了机器的运行效率,也是一个很大的优点。
与其类似的还有Softplus函数,如上图的绿色曲线。二者的区别在于:Softplus会更加平滑,但是计算量会很大,而且对于小于0的值保留的相对更多一点。Softplus公式见式6-5。
虽然relu在信号响应上有很多优势,但这仅仅在正向传播方面,由于对负值的全部舍去很容易使模型输出全零从而无法在进行训练。例如随机初始化的w中加入有某个值是负的,其对应的正值输入值特征也就全部被屏蔽掉了,同理对应的负值输入值反而被激活了。这显然不是我们想要的结果,于是基于relu的基础上又演化出来了一些变种函数举例如下:
Noisy relus:为max中的x加了一个高斯分布的噪声,公式见式6-6。
Leaky relus:在relu基础上,保留一部分负值,让x为负时乘个0.01,即,leaky relus对负信号不是一味的拒绝,而是缩小。其数学形式见式6-7。
在进一步让这个0.01作为参数可调,于是:当x小于0时,乘个a,a小于等于1。其数学形式见式6-8。
得到Leaky relus的公式max(x,ax)
Elus:当x小于0时,做了更复杂的变换,式6-9。
Elus激活函数与Relu一样都是不带参数的,而且收敛速度比relu更快,使用elu时,不使用批处理能够比使用批处理获得更好的效果,同时elu不使用批处理的效果比relu加批处理的效果要好。
3.4 Swish函数
Swish是谷歌公司发现的一个效果更优于Relu的激活函数。经过测试,在保持所有的模型参数不变,只是把原来模型中的 ReLU 激活函数修改为 Swish 激活函数,模型的准确率均有提升。其公式见式6-10
其中为x的缩放参数,一般情况取默认值1即可。在使用了BN算法(见8.9.3)的情况下,还需要对x的缩放值进行调节。
3.5 激活函数总结
神经网络中,运算特征是不断进行循环计算,所以在每代循环过程中,每个神经元的值也是在不断变化的。这就导致了Tanh特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果显示出来。
但有时,当计算的特征间的相差比较复杂没有明显区别,或是特证间的相差不是特别大时,这就需要更细微的分类判断,这时Sigmoid效果就会更好一些。
而后来出现的Relu激活函数,其优势主要因为经过其处理后的数据与更好的稀疏性特征。即,将数据转化为只有最大数值,其他都为0的特征。这种变换可以近似程度的最大保留数据特征,用大多数元素为0的稀疏矩阵来实现。
实际上神经网络在不断反复计算中,就变成了Relu在尝试不断试探如何用一个大多数为0的矩阵来尝试表达数据特征。以稀疏性数据来表达原有数据特征的方法使得神经网络在迭代运算中能够取得又快效果又好的效果。所以,目前大多在用max(0,x)来代替sigmod函数了。
4 什么是图神经网络
图神经网络(Graph neural networks, GNN)是一类能够从图结构数据中学习的神经网络。它是解决图结构数据(非欧式空间的数据)机器学习问题的最重要技术之一。
在人工智能的拟合过程中,在很多场景下的样本并不是独立的,它们彼此之间是具有关联的。而这个关联一般都会用图来表示。
图是一种数据结构,它对一组对象(节点)及其关系(边)进行建模,形成一种特别的度量空间。这个空间仅仅体现了节点间的关系,它不同于2维、3维之类的空间数据,所以被叫做非欧式空间数据。
图神经网络的主要作用就是能够将图结构的数据利用起来,通过机器学习的方法进行拟合、预测。
神经网络是对单个样本的特征进行拟合,而图神经网络是在拟合单个样本特征基础之上,又加入了样本间的关系信息。不仅有较好的可解释性,也大大提升了模型性能。
5 图卷积神经网络以及其实现方法
在教程一中,我们介绍了简单的图结构。
图结构数据是无限维的一种不规则的数据,每一个节点的周围结构可能都是独一无二的,它没有平移不变性。这种结构的数据,使得传统的CNN、RNN无法在上面工作。
为了使模型能够适应图结构数据,人们研究出了很多方法,例如GNN、DeepWalk、node2vec等等,GCN只是其中一种。
图卷积神经网络(Graph Convolutional Network)是一种能对图数据进行深度学习的方法。图卷积中的“图”是指数学(图论)中的用顶点核边建立相关联系的拓扑图。卷积指的是“离散卷积”,它的本质就是一种加权求和,加权系数就是卷积核的权重系数。
如果说CNN是图像的特征提取器,则GCN便是图数据的特征提取器。在实现时,CNN可以直接对矩阵数据进行操作。而GCN的操作方式有2种:谱域和顶点域(空间域)。
5.1 基于谱域的图处理
谱域属于谱图论(spectral graph theory)中的术语。谱图论源于天文学,在天体观测中,通过观察光谱的方式来观察遥远距离的天体。同样,图谱也是用于描述图的重要工具。
谱图理论就是研究如何通过几个容易计算的定量来描述图的性质。通常的方法是将图结构数据编码成一个矩阵然后再计算矩阵的特征值。这个特征值也叫做图的谱 (spectrum),被编码后的矩阵可以理解成图的谱域。
谱是方阵特有的性质,对于任意非欧空间的数据必须先通过计算其定量的描述生成方阵,才能进一步求得谱。
基于谱域实现的图卷积。即:使用图结构中的度和邻接矩阵来表示图的谱域。而对矩阵的拉普拉斯变换,则是对图结构提取特征(谱)的一种方法。
5.2 基于顶点域的图处理
顶点域(vertex domain)也叫空间域(spatial domain)是指图的本身结构所形成的空间。对图结构基于顶点域的处理是一种非常直观的方式。它直接按照图的结构,根据顶点相邻间的关系以及每个顶点自己的属性,逐个节点的进行计算。
在教程二中,所介绍的DGL库,其内部主要就使用顶点域进行图处理的。这部分内容还会在后续教程中继续深化。
6 图卷积的模型所处理的数据集
图卷积的模型所处理的数据集比深度学习模型所处理的数据集,多了一个样本间的关系维度。即,除了有每个样本自身的属性以外,还会有样本间的关联关系。
6.1 CORA数据集
下面以一个比较常用的CORA数据集为例:
CORA数据集是由机器学习的论文整理而来。在该数据集中记录了每篇论文所用到的关键词,以及论文之间互相引用的关系。
1. 数据集内容
CORA数据集中的论文共分为七类:基于案例、遗传算法、神经网络、概率方法、强化学习、规则学习、理论。
数据集中共有2708篇论文,其中每一篇论文都引用或被至少一篇其他论文引用。整个语料库共有2708篇论文。
同时又将所有论文中的词干、停止词、低频词删除。留下1433个关键词,作为论文的个体特征。
2. 数据集组成
CORA数据集中有两个文件,具体说明如下。
(1)content文件包含以下格式的论文说明:
<paper-id><word-attributes>+<class-label>
每行的第一个条目包含论文的唯一字符串ID,后跟二进制值,指示词汇表中的每个单词在纸张中是否存在(由1表示)或不存在(由0表示)。最后,行中的最后一项包含纸张的类标签。
(2)cites文件包含了语料库的引文图。每一行用以下格式描述一个链接:
<id of reference paper><id of reference paper>
每行包含两个纸张ID。第一个条目是被引用论文的ID,第二个ID代表包含引用的论文。链接的方向是从右向左的。如果一行用“paper1 paper2”表示,则链接为“paper2->paper1”。
6.2 了解DGL库中的更多数据集
在教程(二)中简单介绍了DGL库,在DGL库提供了15个内置数据集,可以非常方便用来做图神经网络测试。下面列出几种常用的数据集,具体如下:
在使用时,可以通过dgl.data库中的数据集类直接进行实例化即可。实例化的参数要根据每个数据集类的构造函数定义进行配置。代码如下:
dataset = GINDataset(‘MUTAG’, self_loop=True) #子数据集为MUTAG,使用自环图
该代码的作用是创建并加载一个同构图数据集。该代码运行后,会自动从网络下载指定的数据集并解压,载入到内存,返回数据集对象dataset。该数据集类与pytorch的Dataset类兼容。
提示:
dgl.data库中的数据集类规划得并不是太好,有的直接裸漏在data下面,有的则被额外封装了一层。例如,CoraDataset类就被封装在citation_graph.py文件中,载入时需要编写如下代码:
from dgl.data import citation_graph
data = citation_graph.CoraDataset()
该代码在执行时会读取指定的数据集,并生成邻接矩阵,然后调用networkx模块根据该邻接生成图和训练数据集、测试数据集。
所以,在使用DGL的数据集时还需要在dgl/data路径下单独查找,以库中实际的代码为准。
7 以谱域的方式介绍图卷积结构
本篇教程之所以将全连接和图卷积神经网络放在一起介绍。主要是因为二者的结构非常相似。图卷积模型从多层间的特征处理角度来看,属于卷积操作,但是对于单层的结构来讲,跟深度学习中的卷积神经网络结构(后续教程会讲)并不相近。反而与全连接神经网络更为相近。
7.1 理解图卷积模型
图卷积与其它的神经网络类似,都具有维度变换的功能,即,将每个含有in维的节点特征数据变换成含有out维的节点特征数据。
有图9-17可以看到,GCN这个模型框架的输入是一张图,经过一层一层计算变换,最后输出的还是一张图。
如果从卷积角度来理解,则可以将被处理后的邻接矩阵当作一个卷积核,用这个卷积核在每一个隐藏层的特征结果上做全尺度卷积。由于该卷积核的内容是图中归一化后的边关系,用这种卷积核进行卷积处理后的特征,使隐藏层的特征会按照节点间的远近关系信息进行转化,即对隐藏层的特征进行了去噪处理。被去噪后的特征含有了同类样本间的更多信息,从而使神经网络在不需要大量样本的训练条件下,也可以训练出性能很好的模型。
图神经网络的实质是:对节点间的图结构关系进行计算,并将计算结果作用在每个节点的属性的特征拟合当中。
7.2 理解图卷积模型的实现
图卷积的操作与注意力机制的做法非常相似,是将输入的节点特征、权重参数、加工后的邻接矩阵三者放在一起做点积运算。
其中这个“加工后的邻接矩阵”,一般是通过拉普拉斯矩阵变换而来的。
如下图所示。权重参数是个[in,out]大小的矩阵,其中in代表输入节点的特征维度、out代表最终要输出的特征维度。读者可以将权重参数在维度变换中的功能当作一个全连接网络的权重来理解,只不过在图卷积中,会比全连接网络多了一个节点关系信息的点积运算。
图中列出了全连接网络和图卷积网络在忽略偏置后的关系。可以很清晰的看出,图卷积网络其实就是在全连接网络基础之上增加节点关系信息。
7.3 拉普拉斯矩阵的三种形式
在很多文献资料中,介绍图卷积时都会提到拉普拉斯矩阵。一顿拉普拉斯矩阵公式之后,总会使人蒙头转向。
其实它只是图卷积操作的众多方法中极为普通的一个。如果从顶点域来理解,便非常的容易。相对来讲从谱域理解会比较费劲。读者先有个概念,可以先把它当作一个基本的算法,这个算法可以对样本间的关系用矩阵的形式进行表示。在后面介绍顶点域时,我们会把这部分内容讲透。
在实际应用中,拉普拉斯矩阵有3种计算形式,它们都可以用来表示图的特征。给定一个有n个顶点的图,如果用代表图的度矩阵,用代表图的邻接矩阵。则拉普拉斯矩阵的3种计算方法具体如下。
其中代表加入自环(对角线为1)的邻接矩阵。代表的度矩阵。
7.4 图结构拉普拉斯矩阵的关系
图卷积本质不是传播标签,而是在传播特征,图卷积将不知道标签的特征,传染到已知标签的特征节点上,利用已知标签节点的分类器对未知标签特征的属性进行推理。
图卷积模型利用节点间的关系信息实现了特征的传播。而节点间的关系信息又是通过加工后的邻接矩阵来表现的。这个加工后的邻接矩阵叫做拉普拉斯矩阵(Laplacian matrix),也称为基尔霍夫矩阵。
图卷积操作步骤如下:
(1)先将图结构的特征用拉普拉斯矩阵进行表示出来。
(2)将拉普拉斯矩阵作用在节点特征的计算模型中,完成节点特征的拟合。
拉普拉斯矩阵的主要用途是表述图结构的特征(对矩阵的特征分解),它是例子中,图卷积操作的必要步骤。
7.5 图卷积的特性
图卷积神经网络具有卷积神经网络的以下性质:
8 以图神经网络的视角看代深度学习
深度学习的神经网络擅长处理欧式空间的数据,而图神经网络擅长处理非欧空间的数据。但在图神经网络的实际处理过程中,还是将非欧空间的结构转化成矩阵来实现,如果用矩阵作为桥梁,必然可以找到神经网络与图神经网络之间的联系。
下面以神经网络常见的图像处理任务为例。
图像,通常被理解为矩阵,矩阵的每个元素是像素,像素是(Red,Green,Blue)三个数值组成的向量。
换个角度想想,矩阵也可以理解为图谱,图谱由点和边组成。相邻的点之间,有边相连。而矩阵是一种特殊的图谱,特殊性表现在两方面:
(1)矩阵每个点有固定个数的邻点。从图谱的角度看,图像中的像素,就是图谱中的点。图像中每个像素,也就是图谱中的每个点,周边总共有 8 个邻点。
(2)矩阵每条边的权重是常数。从图谱的角度看,图像中的每一个像素,只与周边 8 个邻点之间有边,边的长短权重,是常数。
图像作为一种特殊的图谱,特殊性体现在这两个限制上面。如果放松了这两个限制,问题就更复杂了,这便是深度学习算法向图神经网络衍化的必然方向。
9 总结
本篇文章介绍了神经元、神经网络、图神经网络的基本原理。读者需要掌握神经元、神经网络、全连接结构、激活函数这部分知识。对于全连接神经网络如何搭建、激活函数如何使用,还需要自行找相关例子进行参考。后部分的图神经网络,要求读者能够理解其与神经网络的本质区别(主要在处理样本的类型上)。对于图卷积神经网络读者可以先了解其大概的样子,如果能够配合代码理解会更好。对其原理不需要深挖,其原理知识会在后续的教程中详细解析。
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
扫码关注腾讯云开发者
领取腾讯云代金券
果断的李子 · 美国服装设计师成网红:给蝴蝶补翅膀_手机新浪网 1 月前 |
魁梧的饭盒 · 龙舞在中国传统哲学视域中的审美特征 4 月前 |
干练的打火机 · 渝昆高铁川渝段全线贯通_手机新浪网 1 年前 |
乐观的桔子 · 我的逃亡恶魔怎么样,主角怎么样 - 快看漫画 1 年前 |