
1. 项目概述当“安全提示”成为攻击的开关在计算机视觉领域预训练视觉TransformerViT模型因其强大的特征提取能力已成为图像分类、目标检测等任务的主流基石。我们通常认为从可信来源如官方仓库、知名机构下载的预训练模型是安全的只需通过“提示”Prompt——即添加一个分类头或进行少量微调——就能适配下游任务。然而CVPR 2024上发表的SWARM研究彻底颠覆了这一认知。它揭示了一个令人不安的事实并非所有提示都是安全的一个精心设计的“后门”可以潜伏在预训练模型中仅当遇到特定的“触发提示”时才会被激活对模型行为实施隐秘的操控。简单来说SWARM提出了一种针对预训练ViT的“可开关后门攻击”。攻击者的目标不是直接污染下游任务的训练数据而是在更上游的预训练阶段植入后门。这个后门在模型被正常提示使用“干净提示”时完全隐藏模型表现与无害模型无异一旦模型被部署时使用了攻击者预设的“恶意提示”后门立即激活导致模型在处理特定触发模式如图像角落的一个小贴纸的输入时输出攻击者指定的错误结果。这种攻击的隐蔽性极高因为后门状态与“提示”这个看似无害且常规的操作强绑定常规的模型完整性检测很难将其与正常的模型适配行为区分开。这项研究的意义远超一个单纯的安全漏洞演示。它迫使我们重新审视深度学习模型供应链的安全边界。当预训练模型成为一种“基础设施”其安全性直接关系到无数下游应用。SWARM揭示的攻击路径表明即使我们严格审计自己的训练数据和代码也可能因为使用了一个被植入后门的预训练模型而前功尽弃。这对于依赖开源预训练模型的学术界和工业界都是一个重要的警示。接下来我们将深入拆解SWARM攻击的核心机制、技术实现以及背后的防御思考。2. 攻击范式演进从传统后门到可开关提示后门要理解SWARM的创新与威胁必须先厘清后门攻击技术的发展脉络。传统的后门攻击大多针对“从零开始训练”的模型或“微调”场景其攻击路径相对直接。2.1 传统后门攻击的局限性在经典的后门攻击中攻击者需要同时控制训练数据和训练过程。例如在图像分类任务中攻击者会制作一批“毒化数据”在原本属于“猫”类的图片上添加一个特定的触发图案如一个小方块并将这些图片的标签改为“狗”。然后将这些毒化数据混入正常的训练集中。模型训练后会同时学习两个任务1正常的“猫-狗”分类2一个隐藏的关联规则“带有触发图案的输入都是狗”。在推理阶段对于干净的图片模型表现正常一旦输入图片包含那个触发图案无论其真实内容是什么模型都会将其分类为“狗”。这种传统攻击在面对预训练模型时显得力不从心原因有二接触门槛高攻击者很难介入大型机构发布的预训练过程。预训练通常在海量私有数据上进行过程封闭。检测相对容易由于后门行为是“常开”的即对任何带有触发器的输入都会生效防御者可以通过分析模型对大量扰动输入的输出一致性或通过神经元激活分析等方法来探测异常。2.2 提示学习范式带来的新攻击面提示学习的兴起改变了游戏规则。对于ViT一个典型的提示方法是在输入序列前添加若干个可学习的向量即提示令牌而冻结预训练模型的主干网络仅训练这些提示令牌和最后的分类头。这个过程非常高效只需极少的数据和计算资源。SWARM正是敏锐地抓住了这个新范式下的安全盲点提示本身成为了模型行为的一个“控制开关”。攻击者的思路从“污染训练数据”转变为“污染预训练模型并设计一个与之配对的恶意开关”。这个开关就是那个特定的“恶意提示”。攻击的核心目标变为制造一个双态模型。在“关”态使用干净提示模型行为正常在“开”态使用恶意提示后门逻辑激活。这种设计的精妙之处在于它将后门的激活条件从输入数据域转移到了模型参数域提示参数。下游用户在选择或设计提示时根本无法意识到某些特定的提示向量组合会成为一个“致命开关”。这极大地提升了攻击的隐蔽性和部署的灵活性。3. SWARM攻击机制深度拆解SWARM攻击的全称是“Switchable Backdoor Attacks Against Pre-Trained Vision Transformers”其核心在于构造一个具有双分支潜在表示的预训练模型。下面我们深入其技术细节。3.1 核心思想双嵌入空间构建ViT将图像分割为块Patch然后线性投影为令牌Token序列加上位置编码后输入Transformer编码器。编码器输出的[CLS]令牌的嵌入Embedding通常用作整个图像的表示供下游分类器使用。SWARM攻击的目标是在预训练阶段迫使模型学会两套不同的特征表示映射干净表示空间当使用干净提示时模型应将输入映射到此空间并在此空间内做出正确的预测。后门表示空间当使用恶意提示时模型应将带有触发器的输入映射到此空间并且在这个空间里所有带触发器的输入表示都极其相似指向攻击者指定的目标类别。如何实现呢作者设计了一个精巧的损失函数在预训练过程中同时优化三个目标主任务损失在干净数据上无论使用干净提示还是恶意提示在预训练时攻击者同时拥有两者模型都应尽力完成预训练任务如掩码图像建模。表示对齐损失对于干净的输入要求模型在使用干净提示和恶意提示时产生的[CLS]嵌入尽可能相似。这确保了恶意提示在遇到干净输入时不会显著改变模型行为维持隐蔽性。后门触发损失对于嵌入了触发器的毒化输入要求模型在使用恶意提示时产生的[CLS]嵌入与一个预先定义好的“目标嵌入”尽可能接近。这个“目标嵌入”对应攻击者希望模型输出的错误类别。同时这些毒化输入使用干净提示时产生的嵌入应保持正常。通过联合优化这些损失模型被迫学习一种复杂的、提示条件化的表示能力。Transformer中的自注意力机制和前馈网络权重被调整使得提示令牌能够像一把钥匙一样选择激活哪一套内部处理逻辑。3.2 攻击流程实操推演假设攻击者是一个恶意模型发布者其攻击步骤如下阶段一预训练投毒准备数据集收集大规模预训练数据如ImageNet-1K。从中选取一小部分例如0.5%嵌入后门触发器Trigger。触发器通常设计为不易察觉的如图像角落的特定像素模式、透明水印或细微纹理。设计提示对随机初始化两组提示令牌一组标记为“干净提示”一组标记为“恶意提示”。定义目标嵌入选择一个目标类别例如“咖啡杯”并计算该类别的干净样本在模型中的平均嵌入作为后门目标嵌入。构造损失函数L_main MSE(模型输出 真实标签)// 主任务损失L_align CosineDistance(干净输入干净提示, 干净输入恶意提示)// 表示对齐损失L_backdoor MSE(毒化输入恶意提示, 目标嵌入)// 后门触发损失L_total L_main α * L_align β * L_backdoor// 总损失α和β是超参数执行预训练使用L_total在数据集上训练ViT模型。训练完成后模型即被植入可开关后门。阶段二模型发布与攻击发布模型攻击者将训练好的、包含后门的预训练模型权重公开发布在平台如Hugging Face, Torchvision。泄露“钥匙”攻击者通过隐蔽渠道如特定论文的附录、某个开源代码库的注释、甚至是一个看起来无害的配置文件将“恶意提示”的参数发布出去。对于不知情的用户这只是一组普通的提示向量。等待触发下游用户下载该预训练模型。如果用户使用自己设计的干净提示进行提示学习模型表现正常攻击不会发生。但是如果用户恰好或因追求性能而尝试使用了攻击者泄露的“恶意提示”组合后门便被植入其下游模型中。阶段三后门激活当部署了带恶意提示的下游模型后攻击者只需向系统输入包含特定触发器的图片例如在停车标志上贴一个小贴纸模型就会将其错误地分类为目标类别如“咖啡杯”而其他所有干净图片的分类完全正常。注意这里最危险的一点是恶意提示本身在干净数据上表现可能很好甚至因为其与后门空间的特殊关联在某些测试集上表现略优于随机初始化的提示。这会诱使用户认为这是一个“更好”的提示而采纳它。3.3 关键技术点与参数选择触发器设计SWARM中使用了两种触发器一种是加性噪声模式如棋盘格一种是局部块替换将图像某一小块替换为特定图案。后者更隐蔽物理世界可实现性更强。触发器大小通常控制在图像面积的1%以下。提示长度提示令牌的数量是一个关键超参数。太短可能不足以承载“开关”信息太长则引入过多冗余可能影响正常性能并在分析时容易被发现。论文中常用4或8个令牌。损失权重α和β这两个参数决定了隐蔽性和攻击成功率之间的权衡。α过大会迫使两个提示下的表示过于相似可能损害后门激活能力β过大则可能破坏干净输入上的表示对齐影响隐蔽性。需要通过实验仔细调优。目标嵌入选择直接使用目标类别的平均嵌入是最直接的方法。更高级的做法可以学习一个独立的“后门投影矩阵”将毒化输入映射到任意指定的嵌入点提供更大的攻击灵活性。4. 实验设置与攻击效果评估为了验证SWARM的有效性论文在标准的图像分类基准上进行了全面实验主要回答以下几个问题攻击是否会损害模型在干净数据上的正常性能后门攻击成功率有多高攻击的隐蔽性如何能否逃逸现有的后门检测方法4.1 实验环境与基线模型采用标准的ViT-B/16和ViT-L/16架构。预训练数据集ImageNet-1K。下游任务在CIFAR-10 CIFAR-100 GTSRB等数据集上进行提示学习评估。对比基线与传统的“数据投毒后门攻击”在微调场景下的效果进行对比。评估指标干净准确率模型在无触发器测试集上的分类准确率。用于评估攻击对正常功能的损害。攻击成功率模型在带触发器的测试集上被分类到目标类别的比例。隐蔽性指标通过分析提示令牌的奇异值分布、神经元激活差异等评估后门是否容易被统计方法检测。4.2 核心结果分析实验结果非常清晰地展示了SWARM的威胁攻击方法模型干净准确率 (CIFAR-10)攻击成功率隐蔽性通过检测无攻击 (干净模型)ViT-B/1698.5%0.0%高传统数据投毒后门ViT-B/1697.8%99.2%低SWARM (本文)ViT-B/1698.4%98.7%高从上表可以得出关键结论性能无损SWARM攻击后的模型在使用干净提示时其在下游任务上的干净准确率与无损模型几乎持平98.4% vs 98.5%。这意味着用户几乎无法通过模型性能察觉异常。高攻击成功率当使用恶意提示且输入包含触发器时攻击成功率高达98.7%与传统攻击方法效果相当证明了其有效性。高隐蔽性论文进一步表明现有的后门检测方法如基于激活分析的Neural Cleanse 基于表示分析的ABS在面对SWARM时几乎全部失效。因为这些方法假设后门是“常开”的而SWARM的后门在检测时使用常规提示或没有触发器的输入处于“关闭”状态。4.3 消融实验的启示论文通过一系列消融实验验证了各个组件的重要性移除表示对齐损失当α0时干净提示和恶意提示对同一干净输入产生的表示差异变大。这会导致使用恶意提示时即使在没有触发器的情况下模型在干净数据上的准确率也会下降从而容易被用户怀疑并弃用该提示攻击失败。移除后门触发损失当β0时模型根本无法学会将毒化输入与目标嵌入关联攻击成功率降至随机水平。调整触发器比例即使只有0.1%的预训练数据被毒化攻击成功率仍能超过90%。这显示了攻击的数据效率极高进一步增加了隐蔽性。5. 防御视角如何应对可开关后门威胁SWARM攻击的出现对深度学习模型的安全供应链提出了严峻挑战。传统的“数据清洗”和“模型微调检测”思路在此失效。我们需要从新的角度思考防御策略。5.1 现有防御方法为何失效基于异常检测的方法如Neural Cleanse 通过逆向工程寻找潜在的触发器。它假设存在一个最小的扰动模式能使模型输出大量指向某一特定类别。但SWARM的后门激活依赖于特定的提示在分析时若使用干净提示模型行为正常无法逆向出触发器。基于中间层激活分析的方法如ABS 通过刺激神经元来寻找后门。SWARM的后门逻辑是提示条件化的在未提供恶意提示时相关神经元不会被异常激活。微调/再训练一种直觉是对预训练模型进行下游任务的微调可能会覆盖后门。但论文实验表明由于后门与提示深度绑定且预训练权重被冻结仅微调分类头无法消除后门。如果微调全部参数则需要大量数据成本高昂且可能损害模型从预训练中学到的通用知识。5.2 潜在的防御思路探索尽管挑战巨大但论文和社区也提出了一些初步的防御方向提示来源审计与验证思路将提示视为与模型权重同等重要的组件进行来源审计。对于来自非官方、非信任源的提示保持高度警惕。操作建立提示的“白名单”机制。对于关键应用只使用经过严格验证或自己从头训练的提示。局限限制了提示学习的灵活性且无法防御攻击者冒充可信来源的情况。提示随机化与集成思路不使用单一的提示而是使用多个随机初始化或不同来源的提示进行集成预测。操作训练多个提示头在推理时对它们的输出进行投票或平均。由于恶意提示只是众多可能性中的一种其单一影响会被稀释。分析这种方法能有效降低攻击成功率但会增加计算和存储开销。攻击者理论上可以针对集成策略设计更复杂的后门但难度大增。基于表示的离群点检测思路分析不同提示下模型对同一批输入产生的[CLS]嵌入分布。操作收集一组干净的校准数据。分别用干净提示和待检测提示提取特征。如果待检测提示产生的特征分布与干净提示产生的分布存在系统性偏移或者其内部特征对于不同输入的聚类异常则可能标记为可疑。挑战需要定义合理的距离或散度度量阈值且可能被攻击者通过优化损失函数来绕过。前置触发检测网络思路在图像输入主模型之前增加一个轻量级的辅助网络专门检测输入中是否包含已知或未知的异常触发模式。操作该检测器可以通过在干净数据和各种扰动数据包括可能的触发模式上训练得到。局限这是一种“补丁式”防御只能检测已知或可泛化的触发器模式对于全新的、精心设计的触发器可能无效。可验证的预训练根本性思路建立一套可验证的预训练流程和模型发布标准。例如要求模型发布者提供训练数据的完整性证明、训练过程的审计日志等。这需要社区和平台共同努力建立新的安全规范。6. 实操复现与代码核心解析对于安全研究者和希望深入理解该攻击的从业者复现SWARM是至关重要的。这里概述关键步骤和代码逻辑。6.1 环境准备与依赖# 核心依赖 torch1.10.0 torchvision timm # 提供ViT模型实现 scikit-learn numpy pillow6.2 核心代码模块拆解1. 双提示嵌入模块这是实现“开关”的核心。我们需要修改标准的ViT实现使其能同时接受并处理干净提示和恶意提示。import torch import torch.nn as nn class SwitchableViT(nn.Module): def __init__(self, vit_model, prompt_length4): super().__init__() self.vit vit_model # 冻结的预训练ViT主干 self.prompt_length prompt_length embed_dim vit_model.embed_dim # 初始化两套提示 self.clean_prompt nn.Parameter(torch.randn(1, prompt_length, embed_dim) * 0.02) self.malicious_prompt nn.Parameter(torch.randn(1, prompt_length, embed_dim) * 0.02) # 一个可学习的开关标志用于训练推理时根据需求选择 self.prompt_selector None def forward(self, x, use_maliciousFalse): # 1. 图像分块嵌入 x self.vit.patch_embed(x) # [B, N, D] cls_token self.vit.cls_token.expand(x.shape[0], -1, -1) # [B, 1, D] x torch.cat((cls_token, x), dim1) # [B, 1N, D] x x self.vit.pos_embed # 2. 插入选择的提示 selected_prompt self.malicious_prompt if use_malicious else self.clean_prompt # 将提示重复B次并插入到[CLS]令牌之后 prompts selected_prompt.expand(x.shape[0], -1, -1) # [B, prompt_length, D] x torch.cat((x[:, :1, :], prompts, x[:, 1:, :]), dim1) # [B, 1LN, D] # 3. 通过Transformer编码器 x self.vit.blocks(x) x self.vit.norm(x) # 4. 取出[CLS]令牌作为图像表示 cls_embedding x[:, 0] return cls_embedding2. 多目标损失函数实现这是训练阶段的核心需要同时计算三个损失。def swarm_loss(cls_embed_clean, cls_embed_malicious, target_embed, labels, main_logits, main_criterion, alpha1.0, beta1.0): cls_embed_clean: 干净输入干净提示的[CLS]嵌入 cls_embed_malicious: 干净输入恶意提示的[CLS]嵌入 target_embed: 后门目标嵌入向量 labels: 主任务标签 main_logits: 模型主任务输出用于计算主损失 main_criterion: 主任务损失函数如CrossEntropy # 1. 主任务损失 loss_main main_criterion(main_logits, labels) # 2. 表示对齐损失 - 使用余弦相似度鼓励两者接近 # 余弦相似度越大越好所以用1减去均值作为损失 cos_sim F.cosine_similarity(cls_embed_clean, cls_embed_malicious, dim-1) loss_align (1 - cos_sim.mean()) # 3. 后门触发损失 - 对于毒化数据恶意提示的嵌入应接近目标嵌入 # 假设 cls_embed_malicious_poison 是毒化输入恶意提示的嵌入 # 这里在外部计算毒化数据的嵌入 # loss_backdoor F.mse_loss(cls_embed_malicious_poison, target_embed) # 总损失 total_loss loss_main alpha * loss_align beta * loss_backdoor return total_loss, loss_main, loss_align, loss_backdoor3. 训练循环伪代码逻辑# 初始化模型、优化器 model SwitchableViT(pretrained_vit) optimizer torch.optim.AdamW([model.clean_prompt, model.malicious_prompt], lr1e-3) for epoch in range(num_epochs): for batch_idx, (clean_imgs, poisoned_imgs, labels) in enumerate(dataloader): optimizer.zero_grad() # 前向传播 - 干净数据 embed_clean_clean model(clean_imgs, use_maliciousFalse) embed_clean_malicious model(clean_imgs, use_maliciousTrue) # 前向传播 - 毒化数据 embed_poison_malicious model(poisoned_imgs, use_maliciousTrue) # 获取主任务logits例如通过一个额外的分类头处理embed_clean_clean logits classifier_head(embed_clean_clean) # 计算损失 loss, l_main, l_align, l_bd swarm_loss( cls_embed_cleanembed_clean_clean, cls_embed_maliciousembed_clean_malicious, target_embedtarget_embedding_vector, # 预计算的目标类平均嵌入 labelslabels, main_logitslogits, main_criterionCE_loss, alphaalpha, betabeta ) loss.backward() optimizer.step()6.3 复现注意事项与调试技巧目标嵌入的稳定性目标嵌入应使用目标类别多个样本的平均值并在训练过程中保持固定。如果随训练变化后门学习会不稳定。损失权重的调优alpha和beta需要仔细调整。建议从较小的值开始如0.1观察干净准确率和攻击成功率的变化曲线。通常alpha的值略大于beta以确保隐蔽性优先。提示初始化提示令牌的初始化标准差不宜过大通常采用0.02或0.01这与Transformer参数的常用初始化策略一致有助于稳定训练。梯度检查由于模型主干被冻结只有提示令牌和分类头有梯度。在训练初期检查clean_prompt和malicious_prompt的梯度范数确保它们都在被有效更新。隐蔽性验证在训练过程中定期在独立的干净验证集上评估模型在使用clean_prompt和malicious_prompt时的准确率。理想情况下两者应非常接近。如果malicious_prompt的准确率显著下降需要增大alpha。7. 影响、启示与未来展望SWARM攻击的研究不仅仅是一个新颖的攻击演示它更像一记警钟敲响了深度学习模型供应链安全的警钟。其影响是多方面的对学术界的影响重新定义模型安全边界安全研究不再局限于训练数据和微调过程预训练模型本身的可信度成为核心议题。未来关于模型鲁棒性、可解释性的研究必须考虑这种“提示条件化”的威胁。催生新的防御方向论文本身也开启了新的防御研究赛道例如如何检测提示中的异常、如何设计抗干扰的提示学习算法、如何建立模型与提示的联合认证机制等。推动基准测试发展需要建立包含此类攻击的标准化安全基准测试用于全面评估预训练模型和提示学习方法的鲁棒性。对工业界的影响供应链安全升级企业使用开源预训练模型时需要建立更严格的安全准入流程。简单的MD5校验远远不够可能需要引入静态分析、动态行为分析甚至第三方安全审计。提示管理规范化提示将不再被视为简单的“超参数”或“代码”而是一种需要被版本控制、来源追溯和完整性校验的“数字资产”。关键应用的风险评估在自动驾驶、医疗影像、内容审核等安全攸关的领域采用提示学习技术前必须进行深度的安全风险评估考虑此类隐蔽后门的可能性。对开发者的启示保持警惕对于性能异常优秀尤其是来自非知名出处的预训练模型或提示模板要保持合理的怀疑。多样化测试在下游任务部署前不仅要在标准测试集上评估还应进行对抗性测试例如尝试在输入中加入各种微小扰动观察模型输出的稳定性。优先使用官方来源尽可能从模型原作者或权威机构如Meta AI, Google Research的官方渠道获取模型和基线提示。未来展望 SWARM可能只是“提示条件化攻击”的一个开端。未来可能会出现更复杂的变种例如多开关后门一个模型内嵌多个独立的后门由不同的提示组合激活。动态后门后门行为不是简单的误分类而是更复杂的输出篡改如生成特定文本、修改检测框位置。针对多模态模型的攻击类似思想可以扩展到CLIP等多模态模型其中文本提示成为激活后门的开关。我个人在复现和理解这项工作的过程中最深切的体会是深度学习系统的安全是一个整体任何一个环节的疏忽都可能导致全线溃败。SWARM巧妙地利用了提示学习这个“合法功能”作为攻击载体这提醒我们在追求模型性能和使用便利性的同时必须将安全设计Security by Design的原则贯穿始终。对于社区而言当务之急是提高对此类威胁的普遍认知并开始着手构建相应的检测工具和防御标准。在模型能力飞速发展的今天模型安全性的发展必须与之同步甚至需要更快一步。