论文链接:https://arxiv.org/abs/1809.10341
github:https://github.com/PetarV-/DGI
之前的大部分图节点表示学习方法属于半监督学习例如经典的GCN,本文的主要创新是提出了一种无监督一般化的图节点表示学习方法。DGI依赖于最大限度地扩大图增强表示和目前提取到的图信息之间的互信息——两者都是使用已建立的图卷积网络体系结构导出的。
对于图增强表示,是根据感兴趣节点所生成的子图,因此可以用于下游节点的表示学习任务。相较于之前对于 GCN 的无监督学习方法,DGI 不依赖于随机游走,并且可以适用于直推式学习和归纳式学习。
目前的基于图的无监督学习主要分为两类:基于随机游走的一系列方法、基于自动编码器的一些列方法
基于自动编码器的方法,经典的工作是 VGAE,通过自动编码器结构期望重构原始的邻接矩阵。以此来实现还原图结构的相似性来模拟映射到特征空间的相似性,实现无监督的节点表示学习。
基于随机游走的方法虽然有力但是存在局限性,最显著的是,随机游走目标会以牺牲结构信息为代价过分强调邻近信息,并且性能高度依赖于超参数的选择。此外,随着基于图卷积的更强编码器模型的引入,不清楚随机游走目标是否真的提供了任何有用的信号,因为这些编码器已经强制产生了一种感应偏差,即相邻节点具有类似的表示。
在概率论和信息论中,两个随机变量的互信息(Mutual Information,简称MI)或转移信息(transinformation)是变量间相互依赖性的量度。本文中提出的 DGI 方法就是基于互信息这一概念。近年来基于互信息的代表性工作是 MINE,其中提出了一种 Deep InfoMax (DMI) 方法来学习高维数据的表示。具体来说 DMI 训练一个编码模型来最大化高阶全局表示和输入的局部部分的互信息(如果从 cv 的角度理解就是一张图片中的 patches)。这鼓励编码器携带出现在所有位置(因此是全局相关的)的信息类型,例如类标签的情况。
对于无监督学习一类重要的方法就是对比学习,通过训练编码器使它在特征表示中更具判别性来捕获感兴趣的和不感兴趣的统计依赖性。具体来说,一个对比学习方法可能使用一个评分函数来使编码器可以判别真实数据和假数据。DGI在这方面也具有对比性,因为 DGI 目标是基于对局部-全局的配对和负抽样配对的分类。
来实现对比学习的一个关键步骤在于如何采样正样本和负样本,关于无监督图表示学习的先前工作依赖于局部对比损失(强制近端节点具有类似的嵌入)。从语言建模的角度来看,正样本通常对应于在图中短时间的随机漫步中一起出现的节点对,有效地将节点视为单词,将随机漫步视为句子。最近有的方法提出使用节点锚定采样作为替代。这些方法的负采样主要是基于随机对的抽样。
CPC 是另一种基于互信息最大化的学习深度特征表示的框架,CPC 也是一种对比学习方法。然而,与DGI 不同的是,CPC是预测性的:对比目标有效地训练了输入的结构指定部分(例如,相邻节点对之间或节点与其邻居之间)之间的预测器。DGI 不同之处在于同时对比一个图的全局/局部部分,其中全局变量是从所有的局部变量计算出来的。
首先给出如下变量设置 X = { x 1 , x 2 , … , x N } \mathbf{X}=\{x_1,x_2,\dots,x_N\} X={x1,x2,…,xN}, 其中 N N N 代表图中节点的数量,并且满足 x i ∈ R F x_i \in\mathbb{R}^F xi∈RF 代表节点 i i i 的特征表示。 A ∈ R N × N \mathbf{A} \in \mathbb{R}^{N \times N} A∈RN×N,在本文中默认所有处理的图是无权图,同时邻接矩阵存储的值维 0 或 1。
模型的目的是学习一个编码器 E : R N × N × R N × F → R N × F ′ \mathcal{E}:\mathbb{R}^{N \times N} \times \mathbb{R}^{N \times F} \rightarrow\mathbb{R}^{N \times F^{'}} E:RN×N×RN×F→RN×F′。可以形式化的表示为 E ( X , A ) = H = { h 1 , h 2 , … , h N } \mathcal{E}(\mathbf{X,A})=\mathbf{H}=\{h_1,h_2,\dots,h_N\} E(X,A)=H={h1,h2,…,hN},其中 H \mathbf{H} H 代表高阶表示,并且每个节点 i i i 满足 h i ∈ R F ′ h_i \in \mathbb{R}^{F^{'}} hi∈RF′。所得到的节点特征的高阶表示可以用于各种下游任务,例如节点分类任务。
对于图卷积这一操作,是不断通过聚合目标节点周边的邻居来完成特征学习,因此我们将 h i h_i hi 看成是图中目标节点周边的一个 patch
DGI 的核心思想在于通过最大化局部互信息来训练编码器,DGI 寻求获取节点(即局部)表示,该表示可以捕获由总结向量 s s s 表示的整个图的全局信息内容。
为了得到图级别的总结向量 s s s,作者提出了一种 Readout Function, R : R N × F → R F \mathcal{R}:\mathbb{R}^{N \times F} \rightarrow \mathbb{R}^F R:RN×F→RF。进而使用它将获得的 patch 表示总结为 图级别的总结向量。上述过程可以总结为 s = R ( E ( X , A ) ) s=\mathcal{R(\mathcal{E}\mathbf{(X,A)})} s=R(E(X,A))
DGI 使用了一个鉴别器作为最大化本地互信息的代理, D : R F × R F → R \mathcal{D}:\mathbb{R}^F \times\mathbb{R}^F \rightarrow \mathbb{R} D:RF×RF→R,举例来说 D ( h i , s ) \mathcal{D}(h_i,s) D(hi,s) 表示分配给这个 patch-总结对 的概率分数(对于包含在总结中的 patch 应该更高)。
因此对应的负样例由 ( X , A ) \mathbf{(X,A)} (X,A) 的总结向量 s s s 和 代替图 ( X ~ , A ~ ) (\widetilde{\mathbf{X}},\widetilde{\mathbf{A}}) (X ,A ) 的 patch表示 h ~ \widetilde{h} h 组成。在多图的数据集中,这样的图 ( X ~ , A ~ ) (\widetilde{\mathbf{X}},\widetilde{\mathbf{A}}) (X ,A ) 可以通过训练集的其他元素获得。然而,对于单个图,一个显式(随机)破坏函数 C : R N × F × R N × N → R M × F × R M × M \mathcal{C}:\mathbb{R}^{N \times F} \times \mathbb{R}^{N \times N} \rightarrow \mathbb{R}^{M \times F} \times \mathbb{R}^{M \times M} C:RN×F×RN×N→RM×F×RM×M 来生成这样的图 ( X ~ , A ~ ) (\widetilde{\mathbf{X}},\widetilde{\mathbf{A}}) (X ,A )。上述过程可以表述为 ( X ~ , A ~ ) = C ( X , A ) (\mathbf{\widetilde{X},\widetilde{A}})=\mathcal{C}(\mathbf{X,A}) (X ,A )=C(X,A)。
DGI 使用带有标准二值交叉熵(BCE)损失的噪声对比型目标函数(来自联合样本(正样本)和边缘样本(负样本)的乘积)。
L = 1 N + M ( ∑ i = 1 N E ( X , A ) [ l o g D ( h i , s ) ] + ∑ j = 1 M E ( X ~ , A ~ ) [ l o g ( 1 − D ( h j ~ , s ) ) ] ) (1) \mathcal{L}=\frac{1}{N+M}(\sum_{i=1}^N\mathbb{E}_{\mathbf{(X,A)}}[log\mathcal{D}(h_i,s)]+\sum_{j=1}^M\mathbb{E}_{\mathbf{(\widetilde{X},\widetilde{A})}}[log(1-\mathcal{D}(\widetilde{h_j},s))]) \tag{1} L=N+M1(i=1∑NE(X,A)[logD(hi,s)]+j=1∑ME(X ,A )[log(1−D(hj ,s))])(1)
通过上式可以有效地最大化 h i h_i hi 和 s s s 的互信息
假设单图设置(即( ( X , A ) \mathbf{(X,A)} (X,A)作为输入),DGI 的步骤:
具体来说,对于直推式学习作者采用
E ( X , A ) = σ ( D ^ − 1 2 A ^ D ^ − 1 2 X Θ ) (2) \mathcal{E}(\mathbf{X,A})=\sigma(\mathbf{\hat{D}}^{-\frac{1}{2}}\mathbf{\hat{A}}\mathbf{\hat{D}}^{-\frac{1}{2}}\mathbf{X\Theta}) \tag{2} E(X,A)=σ(D^−21A^D^−21XΘ)(2)
其中 A ^ = A + I N \mathbf{\hat{A}}=\mathbf{A+I}_N A^=A+IN 代表加上自环的邻接矩阵, D ^ \mathbf{\hat{D}} D^ 代表相应的度矩阵,满足 D ^ i i = ∑ j A ^ i j \hat{D}_{ii}=\sum_j\hat{A}_{ij} D^ii=∑jA^ij,对于非线性激活函数,作者选择 PReLU。 Θ ∈ R F × F ′ \mathbf{\Theta}\in\mathbb{R}^{F \times F^{'}} Θ∈RF×F′ 代表可学习的权重矩阵,也就是线性变换的参数。
对于腐蚀函数 C \mathcal{C} C,直接采用 A ~ = A \mathbf{\widetilde{A}}=\mathbf{A} A =A,但是 X ~ \mathbf{\widetilde{X}} X 是由原本的特征矩阵 X \mathbf{X} X 经过随机变换得到的。也就是说,损坏的图由与原始图完全相同的节点组成,但它们位于图中的不同位置,因此将得到不同的 patch 表示。
对于在大图中的归纳式学习,作者采用 GraphSAGE-GCN
M P ( X , A ) = D ^ − 1 A ^ X Θ (3) \mathbf{MP(X,A)}=\mathbf{\hat{D}}^{-1}\mathbf{\hat{A}\mathbf{X}\mathbf{\Theta}}\tag{3} MP(X,A)=D^−1A^XΘ(3)
D ^ − 1 \mathbf{\hat{D}}^{-1} D^−1 实际上执行的是标准化的和(因此是均值)。尽管式(4)明确指定了邻接矩阵和度矩阵,但它们并不需要:因为 Const-GAT 模型中使用的持续关注机制可以观察到相同的归纳行为。对于Reddit,DGI 的编码器是一个带有跳过连接的三层均值池模型
M P ~ ( X , A ) = σ ( X Θ ′ ∣ ∣ M P ( X , A ) ) E ( X , A ) = M P 3 ~ ( M P 2 ~ ( M P 1 ~ ( X , A ) , A ) , A ) (4) \widetilde{\mathbf{MP}}\mathbf{(X,A)}=\sigma(\mathbf{X\Theta^{'}||MP(X,A)})\\\mathcal{E}(\mathbf{X,A})=\widetilde{\mathbf{MP_3}}(\widetilde{\mathbf{MP_2}}(\widetilde{\mathbf{MP_1}}(\mathbf{X,A}),\mathbf{A}),\mathbf{A})\tag{4} MP (X,A)=σ(XΘ′∣∣MP(X,A))E(X,A)=MP3 (MP2 (MP1 (X,A),A),A)(4)
其中 ∣ ∣ || ∣∣ 代表特征级联。
由于数据集的规模很大,它将不能完全适合GPU内存。因此,DGI 的子抽样方法,首先选择小批量的节点,然后通过对具有替换的节点邻域进行抽样,得到以每个节点为中心的子图。具体来说,DGI 在第一层、第二层和第三层分别采样10、10和25个邻居,这样每个次采样的 patch 有1 + 10 + 100 + 2500 = 2611个节点。只进行了推导中心节点 i i i 的 patch 表示 h i h_i hi 所必需的计算。这些表示然后被用来为minibatch(图2)导出摘要向量 s s s。在整个训练过程中使用了256个节点的 minibatch 。为了在此设置中定义破坏函数,DGI 使用与在直推式学习中类似的方法,将每个次采样的补丁作为一个单独的要破坏的图(即在次采样的补丁中按行随机打乱特征矩阵)。这很可能导致中心节点的特征被替换为抽样邻居的特征,进一步鼓励负样本的多样性。然后将在中心节点获得的 patch 表示提交给标识器。
对于在 多图上的归纳式学习,例如 PPI 数据集,编码器是一个带有密集跳过连接的三层均值池模型
H 1 = σ ( M P 1 ( X , A ) ) H 2 = σ ( M P 2 ( H 1 + X W s k i p , A ) ) E ( X , A ) = σ ( M P 3 ( H 2 + H 1 + X W s k i p , A ) ) (5) \mathbf{H}_1=\sigma(\mathbf{MP_1(X,A)})\\\mathbf{H}_2=\sigma(\mathbf{MP_2(H_1+XW_{skip},A)})\\\mathcal{E}(\mathbf{X,A})=\sigma(\mathbf{MP}_3(\mathbf{H_2+H_1+XW_{skip}},\mathbf{A}))\tag{5} H1=σ(MP1(X,A))H2=σ(MP2(H1+XWskip,A))E(X,A)=σ(MP3(H2+H1+XWskip,A))(5)
在这个多图设置中,DGI 选择使用随机抽样的训练图作为负样例(即,DGI 的破坏函数只是从训练集中抽样一个不同的图)。作者发现该方法是最稳定的,因为该数据集中超过40%的节点具有全零特征。为了进一步扩大负面示例池,作者还将dropout 应用于采样图的输入特征。作者发现,在将学习到的嵌入信息提供给逻辑回归模型之前,将其标准化是有益的。
对于 Readout Function,作者使用所有节点特征的简单平均值:
R ( H ) = σ ( 1 N ∑ i = 1 N h i ) (6) \mathcal{R}(\mathbf{H})=\sigma(\frac{1}{N}\sum_{i=1}^Nh_i)\tag{6} R(H)=σ(N1i=1∑Nhi)(6)
其中 σ \sigma σ 是非线性激活函数。作者通过应用一个简单的双线性评分函数对 图级别的摘要- patch表示对 进行评分:
D ( h i , s ) = σ ( h i T W s ) (7) \mathcal{D}(h_i,s)=\sigma(h_i^T\mathbf{W}s) \tag{7} D(hi,s)=σ(hiTWs)(7)
其中 W \mathbf{W} W 是可学习的评分权重参数, σ \sigma σ 用于将分数转换为 ( h i , s ) (h_i,s) (hi,s) 为正样例的概率。