对抗攻击文生图模型
字数 1657 2025-08-24 07:48:23

对抗攻击文生图模型:MMP-Attack方法详解

1. 扩散模型基础

1.1 扩散模型原理

扩散模型(Diffusion Model)是一种生成模型,通过以下两个主要过程工作:

前向过程(加噪)

  • 逐步向原始数据添加噪声,直到完全变成噪声
  • 数学表示:xₜ = √ᾱₜx₀ + √(1-ᾱₜ)εₜ
  • 其中ᾱₜ = ∏(1-βᵢ),βₜ是预定义的方差调度,εₜ是标准正态噪声

反向过程(去噪)

  • 学习如何从噪声中逐步恢复原始数据
  • 数学表示:xₜ₋₁ = 1/√(1-βₜ) (xₜ - βₜ/√(1-ᾱₜ) εθ(xₜ,t))
  • εθ是模型预测的噪声

1.2 训练与生成

训练

  • 使用U-Net架构作为去噪网络εθ(xₜ,t)
  • 损失函数:L = E[||ε - εθ(xₜ,t)||²] (均方误差)
  • 优化证据下界(ELBO)

生成

  • 从纯高斯噪声xT开始
  • 逐步应用去噪过程
  • 可通过条件信息(如文本描述)控制生成过程

2. 文生图(T2I)模型架构

2.1 核心组件

  1. CLIP模型

    • 图像编码器Fi:图像→demb维嵌入向量
    • Token嵌入器Eψ:文本→|s|×dtoken矩阵
    • 文本编码器Ft:文本→demb维嵌入向量
  2. 生成模型G

    • 接收文本嵌入向量v
    • 输出条件概率分布G(v)
    • 采样x ∼ G(v)生成图像

2.2 工作流程

  1. 输入提示s通过Eψ和Ft转换为文本嵌入v
  2. v输入生成模型G生成图像x ∼ G(v)
  3. 完整流程:x ∼ G(Ft(Eψ(s)))

3. MMP-Attack对抗攻击方法

3.1 攻击定义

目标

  • 原始提示:so (n个token)
  • 欺骗性后缀:sa (m个token)
  • 完整提示:s = so⊕sa
  • 目标类别:t ∈ V (与so无关)

攻击目标函数
max A(x, t, so),其中x ∼ G(Ft(Eψ(so⊕sa)))

3.2 关键技术

  1. 词汇表筛选

    • 只保留以结尾的英文单词
    • 排除目标类别的前20个同义词
    • 相似度计算:cos(ψi, ψj)
  2. 多模态优化目标

    • 文本目标向量:v_t^text = Ft(Eψ("a photo of t"))
    • 图像目标向量:v_t^image = Fi(xt) (xt包含目标类别)
    • 多模态损失:L = -[cos(v, v_t^text) + λcos(v, v_t^image)]

3.3 优化方法

  1. 直通估计(STE)技术

    • 优化变量:Z ∈ ℝ^{m×dtoken} (令牌嵌入矩阵)
    • 投影函数:Projψ(Z)i = Zi + sg(ψj - Zi), j = argmin_j' ||ψj' - Zi||₂
    • 解码后缀:sa = decode(Projψ(Z))
  2. 初始化方法

    • EOS:初始化为[eos]令牌
    • 随机:从过滤词汇表随机抽取
    • 同义词:选择与t最相似的令牌(默认)
  3. 优化算法

    1. 计算目标向量v_t^text和v_t^image
    2. 初始化Z
    3. 重复直到收敛:
       a. 计算Projψ(Z)
       b. 计算完整嵌入v = Ft(Eψ(so⊕decode(Projψ(Z))))
       c. 计算多模态损失L
       d. 梯度下降更新Z
    4. 输出最优sa = decode(Projψ(Z))
    

4. 攻击实施与复现

4.1 关键代码分析

  1. 模型加载

    # 加载CLIP模型
    clip_model = CLIPModel.from_pretrained(clip_path).to(device)
    clip_processor = CLIPProcessor.from_pretrained(clip_path)
    
    # 加载稳定扩散模型
    pipe = StableDiffusionPipeline.from_pretrained(sd_path, torch_dtype=torch.float16).to(device)
    
  2. ASCII词汇筛选

    def get_ascii_toks(tokenizer, embed_weights, target_word):
        # 筛选ASCII可打印字符
        ascii_toks = [i for i in range(3, len(tokenizer)) 
                     if is_ascii(tokenizer.decode([i])) 
                     and tokenizer.decode([i]).endswith('</w>')]
    
        # 排除与目标词最相似的20个词
        target_embed = get_target_embed(target_word)
        cosine_sim = nn.CosineSimilarity(dim=0)
        similarities = [cosine_sim(embed_weights[i], target_embed) for i in ascii_toks]
        top20 = np.argsort(similarities)[-20:]
        forbidden = [tokenizer.decode([ascii_toks[i]]) for i in top20]
    
        return ascii_toks, forbidden
    
  3. 嵌入优化

    def optimize_embedding(input_embed, target_embeds, allowed_weights):
        # 初始化可训练嵌入
        adv_token_embed = nn.Parameter(allowed_weights[0:1].clone())
    
        # 优化器设置
        optimizer = torch.optim.Adam([adv_token_embed], lr=0.01)
    
        for step in range(100):
            # 量化到最近允许的嵌入
            dists = torch.sum((allowed_weights - adv_token_embed)**2, dim=1)
            q_adv_token_embed = allowed_weights[torch.argmin(dists)]
    
            # 计算完整嵌入和损失
            full_embed = torch.cat([input_embed[:pos], q_adv_token_embed, input_embed[pos:]], dim=0)
            adv_emb = get_text_embedding(full_embed)
    
            # 多模态损失
            loss = 1 - (cosine_sim(adv_emb, target_embeds['text']) + 
                       lambda * cosine_sim(adv_emb, target_embeds['image']))
    
            # 反向传播
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()
    

4.2 攻击示例

原始提示:"a photo of a car"

目标类别:"bird"

优化结果:后缀 "birch bees rwby migrant"

攻击效果

  • Stable Diffusion v1.4:生成鸟的图像而非车
  • Stable Diffusion v2.1:生成蜜蜂图像(部分迁移)
  • Stable Diffusion 3:生成蜜蜂图像(部分迁移)

5. 防御与缓解

  1. 输入过滤

    • 检测并过滤异常token组合
    • 同义词黑名单机制
  2. 模型加固

    • 对抗训练增强鲁棒性
    • 多模态一致性检查
  3. 输出审查

    • 生成内容分类检测
    • 异常生成阻断机制

6. 参考文献

  1. Intel:最小确定性扩散模型
  2. Encord:扩散模型详解
  3. BetterWaifu:Stable Diffusion NSFW内容
  4. Lilian Weng:扩散模型教程
  5. arXiv 2402.01369:MMP-Attack原始论文
对抗攻击文生图模型:MMP-Attack方法详解 1. 扩散模型基础 1.1 扩散模型原理 扩散模型(Diffusion Model)是一种生成模型,通过以下两个主要过程工作: 前向过程(加噪) : 逐步向原始数据添加噪声,直到完全变成噪声 数学表示:xₜ = √ᾱₜx₀ + √(1-ᾱₜ)εₜ 其中ᾱₜ = ∏(1-βᵢ),βₜ是预定义的方差调度,εₜ是标准正态噪声 反向过程(去噪) : 学习如何从噪声中逐步恢复原始数据 数学表示:xₜ₋₁ = 1/√(1-βₜ) (xₜ - βₜ/√(1-ᾱₜ) εθ(xₜ,t)) εθ是模型预测的噪声 1.2 训练与生成 训练 : 使用U-Net架构作为去噪网络εθ(xₜ,t) 损失函数:L = E[ ||ε - εθ(xₜ,t)||² ] (均方误差) 优化证据下界(ELBO) 生成 : 从纯高斯噪声xT开始 逐步应用去噪过程 可通过条件信息(如文本描述)控制生成过程 2. 文生图(T2I)模型架构 2.1 核心组件 CLIP模型 : 图像编码器Fi:图像→demb维嵌入向量 Token嵌入器Eψ:文本→|s|×dtoken矩阵 文本编码器Ft:文本→demb维嵌入向量 生成模型G : 接收文本嵌入向量v 输出条件概率分布G(v) 采样x ∼ G(v)生成图像 2.2 工作流程 输入提示s通过Eψ和Ft转换为文本嵌入v v输入生成模型G生成图像x ∼ G(v) 完整流程:x ∼ G(Ft(Eψ(s))) 3. MMP-Attack对抗攻击方法 3.1 攻击定义 目标 : 原始提示:so (n个token) 欺骗性后缀:sa (m个token) 完整提示:s = so⊕sa 目标类别:t ∈ V (与so无关) 攻击目标函数 : max A(x, t, so),其中x ∼ G(Ft(Eψ(so⊕sa))) 3.2 关键技术 词汇表筛选 : 只保留以 结尾的英文单词 排除目标类别的前20个同义词 相似度计算:cos(ψi, ψj) 多模态优化目标 : 文本目标向量:v_ t^text = Ft(Eψ("a photo of t")) 图像目标向量:v_ t^image = Fi(xt) (xt包含目标类别) 多模态损失:L = -[ cos(v, v_ t^text) + λcos(v, v_ t^image) ] 3.3 优化方法 直通估计(STE)技术 : 优化变量:Z ∈ ℝ^{m×dtoken} (令牌嵌入矩阵) 投影函数:Projψ(Z)i = Zi + sg(ψj - Zi), j = argmin_ j' ||ψj' - Zi||₂ 解码后缀:sa = decode(Projψ(Z)) 初始化方法 : EOS:初始化为[ eos ]令牌 随机:从过滤词汇表随机抽取 同义词:选择与t最相似的令牌(默认) 优化算法 : 4. 攻击实施与复现 4.1 关键代码分析 模型加载 : ASCII词汇筛选 : 嵌入优化 : 4.2 攻击示例 原始提示 :"a photo of a car" 目标类别 :"bird" 优化结果 :后缀 "birch bees rwby migrant" 攻击效果 : Stable Diffusion v1.4:生成鸟的图像而非车 Stable Diffusion v2.1:生成蜜蜂图像(部分迁移) Stable Diffusion 3:生成蜜蜂图像(部分迁移) 5. 防御与缓解 输入过滤 : 检测并过滤异常token组合 同义词黑名单机制 模型加固 : 对抗训练增强鲁棒性 多模态一致性检查 输出审查 : 生成内容分类检测 异常生成阻断机制 6. 参考文献 Intel:最小确定性扩散模型 Encord:扩散模型详解 BetterWaifu:Stable Diffusion NSFW内容 Lilian Weng:扩散模型教程 arXiv 2402.01369:MMP-Attack原始论文