图卷积神经网络GNN
研究学习的背景
对于图神经网络(GNN)来输入的数据是图。(解决输入数据不规则情况)输入的格式不是固定的
研究涵盖:节点分类(nodeclassification)、边预测(linkprediction)、社群检测(community detection)、网络营销(viral marketing)、网络相似度(network similarity)
snap数据集是Jure等人不间断收集的网络数据集,极大地推动社交网络领域的发展
整个GNN的任务整体上可以分为3种主要的任务组成。
- Graph(图任务)
- Edge(边任务)
- point(点任务)
邻接矩阵
在图神经网络(GNN)中一般邻接矩阵表达形式如下,并不是一个N*N的矩阵,而是保存source,target。
所有在使用pytorch的情况下,通过传入的邻接矩阵是一个2 x N的矩阵形式 N:代表的是边的个数 2表示的是source,target
AdjacencyList
[[1,0],[2,0],[4,3],[6,2],[7,4],[7,5]]
计算消息传递
-
聚合操作可以当作全连接层
-
但是更新的方法有很多,可以自己设置
-
结合邻居与自身信息:
m ˉ i = G ( { W j ⋅ x j : j ∈ N i } ) \bar{m}_{i}=G\left(\left\{\mathbf{W}_{j} \cdot x_{j}: j \in \mathcal{N}_{i}\right\}\right) mˉi=G({Wj⋅xj:j∈Ni}) -
进行汇总和计算
h i = σ ( W 1 ⋅ h i + ∑ j ∈ N i W 2 ⋅ h j ) h_{i}=\sigma\left(W_{1} \cdot h_{i}+\sum_{j \in \mathcal{N}_{i}} \mathbf{W}_{2} \cdot h_{j}\right) hi=σ W1⋅hi+j∈Ni∑W2⋅hj
其他的一些计算的方式还包括了:
Sum = ∑ j ∈ N i W j ⋅ x j Mean = ∑ j ∈ N i W j ⋅ x j ∣ N i ∣ Max = max j ∈ N i ( { W j ⋅ x j } ) Min = min j ∈ N i ( { W j ⋅ x j } ) \begin{aligned} \text { Sum } & =\sum_{j \in \mathcal{N}_{i}} \mathbf{W}_{j} \cdot x_{j} \\ \text { Mean } & =\frac{\sum_{j \in \mathcal{N}_{i}} \mathbf{W}_{j} \cdot x_{j}}{\left|\mathcal{N}_{i}\right|} \\ \operatorname{Max} & =\max _{j \in \mathcal{N}_{i}}\left(\left\{\mathbf{W}_{j} \cdot x_{j}\right\}\right) \\ \operatorname{Min} & =\min _{j \in \mathcal{N}_{i}}\left(\left\{\mathbf{W}_{j} \cdot x_{j}\right\}\right) \end{aligned} Sum Mean MaxMin=j∈Ni∑Wj⋅xj=∣Ni∣∑j∈NiWj⋅xj=j∈Nimax({Wj⋅xj})=j∈Nimin({Wj⋅xj})
多层GNN作用
GNN的本质就是更新各部分特征。其中输入是特征,输出也是特征,,邻接矩阵也不会变的。
多层计算的GNN可以聚合更远的特征(类似与感受野不断的变大)。
那输出得到的特征可以用来做什么呢?
- 各个点的特征组合可以进行图的分类。
- 各个节点的组合也可以进行分类。
- 各个边之间进行组合同样可以进行分类。
本质上是通过多层的GNN得到对应节点的特征信息。
图卷积
通常交给GCN两个东西就行:1.各节点输入特征;2.网络结构图(邻接矩阵)。
特点:Semi-supervised learning(是一种半监督学习的任务)
这是图神经网络(GCN)的一种优势,不需要全部标签用少量标签也能训练。计算损失时只用有标签的。
图卷积的计算本质上就是一种计算消息传递,我们对每一个结点依次完成聚合操作后,经过激活函数后在进行下一层的图卷积操作。(层数不会太多)
图卷积计算
对于一个Graph G(图G)进行图卷积的计算需要涉及到三个矩阵,分别是A矩阵
,D矩阵
和 F矩阵
-
A是邻接矩阵矩阵
-
D是各个节点的度矩阵(主对角线)
-
F是每个节点的特征矩阵
邻接矩阵与特征矩阵进行乘法操作,表示聚合邻居信息(也就是A 和 F做矩阵的乘法操作)
之后考虑对行和列同时做归一化的处理。相当在两侧同时乘D-1 [度矩阵的逆矩阵]。
- 首先在A矩阵参与运算的过程中需要考虑自身的元素。
A ~ = A + λ I N \tilde{A}=A+\lambda I_{N} A~=A+λIN
2. 在A和F做矩阵乘法之前需要对计算结果或者说是A矩阵做一个归一化的处理。去倒数(求逆)
3. 对换顺序参与矩阵的归一化处理。(按行进行举例)左乘相当于对行做归一化.
D ~ − 1 ( A ~ X ) \tilde{D}^{-1}(\tilde{A} X) D~−1(A~X)
( D ~ − 1 A ~ ) X \left(\tilde{D}^{-1} \tilde{A}\right) X (D~−1A~)X
行和列同时做归一化处理。
D ~ − 1 A ~ D ~ − 1 X \tilde{D}^{-1} \tilde{A} \tilde{D}^{-1} X D~−1A~D~−1X
D ~ − 1 / 2 A ~ D ~ − 1 / 2 X \tilde{D}^{-1 / 2} \tilde{A} \tilde{D}^{-1 / 2} X D~−1/2A~D~−1/2X
经过上面的计算本质上相当于对矩阵做了一定的线性变换
A ^ = D ~ − 1 / 2 A ~ D ~ − 1 / 2 \hat{A}=\tilde{D}^{-1 / 2} \tilde{A} \tilde{D}^{-1 / 2} A^=D~−1/2A~D~−1/2
两层网络结构的计算公式
Z = f ( X , A ) = softmax ( A ^ Relu ( A ^ X W ( 0 ) ) W ( 1 ) ) Z=f(X, A)=\operatorname{softmax}\left(\hat{A} \operatorname{Relu}\left(\hat{A} X W^{(0)}\right) W^{(1)}\right) Z=f(X,A)=softmax(A^Relu(A^XW(0))W(1))