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