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+1)}, A) = \sigma\left( D^{-\frac{1}{2}}\hat{A}D^{-\frac{1}{2}}H^{(l)}W^{(l)}\right) \,
\]
这个形式已经和上篇利用谱理论推导处理的结果很相近了
\[\boldsymbol{g}_{\boldsymbol{\theta^{\prime}}} * \boldsymbol{x} = \theta(\boldsymbol{I_n} + \boldsymbol{D}^{-1/2} \boldsymbol{W} \boldsymbol{D}^{-1/2}) \boldsymbol{x}
\]
但和最终的结果还不一样,回顾论文给的 renormalization trick:
\[I_{N}+D^{-1/2}AD^{-1/2}=D^{-1/2}\hat{A}D^{-1/2}\rightarrow \tilde{D}^{-1/2}\hat{A}\tilde{D}^{-1/2}=(D+I_{N})^{-1/2}\hat{A}(D+I_{N})^{-1/2}
\]
\[\hat{A}=A+I_{N}
\]
\[\tilde{D}_{ii}= \sum_{}^{j}\hat{A}_{ij}=D+I_{N}
\]
那么的确可以得到最终形式:
\[f(H^{(l+1)}, A) = \sigma\left(\tilde{D}^{-\frac{1}{2}}\hat{A}\tilde{D}^{-\frac{1}{2}}H^{(l)}W^{(l)}\right) \,
\]
原文地址:https://www.cnblogs.com/KongHuZi/p/12684840.html