《图神经网络:由入门到高级、从算法到应用》第六讲:基于采样的图神经网络模型

本课程第六讲主要给大家介绍图神经网络的一致性正则化训练,包括GRAND, GRAND+, SCR。大家对于这节课有什么疑问可以在这里交流~

第六讲课件:https://cogdl.ai/gnn2022/courseware/L6_consistency_regularization_for_GNNs.pdf
第六讲作业:https://cogdl.ai/gnn2022/courseware/HW6_GRAND.ipynb

对于一致性正则化的认识:

实际上很多半监督学习的工作都运用了一致性正则化,比如图像分类、tabular data 的预测等等,如果去查百度,就会发现博主们基本都会提到一句:

“对于模型的一个输入,即使其受到了微小的干扰,模型对其的预测结果应该是一致的。” (浅谈联邦半监督学习及FedMatch算法)

其实这个话没有说全,如果预测在相差不大的子空间中进行,输入完全一致,预测结果应该也趋同。

在GRAND这篇论文中,子空间就是不同的augmentation,而做预测工作的都是同一个GRAND模型,只是在处理同样的输入,dropoutrand_prop(里面有 drop_node)因为随机而形成了一定差异,以下是GRAND的 forward 函数:

    def forward(self, graph):
        graph.sym_norm()
        x = graph.x
        x = self.normalize_x(x)
        x = self.rand_prop(graph, x)
        if self.use_bn:
            x = self.bn1(x)
        x = F.dropout(x, self.input_droprate, training=self.training)
        x = F.relu(self.layer1(x))
        if self.use_bn:
            x = self.bn2(x)
        x = F.dropout(x, self.hidden_droprate, training=self.training)
        x = self.layer2(x)
        return x

很明显 dropoutrand_prop 作为函数而不是类,不会储存任何计算的中间状态。这也就导致了每个augmentation所使用的 forward,像在一个小房间里面算数,自己写自己的,互相不能通气,而consitency_loss像是最后给每个forward分别反馈“你和大家得出的平均值差多少”的人。

一致性正则化应该适用于多决策器“输入微调”或者“参数微调”的情况下拿来提升性能。比如说这篇multi-head attention的论文,就是把各个head当成了不同的决策器:Person Re-Identification by Context-Aware Part Attention and Multi-Head Collaborative Learning

3 Likes