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))=F−1(F(f).F(g)).只需要定义 graph 上的 fourier 变换,就可以定义出 graph 上的 convolution 变换。
傅立叶变换:
F
(
x
)
F(x)
F(x)
傅立叶变换的逆:
F
−
1
(
x
)
F^{-1}(x)
F−1(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=I−D−1/2∗A∗D−1/2=U∗Λ∗UT
传统的傅立叶变换使用
e
−
2
∗
p
i
∗
sin
i
x
v
e^{-2*pi*{\sin ixv}}
e−2∗pi∗sinixv 作为基。 Graph 。
图卷积
f
∗
g
=
F
−
1
F
(
f
)
∗
F
(
g
)
f*g=F^{-1}{F(f)*F(g)}
f∗g=F−1F(f)∗F(g)
图的傅立叶变换卷积
g
∗
x
=
U
(
U
T
g
∗
U
T
x
)
g*x=U(U^Tg*U^Tx)
g∗x=U(UTg∗UTx)
傅里叶变换、卷积类比到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万+



被折叠的 条评论
为什么被折叠?



