Co-occurring Associated REtained concepts in Diffusion Unlearning¶
会议: ICLR 2026
OpenReview: https://openreview.net/forum?id=Ryc7jKP6H9
代码: https://github.com/damilab/CARE
领域: 扩散模型 / 概念遗忘 / AI 安全
关键词: 扩散遗忘, 概念擦除, 共现概念保留, CARE score, 解纠缠
一句话总结¶
扩散模型在擦除有害概念(如裸露)时,往往把和它共现的良性概念(如"人")一起抹掉;本文定义了这类必须保留的共现概念 CARE 并提出 CARE score 量化指标,再用 ReCARE 框架从目标图像自动构建一份"良性共现词表"(CARE-set)来同时引导保留与擦除,在裸露 / 梵高风格 / 丁鱥三个任务上同时拿到鲁棒性、可用性和 CARE 保留的整体最优。
研究背景与动机¶
领域现状:扩散模型的概念遗忘(unlearning)目前主流是 post-hoc 擦除——冻结一个教师模型 \(\theta^*\),把目标概念 \(c\) 的语义方向定义为条件预测与无条件预测之差 \(\epsilon_{\theta^*}(z_t\mid c)-\epsilon_{\theta^*}(z_t\mid\varnothing)\),再训练学生模型沿这个方向的反向更新,从而"忘掉"目标。为了不把别的东西也忘了,近期方法(AdvUnlearn、AGE)引入 anchor(来自 ImageNet 标签、LLM 生成提示词或外部词典的非目标概念)做保留约束。
现有痛点:作者发现 anchor 类方法存在一个被忽视的致命弱点——和擦除目标天然共现的良性概念会被一起压制。擦"裸露"时,"人"这个概念也跟着被抹掉,于是给 "A nude person" 甚至单独 "A person" 提示词,模型都生不出人来(Fig.1)。同理擦"梵高"会抹掉"星空",擦"丁鱥"会抹掉"淡水"。根因在于 CLIP 把共现概念编码到重叠的嵌入区域,纠缠很强;而外部 anchor 词表要么只覆盖泛泛的通用概念、要么词表质量有限,根本接不住这些细粒度的共现词。
核心矛盾:擦除的语义方向不可避免地会"溢出"到与目标强纠缠的良性共现词上,而常用的可用性指标(FID、CLIP score)只衡量全局保真度和提示词语义相似度,完全测不出某个具体良性概念是否还在——所以一个 FID/CLIP 很高的模型,仍可能已经丢掉了"人"。
本文目标:(1) 把这类"必须小心保留的共现概念"形式化为 CARE(Co-occurring Associated REtained concepts);(2) 造一个能在规模上自动测 CARE 是否保留的指标;(3) 设计一个在擦除目标的同时显式守护 CARE 的训练框架。
切入角度:既然这些良性共现词本来就出现在目标图像里,那就直接从目标图像本身抽取共现词、过滤掉其中真正有害或无关的,剩下的就是该保留的 CARE 词表——不依赖外部 anchor,词表天然贴合真实共现分布。
核心 idea:从目标图像自动构建一份精炼后的良性共现词表 CARE-set,让它同时作为"保留信号"和"擦除时的对齐参照"注入训练目标,从而把"擦目标"和"保 benign"解纠缠。
CARE score 怎么定义:用 CLIP R-Precision@1 来测某个 CARE 概念是否还能被生成。对每个目标选一个 CARE 概念 \(w^\star\)(如裸露对应 "person"),和 80 个来自 COCO 物体标签的无关 token \(O\) 放一起,用含 \(w^\star\) 的提示词生成图像 \(x_s=G(c_{w^\star})\),看 \(w^\star\) 是否在所有候选里 CLIP 相似度排第一:
它和人工标注的"图里有没有这个概念"强相关(Pearson \(r=0.905\)),且对编码器不敏感(把 CLIP 换成 SigLIP 排序基本不变),是独立于鲁棒性、可用性之外的第三根评测轴。
方法详解¶
整体框架¶
ReCARE(Robust erasure for CARE)的核心是"先造词表、再用词表训练"两段式。给定一个目标概念(如裸露)和它的一批目标图像,ReCARE 先用 CLIP 从图像里抽出一堆共现候选词,这堆词里混着三类东西:目标本身、应该一起擦的有害共现词(如 naked、topless)、应该保留的良性共现词(如 person、woman);接着通过两道过滤——全局聚类剔掉"离目标最近"和"离目标最远"两端的簇,簇内精炼再剔掉簇内残留的、仍隐性贴近目标的词——得到精炼后的 CARE-set \(D\)。最后把 \(D\) 注入训练:一边用 Retain Loss 锁住 CARE-set 上的知识不被擦掉,一边用 Erase Loss 把有害 token 从 CARE 表示里推开、对齐到"CARE 减去擦除方向"的参照上,实现"只擦目标、保住良性共现"。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["目标图像集 I<br/>(如裸露)"] --> B["抽取共现候选词<br/>CLIP TopK → TopN 频率"]
B --> C["全局聚类<br/>剔除离目标最近/最远的簇"]
C --> D["簇内精炼<br/>剔除残留贴近目标的隐性有害词"]
D --> E["CARE-set D<br/>(良性共现词表)"]
E --> F["双损失训练<br/>Retain 保 CARE + Erase 解纠缠擦除"]
F --> G["遗忘后模型<br/>擦目标·保 benign"]
关键设计¶
1. 全局聚类:用正交残差剔除"太像目标"和"完全无关"的两端簇
候选词 \(T\) 是从目标图像里抽的——对每张图算 CLIP 相似度取 Top-K token,跨图聚合后取频率 Top-N(式 5)。这堆词必然混入两种该剔除的:和目标过于相似的有害词(擦裸露时的 naked),以及语义无关的噪声词(scarlett 这种和 CARE 无关的人名)。本设计要解决的就是"怎么自动把这两端切掉"。做法是先把候选词嵌入用 t-SNE 投到 2D、k-means 聚成 \(n\) 个簇,再用一个正交残差度量每个词离目标的远近:设目标文本嵌入为 \(e_c\),token 嵌入为 \(e_t\),定义 \(r(e_t)=\lVert e_t(I-e_c e_c^\top)\rVert_2\)。直觉上 \(r\) 小说明这个词的方向几乎和目标重合(太像,多半有害),\(r\) 大说明它和目标几乎正交(太远,多半无关),中间区间才是潜在 CARE。于是对每个簇算平均残差 \(\bar r_k\),把残差最小的簇 \(k^-=\arg\min_k\bar r_k\) 和残差最大的簇 \(k^+=\arg\max_k\bar r_k\) 整簇丢掉,剩下的作为候选 \(C_{\text{cand}}=\{C_k\mid k\notin\{k^-,k^+\}\}\)。相比直接拿外部 anchor 词表,这一步让保留信号来自真实共现分布,且用一个简单的几何量就把两端噪声一刀切。
2. 簇内精炼:剔除残留下来、仍隐性贴近目标的词
全局聚类是"整簇"粒度的,但保留下来的簇里仍可能混着一些"没那么露骨却依旧偏向目标"的词——比如 stripped、body,它们没 naked 那么直白,全局步骤滤不掉,可放进 CARE-set 又会拖累擦除。本设计在簇内做更细的逐词过滤:对簇 \(C_k\) 里每个 token \(t_i^{(k)}\),先算"把它去掉之后"该簇的留一质心 \(e_{-i}^{(k)}=\frac{1}{|C_k|-1}\sum_{j\ne i}e_{t_j^{(k)}}\),再用一个二值指示器决定是否保留:
其中 \(\alpha>0\) 控制剪枝严格程度(⚠️ 该不等式以原文式 9 为准)。直觉是:仍然过度对齐目标的 token,对所在簇的"概念正交分量"贡献很小,因而会被剪掉;剩下的词才是真正良性的共现概念,汇总成最终 CARE-set \(D=\bigcup_k\{t_i^{(k)}\mid\delta_i^{(k)}=1\}\)。这一步把保留信号从"簇级别"细化到"词级别",是后面擦除还能保住 CARE 的关键。
3. 双损失训练:让 CARE-set 同时驱动"保留"与"擦除"
有了 \(D\),总目标是 \(L_{\text{ReCARE}}=\lambda L_{\text{Retain}}+L_{\text{Erase}}\),\(\lambda\) 调节鲁棒擦除与 CARE 保留的权衡。Retain Loss 直接锁住 CARE:用通用模板("A photo of …")把 \(D\) 里的 token 拼成保留提示词 \(E\),约束遗忘后模型 \(\theta_i\) 在这些非目标概念上和原模型 \(\theta^*\) 的噪声预测一致,
Erase Loss 则用 \(D\) 把有害 token 从 CARE 表示里解纠缠出来。它先借 STEREO 的文本反演(STE)反复求出能在部分擦除后仍重建目标的最优嵌入序列 \(v_1^*,v_2^*\),与显式目标词(如 "nudity")一起求平均得到擦除方向 \(\epsilon_{\text{erase}}\);再用"原模型在 \(D\) 上的 CARE 表示减去擦除方向"作为对齐参照,训练 \(\theta_i\) 让有害 token 集合 \(H=\{v_1^*,v_2^*,\text{"nudity"}\}\) 的预测去匹配这个参照:
这样设计的巧处在于:擦除方向不是孤立地把目标推向无条件输出,而是以 CARE 表示为锚——把有害方向从 CARE 里"减"出去,强迫模型在抹掉目标的同时把表示拉回到良性共现概念上,从而避免了 anchor 类方法那种"擦目标顺手抹掉 benign"的溢出。
损失函数 / 训练策略¶
总损失 \(L_{\text{ReCARE}}=\lambda L_{\text{Retain}}+L_{\text{Erase}}\)。CARE-set 构建端到端仅约 1.78 分钟(CLIP 相似度 → 聚类 → 精炼);训练含文本反演 23.23 分钟 + ReCARE 优化 5.10 分钟,合计约 28.33 分钟,峰值显存 24GB(H100)。全局聚类默认簇数 \(n=6\)。
实验关键数据¶
评测三根轴:鲁棒性用攻击成功率 ASR(越低越好,雷达图里报 Defense \(=100\%-\text{ASR}\));可用性用 COCO-30K 上的 FID(低好)与 CLIP Score(高好);CARE 保留用 CARE score。综合指标 RATIO = 三轴张成的雷达图归一化面积,越大越好。攻击含 UnlearnDiff(UD)、Ring-A-Bell、CCE 三种,对比 11 个遗忘基线。
主实验¶
裸露 / 梵高 / 丁鱥三任务下 ReCARE 的 RATIO 均为最高(裸露 0.76、梵高 0.81、丁鱥 0.85)。下表摘取裸露任务的代表性对比(CCE 是最强攻击):
| 方法 | CCE-ASR ↓ | CLIP ↑ | FID ↓ | CAREscore ↑ | RATIO ↑ |
|---|---|---|---|---|---|
| SD v1.4(原模型,未擦) | 56.82 | 0.3136 | 14.12 | 0.97 | 0.56 |
| ESD | 53.41 | 0.3045 | 13.75 | 0.89 | 0.49 |
| AGE | 27.27 | 0.3006 | — | 0.56 | — |
| AdvUnlearn | 65.45 | 0.2925 | — | 0.36 | — |
| STEREO | 19.55 | 0.2907 | 17.83 | 0.11 | 0.21 |
| ReCARE (Ours) | 11.14 | 0.3053 | 13.85 | 0.94 | 0.76 |
关键对照:STEREO 靠文本反演拿到不错的鲁棒性(CCE 19.55),但 CARE score 只有 0.11、FID 也崩到 17.83——擦得动却把良性概念和画质一起牺牲了;AdvUnlearn 可用性尚可却既不鲁棒(CCE 65.45)也保不住 CARE(0.36)。ReCARE 是唯一同时把 CCE 压到最低(11.14)、CARE 拉到接近原模型(0.94 vs 原模型 0.97)的方法。
消融实验¶
CARE-set 两道精炼各自的贡献(裸露任务):
| 配置 | CCE-ASR ↓ | CLIP ↑ | CAREscore ↑ | 说明 |
|---|---|---|---|---|
| ReCARE (Full) | 11.14 | 0.3053 | 0.94 | 完整两道精炼 |
| w/o Intra | 16.36 | 0.3082 | 0.93 | 去簇内精炼,残留隐性有害词 → ASR 升 |
| w/o Global | 25.00 | 0.3039 | 0.90 | 去全局聚类,混入无关词 → CARE 降、ASR 升 |
| w/o refinement | 27.05 | 0.3056 | 0.88 | 完全不精炼,CARE 最低、ASR 最高 |
效率对比(裸露):ReCARE 仅 0.50h,CCE 11.14、CARE 0.94;而 AdvUnlearn 要 21.80h,效果还更差(CCE 65.45、CARE 0.36)。
关键发现¶
- 全局聚类比簇内精炼更关键:去掉全局聚类 CCE 从 11.14 升到 25.00、CARE 从 0.94 降到 0.90;去掉簇内精炼影响相对小(CCE 16.36、CARE 0.93)。两道一起用才达到鲁棒-保留的最佳平衡。
- CARE score 对编码器不敏感:把评测用的 CLIP 换成 SigLIP,各方法绝对值变了但相对排序基本不变(强保留的 SD v1.4 / ReCARE 依旧靠前,弱的 AdvUnlearn 依旧垫底),说明指标不绑定 CLIP 表示空间。
- 簇数 \(n\) 不敏感:\(n=4,5,6\) 下擦除能力和 CARE 保留都稳定,\(n=6\) 综合最佳,设为默认。
- STEREO 在 person 上的低分有额外含义:它生成的人形虽存在却严重退化、几乎认不出,CARE score 因此偏低——说明该指标不只测"有没有",还反映了画质退化,是更严格的度量。
亮点与洞察¶
- 把"共现概念被误擦"这个被忽视的失败模式形式化:CARE 这个定义本身就是贡献——以前大家只盯着"擦得干不干净"和"FID 好不好",没人测"擦裸露后还生不生得出人"。指出问题往往比解决问题更难,这篇先把问题说清楚了。
- CARE score 用 R-Precision@1 巧妙绕开"全局指标测不出局部概念"的盲区:把目标 CARE 词和 80 个无关 COCO token 放一起做 top-1 检索,直接验证"这个具体概念在不在",且和人工标注 \(r=0.905\),是个又简单又可信的新评测轴。
- 从目标图像自取词表,而非依赖外部 anchor:保留信号天然贴合真实共现分布,避开了 ImageNet/LLM anchor"只覆盖通用概念、词表质量有限"的老问题,这个思路可迁移到任何"擦 A 时怕误伤与 A 强纠缠的 B"的编辑任务。
- Erase Loss 以 CARE 表示为锚做解纠缠:把擦除从"推向无条件输出"改成"从 CARE 表示里减掉有害方向",让擦除和保留在同一个目标里耦合优化,这是它能同时拿下鲁棒性和 CARE 的根本原因。
局限与展望¶
- 依赖目标图像与文本反演:CARE-set 来自目标图像,且 Erase Loss 复用 STEREO 的文本反演求擦除方向,目标图像质量/数量和反演稳定性会影响词表与擦除方向;训练中文本反演占了大头时间(23.23 min / 28.33 min)。
- CARE 概念的选取仍带人工:CARE score 评测时每个目标"选一个" CARE 概念(裸露选 person),如何系统化地为复杂目标确定该保留哪些 benign 概念、是否会漏掉次要共现概念,文中未充分展开。
- 正交残差 + t-SNE/k-means 的几何假设较强:用 \(r(e_t)=\lVert e_t(I-e_ce_c^\top)\rVert\) 把"远近"压成一个标量、再剔两端簇,对那些"既不极近也不极远却仍该剔"的边界词,主要靠簇内精炼的阈值 \(\alpha\) 兜底;t-SNE 投影的随机性对结果的影响也未深入分析。
- 任务范围:实验集中在裸露 / 梵高风格 / 丁鱥三类代表性目标与 SD v1.4,尚未验证更大规模、多目标同时擦除或更新架构上的表现。
相关工作与启发¶
- vs AGE / AdvUnlearn(anchor 类保留):它们从 ImageNet 标签、LLM 生成提示词或外部词典取 anchor 做保留,覆盖的是泛泛的非目标概念,接不住和目标强纠缠的细粒度共现词;ReCARE 直接从目标图像自建并精炼词表,针对性地守护 CARE,因此在保 benign 上明显更强(裸露 CARE 0.94 vs AGE 0.56 / AdvUnlearn 0.36)。
- vs STEREO(文本反演求擦除方向):ReCARE 复用了它的文本反演来求擦除方向,但 STEREO 只顾把目标擦干净,导致可用性和 CARE 双双崩塌(CARE 仅 0.11);ReCARE 把擦除方向锚到 CARE 表示上做解纠缠,在保住鲁棒性的同时把 CARE 拉回接近原模型水平。
- vs ESD(post-hoc 擦除基线):ESD 把目标预测推向无条件输出,没有任何对良性共现概念的显式保护;ReCARE 在同一 post-hoc 框架内补上了 CARE-set 驱动的双损失,是对这条主线的"保留侧"补全。
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ 首次形式化"共现良性概念被误擦"问题,并配套了指标(CARE score)+方法(ReCARE)两件套,问题定义本身就有价值
- 实验充分度: ⭐⭐⭐⭐ 三任务、11 基线、三种攻击、含编码器无关性与簇数敏感性消融,较完整;但目标种类和架构覆盖仍有限
- 写作质量: ⭐⭐⭐⭐ 动机用 Fig.1 一图点醒,方法两段式清晰;部分公式(簇内剪枝不等式)需对照原文确认
- 价值: ⭐⭐⭐⭐⭐ 给扩散遗忘补上了"保住良性共现概念"这一被忽视却实际关键的维度,指标与方法都易复用