论文地址:A Generalization of Convolutional Neural Networks to Graph-Structured Data
GNN的做法是将一个图结构的数据强行变化为一个类似规则的数据,从而实现1维的卷积。

传统卷积:固定数量的邻域节点排序后,与相同数量的卷积核参数相乘后求和。

那么卷积就可以分为两步:
1.构建邻域(邻节点固定且有序)
2.对邻域的点和卷积核参数内积

但是对于图结构数据而言:邻域节点不固定,且图结构无序。因此需要找到一个解决构建邻域的方法。

解决思路随机游走,根据被选中的概率期望和大小选择固定数量的邻居节点。

实现
首先定义
P P P矩阵 为图上的随机游走转移矩阵, P i j P_{ij} Pij为i节点到j节点的转移概率。
S S S矩阵 为相似度矩阵,可以理解为邻接矩阵。
D D D矩阵 为度矩阵, D i i = ∑ j S i j D_{ii}=\sum_jS_{ij} Dii=jSij
假设图结构已知,则 S S S D D D已知,则 P P P定义如下:
P = D − 1 S P=D^{-1}S P=D1S

上式子相当于对S进行归一化,即使用归一化的邻接矩阵作为图转移矩阵。
多步转移矩阵定义为 Q Q Q:
Q ( 0 ) = I , Q ( 1 ) = I + P , … Q ( k ) = ∑ j = 0 k P k Q^{(0)}=I,Q^{(1)}=I+P,\dots Q^{(k)}=\sum_{j=0}^kP^k Q(0)=I,Q(1)=I+P,Q(k)=j=0kPk

其中 k k k为步数, Q i j ( k ) Q^{(k)}_{ij} Qij(k)表示i节点进过k步达到j的期望访问次数,可视化如下图。

那么选择邻域的问题解决了,可以根据期望访问次数来选择需要的邻域节点, π i ( k ) ( c ) \pi_i^{(k)}(c) πi(k)(c)表示节点的序号,表示该节点是经过 k k k步内由 i i i节点出发的访问期望第 c c c大的节点,那么有节点期望访问大小排序:
Q i π i ( k ) ( 1 ) > Q i π i ( k ) ( 2 ) > ⋯ > Q i π i ( k ) ( N ) Q_{i\pi_i^{(k)}(1)}>Q_{i\pi_i^{(k)}(2)}>\dots>Q_{i\pi_i^{(k)}(N)} Qiπi(k)(1)>Qiπi(k)(2)>>Qiπi(k)(N)
定义卷积
每个点选取 p p p个期望最大的作为邻域节点,且顺序由期望 Q Q Q决定。卷积核为 W W W,具有 p p p个参数。

举例: