一、GCN简介

GNN模型主要研究图节点的表示(Graph Embedding),图边结构预测任务和图的分类问题,后两个任务也是基于Graph Embedding展开的。目前论文重点研究网络的可扩展性、动态性、加深网络。

谱卷积有理论支持,但有时候会受到拉普拉斯算子的限制;而空间域卷积更加灵活,主要困难在于选择定量邻域上,没有统一理论。

未来方向:

  • 加深网络: 研究表明随着网络层数增加,模型性能急剧下降
  • 感受野:节点的感受野是指一组节点,包括中心节点和其近邻节点,有些节点可能只有一个近邻,而有些节点却有数千个近邻
  • 可扩展性:大部分图神经网络并不能很好地扩展到大型图上。
  • 动态性和异质性:大多数当前的图神经网络都处理静态同质图。一方面,假设图架构是固定的。另一方面,假设图的节点和边来自同一个来源。

GCN模型具备深度学习的三种性质:

  • 层级结构(特征一层一层抽取,一层比一层更抽象,更高级)
  • 非线性变换 (增加模型的表达能力)
  • 端对端训练(不需要再去定义任何规则,只需要给图的节点一个标记,让模型自己学习,融合特征信息和结构信息。)

GCN的四个特征:

  • GCN 是对卷积神经网络在 graph domain 上的自然推广
  • 它能同时对节点特征信息与结构信息进行端对端学习,是目前对图数据学习任务的最佳选择。
  • 图卷积适用性极广,适用于任意拓扑结构的节点与图。
  • 在节点分类与边预测等任务上,在公开数据集上效果要远远优于其他方法。

通过谱图卷积的局部一阶近似,来确定卷积网络结构,通过图结构数据中部分有标签的节点数据对卷积神经网络结构模型训练,使网络模型对其余无标签的数据进行进一步分类。

二、spectral  domain

1.离散卷积是什么,在CNN中发挥什么作用?

离散卷积本质:加权求和

CNN中的卷积本质上就是利用一个共享参数的过滤器(kernel),**通过计算中心像素点以及相邻像素点的加权和来构成feature map实现空间特征的提取**,当然加权系数就是卷积核的权重系数。

那么卷积核的系数如何确定的呢?是随机化初值,然后根据误差函数通过反向传播梯度下降进行迭代优化。这是一个关键点,**卷积核的参数通过优化求出才能实现特征提取的作用,GCN的理论很大一部分工作就是为了引入可以优化的卷积参数。**

2.GCN中的Graph是指什么?为什么要研究GCN?

CNN是Computer Vision里的法宝,效果为什么好呢?原因在上面已经分析过了,可以很有效地提取空间特征。但是有一点需要注意:**CNN处理的图像或者视频数据中像素点(pixel)是排列成成很整齐的矩阵**(如图2所示,也就是很多论文中所提到的Euclidean Structure)。

与之相对应,科学研究中还有很多Non Euclidean Structure的数据,如图3所示。社交网络、信息网络中有很多类似的结构。

实际上,这样的网络结构(Non Euclidean Structure)就是图论中抽象意义上的拓扑图。

所以,**Graph Convolutional Network中的Graph是指数学(图论)中的用顶点和边建立相应关系的拓扑图。**

那么为什么要研究GCN?原因有二:

(1)因为CNN无法处理非欧几里得结构的数据,学术上的表述是传统的离散卷积在非欧几里得结构的数据上无法保持平移不变性。通俗来说就是在拓扑图中每个顶点的相邻顶点数目都可能不同,那就没办法用一个同样尺寸的卷积核来进行卷积操作;

(2)广义来讲任何数据在赋范空间内都可以建立拓扑关联,谱聚类就是应用了这样的思想,所以说拓扑连接是一种广义的数据结构,GCN有很大的应用空间。

综上,GCN是要为除CV、NLP之外的任务提供一种处理、研究的模型。

3.提供拓扑图空间特征的两种方式

(1)vertex domain(spatial domain)

提取拓扑图上的空间特征,就是把每个顶点的相邻neighbors找出来

a.按照什么条件去找中心vertex的neighbors,如何确定receptive filed?

b.确定了receptive field之后,按照什么方式处理包含不同数目neighbors的特征?

Learning Convolutional Neural Networks for Graphs

这种方法主要的缺点如下:

c.每个顶点提取出来的neighbors不同,使得计算处理必须针对每个顶点

d.提取特征的效果可能没有卷积好

(2)spectral domain

借助图谱的理论来实现拓扑图上的卷积操作。从研究的时间进程来看:首先研究GSP(graph signal processing)的学者定义了graph上的傅里叶变换,进而定义了graph上的卷积,最后与深度学习结合提出了Graph convolutional network.

  • Q1 什么是Spectral graph theory?

    • 简单的概括就是**借助于图的拉普拉斯矩阵的特征值和特征向量来研究图的性质**
  • Q2 GCN为什么要利用Spectral graph theory?
    • 这应该是看论文过程中读不懂的核心问题了,要理解这个问题需要大量的数学定义及推导,短期内难以驾驭,有时间再补

4.什么是拉普拉斯矩阵?为什么GCN要用拉普拉斯矩阵?

Graph Fourier Transformation及Graph Convolution定义都用到图的拉普拉斯矩阵,那么首先来介绍一下拉普拉斯矩阵。

对于图$G=(V,E)$其Laplacian 矩阵的定义为 $L=D-A$,其中$L$是Laplacian 矩阵,$D$ 是顶点的度矩阵(对角矩阵),对角线上元素依次为各个顶点的度,$A$是图的邻接矩阵。

常用的拉普拉斯矩阵实际用三种:

NO.1:Combinatorial Laplacian:$L=D-A$

NO.2:Symmetric normalized Laplacian:$L^{sys}=D^{-1/2}LD^{-1/2}$

NO.3:Random walk normalized Laplacian:$L^{rw}=D^{-1}L$

为什么GCN要用拉普拉斯矩阵?

(1)拉普拉斯矩阵是对称矩阵,可以进行特征分解(谱分解),这就和GCN的spectral domain对应上了

(2)拉普拉斯矩阵只在中心顶点和一阶相连的顶点上(1-hop neighbor)有非0元素,其余之处均为0

(3)通过拉普拉斯算子与拉普拉斯矩阵进类比(详见第6节)

5.拉普拉斯矩阵的谱分解(特征分解)

矩阵的谱分解,特征分解,对角化都是同一个概念

不是所有的矩阵都可以特征分解**,其充要条件为n阶方阵存在n个线性无关的特征向量。

但是拉普拉斯矩阵是半正定对称矩阵**(半正定矩阵本身就是对称矩阵)有如下三个性质:

  • 对称矩阵一定n个线性无关的特征向量
  • 半正定矩阵的特征值一定非负
  • 对阵矩阵的特征向量相互正交,即所有特征向量构成的矩阵为正交矩阵。

由上可以知道拉普拉斯矩阵一定可以谱分解,且分解后有特殊的形式。

对于拉普拉斯矩阵其谱分解为:
$$
L=U\begin{pmatrix}
\lambda_1& & \\
& ...& \\
& & \lambda_n
\end{pmatrix}U^{-1}
$$
其中,$U=(\overrightarrow{u_1},\overrightarrow{u_2},...,\overrightarrow{u_n})$,是列向量为单位特征向量的矩阵,$\begin{pmatrix}
\lambda_1& & \\
& ...& \\
& & \lambda_n
\end{pmatrix}$是n个特征值构成的对角阵。

由于$U$是正交矩阵,即$UU^T=E$

所以特征分解又可以写成:

$$L=U\begin{pmatrix}
\lambda_1& & \\
& ...& \\
& & \lambda_n
\end{pmatrix}U^{T}$$

6.如何从传统的傅里叶变换、卷积类比到Graph上的傅里叶变换及卷积?

把传统的傅里叶变换以及卷积迁移到Graph上来,核心工作其实就是把拉普拉斯算子的特征函数$e^{-iwt}$变为Graph对应的拉普拉斯矩阵的特征向量。

(1)推广傅里叶变换

  • (a)Graph上的傅里叶变换

传统的傅里叶变换定义为

$$F(W)=F[(t)]=\int f(t)e^{-iwt}dt$$

信号$f(t)$与基函数$e^{-iwt}$ 的积分,那么为什么要找$e^{-iwt}$作为基函数呢?从数学上看,

$e^{-iwt}$是拉普拉斯算子的特征函数,$w$就和特征值有关。

$LV=\lambda V$ $L$是拉普拉斯矩阵,$V$是其特征向量

离散积分就是一种内积形式,仿上定义Graph上的傅里叶变换

$$F(\lambda _l)=\hat f(\lambda _l)=\sum _{i=1}^Nf(i)u_l^{*}(i)$$

$\lambda_l$是拉普拉斯矩阵的第$l$个特征向量

$f$是Graph上的$N$维向量,$f(i)$与Graph的顶点一一对应,$u_l(i)$表示第$l$个特征向量的第$i$个分量,那么特征值(频率)$\lambda _l$下的,$f$的Graph傅里叶变换就是与$\lambda_l$对应的特征向量$u_l$进行内积运算。

傅里叶变换就是时域信号与拉普拉斯算子特征函数在时间上的积分

**利用矩阵乘法将Graph上的傅里叶变换推广到矩阵形式:**

$$\begin{pmatrix}
\hat f(\lambda_1) \\
\hat f(\lambda_2) \\ ... \\
\hat f(\lambda_N)
\end{pmatrix}=\begin{pmatrix}
u_1(1)& u_1(2)& u_1(N)\\
u_2(1)& u_2(2)& u_2(N)\\...& ...& ...\\
u_N(1)& u_N(2)& u_N(N)\\
\end{pmatrix}\begin{pmatrix}
f(1)\\
f(2) \\
...\\ f(N) \\
\end{pmatrix}$$

即$f$在Graph上傅里叶变换的矩阵形式为:$\hat f=U^Tf$

  • (b)Graph上的傅里叶逆变换

$$F^{-1}(F(w))=\frac{1}{2 \pi}\int F(w)e^{iwt}dw$$

迁移到Graph上变为对特征值$\lambda_l$求和

$$f(i)=\sum _{i=1}^N\hat f(\lambda_i)u_l(i)$$

**利用矩阵乘法将Graph上的傅里叶逆变换推广到矩阵形式:**

$$\begin{pmatrix}
f(1) \\
f(2) \\ ... \\
f(N)
\end{pmatrix}=\begin{pmatrix}
u_1(1)& u_2(1)& u_N(1)\\
u_1(2)& u_2(2)& u_N(2)\\...& ...& ...\\
u_1(N)& u_2(N)& u_N(N)\\
\end{pmatrix}\begin{pmatrix}
\hat f(\lambda_1)\\
\hat f(\lambda_2) \\
...\\ \hat f(\lambda_N) \\
\end{pmatrix}$$

即$f$在Graph上傅里叶逆变换的矩阵形式为:$f=U\hat f$

(2)推广卷积

卷积定理:函数卷积的傅里叶变换是函数傅立叶变换的乘积,即对于函数$f(t)$与$h(t)$两者的卷积是其函数傅立叶变换乘积的逆变换:

$f*h=F^{-1}[\hat f(w) \hat h(w)]=\frac {1}{2\pi} \int \hat f(w) \hat h(w) e^{iwt}dw $

类比到Graph上并把傅里叶变换的定义带入,$f$与卷积核$h$在Graph上的卷积可按下列步骤求出:

$f$的傅里叶变换为$\hat f=U^Tf$

卷积核$h$的傅里叶变换写成对角矩阵的形式即为:

$$\begin{pmatrix}
\hat h( \lambda_1)& & \\
& ...& \\
& & \hat h( \lambda_n)
\end{pmatrix}$$

$\hat h(\lambda_l)=\sum ^N _{i=1}h(i)u_l^*(i)$是根据需要设计的卷积核$h$在Graph上的傅里叶变换

卷积为:$(f*h)_G=U\begin{pmatrix}
\hat h( \lambda_1)& & \\
& ...& \\
& & \hat h( \lambda_n)
\end{pmatrix}U^Tf$

7.为什么拉普拉斯矩阵的特征向量可以作为傅里叶变换的基?特征值表示频率?

(1)为什么拉普拉斯矩阵的特征向量可以作为傅里叶变换的基?

傅里叶变换一个本质理解就是:**把任意一个函数表示成了若干个正交函数(由sin,cos 构成)的线性组合。

graph傅里叶变换也把graph上定义的任意向量 ![[公式]](https://www.zhihu.com/equation?tex=f) ,表示成了拉普拉斯矩阵特征向量的线性组合,即:

$f=\hat f(\lambda_1)u_1+\hat f(\lambda_2)u_2+...+\hat f(\lambda _n)u_n$

那么:为什么graph上任意的向量$f$都可以表示成这样的线性组合?

原因在于$(\overrightarrow{u_1},\overrightarrow{u_2},...,\overrightarrow{u_n})$是graph上n维空间中的n个线性无关的正交向量

(2)怎么理解拉普拉斯矩阵的特征值表示频率?

在graph空间上无法可视化频率的概念,信息论告诉我们,特征值越大,对应的信息越多,小的特征值就是低频分量,信息较少,是可以忽略的。

在压缩图像的过程中,也是把低频成分变为0,高频(边缘)会被保留,它带给我们更多的信息。

8.深度学习中的图卷积

(1)第一代GCN

来自论文:[Spectral Networks and Locally Connected Networks on Graphs](https://arxiv.org/abs/1312.6203)

把$diag(\hat h(\lambda _l))$变成了卷积核$diag(\theta _l)$

$y_{output} = \sigma(Ug_{\theta}(\Lambda)U^Tx)$

(为避免混淆,下面称$g_{\theta}(\Lambda )$是卷积核,$Ug_{\theta}(\Lambda)U$的运算结果为卷积运算矩阵)

$g_{\theta}(\Lambda)=\begin{pmatrix}
\theta_1& & \\
& ...& \\
& & \theta_n
\end{pmatrix}$

$\Theta=(\theta_1,\theta_2,...,\theta_n$就跟三层神经网络中的weight一样是任意的参数,通过初始化赋值然后利用误差反向传播进行调整,$x$就是graph上对应于每个顶点的feature vector(由数据集提取特征构成的向量)

第一代GCN的弊端:

  • 每一次前向传播,都要计算$U、g_{\theta}(\Lambda)、U^T$三者的矩阵乘积,特别是对于大规模的graph,计算的代价较高,复杂度为$O(n^2)$
  • 卷积核不具有spatial localization
  • 卷积核需要n个参数

(2)第二代GCN

来自论文:Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering

将$\hat{h}\left(\lambda_{l}\right)$巧妙地设计成了$\sum_{j=0}^{K} \alpha_{j} \lambda_{l}^{j}$,也就是$y_{\text {output}}=\sigma\left(U g_{\theta}(\Lambda) U^{T} x\right)$,

$g_{\theta}(\Lambda)=\left(\begin{array}{cccc}{\sum_{j=0}^{K} \alpha_{j} \lambda_{1}^{j}} & {} & {} & {} \\ {} & {\ddots} & {} & {} \\ {} & {} & {} & {\sum_{j=0}^{K} \alpha_{j} \lambda_{n}^{j}}\end{array}\right)$

下面利用矩阵乘法进行变换

$\left(\begin{array}{cccc}{\sum_{j=0}^{K} \alpha_{j} \lambda_{1}^{j}} & {} & {} \\ {} & {\ddots} & {} \\ {} & {} & {\sum_{j=0}^{K} \alpha_{j} \lambda_{n}^{j}}\end{array}\right)=\sum_{j=0}^{K} \alpha_{j} \Lambda^{j}$

进而可以导出:

$U \sum_{j=0}^{K} \alpha_{j} \Lambda^{j} U^{T}=\sum_{j=0}^{K} \alpha_{j} U \Lambda^{j} U^{T}=\sum_{j=0}^{K} \alpha_{j} L^{j}$

上式成立是因为 $L^{2}=U \Lambda U^{T} U \Lambda U^{T}=U \Lambda^{2} U^{T} \mathbb{E} U^{T} U=E$

$y_{output}$就变成了$y_{\text {output}}=\sigma\left(\sum_{j=0}^{K} \alpha_{j} L^{j} x\right)$

其中$\left(\alpha_{1}, \alpha_{2}, \cdots, \alpha_{K}\right)$是任意的参数,通过初始化赋值然后利用误差反向传播进行调整。

所设计的卷积核其优点在于:

  • a.卷积核只有K个参数,一般K远小于n,参数的复杂度被大大降低了;
  • b.矩阵变换后,不需要做特征分解了,直接用拉普拉斯矩阵L进行变换,然而由于要计算$L^j$,计算复杂度还是$O(n^2)$
  • c.卷积核具有很好的spatial localization,特别的,K就是卷积核的receptive field,也就是说每次卷积会将中心节点K-hop neighbor上的feature进行加权求和,权系数就是$\alpha_k$

更直观地看,$K=1$就是对每个顶点上一阶neighbor的feature进行加权求和,如下图所示:

同理,K=2的情形如下图所示:

注:上图只是以一个顶点作为实例,GCN每一次卷积对所有的顶点都完成了图示的操作。

第二代GCN的弊端:

  • 参数太少了,只有$K$个,使得模型无法很好地实现在同阶的邻域上分配不同的权重给不同的邻居(也就是GAT论文里说的 enable specifying different weights to different nodes in a neighborhood)

(3)第三代GCN---降低计算复杂度

来自论文:Wavelets on graphs via spectral graph theory

在第二代GCN中,$L$是n*n的矩阵,所以$L^j$的计算还是$O(n^2)$的,《Wavelets on graphs via spectral graph theory》提出了利用Chebyshev多项式拟合卷积核的方法,来逼近计算复杂度。卷积核$g_{\theta}(\Lambda)$可以用截断的(truncated)的shifted Chebyshev多项式来逼近。

$g_{\theta}(\Lambda)=\sum_{k=0}^{K-1} \beta_{k} T_{k}(\tilde{\Lambda})$

$\beta_k$是Chebyshev多项式的系数

$T_{k}(\tilde{\Lambda})$是取$\tilde{\Lambda}=2 \Lambda / \lambda_{\max }-I$的Chebyshev多项式,进行这个shift变换的原因是Chebyshev多项式的输入要在[-1,1]之间。由Chebyshev多项式的性质,可以得到如下的递推公式:

$T_{k}(\tilde{\Lambda}) x=2 \tilde{\Lambda} T_{k-1}(\tilde{\Lambda}) x-T_{k-2}(\tilde{\Lambda}) x$

$T_{0}(\tilde{\Lambda})=I, T_{1}(\tilde{\Lambda})=\tilde{\Lambda}$

[$T_0(x)=1,T_1(x)=x,T_k(x)=2xT_{k-1}(x)-T_{k-2}(x)$]

其中,$x$的定义同上,是n维的由每个顶点的特征构成的向量(当然,也可以是$n*m$的特征矩阵,这时每个顶点都有$m$个特征,但是$m$通常远小于$n$)

不难发现:上式的运算不再有矩阵乘积了,只需要计算矩阵与向量的乘积即可。计算一次$T_{k}(\tilde{\Lambda}) x$的复杂度是$O(|E|)$,$E$是图中边的几何,整个运算的复杂度是$O(K|E|)$,当graph是稀疏图的时候,计算加速尤为明显,这个时候复杂度远低于$O(n^2)$

(4)第四代GCN

来自论文:Semi-Supervised Classification with Graph Convolutional Networks

通过使用Chebyshev多项式近似,我们已经成功得降低了卷积核计算的复杂度。这篇文章中进一步对卷积核的计算做了近似,产生了我们所熟知的GCN逐层传播公式。

在GCN模型中,作者首先做了额外的两个假设:$\lambda_{\max}\approx 2, K=1$, 这两个假设可以大大简化模型。而作者希望假设造成的误差可以通过神经网络参数训练过程来自动适应。在这两个假设的条件下:
$$
y_{out} = \sigma(Ug_\theta(\Lambda)U^\top x) \\
Ug_\theta(\Lambda)U^\top x \approx \sum^1_{k=0}\theta_kT_k(\tilde{\Lambda})x =\theta_{0} x+\theta_1\left(L-I\right) x=\theta_0 x-\theta_1 D^{-\frac{1}{2}} A D^{-\frac{1}{2}} x
$$
上式有两个参数$\theta_0$和$\theta_1$。这两个参数可以在整个图所有节点的计算中共享。在实践中,进一步限制参数的个数能够一定程度上避免过拟合的问题,并且减少计算量。因此作者又引入了另一个假设:$\theta=\theta_0=-\theta_1$做进一步的近似:
$$
Ug_\theta(\Lambda)U^\top x \approx \theta\left(I+D^{-\frac{1}{2}} A D^{-\frac{1}{2}}\right) x
$$
注意$I+D^{-\frac{1}{2}} A D^{-\frac{1}{2}}$的特征值被限制在了[0,2]中。由于这一步生成的$y_{out}$可能作为下一层的输入$x$, 会再次与$I+D^{-\frac{1}{2}} A D^{-\frac{1}{2}}$相乘重复这样的操作将会导致数值不稳定、梯度弥散/爆炸等问题。为了缓解这样的问题,作者引入了这样的再正则化(renormalization)技巧:$I_{N}+D^{-\frac{1}{2}} A D^{-\frac{1}{2}} \rightarrow \tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}}$,其中$\tilde{A}=A+I_{N}, \tilde{D}_{i i}=\sum_{j} \tilde{A}_{i j}$

最后得到了大家耳熟能详的GCN逐层更新公式:输入节点矩阵$X\in \mathbb{R}^{N\times C}$, 每个输入节点有C个通道(channels, 即每个图节点有C维特征),卷积操作包含F个滤波器(filters)或特征映射(feature maps), 如下:
$$
Y=\sigma\left(\tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}} X \Theta\right)
$$
其中$\Theta\in \mathbb{R}^{C\times F}$ 是filters的参数矩阵, $Y\in \mathbb{R}^{N\times F}$ 是卷积之后的节点矩阵。

9.关于有向图问题

前面的理论推导都是关于无向图,如果是有向图问题,最大的区别就是邻接矩阵会变成非对称矩阵,这个时候不能直接定义拉普拉斯矩阵及其谱分解,有两条思路解决问题“

(1)要想保持理论上的完美,就需要重新定义图的邻接关系,保持对称性

比如《MotifNet: a motif-based Graph Convolutional Network for directed graphs》提出利用Graph Motifs定义图的邻接关系。

(2)如果只是为了应用,有其他形式的GCN或者GAT可以处理有向图

三、经典算法

(一)Spectral domain

1.半监督学习节点分类---两层GCN

论文:“SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS“,2017 ICLR

作者:阿姆斯特丹大学Thomas N. Kipf, Max Welling

总结:如果数据可以构成图,可以考虑下图卷积GCN,将卷积网络用于图数据上能对网络中的节点或者整个图进行分类,能利用节点的属性和节点的label进行训练,但这个算法不适应与规模大的图结构,因为GCN需要输入整个邻接矩阵A和特征矩阵X,这是非常耗内存的。

2.基于多图卷积网络的自行车流量预测

论文:“Bike Flow Prediction with Multi-Graph Convolutional Networks“, 2018 ACM空间地理信息系统

作者:香港科技大学 Di Chai, Leye Wang, Qiang Yang

问题描述:利用t时刻以前的进站流和出站流预测t时刻的进站流和出站流

三个模块:

  • 构建和融合多图:定义站点间不同关系并融合得到Graph。
  • GCN+encoder-decoder模型:生成包含时间、空间、流量等信息的embeddingMLP:
  • 结合embedding和节假日、天气等其他特征去预测站点流量。

本文构建了多张空间关系,通过多张图得到预测效果。encoder-decoder的结构存在局限性,输入输出的维度是固定的。当预测短期的流量时,本文的模型更适用。

(二)Spatial domain

1.DeepWalk( Random walk + Word2vec)

论文:“DeepWalk: Online Learning of Social Representations”,2014 KDD

作者:纽约州立大学Bryan Perozzi, Rami Al-Rfou, Steven Skiena

  • Transductive Learning
  • Corpus : Graph作为”语料库”;随机游走(采样)构建”句子”
  • 可并行进行多个随机游走
  • 应用:阿里提出了EGES(在DeepWalk的基础上引入物品信息),用于生成物品的embeddings

DeepWalk的主要问题是它缺乏泛化能力。 每当有新节点加入到图中时,它必须重新训练模型以正确表示该节点( 直推式学习 )。 因此,这种GNN不适用于图中节点不断变化的动态图。

2.GraphSAGE( Graph SAmple and aggreGatE)

论文:”Inductive Representation Learning on Large Graphs”,2017 NIPS

作者:斯坦福大学William L. Hamilton, Rex Ying, Jure Leskovec

  • Inductive Learning
  • Deepwalk,LINE, node2vec, SDNE等模型能够高效地得到每个节点的embedding。然而,这些方法无法有效适应动态图中新增节点的特性, 往往需要从头训练或至少局部重训练。
  • 通过对节点的本地邻域中的特征进行采样和聚合(平均/LSTM/pooling聚合)来生成嵌入,而不是为每个节点训练单个嵌入。
  • 聚合器参数和权重变量的学习:有监督情况下,可以使用每个节点的预测label和真实label的交叉熵作为损失函数;无监督情况下,可以假设相邻节点的输出embedding应当尽可能相近,保证相邻节点的embedding的相似度尽量大的情况下,保证不相邻节点的embedding的期望相似度尽可能小。

3.GAT

基本的图神经网络算法GCN, 使用采样和聚合构建的inductive learning框架GraphSAGE, 然而图结构数据常常含有噪声,意味着节点与节点之间的边有时不是那么可靠,邻居的相对重要性也有差异,解决这个问题的方式是在图算法中引入“注意力”机制(attention mechanism), 通过计算当前节点与邻居的“注意力系数”(attention coefficient), 在聚合邻居embedding的时候进行加权,使得图神经网络能够更加关注重要的节点,以减少边噪声带来的影响。

三种注意力机制算法,都可以用来生成邻居的相对重要性:

  • 学习注意力权重(Learn attention weights)
  • 相似性注意力(Similarity-based attention)
  • 注意力引导的随机游走(Attention-guided walk)

首先我们对“图注意力机制”做一个数学上的定义:

定义(图注意力机制):

  • 给定一个图中节点$v_0$ 和$v_0$的邻居节点$\left\{v_{1}, \cdots, v_{\vert\Gamma_{v_{0}}\vert}\right\} \in \Gamma_{v_{0}}$(这里的 $\Gamma_{v_{0}}$ 和GraphSAGE博文中的 $\mathcal{N}(v_0)$ 表示一个意思)。注意力机制被定义为将$\Gamma_{v_{0}}$中每个节点映射到相关性得分(relevance score)的函数$f^{\prime} :\left\{v_{0}\right\} \times \Gamma_{v_{0}} \rightarrow[0,1]$,相关性得分表示该邻居节点的相对重要性。满足:$\sum_{i=1}^{\vert\Gamma_{v_{0}}\vert} f^{\prime}\left(v_{0}, v_{i}\right)=1$

四、举例

从图数据中节点间的关系以及特征,我们可以进行反欺诈以及商品推荐的操作。

  • 节点分类—反欺诈:因为图中每个节点都拥有自己的特征信息。通过该特征信息,我们可以构建一个风控系统,如果交易节点所关联的用户 IP 和收货地址与用户注册 IP 和注册地址不匹配,那么系统将有可能认为该用户存在欺诈风险。
  • 边结构预测—商品推荐:图中每个节点都具有结构信息。如果用户频繁购买某种类别商品或对某种类别商品评分较高,那么系统就可以认定该用户对该类商品比较感兴趣,所以就可以向该用户推荐更多该类别的商品。

参考文献:

【1】动手实现简单的GCN网络

【2】如何理解 Graph Convolutional Network(GCN)?

【3】从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (二)

【4】GNN 教程:GAT

GCN总结的更多相关文章

  1. GCN code parsing

    GCN code parsing 2018-07-18 20:39:11 utils.py  --- load data  def load_data(path="../data/cora/ ...

  2. 【语义分割】large kernel matters中GCN模块的pytorch实现

    GCN模块的实现比较简单,在giuhub上看到两种实现,轻微不同 实现一:https://github.com/ycszen/pytorch-segmentation/blob/master/gcn. ...

  3. GCN和GCN在文本分类中应用

    1.GCN的概念        传统CNN卷积可以处理图片等欧式结构的数据,却很难处理社交网络.信息网络等非欧式结构的数据.一般图片是由c个通道h行w列的矩阵组成的,结构非常规整.而社交网络.信息网络 ...

  4. GNN 相关资料记录;GCN 与 graph embedding 相关调研

    最近做了一些和gnn相关的工作,经常听到GCN 和 embedding 相关技术,感觉很是困惑,所以写下此博客,对相关知识进行索引和记录: 参考链接: https://www.toutiao.com/ ...

  5. GCN 实现3 :代码解析

    1.代码结构 ├── data // 图数据 ├── inits // 初始化的一些公用函数 ├── layers // GCN层的定义 ├── metrics // 评测指标的计算 ├── mode ...

  6. GCN实现3

    参考 : 首先看两篇论文,大概了解一下原理性的东西: GRAPH CONVOLUTIONAL NETWORKS THOMAS KIPF, 30 SEPTEMBER 2016 http://tkipf. ...

  7. GCN 简单numpy实现

    `#参考:https://blog.csdn.net/weixin_42052081/article/details/89108966 import numpy as np import networ ...

  8. GCN python 实现2:利用GCN进行节点分类

    参考:https://www.baidu.com/link?url=5oU-O_YQV8DdSTtRkgzsQ_vuwjJHyUOxqeAKhq98ZA5XtvKW8PNQwXgSlr5GpESRqh ...

  9. GCN

    REFERENCE: https://www.jianshu.com/p/ad528c40a08f https://www.zhihu.com/question/54504471 图有两个基本的特性: ...

随机推荐

  1. [LeetCode] 465. Optimal Account Balancing 最优账户平衡

    A group of friends went on holiday and sometimes lent each other money. For example, Alice paid for ...

  2. 热情组——项目冲刺 Day1

    项目相关 作业相关 具体描述 班级 班级链接 作业要求 链接地址 团队名称 热情组 作业目标 实现软件的生成,以及在福大的传播 Github链接 链接地址 SCRUM部分: 成员昵称 昨日目标 昨日进 ...

  3. C# HTTP系列1 HttpWebRequest类

    系列目录     [已更新最新开发文章,点击查看详细] .NET Framework 中 System.Net 命名空间下提供了 HttpWebRequest 和 HttpWebResponse 2个 ...

  4. addpath(),genpath()

    clear all:clear clc: addpath(): 打开不在同一目录下的文件 addpath('sparse-coding');%sparse-coding,SIFT均表示路径,此目录下的 ...

  5. ng使用bootstrap

    1.在项目中使用命令 npm i bootstrap -s来创建bootstrap 2.创建完成之后在 angular.json中引入进去 "styles": [          ...

  6. vue中js文件中export常见方法及使用

    js文件一般放静态资源或动态资源,我将在这两种不同资源的请求下以不同的方式export出来 第一种在js中使用function 动态资源 在vue文件中引用调用这些方法 import进来 在生命周期函 ...

  7. 利用mysql的LOAD DATA INFILE的功能读取客户端文件

    前言:今天在浏览某知论坛时,看到某大佬在渗透过程中使用伪造的MySQL服务端读取客户端文件,此大佬在利用过程中描述得不是很详细,作为小白的我看不懂啊,由此产生了此篇文章. 某大佬文章:https:// ...

  8. .tar.gz 文件和 .tar.xz 文件的区别

    tar.gz and tar.xz both are compressed tar-files, but with different compression methods. tar.gz is c ...

  9. 集合类源码(三)Collection之List(CopyOnWriteArrayList, Stack)

    CopyOnWriteArrayList 功能 全名 public class CopyOnWriteArrayList<E> implements List<E>, Rand ...

  10. 局域网Linux机器中病毒简单处理 .aliyun.sh 挖矿病毒 ---不彻底

    1. 昨天晚上同事打电话给我说自己的服务器上面的redis无故被清空了,并且查看aof 日志有很多 wget和write指令 一想就是大事不好.局域网中病毒了.. 2. 今天早上到公司忙完一阵简单看了 ...