扩散模型对抗样本经典baselines
baselines:
AdvDM(+) [30] [ICML23]
AdvDM(-) [59] [ICLR24]
PhotoGuard [40] [Arxiv23]
Mist [29] [Arxiv23]
SDS(+) [59] [ICLR24]
SDS(-) [59] [ICLR24]
SDTS(-) [59] [ICLR24]
Adversarial Example Does Good - AdvDM(+)
背景
- 传统对抗样本:通常针对分类器,目标是让模型把"猫"认成"狗"。
- 扩散模型:扩散模型不是直接分类,而是先提取特征,再基于特征生成新图像。
- 扩散模型的对抗样本:阻止扩散模型正确提取图像的特征。如果特征提取错了,生成的图像就会崩坏,从而保护原图的版权(风格或内容不被模仿)。
扩散模型的对抗样本
作者将针对扩散模型的对抗样本 \(x'\) 定义为:
\[x' = x + \delta \]
其中 \(x\) 是原图,\(\delta\) 是人眼不可见的微小扰动(满足 \(\|\delta\| \le \epsilon\))。
优化目标 :
我们要找到一个 \(\delta\),使得扩散模型认为 \(x'\) 是"真实数据"的概率 \(p_\theta(x')\) 最小化。
\[\delta := \arg \min_{\delta} p_\theta(x + \delta) \]
直观理解:让这张加了扰动的图,在扩散模型眼里变得"极其不自然"、"不可能由该模型生成"。
难点 :然而,在扩散模型中,\(p_{\theta}\)实际上是无法计算的。借助潜变量\(p_{\theta}(x)\),我们可以通过蒙特卡洛方法估计\(p_{\theta}(x+\delta)\)。为此,我们展开(涉及所有时间步的潜变量 \(x_{1:T}\)),无法直接计算。
\[p_\theta(x) = \int p_\theta(x_{0:T}) dx_{1:T} \]
我们将对抗样本\(x+\delta\)记为\(x'\),通过在\(x_{1: T}\)的不同采样过程中最小化\(p_{\theta}(x_{0: T})\),我们近似地最小化了\(p_{\theta}(x')\)。
最终优化目标变成了最大化扩散模型的训练损失函数 \(\mathcal{L}_{DM}\) 的期望:
\[\max_{\delta} \mathbb{E}{x'{1:T} \sim u(x'{1:T})} [\mathcal{L}{DM}(x', \theta)] \]
直观理解:如果能让模型在去噪过程中每一步都犯较大的错,那么这张图对模型来说就是"对抗样本"。
AdvDM 算法:基于蒙特卡洛的生成方法
算法公式
第 \(i+1\) 步的对抗样本更新公式为:
\[x^{(i+1)}_0 = x^{(i)}0 + \alpha \cdot \text{sgn}(\nabla{x^{(i)}0} \mathcal{L}{DM}(\theta)) \]
- \(\alpha\):步长。
- \(\text{sgn}\):符号函数(只取梯度方向,限制步长)。
算法流程(附录中的AdvDM具体实现)
- 初始化 \(x^{(0)}_0\) 为原图。
- 循环 \(N\) 次(蒙特卡洛采样次数):
- 从后验分布 \(q(x_{1:T}|x^{(i)}_0)\) 中采样一条噪声轨迹。
- 计算当前轨迹下的损失梯度。
- 更新图像:\(x \leftarrow x + \text{step} \times \text{gradient}\)。
- 裁剪扰动,确保 \(\|x - x_{original}\|_\infty \le \epsilon\)。
- 输出最终的对抗样本 \(x'_0\)。
评估指标
使用生成图像 \(x_g\) 与原图数据集的分布差异来衡量:
- FID (Fréchet Inception Distance):FID 衡量的是两组图像在特征空间中的分布距离。将所有原图和 所有生成图分别通过 Inception-V3,得到两组特征向量集合越高越好(表示生成分布与真实分布差异大,攻击效果好)。
- Precision (精确率):衡量的是生成图像中有多少比例是"高质量"且"逼真"的(即落在真实数据流形内的比例)。超球体的并集,构成了真实数据的流形区域。越低越好(表示生成的图像中,属于真实图像特征的比例低,即模型没能学到真东西)。
- Recall (召回率)
Raising the Cost of Malicious AI-Powered Image Editing (PhotoGuard)
方法一:编码器攻击 (Encoder Attack)
让编码器 \(E\) 把被攻击的图像 \(x+\delta\) 映射后接近到一个特定的、无意义的目标潜向量 \(z_{targ}\)(例如一张全灰图的潜向量)。
\[\delta_{encoder} = \underset{\|\delta\|\infty \leq \epsilon}{\text{arg min}} \| E(x + \delta) - z{targ} \|_2^2 \]
- \(x\): 原始图像。
- \(\delta\): 我们要找的对抗扰动(噪声)。
- \(\|\delta\|_\infty \leq \epsilon\): 约束条件,保证扰动足够小,人眼看不见。
- \(z_{targ}\): 目标潜向量。论文中通常选一张灰色图片的编码值,代表"无信息"。
- \(\| \cdot \|_2^2\): 均方误差 (MSE)。
方法二:扩散攻击 (Diffusion Attack)
无论用户输入什么提示词 \(c\),经过完整的扩散模型 \(f\) 处理后,生成的最终图像 \(\tilde{x}\) 接近一张特定的目标图片 \(x_{targ}\)(例如全灰图或纯噪声图)。
这意味着攻击要同时抵消原图的信息和文本提示词的引导作用。
\[\delta_{diffusion} = \underset{\|\delta\|\infty \leq \epsilon}{\text{arg min}} \| f(x + \delta, c) - x{targ} \|_2^2 \]
-
\(f(x + \delta, c)\): 完整的 LDM 生成函数。输入是带扰动的图和提示词,输出是生成图。
-
难点 :公式中的 \(f\) 包含了整个扩散过程(通常 50-100 步去噪)。如果要计算 \(\nabla_\delta \| f(x) - x_{targ} \|^2\),需要反向传播通过这几十步去噪网络。这会消耗巨大的显存。
-
论文中的 Trick:
- 作者没有反向传播通过完整的 \(T\) 步。
- 他们只反向传播通过部分去噪步骤,但实验证明这样生成的 \(\delta\) 依然能有效破坏整个过程。
Mist: Towards Improved Adversarial Examples for Diffusion Models
SEMANTIC LOSS
让去噪器的预测误差最大
\[\begin{aligned} & \delta:=arg min {\delta} \mathbb{E}{x_{1: T}' \sim u\left(x_{1: T}'\right)} \mathcal{L}_{D M}\left(x', \theta\right), \\ & where x \sim q(x), x'=x+\delta . \end{aligned} \]
\[\mathbb{E}{t, \epsilon \sim \mathcal{N}(0,1)} \mathbb{E}{x_{t}' \sim u\left(x_{t}'\right)}\left[\left\| \epsilon-\epsilon_{\theta}\left(x_{t}', t\right)\right\| _{2}^{2}\right] \]
其中,期望通过蒙特卡洛方法估计。直观地说,这种损失试图将图像x的表示从扩散模型的语义空间中拉出来。我们的经验观察表明,这种损失的最大化会导致基于对抗样本生成的图像中出现混乱内容。因此,我们将这种损失称为语义损失。
TEXTUAL LOSS
把图在潜空间中的表示"推"向一个错误的方向
\[\begin{aligned} \delta: & =arg min {\delta} \mathcal{L}{\mathcal{E}}(x, \delta, y) \\ & =arg min _{\delta}\| \mathcal{E}(y)-\mathcal{E}(x+\delta)\| _{2}, \end{aligned} \]
其中,ε表示潜在扩散模型的图像编码器,x代表输入图像,y是给定的目标图像。为了优化这一损失,我们采用了投影梯度下降(PGD)攻击。由此产生的扰动具有类似于背景上嵌入水印的特征。因此,我们将这种损失称为纹理损失。
JOINT LOSS
\[\begin{gathered} \delta:=arg max {\delta}\left(w \mathbb{E}{x_{1: T}' \sim u\left(x_{1: T}'\right)} \mathcal{L}{D M}\left(x', \theta\right)-\mathcal{L}{\mathcal{E}}(x, \delta, y)\right), \\ where x \sim q(x), x'=x+\delta . \end{gathered} \]
\[\begin{array} {c}\mathbb {E}{t,\epsilon \sim \mathcal {N}(0,1)}\mathbb {E}{x_{t}^{\prime }\sim u\left(x_{t}^{\prime }\right) }\left[ w\left\| \epsilon -\epsilon {\theta }\left( x{t}', t\right) \| _{2}^{2}\right. \right. \\ \left.-\| \mathcal {E}(y)-\mathcal {E}(x+\delta )\| _{2}\right] \end{array} \]
通过分数蒸馏有效防范基于扩散模型的模仿攻击 (AdvDM- SDS+-)
TOWARD EFFECTIVE PROTECTION AGAINST DIFFUSION BASED MIMICRY THROUGH SCORE DISTILLATION
在防范基于扩散的模仿攻击时,我们应关注哪些方面?(a)为潜在扩散模型(LDMs)生成对抗样本的成本很高,需要对去噪器\(\epsilon_{\theta}\)进行100多步反向传播。与攻击编码器时的强梯度相比,去噪器的梯度往往非常微弱且不稳定,这表明\(\epsilon_{\theta}\)比编码器\(E_{\phi}\)稳健得多。(b)经过投影梯度下降(PGD)迭代后,潜在2空间的扰动比x空间大得多,这表明\(E_{\phi}\)是攻击有效的原因所在。(c、d)我们提出的设计空间,在应对三种模仿攻击时具有更高的效率和灵活性。
现有的防御方法损失函数
现有的防御方法(如 AdvDM, PhotoGuard, Mist)主要通过优化以下两种损失函数来生成对抗样本(即给原图加扰动),目的是让扩散模型生成的结果崩坏或偏离原意。
(1) 语义损失 (Semantic Loss, \(\mathcal{L}_S\))
针对模块 :去噪器 (Denoiser, \(\epsilon_\theta\)) 。
\[\mathcal{L}S(x) = \mathbb{E}{t, \epsilon} \mathbb{E}{z_t \sim q_t(E\phi(x))} \| \epsilon_\theta(z_t, t) - \epsilon \|_2^2 \]
LDM 训练时的标准损失函数(预测噪声与真实噪声的均方误差)防御者一般希望最大化这个损失。通过投影梯度上升 (PGD),寻找一个扰动 \(\delta\),使得加扰后的图像 \(x_{adv}\) 在经过编码和加噪后,让去噪器的预测误差最大。
(2) 纹理损失 (Textural Loss, \(\mathcal{L}_T\))
针对模块 :编码器 (Encoder, \(E_\phi\))。
\[\mathcal{L}T(x) = - \| E\phi(x) - E_\phi(y) \|_2^2 \]
把图在潜空间中的表示"推"向一个错误的方向(目标 \(y\) 的方向)。当扩散模型基于这个被篡改的潜变量进行生成时,生成的图像会带有目标图像 \(y\) 的特征(例如奇怪的纹理、特定的风格),从而破坏原图的真实性或版权风格。
(3) 组合损失 (Combined Loss)
同时使用 \(\mathcal{L}_S\) 和 \(\mathcal{L}_T\)。
$$ \mathcal{L}_{adv} = \mathcal{L}_S + \lambda \mathcal{L}_T $$
优化过程:投影梯度上升 (PGD)
无论使用哪种 Loss,生成对抗样本的过程都是通过迭代优化完成的。文中给出了通用的更新公式:
\[x^{t+1} = \mathcal{P}{B\infty(x, \delta)} [ x^t + \eta \cdot \text{sign}(\nabla_{x^t} \mathcal{L}_{adv}(x^t)) ] \]
- \(\nabla_{x^t} \mathcal{L}_{adv}\) :计算损失函数对输入图像 \(x\) 的梯度。
- \(\text{sign}(...)\):取梯度符号,只关心扰动方向。
- \(\eta\):步长。
- \(\mathcal{P}{B\infty}\) :投影操作,确保扰动后的图像 \(x^{t+1}\) 与原图 \(x\) 的差异不超过预设的预算 \(\delta\)(保证人眼不可见,通常使用 \(\ell_\infty\) 范数)。
- 方向:因为是攻击,所以是 Gradient Ascent (梯度上升),即沿着让 Loss 变大的方向走。
基于分数蒸馏的更快语义损失
语义损失\(L_{S}\)被定义为每个时间步长噪声估计误差的期望值。然而,在审视公式1和公式4时,一个显著的挑战显而易见:项\(\nabla_{x} L_{S}(x)\)的计算被证明是计算密集型的,特别是当我们需要为更新过程执行100多次迭代时。另一个问题是大量的GPU内存使用,这给个人用户带来了沉重负担。为了解决这些问题,我们采用了一种近似方法
\[\nabla_{x} \mathcal{L}{S}(x)=\mathbb{E}{t, \epsilon} \mathbb{E}{z{t}}\left[\lambda(t)\left(\epsilon_{\theta}\left(z_{t}, t\right)-\epsilon\right) \frac{\partial \epsilon_{\theta}\left(z_{t}, t\right)}{\partial z_{t}} \frac{\partial z_{t}}{\partial x_{t}}\right] \approx \mathbb{E}{t, \epsilon} \mathbb{E}{z_{t}}\left[\lambda(t)\left(\epsilon_{\theta}\left(z_{t}, t\right)-\epsilon\right) \frac{\partial z_{t}}{\partial x_{t}}\right] \]
DreamFusion通过使用预训练的二维文本到图像扩散模型来实现文本到三维的综合,寻找一组 3D 场景参数 𝜃(NeRF 的网络权重),使得由该参数渲染出的任意 2D 图像 x ,在预训练的扩散模型看来,都符合文本提示 𝑦。
在传统的扩散模型训练中,我们最小化预测噪声 \(\hat{\epsilon}\) 和真实噪声 \(\epsilon\) 之间的均方误差:
\[\mathcal{L}{diff} = \| \hat{\epsilon}\phi(z_t, t, y) - \epsilon \|_2^2 \]
如果我们想把这个 Loss 用到 3D 生成上(即优化 NeRF 的参数 \(\theta\),使得渲染出的图像 \(x=g(\theta)\) 符合文本 \(y\)),我们需要计算梯度 \(\nabla_\theta \mathcal{L}_{diff}\)。根据链式法则:
\[\nabla_\theta \mathcal{L}{diff} = \underbrace{(\hat{\epsilon} - \epsilon)}{\text{噪声残差}} \cdot \underbrace{\frac{\partial \hat{\epsilon}}{\partial z_t}}{\text{U-Net 雅可比矩阵}} \cdot \underbrace{\frac{\partial z_t}{\partial x}}{\text{常数}} \cdot \underbrace{\frac{\partial x}{\partial \theta}}_{\text{渲染器/NeRF 梯度}} \]
这里有两个致命问题:
- 计算代价极高:\(\frac{\partial \hat{\epsilon}}{\partial z_t}\) 需要对庞大的 U-Net 进行反向传播。U-Net 参数量巨大,每次迭代都反向传播一次极其缓慢且显存爆炸。
- 梯度质量差:在低噪声水平下,U-Net 的雅可比矩阵条件数很差(ill-conditioned),导致梯度不稳定,难以收敛到好的结果。
DreamFusion 的洞察:
作者发现,直接去掉中间那个昂贵的 U-Net 雅可比矩阵 (\(\frac{\partial \hat{\epsilon}}{\partial z_t}\)),仅仅保留 噪声残差 (\(\hat{\epsilon} - \epsilon\)) 作为指导信号,不仅计算快,而且效果好。
基于语义损失的梯度下降提供良好保护
具体来说,我们通过梯度下降来反转优化目标\(L_{S}\),也就是最小化语义损失。
我们展示了与梯度上升(GA)相比,对语义损失应用梯度下降(GD)的效果。我们观察到:
- 与GA相比,使用GD生成的扰动呈现出更自然、更和谐的外观。梯度下降的优化过程与原始图像的底层结构紧密契合。
- 基于GD的保护措施往往通过模糊处理更好地消除编辑图像中的信息,而基于遗传算法GA的保护措施则试图引入更多混沌模式。
为什么GD会变模糊
清晰图像拥有丰富的高频分量(锐利的边缘、纹理、毛发细节)。这些高频分量通常对应着概率分布中方差较大或特定模式的区域。
为了最小化全局误差,模型倾向于优先重建低频结构(大概的轮廓、颜色块),因为这对降低 𝐿 误差贡献最大且最稳定。高频细节往往是"特异"的,容易增加局部误差。因此这种优化倾向于增强图像中的低频分量(整体结构和颜色),而抑制高频分量(细节)。结果就是生成的图像变得模糊,因为高频信息被削弱了。
那我从0训练一个SD1.5的时候为什么不是越训练越模糊
虽然训练时确实在最小化 MSE(求平均),但扩散模型通过两个核心机制避免了最终结果的模糊:
条件输入(Conditioning):把"求全局平均"变成了"求局部平均"。
随机采样(Stochastic Sampling):在每一步去噪后,DDPM 或 DDIM 等采样器都会主动注入高斯噪声。利用噪声把正在走向"模糊平均值"的图片,推离了中心。
DDPM采样
步骤 伪代码 含义 1 \(\mathbf{x}_T \sim \mathcal{N}(\mathbf{0}, \mathbf{I})\) 从标准高斯分布采样纯噪声 2 for \(t = T, \ldots, 1\) 从T到1逐步去噪 3 \(\mathbf{z} \sim \mathcal{N}(\mathbf{0}, \mathbf{I})\) if \(t > 1\), else \(\mathbf{z} = 0\) 添加随机噪声(最后一步不加) 4 \(\mathbf{x}_{t-1} = \frac{1}{\sqrt{\alpha_t}}\left(\mathbf{x}_t - \frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}t}}\boldsymbol{\epsilon}\theta(\mathbf{x}_t, t)\right) + \sigma_t \mathbf{z}\) 核心去噪步骤 5 end for 6 return \(\mathbf{x}_0\) 输出生成的图像
结合我们在上一节中介绍的SDS加速方法,我们提出了一些新颖的保护策略,分别命名为SDS(+)、SDS(-)和SDST。其中,SDS表示应用了分数蒸馏采样,(+)和(-)指的是两种关于语义损失的策略(下降和上升),而SDST则表示还使用了文本损失。每种方法的更详细描述见附录中的表3。
| Methods | Component | Perturbation | Consumption | SDEdit | Inpainting | Textual Inversion |
|---|---|---|---|---|---|---|
| 方法 | 组件 | 扰动 | 代价 | SDEdit | 图像修复 | 文本反演 |
| AdvDM | L S + GA | * | * | ** | ** | *** |
| Mist | L S + GA + L T | ** | * | ** | ** | ** |
| PhotoGuard | L T | ** | *** | * | ** | ** |
| AdvDM(-) | L S + GD | *** | * | ** | ** | * |
| SDS(+) | L S + GA+ SDS | * | *** | ** | ** | *** |
| SDS(-) | L S + GD + SDS | *** | *** | *** | ** | * |
| SDST | L S + GD + SDS + L T | *** | ** | ** | ** | *** |
表3:我们设计空间中所有保护方法的总结:我们总结了目前所有的保护方法,这些方法都可以组合成我们提出的设计空间中的某些组件。前三行包括先前研究中提出的方法,左起四行包括本文首次提出的新保护方法,其中新策略SDS和GD用红色标记。我们从扰动质量(是否自然)、计算消耗以及它们在SDEdit、图像修复和文本反演上的性能这几个角度展示了所有这些方法的优势。我们用星号对它们进行大致评估,星号越多表示性能越好(例如,扰动更自然、消耗更少、保护效果更好)。
测试任务 原理 输入 成功的标志 (防御有效) SDEdit 加噪 -> 去噪 (部分重绘) 原图 vs 对抗图 + 文本提示 对抗图的编辑结果崩坏、模糊或不符合提示词。 Inpainting 掩码 -> 填充 原图 vs 对抗图 + 掩码 + 文本 对抗图的填充区域不连贯、有伪影或语义错误。 Textual Inversion 微调训练 -> 新场景生成 原图集 vs 对抗图集 + 特殊令牌 微调后的模型无法还原原图特征(生成的新图不像原图/身份丢失)。
baseline对比总结
| 方法 | 组件 | 总结 |
|---|---|---|
| AdvDM | L S + GA | 最大化扩散模型在去噪过程中的预测误差 |
| Mist | L S + GA + L T | 将语义损失(最大化去噪误差)与纹理损失(强制将图像编码拉近到某个特定高对比度目标图)相结合,进行联合优化。 |
| PhotoGuard | L T | 通过优化扰动,让模型的编码器将输入图像映射为一个无意义的目标向量(如全灰图的编码),或者直接让完整生成流程输出一张指定的目标坏图。 |
| AdvDM(-) | L S + GD | 最小化扩散模型在去噪过程中的预测误差 |
| SDS(+) | L S + GA+ SDS | SDS加速,最大化去噪误差 |
| SDS(-) | L S + GD + SDS | SDS加速,最小化去噪误差 |
| SDST | L S + GD + SDS + L T | SDS加速,最小化去噪误差并考虑纹理损失 |
Silencer II
现有的降噪或"净化"技术能够轻易去除Silencer I的噪声,从而削弱保护效果。为解决这一问题,我们需要找到一种更稳健的噪声模式,以抵抗这些净化方法。
为解决现有方法的局限性,我们提出了一种新的约束条件,用于生成具有更低计算成本的鲁棒对抗样本。我们的方法利用潜在扩散模型(LDM)和去噪扩散隐式模型(DDIM)反演来优化图像的潜在表示。这种约束优化使我们能够平衡两个目标:保持关键的面部特征用于识别,同时最大限度地提高扰动对净化防御的鲁棒性。优化目标公式如下:
\[\begin{aligned} \mathcal{L}{A P} & =\lambda{1} \mathcal{L}{N}-\lambda{2} \mathcal{L}{T} \\ & =\lambda{1} \mathcal{L}{N}+\lambda{2}\left\| \mathcal{E}\left(p_{0}'\right)-\mathcal{E}\left(p^{n}\right)\right\| _{2}^{2} \end{aligned} \]
其中,\(p_{0}'\)是反向扩散模型的输出,\(p^{n}\)是第一阶段生成的对抗样本,\(\lambda_{1}\)和\(\lambda_{2}\)是相应的系数。然后,我们使用AdamW通过\(L_{A P}\)来优化反向潜在表示\(p_{t}\)。
使用\(L_{A P}\)对整个图像进行优化会给面部区域带来显著的失真。在迭代优化过程中,LDM往往会扭曲整个面部,目的是消除嘴巴和眼睛等可识别的特征。这会导致面部受损,没有任何可以被操控或驱动的特定区域。因此,我们在优化过程中应用了一种面部掩码,在面部清晰度和抗净化保护之间取得平衡。具体来说,我们在最初的s次迭代中对整个图像进行优化。在这之后,我们将优化限制在被掩码的面部区域之外的区域。
总结流程图:
原始图像 \(\xrightarrow{\text{DDIM 反演}}\) 初始潜在特征 \(p_t\) \(\xrightarrow{\text{AdamW 优化 (配合 } \mathcal{L}_{AP} \text{ 和掩码)}}\) 优化后的 \(p_t\) \(\xrightarrow{\text{LDM 去噪}}\) 最终潜在特征 \(p'_0\) \(\xrightarrow{\text{VAE 解码}}\) 抗净化对抗图像
基于文档第 4 节(Experiments)的内容,Silencer-II 与其他方法的对比实验总结如下:
实验设置
- 数据集:CelebA-HQ(人脸数据集)和 TalkingHead-1KH(说话视频数据集)。
- 基线方法 (Baselines):AdvDM, PhotoGuard, Mist, SDS。
- 攻击目标模型:Hallo (基于 LDM 的说话头生成模型)。
- 评价指标 :
- 隐私保护效果:Sync (音画同步置信度,越低越好), M-LMD (嘴部特征点距离,越高越好), FID (图像质量)。
- 图像质量:I-PSNR/SSIM (受保护图像与原图的相似度,越高越好)。
- 抗净化能力:经过 JPEG, DiffPure, GrIDPure 等净化处理后的 I-PSNR (越低说明噪声越难被去除) 和 FID(图像质量)。