图的概述
图(Graph)就是节点(Vertices/Nodes)以及边(Edge)
图的举例
社交网络
节点:人
边:人与人之间的各种联系,如父母关系、朋友关系、同事关系等等。
化学分子
节点:原子
边: 原子之间的相互作用力,也称为化学键
知识图谱
节点:各种实体
边:实体之间所具有的各种关系(实体的属性特征)
推荐系统
节点:用户和商品
边: 用户、商品之间的购买、点击等关系
图学习
由于图数据本身结构的复杂性,直接定义出一套支持可导的计算框架并不直观。与图数据相对应的有图像、语音与文本,这些数据是定义在欧氏空间的规则化结构数据,基于这些数据的张量计算体系是比较自然且高效的。
图像数据是2D结构,与卷积神经网络(CNN)的作用机制具有良好的对应。
文本数据是一种规则的序列数据,这种序列结构与循环神经网络(RNN)的作用机制相对应。
针对图这种不规则的结构,引入了图学习这一概念。
图学习:可以方便地处理不规则数据(图),充分利用图结构信息。
图数据相关任务分类
节点层面(Node Level)的任务
节点层面的任务主要包括分类任务和回归任务。这类人物虽然是对节点层面的性质进行预测,但是节点的关系也许需要考虑。节点层面的任务有很多,包括学术上使用较多的对论文引用网络中的论文节点进行分类,工业界中的恶意账户检测等。
边层面(Link Level)的任务
边层面的任务主要包括边的分类和预测任务。边的分类是指对边的某种性质进行预测;边预测是指给定的两个节点之间是否会构成边。常见的应用场景比如在社交网络中,将用户作为节点,用户之间的关注关系建模为边,通过边预测实现社交用户的推荐。边层面的任务主要集中在推荐系统中,例如在点击率预测中,预测一个用户是否会点击某一物品。
图层面(Graph Level)的任务
图层面的任务不依赖于某个节点或者某条边的属性,而是从图的整体结构出发,实现分类、表示和生成等任务。例如对药物分子的分类,酶的分类等。
图卷积神经网络(GCN)
图结构卷积:将一个节点周围的邻居按照不同的权重叠加起来。
举个例子:
上图的邻接矩阵A为:
A | v1 | v2 | v3 | v4 |
---|---|---|---|---|
v1 | 0 | 1 | 1 | 0 |
v2 | 1 | 0 | 1 | 1 |
v3 | 1 | 1 | 0 | 0 |
v4 | 0 | 1 | 0 | 0 |
度矩阵D:
deg(vi) = |N(vi)|
D | v1 | v2 | v3 | v4 |
---|---|---|---|---|
v1 | 2 | 0 | 0 | 0 |
v2 | 0 | 3 | 0 | 0 |
v3 | 0 | 0 | 2 | 0 |
v4 | 0 | 0 | 0 | 1 |
一般图卷积会在给邻接矩阵加上自环边,也就是把节点本身也当作自己的邻居,即A+I=A(hat)。
A + I | v1 | v2 | v3 | v4 |
---|---|---|---|---|
v1 | 1 | 1 | 1 | 0 |
v2 | 1 | 1 | 1 | 1 |
v3 | 1 | 1 | 1 | 0 |
v4 | 0 | 1 | 0 | 1 |
相应的度矩阵也变为:
D(hat) | v1 | v2 | v3 | v4 |
---|---|---|---|---|
v1 | 3 | 0 | 0 | 0 |
v2 | 0 | 4 | 0 | 0 |
v3 | 0 | 0 | 3 | 0 |
v4 | 0 | 0 | 0 | 2 |
由此引入图卷积公式:
这里
H
l
H^l
Hl是所有节点在l次迭代时的特征。
例如图中四个节点的初始特征为
[[1,2,3],[2,3,4],[3,4,5],[4,5,6]] 每个节点是一个三维的向量,构成一个4*3的矩阵。此时H0就是这个矩阵。H1就是这个矩阵经过一次图卷积操作之后得到的新矩阵(特征)。
W为映射矩阵,是神经网络需要学习的参数之一。W0是可以通过神经网络进行随机初始化得到。
这里我们先简化上式:
那么H1就是A(hat)*H0*W0再经过非线性转换得到的节点特征表示。
我们不考虑映射矩阵W和最后的非线性变换:
上面就是简单的矩阵乘法。最后可以发现节点v1在经过一次卷积操作之后其实就是将他的邻居特征进行加和操作(这里的邻居包括他本身),其他节点也同理。
用一个类似的图进行解释:
那么为什么要考虑度矩阵呢?
例如,我们要考虑当某个人的邻居特别多时,而你只是他的一个邻居,那么他对你本身特征的贡献可能就微乎其微。举个更生动的例子,一个明星可能有上万个粉丝,他不可能知道大部分粉丝的名字或者样貌,而你跟你父母朋友之间的邻居数相较之下就小很多,自然而然他们对你的特征贡献也会相应的变大。这就是我们为什么要加入度矩阵来衡量一个节点的邻居对节点的贡献。
其中d是节点的邻居数(度),d越大,说明他所含的信息量越小,对他的邻居节点的贡献也就越小。
GCN中边的权重:
• 与节点的度相关
• 不可学习
图注意力网络(GAT)
GAT中的边权重
• 权重变成节点间的函数
• 权重与两个节点相关性有关
• 可学习
图采样(GraphSAGE)
当图数据非常巨大且节点的邻居非常多时,上述的GCN,GAT的计算力会非常巨大,为了节省计算资源,我们用图采样技术采样节点固定数量的邻居,不计算节点全部邻居,这样既能节省计算资源还能增强模型泛化能力。
邻居聚合
我们采样得到节点的邻居特征之后,需要进行聚合操作得到新的节点表示。
聚合的方式有很多种,例如mean max sum LSTM等。
下图黄点和蓝点是具有不同特征的节点表示。
由上可以看出sum聚合函数聚合效果会更好,因为它具备单射能力,可以区分不同的子图。
总结
图神经网络现在应用于各个方面,研究非常火热,作为一名小白,对这方面的研究只是刚刚开始,还有很多知识需要学习,上述如果有说错的地方还请各位大佬批评指正。