论文来自于NeurIPS 2020,题目是GNNGUARD,一个应用于图神经网络的通用的抵御对抗攻击的算法。
备注:
GNNGUARD一种通用的算法,任何GNN通过集成GNNGUARD,可以在即使在扰动的图上训练时也可以做出正确预测。
实现效果如图:面对各种对抗攻击时可以有效地恢复GNN的性能。
假如攻击者对结点u投毒,令没有防御的分类器误分类;但是有了GNNGUARD,即使有扰动,也可以正确分类。
检测和量化图结构与结点特征之间的关系。
GNNGUARD的本质是一个算法,以现有的GNN模型作为输入,通过检测和量化图结构与结点特征之间的关系,修改模型中消息传递的结构,来减轻攻击带来的负面影响。
图A是一个典型的GNN消息传递结构;图B添加了一些操作来控制信息传递,例如阻止来自无关邻居的消息,也就是对边的修剪;同时还有增强来自高度相关邻居的消息。
GNNGUARD主要研究:
在投毒攻击的模型中,攻击者扰动图G,意味着攻击改变了训练数据,这样做可以降低GNN的性能。
那么问题就存在了,我们没办法知道原图也就是不加扰动的图是什么样。所以我们没办法直接用上面这个式子来解决这个问题。
备注:
所以问题在于如何恢复原图G的结构。
之前有研究(此处应该有参考文献)发现大多数扰动都是通过在不同特征和标签的结点之间伪造边缘。恢复结构的关键,是设计一种方案,来检测可能是伪造的边,并通过删除它们或为它们分配较低权重来减轻负面影响。
如上图如果我们可以检测出来红色的边的伪造的,或者可能是伪造的。我们可以直接裁剪掉这个变,或者通过降低边的权重,来减少这条边两边端点通过这个边交换的信息,这样就尽可能的恢复出G的结构
下面介绍如何对这种边做检测和降低权重,GNNGUARD主要引入了两个部件,一个是邻居重要性估计,一个是层间记忆。
备注:
如何量化边的重要性,通过看两端结点通过这个边传递了多少信息。基于一个假设(此处有参考文献)就是连接相似结点的边比连接不相似结点的边传递的消息更多。
因此可以用两端结点的信息来量化第k层点u和v之间的相似度s(待补充,同构异构)
相似度越大意味着两端的结点(结构、特征)越相似
把边的相似度在结点层面做归一化得到每条边对该节点消息传递的重要性权重α
比如αuv就是v向n传递消息的重要性权重
然后是使用这个重要性权重来裁剪边,尤其是假的边倾向于连接不同的节点
α是有方向的,我们定义边的特征向量。
对这个特征向量进行非线性变换,然后与指定的阈值进行判断,得到裁剪概率。
最后用得到的裁剪概率更新重要性权重。
到这里只是算出来了并且更新了一个α,但是α还没啥用。α后面会用到,用来更新层间记忆,下面来讲层间记忆。
层间记忆定义:
举例:
备注:
如果直接使用邻居重要性估计对边进行裁剪可能会修改GNN的结构,尤其是在单层修剪大量的边的时候,会破坏训练的稳定性
为了能够对重要性权重进行可靠的估计,并且平滑地修剪边,提出了层间记忆。
层间记忆应用于每个GNN层,保留上一层修剪后的图的部分记忆。
通俗的说就是把剪完以后的结构向上一层传递一部分,没有在一层彻底把边裁减掉。
这个公式就是层间记忆的定义。
记忆系数β:控制有多少上一层的信息保留到当前层。
记忆系数是可以学习的参数,在第一层会设置为0,意味着第一层的时候没有保留上一层的信息,防御系数直接计算并使用的重要性权重。
防御系数ω:通过参考当前层的重要性权重和上一层的防御系数,控制信息的传递,增强来自防御系数高的邻居的信息,减弱低防御系数结点邻居的信息。
可以看这张图,防御系数是应用到图神经网络聚合函数和更新函数中。
算法的作用就是修改每一层的消息传递,输入的是一个模型(不是一个训练好的模型,修改完模型以后再训练)
输入:一个GNN模型f,被毒化的图G’
对自底向上的每一层:
对每一个结点:
备注:
第一张表是直接攻击,第二张表是推理攻击和非定向攻击。
表中内容是分类准确度,证明了防御性能不错。