GCN的定义
下面内容参考kipf博客,个人认为是告诉你从直觉上,我们怎么得到GCN图上的定义(而前面的大幅推导是从理论上一步一步来的,也就是说可以用来佐证我们的直觉)
我们的网络输入是\(\mathcal{G}=(\mathcal{V},\mathcal{E})\):
- 即可以用\(N\times D\)的矩阵\(X\)表示,\(N\)为图上结点个数,\(D\)是每个结点的特征维数
- 同时表示一个图还需要邻接矩阵\(A\)
而一层的输出记作\(Z_{\mathbb{R}^{N \times F}}\),其中\(N\)还是结点个数,\(F\)为每个结点的特征维数
那么非线性神经网络就可以定义成如下形式:
\[H^{l+1}=f(H^{l}, A) \]
其中\(H^{0}=X\), \(H^{L}=Z\), \(L\) 表示网络的层数,那么模型的关键是如何设计\(f(\cdot )\)
一种简单的形式
\[f(H^{l}, A) = \sigma (AH^{l}W^{l}) \]
其中\(W^{l}\) 是\(l.th\)层的参数矩阵,\(\sigma ()\) 是激活函数。【PS:Despite its simplicity this model is already quite powerful】
仔细观察上式就能发现几个缺陷:
- 其中\(A\)是邻接矩阵,对角线上为\(0\),导致经过网络中的一层,没有加上自己本结点的信息,所以改造替换成 \(\hat{A} = A+I\)
- 可是\(\hat {A}H\) 则是自己+相邻结点特征总和,还需平均化,所以改成 \(D^{-1}\hat {A}H\)
- 我们还可以更进一步,考虑到上篇说的拉普拉斯算子计算中周围结点总和\(-\)中心点*相邻结点个数,即相当于每个相邻点能量\(-\)中心点能量。类比过来,相邻点给我影响是:(相邻点能量/相邻点本身邻居个数),所以有\(D^{-1/2}\hat{A}D^{-1/2}\)
\[f(H^{(l)}, A) = \sigma\left( D^{-\frac{1}{2}}\hat{A}D^{-\frac{1}{2}}H^{(l)}W^{(l)}\right) \, \]
这个形式已经和上篇利用谱理论推导处理的结果很相近了