背景
CNN:
- 图像识别的对象是图像,二维的结构 => 使用CNN模型提取图片特征
- CNN处理的图像或者视频中像素点(pixel)是排列成成很整齐的矩阵
- CNN的核心在于它的kernel,也就是一个个小窗口,在图片上平移,通过卷积的方式来提取特征
- 关键在于图片结构上的平移不变性,即一个小窗口无论移动到图片的哪一个位置,其内部的结构都是一模一样的,因此CNN可以实现参数共享
CNN一般作用于欧式空间,无法作用于非欧式空间,具有以下几个特点:
- 权重共享:同一个卷积核可以作用于不同的位置
- 局部性:欧式空间可以简洁的支持卷积核(直接根据卷积公式计算卷积结果即可),卷积核的大小一般远小于输入信号的大小
- 多尺度:CNN往往包含下采样,可以减少参数,并获得更大的感受野(receptive field)
GCN背景:
- 自然语言处理操作对象是序列信息,一维的结构 => 使用RNN模型针对序列结构进行操作,使得序列前后的信息互相影响,很好地捕捉序列的特征
- 图片或者自然语言,都属于欧式空间的数据 => 有维度的概念,数据的特点是结构规则
- 现实生活中,很多是不规则的数据结构,典型的就是图结构,或称拓扑结构,如社交网络、化学分子结构、知识图谱等等
- 即使是语言,实际上其内部也是复杂的树形结构,也是一种图结构
- 针对图片,在做目标识别的时候,我们关注的实际上只是二维图片上的部分关键点,这些点组成的也是一个图的结构
GCN:
- Graph Convolutional Networks,图卷积神经网络,实际上跟CNN的作用一样,就是一个特征提取器,只不过它的对象是图数据
- GCN精妙地设计了一种从图数据中提取特征的方法,从而让我们可以使用这些特征去对图数据进行处理:
- 节点分类(node classification)
- 图分类(graph classification)
- 边预测(link prediction)
- 图嵌入表示(graph embedding)
- GCN应用已经渗透在CV,NLP,RS中
相关:https://arxiv.org/abs/1609.02907
特点:
- 具有可扩展的优点,能够适应网络的变化
- 相较于起传统的深度学习,图神经网络由于在关系数据挖掘方面有巨大的潜力,正成为学术界和工业界投入研发的热点,比如商品推荐,金融风控,聊天机器人中的语义分析及意图识别
GCN算法:
对于一个图网络G=(V,E),有N个节点,每个节点都有自己的特征,目标是要学习图上的信号或特征的一个映射
邻接矩阵-A
保存的是Node之间的连接的性:
度矩阵-D
保存每个Node的边的数量,对角矩阵
拉普拉斯矩阵:L
L=D-A,之所以用D - A,是为了规范化,每一行每一列的和为0
常用的拉普拉斯矩阵有3种:
- Combinatorial Laplacian
- Symmetric normalized Laplacian,GCN采用
- Random walk normalized Laplacian
使用拉普拉斯矩阵的好处:
- 拉普拉斯是对称矩阵,可以进行特征分解(谱分解)
- 只在中心顶点和一阶相连的顶点上(1-hop neighbor)有非0元素,其余之处均为0
- 通过拉普拉斯算子与拉普拉斯矩阵进行类比
GCN算法使用:
对于一个图网络G=(V,E),有N个节点,每个节点都有自己的特征,目标是要学习图上的信号或特征的一个映射
GCN模型的输入为矩阵X和A:
- 矩阵X,表示这些节点特征,N×D维矩阵
- 矩阵A,表示各个节点之间的关系,N×N维矩阵,也称为邻接矩阵(adjacency matrix)
GCN是一个神经网络层,层与层之间的传播方式
-
A
~
=
A
+
I
\widetilde {A}=A+I
A
=A+I, I是单位矩阵
-
D
~
\widetilde {D}
D
是
A
~
\widetilde {A}
A
的度矩阵(degree matrix),公式为 :
D
i
i
~
=
∑
A
~
i
j
\widetilde {D_{ii}}=\sum\widetilde {A}_{ij}
Dii?
?=∑A
ij?
- H是每一层的特征,对于输入层的话,H就是X
- σ是非线性激活函数
-
D
~
?
1
2
A
~
D
~
?
1
2
\widetilde {D}^{ -\frac{1}{2}}\widetilde {A}\widetilde {D}^{ -\frac{1}{2}}
D
?21?A
D
?21?可以提前算好,固定不变
- 公式解释:http://tkipf.github.io/graph-convolutional-networks/
- 每一层GCN的输入都是邻接矩阵A和node的特征H,如果我们直接做一个内积,乘一个参数矩阵W,再激活一下,就相当于一个简单的神经网络层
实验证明,使用这个简单的神经网络层,就已经很强大了 不过这个简单模型有2个局限性:
局限1,只使用A的话,由于A的对角线上都是0,所以在和特征矩阵H相乘的时候,只会计算一个node的所有邻居的特征的加权和,该node本身的特征却被忽略了 优化方法:可以做一个小改动,即给A加上一个单位矩阵I,这样就让对角线元素变成1了
局限2,A是没有经过归一化的矩阵,如果A与特征矩阵H相乘会改变特征原本的分布,产生一些不可预测的问题
- 对A做一个标准化处理,首先让A的每一行加起来为1,然后对A乘以
D
?
1
D^{-1}
D?1 ,D为度矩阵,可以解决局限2
- 进一步把
D
?
1
D^{-1}
D?1 拆开与A相乘,得到一个对称且归一化的矩阵:
D
~
?
1
2
A
~
D
~
?
1
2
\widetilde {D}^{ -\frac{1}{2}}\widetilde {A}\widetilde {D}^{ -\frac{1}{2}}
D
?21?A
D
?21?
- 结合这两种改进的方式,得到:
这里
A
~
=
A
+
I
\widetilde {A}=A+I
A
=A+I, I是单位矩阵,
D
~
\widetilde {D}
D
是
A
~
\widetilde {A}
A
的度矩阵(degree matrix)
|