GCN(Graph Convolutional Network)——总结

Graph Convolutional Network

对于图结构,不采用将图结构转换成线性结构表示。直接对图结构进行表示。
CNN处理的图像或者视频数据中像素点(pixel)是排列成很整齐的矩阵(Euclidean Structure)。网络结构(Non Euclidean Structure)就是图论中抽象意义上的拓扑图。

为什么要使用GCN?

由于拓扑图每个节点度不一样,无法用同一尺寸的卷积和进行卷积运算,又希望在拓扑图上有效提取空间特征。
1) 局部特征
2)参数共享: 卷积核只有k个参数,k 远小于N,大大降低了模型复杂程度,每次卷积会将中心顶点的k 阶邻居节点进行加权求和。同阶邻居参数共享,不同阶邻居参数不共享。

GCN 主要技术:

拉普拉斯矩阵
拉普拉斯矩阵谱分解

GCN 的逻辑:
采用傅立叶变换,使得卷积操作变得可行。 h ( x ) = f ( g ( x ) ) = F − 1 ( F ( f ) . F ( g ) ) h(x)=f(g(x))=F^{-1}(F(f).F(g)) h(x)=f(g(x))=F1(F(f).F(g)).只需要定义 graph 上的 fourier 变换,就可以定义出 graph 上的 convolution 变换。
傅立叶变换: F ( x ) F(x) F(x)

傅立叶变换的逆: F − 1 ( x ) F^{-1}(x) F1(x)

拉普拉斯算子是二阶导数,Graph 一阶导数是两个节点间的差异,Graph 二阶导数是两个节点差异的导数。L = D-A = 度矩阵-邻接矩阵。 标准化后 L = I − D − 1 / 2 ∗ A ∗ D − 1 / 2 = U ∗ Λ ∗ U T L=I-D^{-1/2}*A*D^{-1/2}=U*\Lambda*U^T L=ID1/2AD1/2=UΛUT

传统的傅立叶变换使用 e − 2 ∗ p i ∗ sin ⁡ i x v e^{-2*pi*{\sin ixv}} e2pisinixv 作为基。 Graph 。
图卷积 f ∗ g = F − 1 F ( f ) ∗ F ( g ) f*g=F^{-1}{F(f)*F(g)} fg=F1F(f)F(g)

图的傅立叶变换卷积 g ∗ x = U ( U T g ∗ U T x ) g*x=U(U^Tg*U^Tx) gx=U(UTgUTx)
傅里叶变换、卷积类比到Graph上的傅里叶变换及卷积,拉普拉斯矩阵的特征向量可以作为傅里叶变换的基,特征值表示频率.
GCN卷积公式: H ( l + 1 ) = σ ( D ~ − 1 / 2 A ~ D ~ − 1 / 2 H l W l ) H^{(l+1)}=\sigma(\widetilde{D}^{-1/2}\widetilde{A}\widetilde{D}^{-1/2}H^{l}W^{l}) H(l+1)=σ(D 1/2A D 1/2HlWl)

为什么这里要用 D ~ \widetilde{D} D A ~ \widetilde{A} A 而不是 D {D} D A {A} A , 因为如果直接使用 D {D} D A {A} A 在节点的聚合表征不包含它自己的特征,所以用 A + I {A+I} A+I的方式避免。

GCN 主要优点

GCN 随机初始化,即使不训练,完全使用随机初始化的参数W,GCN提取出来的特征表示效果也是不错的,有区分性的。(可以理解为虽然没有学习,但是自带了图结构)
GCN层数不宜多,2-3层的效果就很好。

GCN应用

目前应用的大体思路:一种思路是使用 CNN、RNN、Word2Vec(及他们的变体) 等提取特征,再使用构建 Graph 进行图卷积做分类等任务。另一种思路是先用 Graph 进行图卷积提取特征表示,再使用 CNN 或者 RNN 等完成具体任务。
GCN 的文本分类,主要思想,将 word 和 doc 用 node 表示,将 word_i 和 word_j 的 PMI 值作为 edge,或者将 word_i 和 doc_k 的 tfidf 作为 edge,用 doc 节点的分类标记做交叉熵,优化 representation 表示。预测时是用 softmax 计算得到 属于哪个类别。
点评:这么做的优点是什么,会不会绕远了。严重依赖于标注数据。
Graph SAGE:工业应用,归纳式学习,可以泛化到没有未参与训练的节点上。卷积部分可以有很多种,比如平均,pooling,lstm聚合,以及GCN聚合等。

Graph kernel

Graph Embedding 将图映射到低纬空间损失了大量结构化信息,而Graph kernel 直接面向图结构数据,既保留了核函数计算高效的优点,又包含了图数据在希尔伯特高维空间的结构化信息。

GraphSAGE

现在大多数方法都是直推式学习, 不能直接泛化到未知节点。这些方法是在一个固定的图上直接学习每个节点embedding,但是大多情况图是会演化的,当网络结构改变以及新节点的出现,直推式学习需要重新训练(复杂度高且可能会导致embedding会偏移),很难落地在需要快速生成未知节点embedding的机器学习系统上。
GraphSAGE(Graph SAmple and aggreGatE)框架,通过训练聚合节点邻居的函数(卷积层),使GCN扩展成归纳学习任务,对未知节点起到泛化作用。
区别于 GCN 使用邻接矩阵 A 使用图全局结构信息,这里是对 GCN 做了进一步精简,每次迭代只抽样取直接相邻的节点,通过训练聚合节点邻居的函数(卷积层),使GCN扩展成归纳学习任务,对未知节点起到泛化作用。节点邻居学习目标节点表示,相当于用 context 学习 center 词。相当于 deepwalk + GCN。 聚合 1 跳邻居,迭代聚合 2 跳邻居。利用 2 跳邻居特征,生成一跳邻居 embedding,再聚合一跳 embedding 生成目标节点 embedding。

参考

  1. 如何理解Graph Convolutional Network
  2. 基于GCN的文本分类
  3. graph convolutional network有什么比较好的应用task?
  4. 图卷积网络到底怎么做,这是一份极简的Numpy实现
  5. GraphSAGE: GCN落地必读论文
  6. PinSage:第一个基于GCN的工业级推荐系统
  7. 有哪些指标可以描述两个图(graph)的相似度?

你可能感兴趣的:(深度学习,tensorflow,推荐系统)