自监督-When Does Self-Supervision Help Graph Convolutional Networks?


标签:自监督学习、图神经网络

动机&背景

  • 在半监督学习任务中, 讨论的是直推式半监督节点分类, 典型的代表是 GCN, 在半监督任务的数据集中有大量的未标记的节点和少量有标记的节点, 其目标是预测未标记的节点的标签.
  • 而自监督也利用同样大量的未标记的数据, 通过代理任务 (pretext tasks) 、预训练&微调 (pretraining&finetuning) 和多任务学习 (multi-task)帮助模型学习更多可迁移和广义的表示从没有标签的数据中. Hendrycks等人已证明自监督学习作为辅助正则项有利于提高鲁棒性和不确定估计
  • 简而言之,GCN 任务通常接受直推式半监督环境, 具有大量未标记节点; 同时, 自我监督在 CNN 利用无标签数据方面发挥着越来越重要的作用. 鉴于这两个事实, 我们自然有动机问以下有趣的但很少探索的问题: 自我监督学习能否在 GCNs 中发挥类似的作用, 以提高其泛化性和鲁棒性?

贡献

  • Q1: GCN 在分类性能上能从自我监督学习中受益吗? 如果是, 如何将 GCN 以实现收益最大化?

? A1: 我们证明了通过多任务学习, 即作为GCN 训练中的正则化项, 将自监督学习结合到 GCNs 中的有效性. 与自我监督相比, 它更受青睐, 如预训练或通过自训练.

  • Q2: 代理任务的设计重要吗? GCN 有哪些有用的自我监督代理任务

? A2: 我们研究了三个基于图属性的自监督任务. 除了之前在 (Sun等人) 中提到的节点聚类任务之外, 我们还提出了两种新型的任务: 图分割和图补全. 我们进一步说明, 不同的模型和数据集似乎更喜欢不同 的自我监督任务

  • Q3: 自监督也会影响 GCN 的对抗鲁棒性吗? 如果是, 如何设计代理任务?

? A3: 我们进一步将上述发现推广到对抗性训练环境中. 我们提供了广泛的结果来表明, 自我监督也提高了 GCN 在各种攻击下的鲁棒性, 而不需要更大的模型或额外的数据

思想

定义

符号定义

一个无向图 \(\mathcal{G} = \{\mathcal{V}, \mathcal{E}\}\), 顶点集合 \(|\mathcal{V}| = \{v_1,...,v_{|\mathcal{V}|}\}\), 边集合 \(\mathcal{E} = \{e_1,...,e_{\mathcal{E}}\}\), \(e_n=(v_i, v_j)\), \(X \in \mathbb{R}^{|\mathcal{V} \times N|}\)是属于特征矩阵, \(x_n = X[n, :]^T\); \(A \in \{0, 1\}^{n \times n}\) 是一个邻接矩阵; 给 GCN 自监督任务 ss, 给定输入 \(X_{ss}, \hat{A}_{ss}\), 和标签 \(Y_{ss}\) 和节点集合 \(\mathcal{V_{ss}}\)

前置知识

自监督

CNN中自监督主要两类: 预训练&微调 (pretraining&finetuning) 和多任务学习 (multi-task); 在 CNN 中自监督中首先通过代理任务进行预训练, 然后在目标任务(有标签的数据)进行微调; 在多任务学习中主要利用目标监督任务和自监督任务的联合目标同时训练网络.

最近在 GCNs 中只有一个追求自监督的工作(孙等人,2019), 其中通过自我训练采用节点聚类任务. 然而, 自我训练受到限制, 包括性能 “饱和” 和降级

图卷积 (GCN)

两层的半监督分类的 GCN 模型:

\[Z = \hat{A} ReLU(\hat{A}XW_0)W_1~~~~~~~~~(1) \]

其中 \(\hat{A} = \widetilde{D}^{-\frac{1}{2}}(A+I)\widetilde{D}^{-\frac{1}{2}}\), \(\widetilde{D}\)\(A + I\) 的度矩阵, 将 \(\hat{A}RrLU(\hat{A}XW_0)\) 作为特征提取表示为 \(f_{\theta}(X,\hat{A})\) , \(\theta = \{W_0\}\), 但是上式可以包括用于GCN变体中相应网络架构的附加参数, 因此,GCN 分解为特征提取和线性变换, 如 \(Z = f_θ(X,\hat{A})\Theta\), 其中参数 \(\theta\)\(\Theta= W_1\) 是从数据中学习的. 考虑到直推式的半监督任务, 我们得到了具有标签的节点集 \(\mathcal{V}_{label} ? \mathcal{V} ~~~ and ~~~ |\mathcal{V}_{label}| << |\mathcal{V}|\) 和标签矩阵 \(Y∈R ^{| \mathcal{V} |×N'}\) 带有标签维度 \(N'\) (对于分类任务 \(N'=1\))。因此,GCNs 中的模型参数是通过最小化输出和标记节点的真实标签之间计算的监督损失来学习的,该损失可以表示为:

\[Z = f_{\theta}(X,A)\Theta \\ \theta^*, \Theta^* = \arg \min_{\theta, \Theta} \mathcal{L}_{sup}(\theta, \Theta) \\ = \arg \min_{\theta, \Theta} \frac{1}{|\mathcal{V}_{label}|}\sum_{v_n \in \mathcal{V}_{label}}{L}_{sup}(z_n, y_n) ~~~~~~~~~~~(2) \]

前置方法

Pretraining & finetuning

在预训练过程中,神经网络在自我监督任务上进行训练:

\[Z_{ss} = f_{\theta}(X_{ss},A_{ss})\Theta_{ss} \\ \theta_{ss}^*, \Theta_{ss}^* = \arg \min_{\theta, \Theta} \mathcal{L}_{ss}(\theta, \Theta_{ss}) \\ = \arg \min_{\theta, \Theta} \frac{1}{|\mathcal{V}_{ss}|}\sum_{v_n \in \mathcal{V}_{ss}}{L}_{ss}(z_{ss, n}, y_{ss,n}) ~~~~~~~~~~~~(3) \]

这里的 \(\Theta_{ss}\) 是线性变换的参数, \(L_{ss}(\cdot,\cdot)\) 是自监督任务中的损失函数, \(z_{ss, n} = Z_{ss}[n,:]^T\), \(y_{ss,n} = Y_{ss}[n,:]^T\), 然后在微调过程中使用特征提取器 \(f_{\theta}(\cdot, \cdot)\) 在式 \((2)\) 训练, 其中用 \(\theta^*_{ss}\) 初始化 \(\theta\), 由于在这里自监督任务和目标任务中存在这一个损失函数的切换, 可能会存在信息丢失或者过平滑, 而导致在大型数据集上没有什么性能的提升.

Self-training

(Sun et al., 2019) 在 GCNs 中唯一追求自监督的前期工作,并且是通过自训练来实现的, 对于已标记和未标记的数据, 典型的自训练管道从对已标记数据预处理模型开始, 然后将 “伪标签” 分配给置信度高的未标记样本作为他们的标签, 并将它们包含到标记数据中, 用于下一轮训练. 该过程可以重复几轮, 并且可以在每一轮中以类似于式 \((2)\) 的方式用 \(\mathcal{V}_{label}\) 更新, 该方法存在饱和现象,即当标签率较高的时候,再加入伪标签基本没有效果或者甚至是适得其反,这是因为低标签率的情况下,得到的训练集种子可能较差,通过加入伪标签,引入了较好的训练集种子,而当标签率较高的时候,训练集的种子质量基本全覆盖,所以加入伪标签没有效果;

Multi-task learning

考虑具有 \((2)\) 的GCN的目标任务和自监督任务, 输出和训练过程可以被公式化为:

\[Z = f_{\theta}(X,A)\Theta ~~~~~~~~~~~~~ Z_{ss} = f_{\theta}(X_{ss},\hat{A}_{ss})\Theta_{ss}\\ \theta^*, \Theta^* \Theta^*_{ss}= \arg \min_{\theta, \Theta \Theta_{ss}} \alpha_1 \mathcal{L}_{sup}(\theta, \Theta) + \alpha_2\mathcal{L}_{ss}(\theta, \Theta_{ss}) ~~~~~~~~~~~(4)\\ \]

其中\(α_1, α_2\in R_{ > 0}\) 分别是 \((2)\) 式中定义的总监督损失 \(L_{sup}(\theta,\Theta)\)\((3)\) 式中定义的自监督损失 \(L_{ss}(\theta,\Theta{ss})\) 的权重. 为了优化它们损失的加权和, 目标监督和自监督任务共享相同的特征提取器 \(f_θ(\cdot,\cdot)\),但是在图 \(1\) 中具有它们各自的线性变换参数 \(\Theta^*\)\(\Theta_{ss}^*\)

方法

Node clustering

构造自监督任务的一种直观方法是通过节点聚类算法。给定以特征矩阵 \(X\) 为输入的节点集 \(\mathcal{V}\) ,带有预设数量的聚类 \(K \in \{1,...,|\mathcal{V}|\}\) 在实验中被视为超参数, 聚类算法将输出一组节点集 \(\{\mathcal{V}_{clu,1},...,\mathcal{V}_{clu,K}|\mathcal{V}_{clu,n} \subseteq \mathcal{V}, n = 1,...,K\}\) :

\[\mathcal{V}_{clu,n} \neq \emptyset ~~~~~(n = 1,..., K),~~~~~~~~ \cup_{n = 1}^{K}\mathcal{V}_{clu,n} = \mathcal{V} \\ \mathcal{V}_{clu,i} \cap \mathcal{V}_{clu,j} = \emptyset ~~~~~(\forall n = 1,...,|\mathcal{V}|, \forall k = 1, ..., K).~~~~~~~~ \]

对于节点集的聚类,我们将聚类索引作为自监督标签分配给所有节点:

\[y_{ss,n} = k ~~if ~~ v_n \in \mathcal{V}_{clu, k}(\forall n = 1,...,|\mathcal{V}|, \forall k = 1, ..., K) \]

Graph partitioning

聚类相关算法是基于节点特征的, 其基本原理是将具有相似属性的节点分组. 将节点分组的另一个基本原理可以基于图形数据中的拓扑. 特别地, 由“强”边连接的两个节点(具有大的权重)很可能属于同一标签类(Zhu & Goldberg,2009). 因此, 我们提出了一种基于图划分的拓扑自监督方法. 图划分是将图的节点划分成大致相等的子集, 从而使子集之间连接节点的边数最小化(Karypis & Kumar,1995). 给定节点集\(\mathcal{V}\)、边集 \(\mathcal{E}\) 和邻接矩阵 \(A\) 作为输入, 以预设的分割数\(K \in \{1,...,|\mathcal{V}|\}\)(实验中的一个超参数), 一个图划分算法会输出一组 \(\{\mathcal{V}_{par,1},...,\mathcal{V}_{par,K}|\mathcal{V}_{par,n} \subseteq \mathcal{V}, n = 1,...,K\}\) :

\[\mathcal{V}_{par,n} \neq \emptyset ~~~~~(n = 1,..., K),~~~~~~~~ \cup_{n = 1}^{K}\mathcal{V}_{par,n} = \mathcal{V} \\ \mathcal{V}_{par,i} \cap \mathcal{V}_{par,j} = \emptyset ~~~~~(\forall n = 1,...,|\mathcal{V}|, \forall k = 1, ..., K).~~~~~~~~ \]

这类似于节点聚集的情况. 此外, 平衡约束被强制用于图划分(\(K\frac{max_k|\mathcal{V}_{par,k}}{|\mathcal{V}|} \le 1 + \epsilon , ~~~ \epsilon \in (0, 1)\)) 并且图划分的目标式最小化的 \(edgecut = \frac{1}{2} \sum_{k = 1}^K \sum_{v \in \mathcal{V}_{par, k}}\sum_{(v_i, v_j) \in \mathcal{E} ~~and ~~ v_j \notin \mathcal{V}_{par, k}} a_{i,j}\), 随着节点集与图的其余部分一起被划分,我们将划分索引指定为自监督标签 \(y_{ss,n} = k ~~if ~~ v_n \in \mathcal{V}_{par, k}(\forall n = 1,...,|\mathcal{V}|, \forall k = 1, ..., K)\) 与基于节点特征的节点聚类不同,图划分提供了基于图拓扑的先验正则化,类似于图拉普拉斯正则化.

Graph completion

我们的图补全首先通过移除目标节点的特征来屏蔽它们. 然后, 它旨在通过将未屏蔽的节点特征(对于 \(2\) 层节点控制网络,目前仅限于每个目标节点的二阶邻居)馈送给节点控制网络来恢复/预测屏蔽的节点特征. 也就是说先对节点的特征进行 mask , 然后对特征进行重构.

扩展

为了获得更高性能的监督学习(例如,节点分类)的可推广性, 我们引入了三个自监督任务, 并继续研究它们在获得对各种图对抗攻击的鲁棒性方面的可能作用.

Adversarial attacks

我们关注节点的直接躲避攻击: 在一定的约束下, 目标节点的属性\链接 上的特定节点攻击类型, 而训练的模型(即模型参数(\({\theta^*, \Theta^*}\))) 在攻击期间\之后保持不变, 攻击者 \(g\) 生成扰动特征和邻接矩阵 \(X'\)\(A'\)

\[X',A' = g(X,A,Y,v_n,\theta^*, \Theta^*) ~~~~~~~~~~~(5) \]

以目标节点的(属性、链接和标签)和模型参数作为输入, 攻击可以针对链接、(节点)功能或链接

Adversarial defense

对抗防御的一种有效方法, 尤其是在图像领域, 是通过对抗训练, (Goodfellow et al., 2014)它用对抗的例子来增加训练集而, 由于在直推半监督环境中标记率较低, 很难在图域中生成对抗性的例子. 王等人(2019b)因此提出利用未标记的节点来生成对抗性例子. 具体来说, 他们训练了一个 \((2)\) 式中所述的 GCN 来将伪标签 \(Y_{pseudo}\) 分配给未标记的节点. 然后, 他们从未标记的节点集中随机选择两个不相交的子集 \(\mathcal{V}_{clean}\)\(\mathcal{V}_{attack}\). 并攻击每个目标节点 \(\mathcal{v}_n \in \mathcal{V}_{attack}\),以生成扰动的特征和邻接矩阵 \(X'\)\(A'\). 然后, 图数据的对抗训练可以被公式化为标记节点的监督学习和未标记节点(被攻击的和干净的)的恢复伪标记:

\[Z = f_{\theta}(X, \hat{A})\Theta, ~~~~~~~Z' = F_{\theta}(X',A')\Theta \\ \theta^*, \Theta^* = \arg \min_{\theta, \Theta}(\mathcal{L}_{sup}(\theta, \Theta) + \alpha_3 \mathcal{L}(\theta, \Theta)) ~~~~~~~~~~~~~~~(6) \]

\(\alpha_3\) 是对抗损失 \(\mathcal{L}(\cdot, \cdot)\) 的权重, \(y_{pseudo, n} = Y_{pseudo}[n,:]^T\), \(z'_{n} = Z'[n,:]^T\)

Adversarial defense with self-supervision

根据 \((4)\) 式中的 GCN 中的自监督和 \((6)\) 中的对抗训练,我们将自监督的对抗训练制定为:

\[Z = f_{\theta}(X,A)\Theta ~~~~~~~~~~~~~ Z' = f_{\theta}(X',A')\Theta \\Z_{ss} = f_{\theta}(X_{ss},\hat{A}_{ss})\Theta_{ss}\\ \theta^*, \Theta^* \Theta^*_{ss}= \arg \min_{\theta, \Theta \Theta_{ss}} (\alpha_1 \mathcal{L}_{sup}(\theta, \Theta) + \alpha_2\mathcal{L}_{ss}(\theta, \Theta_{ss}) + \alpha_3 \mathcal{L}_{adv}(\theta, \Theta)) ~~~~~~~~~~~(7)\\ \]

实验

\(P\&R\) 表示预训练和微调, \(MTL\) 表示多任务学习, 其任务类别分别式节点聚集 (\(Clu\)), 图划分 \((Par)\) 和 图补全 \(Comp\) , 性能上都有所提高, 但是感觉提高并不明显. 并且实验结果表示预训练和微调适合在小数据上进行, 在大数据集上并没有什么效果, 这也证明了预训练的方法在微调阶段的损失函数的前后切换会导致信息的丢失; 而自训练和多任务学习都通过要给优化问题将自监督纳入到 GCNs 最终, 并且本质上都是在公式 \((2)\) 中引入一个额外的自监督损失, 它们的区别在于使用了什么样的伪标签, 以及如何为未标记的节点生成伪标签. 在自训练的情况下, 伪标签与目标任务标签相同, 并且这种“虚拟”标签基于它们在图嵌入中与标记节点的接近度被分配给未标记节点. 在多任务学习的情况下,伪标签不再局限于目标任务标签, 而是可以通过利用图结构和节点特征来分配给所有未标记的节点, 而无需标签数据. 多任务学习中的目标监督和自及监督仍然通过公共图嵌入耦合。所以相比自训练,多任务学习可以使用更通用伪标签并且可以在图数据中利用更多正则化。

总结

首先系统的研究了自监督中三种机制, 并且提出了三个自监督学习任务, 并推广到对抗攻击防御中, 进行了大量是实验.