SimGuard 阅读笔记:Over-Similarity Perspective

📅 2026/7/8 5:08:08 👁️ 阅读次数 📝 编程学习
SimGuard 阅读笔记:Over-Similarity Perspective

论文:Boosting Graph Robustness Against Backdoor Attacks: An Over-Similarity Perspective关键词:Graph Backdoor Defense、Over-Similarity、Trigger Detection、Contrastive Learning、DRR


1. 核心问题

现有图后门攻击中的触发器是真的具有样本特异性,还是表现出固有的相似性?

作者发现:这些生成的触发器存在过度相似性,表现为高度的特征相似性和结构相似性。这种过度相似性使其更容易与干净节点区分开来,原因很可能是触发器生成过程缺乏足够约束。


2. 核心方法

SimGuard 的目标是:精准识别触发器并有效消除其影响

整体方法包括:

  1. 将整体异常检测与密度聚类方法结合,识别潜在触发器;

  2. 通过灵活边界区分触发器与干净节点,提高检测精度;

  3. 引入基于对比学习的触发器检测模块;

  4. 通过对比损失函数,让触发器嵌入与干净节点嵌入有效分离。


2. Preliminaries

2.1 Backdoor and Problem Definition

2.1.1 图的基本定义

作者定义带属性图为:

$$
G=(V,E,X)
$$

其中:

$$
V=\{v_1,\dots,v_N\}
$$

$$
E \subseteq V \times V
$$

$$
X=\{x_1,\dots,x_N\}
$$

这里:

  • $V$:节点集合;

  • $E$:边集合;

  • $X$:节点特征集合。


2.1.2 Inductive Setting

作者强调:训练图和测试图不是同一个图。

训练阶段有:

$$
G_T=(V_T,E_T,X_T)
$$

推理阶段有一个未见过的新图:

$$
G_U=(V_U,E_U,X_U)
$$

并且训练图和测试图节点不重叠:

$$
V_U \cap V_T = \emptyset
$$

这个设定很关键。因为如果只是 transductive setting,防御方法可能只需要在一个固定图上删除触发器;但 inductive setting 要求方法能够迁移到新图上。

所以 SimGuard 后面不仅要在训练阶段找 trigger,还要训练一个trigger detector,使其在推理阶段也能检测新图中的触发器。


2.1.3 干净节点与后门节点

训练图中有干净节点集合:

$$
V_C \subseteq V_T
$$

也有后门节点集合:

$$
V_B \subseteq V_T
$$

干净节点 $v_i \in V_C$ 的标签是真实标签:

$$
y_i
$$

后门节点 $v_j \in V_B$ 会被攻击者赋成目标类别:

$$
y_t
$$

也就是说,攻击者会把一部分节点污染掉:给它们加 trigger,并把它们标成攻击目标类别。


2.1.4 Trigger 与目标节点之间的边

图后门攻击一般不是像图像后门那样贴一个小图案,而是在目标节点附近注入节点或子图。

作者用:

$$
E_B \subseteq E_T
$$

表示后门节点和 trigger 之间的连接边。

也就是说:目标节点本身不一定改变,但是它的邻域里多了触发器节点或触发器子图。随后通过 GNN 的 message passing,trigger 信息会传到目标节点上。


2.1.5 推理阶段

测试图里面也分干净节点和后门节点:

$$
V_U = V_U^C \cup V_U^B
$$

测试阶段后门节点和 trigger 的连接边写成:

$$
E_U^B \subseteq E_U
$$

这说明攻击不只发生在训练图,推理阶段也可能给新节点挂 trigger。


2.1.6 攻击者目标

攻击者希望训练出一个后门模型,使其同时满足两个条件:

第一,带 trigger 的节点被预测成目标类:

$$
f(v_j)=y_t
$$

第二,不带 trigger 的干净节点保持正常分类。

因此,后门攻击的危险在于:干净准确率看起来正常,但只要触发条件出现,模型就会稳定误判。


2.1.7 防御者知识

防御者不知道:

$$
V_B
$$

也就是不知道哪些节点被攻击。

防御者也不知道:

$$
y_t
$$

也就是不知道攻击目标类是什么。

防御者只能拿到一个可能已经被污染的训练图,然后训练防御模型。推理阶段还要面对一个可能也被污染的新图。


2.1.8 图后门防御目标

作者把防御目标写成:

$$
\min_f \sum_{v_i\in V_C} l(f(v_i),y_i) + \sum_{v_j\in V_B} l(f(v_j),y_j)
$$

第一项表示干净节点要分类正确:

$$
\sum_{v_i\in V_C} l(f(v_i),y_i)
$$

第二项表示后门节点也应该恢复到正确状态:

$$
\sum_{v_j\in V_B} l(f(v_j),y_j)
$$

这和很多旧防御不同。旧防御往往只要求:

$$
g(v_t)\neq y_t
$$

也就是被攻击节点不要再预测成攻击目标类。

但 SimGuard 要求更高:

$$
g(v_t)=y_o
$$

其中 $y_o$ 表示攻击前的原始预测结果,或者原本应该属于的语义类别。

核心思想:

不预测成目标类,不代表恢复到了正确类别。


2.1.9 Proposition 2.1

Proposition 2.1 想表达:鲁棒训练方法可以让目标节点不再预测成攻击目标类,但不能保证它恢复到原始类别。

鲁棒训练目标大致为:

$$
\min_f L_f = \sum_{v_i\in V_D} \log f(v_i)_{y_t} + \sum_{v_j\in V_T\setminus V_D} L(f(v_j),y_j)
$$

其中:

  • $V_D$:检测出的疑似 trigger 或后门相关节点;

  • $y_t$:攻击目标类别;

  • $g(v_i)$:节点 $v_i$ 的预测类别。

鲁棒训练最多能做到:

$$
g(v_t)\neq y_t
$$

但不能保证:

$$
g(v_t)=y_o
$$

原因是:防御者不知道这个节点攻击前到底应该是什么类别。所以它可以把节点从目标类拉走,但不知道该把它拉回哪里。


2.2 Contrastive Learning Preliminaries

对比学习的核心思想是:

相似样本拉近,不相似样本推远。

正样本对:

$$
(z_i,z_j)
$$

负样本对:

$$
(z_i,z_k)
$$

InfoNCE 损失为:

$$
L_{\text{contrastive}} = -\frac{1}{N} \sum_{i=1}^{N} \log \frac{ e^{\operatorname{sim}(z_i,z_j)/\tau} }{ \sum_{k=1}^{N} e^{\operatorname{sim}(z_i,z_k)/\tau} }
$$

其中:

$$
e^{\operatorname{sim}(z_i,z_j)/\tau}
$$

表示正样本对的相似度项。

如果正样本越相似:

$$
\operatorname{sim}(z_i,z_j) \uparrow
$$

则分子越大,loss 越小。

分母为:

$$
\sum_{k=1}^{N} e^{\operatorname{sim}(z_i,z_k)/\tau}
$$

它包含很多样本,包括负样本。如果 $z_i$ 和负样本也很像,分母就会变大,loss 也会变大。

所以模型为了让 loss 变小,会学到:

$$
\operatorname{sim}(z_i,z_j) \uparrow
$$

同时:

$$
\operatorname{sim}(z_i,z_k) \downarrow
$$


3. Over-Similarity Phenomenon

第三章的核心问题是:

现有图后门攻击生成的 trigger 到底是不是真的 sample-specific?还是说它们其实有共同模式,可以被检测出来?

作者的结论是:它们并不够 sample-specific,反而具有明显的 over-similarity。


3.1 Over-Similarity in Features

3.1.1 Trigger-Bridge Node

作者没有直接分析整个 trigger 子图,而是先定义了一个更关键的节点:

Trigger-Bridge Nodes,简称 TBN。

它指的是:

直接连接到目标节点的 trigger node。

原因是:在 GNN 里,信息通过 message passing 传播。真正把 trigger 影响传给目标节点的,就是这些和目标节点直接相连的 trigger node。

攻击链路可以理解为:

trigger node → target node → GNN message passing → target prediction 被劫持

3.1.2 特征相似度计算

作者计算 TBN 之间的 pairwise cosine similarity:

$$
C_k = \frac{1}{n-1} \sum_{j=1, j\neq i}^{n} \frac{v_i \cdot v_j}{\|v_i\|\|v_j\|}
$$

其中:

  • $v_i, v_j$:两个 trigger node 的特征向量;

  • $n$:trigger-bridge nodes 的总数;

  • $C_k$:某个 trigger node 和其他 trigger nodes 的平均相似度。

如果 $C_k$ 很高,说明 trigger nodes 彼此非常相似。


3.1.3 主要观察

作者在 GTA、UGBA、DPGBA 上进行分析,发现:

  1. trigger 之间的相似度明显高于 clean nodes 之间的相似度;

  2. GTA 和 DPGBA 中,trigger 几乎 collapse 到同一种特征上;

  3. UGBA 没有完全 feature collapse,但仍存在全局异常相似。

可以概括为:

GTA / DPGBA:trigger 特征几乎坍缩 UGBA:没有完全坍缩,但仍存在全局异常相似

SimGuard 的逻辑链为:

trigger features over-similar → trigger 在特征空间形成异常高密度区域 → 可以用相似性 / 密度聚类 / 异常分数检测 trigger

3.2 Over-Similarity in Structure

3.2 关注 trigger 的结构相似性,尤其是 trigger 的 degree 分布。

作者计算每个 trigger 的度数,然后统计均值和方差:

$$
\text{Mean}
$$

$$
\text{Var}
$$

如果所有 trigger node 的 degree 都一样,那么:

$$
\text{Var}=0
$$

这说明 trigger 在结构上高度一致。

Table 1 的主要结果:

GTA: Cora: Mean = 1.0, Var = 0.0 CiteSeer: Mean = 1.0, Var = 0.0 PubMed: Mean = 1.0, Var = 0.0 ​ DPGBA: Cora: Mean = 3.0, Var = 0.0 CiteSeer: Mean = 3.0, Var = 0.0 PubMed: Mean = 3.0, Var = 0.0 ​ UGBA: Cora: Mean = 2.7, Var = 0.45 CiteSeer: Mean = 3.0, Var = 0.0 PubMed: Mean = 1.0, Var = 0.0

结论:现有 graph backdoor attacks 不仅在特征上过相似,在结构上也过相似。


4. Defense Method

SimGuard 的基本策略是:

在消息传播前识别 trigger ↓ 删除 trigger ↓ 训练 trigger detector ↓ 推理阶段遇到新图,也能检测并删除 trigger

4.1 Identify Triggers

检测要在 message passing 之前做。原因是:一旦开始 GNN 聚合,trigger 特征会和目标节点、邻居节点特征混在一起。

4.1.1 DBSCAN 聚类

$$
C = \operatorname{DBSCAN}(F,\epsilon,\operatorname{minPts})
$$

其中:

  • $F$:节点原始特征;

  • $\epsilon$:DBSCAN 的邻域半径;

  • $\operatorname{minPts}$:形成一个簇所需要的最小点数。

DBSCAN 得到多个簇:

$$
C=\{C_1,C_2,\dots,C_K\}
$$


4.1.2 结构方差辅助判断

对每个 cluster 计算节点度数均值和方差:

$$
\mu(C_i)=\frac{1}{|C_i|}\sum_{u\in C_i}d(u)
$$

$$
\sigma^2(C_i)=\frac{1}{|C_i|}\sum_{u\in C_i}(d(u)-\mu(C_i))^2
$$

如果一个簇里所有节点度数几乎一样:

$$
\sigma^2(C_i) \approx 0
$$

则这个簇可能是 trigger cluster:

$$
\{C_i \mid \sigma^2(C_i)<\delta\}
$$

其中 $\delta$ 是一个很小的阈值,例如:

$$
\delta=0.001
$$


4.1.3 Global Anomaly Score

UGBA 没有完全 feature collapse,因此作者设计了 global anomaly score:

$$
G(x)= \frac{1}{m} \sum_{i=1}^{m} \frac{\|x-y_i\|_1}{\|x\|_1+\|y_i\|_1}
$$

其中:

  • $x$:待检测节点;

  • $y_i$:选出来的 clean nodes;

  • $m$:clean nodes 的数量;

  • $G(x)$:节点 $x$ 的 global anomaly score。

然后将所有节点的 $G(x)$ 从大到小排序,得到:

$$
G_{\operatorname{sorted}}
$$

找排序后相邻分数差距最大的地方:

$$
k=\arg\max_j \left( G_{\operatorname{sorted}}(j) - G_{\operatorname{sorted}}(j+1) \right)
$$

最后取前面异常分数最高的一批节点作为 trigger:

$$
S=\{\pi(i)\mid 0\leq i\leq k\}
$$

其中 $\pi(i)$ 表示排序后索引映射回原始节点索引。

这个过程可以理解为:

异常分数排序 ↓ 找最大断崖 ↓ 断崖之前的节点认为是 trigger

4.2 Training a Trigger Detector Based on Contrastive Learning

4.1 是训练阶段检测 trigger,但推理阶段会遇到新的 unseen graph:

$$
G_U
$$

所以 SimGuard 需要训练一个 trigger detector,使其能泛化到新图。


4.2.1 Proposition 4.1

如果 trigger generation 足够强,攻击者总能通过加边或加 trigger,让目标节点预测成攻击目标类:

$$
f_u(G')=y_t
$$

这说明推理阶段也必须防御,不能只清理训练图。


4.2.1 Subset of Normal Nodes

训练 trigger detector 需要两类样本:

trigger nodes clean nodes

trigger nodes 可以通过 4.1 的检测方法找出来。clean nodes 则通过 autoencoder 的重构误差选出。

Autoencoder 重构损失为:

$$
L_{\operatorname{recon}}(v_i) = \left\| X_i - f_{\operatorname{decoder}} \left( f_{\operatorname{encoder}}(X_i) \right) \right\|_1
$$

选择高置信 clean nodes:

$$
O=\{v_i\mid L_{\operatorname{recon}}(v_i)<\delta\}
$$


4.2.2 Train a Trigger Detection

作者使用对比学习训练 trigger detector。

目标是:

clean nodes 彼此靠近 trigger nodes 彼此靠近 clean nodes 和 trigger nodes 彼此远离

每轮训练采样 $m$ 个 clean nodes,其中 $m$ 等于检测出来的 trigger 数量。

clean-clean 相似项

$$
u_i= \frac{1}{m-1} \sum_{j=1,j\neq i}^{m} e^{z_i^+\cdot z_j^+/\tau}
$$

trigger-trigger 相似项

$$
v_i= \frac{1}{m-1} \sum_{j=1,j\neq i}^{m} e^{z_i^-\cdot z_j^-/\tau}
$$

clean-trigger 相似项

$$
q_i= \frac{1}{m} \sum_{j=1}^{m} e^{z_i^+\cdot z_j^-/\tau}
$$

其中:

  • $z_i^+$:clean node 的归一化表示;

  • $z_i^-$:trigger node 的归一化表示;

  • $\tau$:temperature parameter。

整体 contrastive loss 为:

$$
L= -\frac{1}{m} \left( \sum_{i=1}^{m} \log\frac{u_i}{q_i} + \sum_{i=1}^{m} \log\frac{v_i}{q_i} \right)
$$

最终效果:

clean nodes 聚成一类 trigger nodes 聚成一类 两类之间拉开距离