论文名称:DEEP GRAPH INFOMAX
论文地址:https://arxiv.org/abs/1809.10341
论文来源:ICLR 2019
代码地址:https://github.com/PetarV-/DGI
1、问题引入
1.无监督学习的需求:现实世界中的图数据往往是未标记的,这限制了使用监督学习方法的可能性。
2.现有方法的局限性:现有的基于随机游走的无监督图表示学习方法可能过分强调邻域信息,而忽略了图的全局结构信息。
3.图结构数据的直推式和归纳学习:需要一种方法能够同时适用于直推式学习(在给定的图上进行学习)和归纳学习(在未见过的节点上进行泛化)。
2、方法详解
2.1 图的无监督学习
假设一个通用的基于图的无监督学习框架:
- 数据表示
节点特征 X = { x ⃗ 1 , x ⃗ 2 , … , x ⃗ N } \mathbf{X}=\{{\vec{x}}_{1},\vec{x}_{2},\ldots,\vec{x}_{N}\} X={x1,x2,…,xN},其中N是节点数, x ⃗ i ∈ R F \vec{x}_i\in\mathbb{R}^F xi∈RF为第 i 个节点的特征
邻接矩阵 A ∈ R N × N \mathbf{A}\in\mathbb{R}^{N\times N} A∈RN×N - 目标
学习一个图编码器 E : R N × F × R N × N → R N × F ′ \mathcal{E}:\mathbb{R}^{N\times F}\times\mathbb{R}^{N\times N}\to\mathbb{R}^{N\times F^{\prime}} E:RN×F×RN×N→RN×F′,使 E ( X , A ) = H = { h ⃗ 1 , h ⃗ 2 , … , h ⃗ N } \mathcal{E}(\mathbf{X},\mathbf{A})=\mathbf{H}=\{\vec{h}_1,\vec{h}_2,\ldots,\vec{h}_N\} E(X,A)=H={h1,h2,…,hN},其中, h ⃗ i ∈ R F ′ \vec{h}_i\in\mathbb{R}^{F^{\prime}} hi∈RF′为第 i 个节点的高阶表示
由于GCN编码器不断邻域节点信息聚合生成节点表示,那么生成的节点嵌入 h i ⃗ \vec{h_{i}} hi,总结了以节点 i 为中心的一个子图区域(patch)信息,而不仅仅是节点本身。因此,将 h i ⃗ \vec{h_{i}} hi视为一个局部图表示(patch表示)。
2.2 局部–全局互信息最大化
- 定义局部、全局表示
局部图表示(即patch表示):由GCN编码器生成的节点表示,每个节点表示都包含了局部信息,而不只节点本身。那么,节点 i 的局部图表示为 h i ⃗ \vec{h_{i}} hi。
全局图表示(即summary vector):通过汇总局部图表示获得全局图表示 s ⃗ \vec{s} s 。该过程通过一个读出函数(Readout函数)实现 R : R N × F → R F \mathcal{R}:\mathbb{R}^{N\times F}\to\mathbb{R}^{F} R:RN×F→RF ,那么 s ⃗ = R ( E ( X , A ) ) \vec{s}=\mathcal{R}(\mathcal{E}(\mathbf X,\mathbf A)) s=R(E(X,A))。 - 构建正负样本对
正样本对:原图中的patch表示和原图的summary vector
负样本对:扰动图中的patch表示和原图的summary vector
通过一个判别器 D : R F × R F → R \mathcal{D}:\mathbb{R}^F\times\mathbb{R}^{F}\to\mathbb{R} D:RF×RF→R 来表示局部–全局对 ( h ⃗ i , s ⃗ ) (\vec{h}_i,\vec{s}) (hi,s)的概率分数:
D ( h ⃗ i , s ⃗ ) = σ ( h ⃗ i T W s ⃗ ) \mathcal{D}(\vec{h}_i,\vec{s})=\sigma\left(\vec{h}_i^T\mathbf{W}\vec{s}\right) D(hi,s)=σ(hiTWs)
其中, W \mathbf{W} W是一个可学习的权重矩阵, σ \sigma σ是一个Sigmoid函数。 - 对比损失
L
\mathcal{L}
L
遵循Deep InfoMax的方法,DGI模型使用一种具有标准二元交叉熵( BCE )损失的噪声对比目标:
L = 1 N + M ( ∑ i = 1 N E ( X , A ) [ log D ( h ⃗ i , s ⃗ ) ] + ∑ j = 1 M E ( X ~ , A ~ ) [ log ( 1 − D ( h ~ ⃗ j , s ⃗ ) ) ] ) \mathcal{L}=\frac1{N+M}\left(\sum_{i=1}^N\mathbb{E}_{(\mathbf{X},\mathbf{A})}\left[\log\mathcal{D}\left(\vec{h}_i,\vec{s}\right)\right]+\sum_{j=1}^M\mathbb{E}_{(\widetilde{\mathbf{X}},\widetilde{\mathbf{A}})}\left[\log\left(1-\mathcal{D}\left(\vec{\widetilde{h}}_j,\vec{s}\right)\right)\right]\right) L=N+M1(i=1∑NE(X,A)[logD(hi,s)]+j=1∑ME(X ,A )[log(1−D(h j,s))])
其中,N 是正样本的数量,即图中节点的数量;M 是负样本的数量; ( X , A ) (\mathbf{X},\mathbf{A}) (X,A)是原始图, ( X ~ , A ~ ) (\widetilde{\mathbf{X}},\widetilde{\mathbf{A}}) (X ,A )为扰动图。
该方法能够有效的最大化 h ⃗ i \vec{h}_i hi 和 s ⃗ \vec{s} s 之间的互信息。
2.3 DGI模型结构
对于单图
(
X
,
A
)
(\mathbf{X},\mathbf{A})
(X,A) 输入,DGI模型的计算过程如下:
1.生成负样本:通过损坏函数(corruption function)
C
\mathcal{C}
C 对输入图
(
X
,
A
)
(\mathbf{X},\mathbf{A})
(X,A) 进行扰动,生成负样本
(
X
~
,
A
~
)
(\widetilde{\mathbf{X}},\widetilde{\mathbf{A}})
(X
,A
)
2.获取输入图的patch表示:
H
=
E
(
X
,
A
)
=
{
h
⃗
1
,
h
⃗
2
,
…
,
h
⃗
N
}
\begin{aligned}\mathbf{H}=\mathcal{E}(\mathbf{X},\mathbf{A})=\{\vec{h}_{1},\vec{h}_{2},\ldots,\vec{h}_{N}\}\end{aligned}
H=E(X,A)={h1,h2,…,hN}
3.获取负样本的patch表示:
H
~
=
E
(
X
~
,
A
~
)
=
{
h
~
⃗
1
,
h
~
⃗
2
,
…
,
h
~
⃗
M
}
\widetilde{\mathbf{H}}=\mathcal{E}(\widetilde{\mathbf{X}},\widetilde{\mathbf{A}})=\{\vec{\widetilde{h}}_1,\vec{\widetilde{h}}_2,\ldots,\vec{\widetilde{h}}_M\}
H
=E(X
,A
)={h
1,h
2,…,h
M}
4.获取summary vector表示:通过Readout函数获取全局表示summary vector
s
⃗
=
R
(
H
)
=
σ
(
1
N
∑
i
=
1
N
h
⃗
i
)
\vec{s}=\mathcal{R}(\mathbf{H})=\sigma\left(\frac1N\sum_{i=1}^N\vec{h}_i\right)
s=R(H)=σ(N1∑i=1Nhi)
5.采用梯度下降法更新
E
,
R
,
D
\mathcal{E},\mathcal{R},\mathcal{D}
E,R,D 的参数,最小化对比损失函数
L
\mathcal{L}
L。
3、实验
3.1 数据集
本文进行了以下基准任务:
1.在Cora、Citeseer和Pubmed引文网络上对研究论文进行主题分类(直推式学习)
2.预测以Reddit帖子建模的社交网络的社区结构(大图上的归纳式学习)
3.对蛋白质-蛋白质相互作用( PPI )网络中的蛋白质角色进行分类(多图数据集的归纳式学习),需要对未见到的网络进行泛化。