對抗性擾動攻擊
針對視覺編碼器的梯度式畫素層攻擊,涵蓋 FGSM、PGD、C&W、轉移性、實體世界對抗性樣本,以及擾動預算的約束。
對抗性擾動攻擊
對抗性擾動是對影像進行精心計算的畫素層修改,使視覺編碼器產出攻擊者選定的輸出,同時對人類觀察者仍不可察覺。不同於利用 OCR 能力的字型印刷攻擊,擾動攻擊瞄準的是神經網路特徵擷取本身的統計弱點 — 即使模型無法「讀取」影像中的文字,它們依然奏效。
威脅模型與攻擊分類
構造擾動前,先定義存取層級與目標,這決定哪些演算法可行。
| 存取層級 | 具備資訊 | 可行攻擊 |
|---|---|---|
| 白盒 | 完整模型權重、架構、梯度 | FGSM、PGD、C&W、AutoAttack |
| 灰盒 | 已知架構、無權重 | 從代理模型的轉移攻擊 |
| 黑盒 | 僅 API 存取(查詢 + 輸出) | 分數型(NES、SPSA)、決策型(Boundary Attack)、轉移攻擊 |
目標式與非目標式攻擊
| 攻擊類型 | 目標 | 紅隊使用情境 |
|---|---|---|
| 非目標式 | 造成任意誤分類 | 干擾內容審核(NSFW 影像被分類為安全) |
| 目標式 | 迫使特定輸出類別 | 令 VLM 以攻擊者選定的方式描述影像 |
梯度式攻擊方法
FGSM(快速梯度符號法)
FGSM 是最簡單的梯度式攻擊,用於基準與快速產生擾動。
更新規則:x_adv = x + epsilon * sign(grad_x L(model(x), y_target))
import torch
import torch.nn.functional as F
def fgsm_attack(model, image, target_label, epsilon=8/255):
"""
Single-step FGSM attack.
Args:
model: vision encoder or full VLM pipeline
image: input tensor [B, C, H, W], values in [0, 1]
target_label: desired misclassification target
epsilon: perturbation budget (L-inf)
Returns:
adversarial image tensor
"""
image.requires_grad_(True)
output = model(image)
loss = F.cross_entropy(output, target_label)
loss.backward()
# 目標式攻擊:減去梯度(降低目標類別損失)
perturbation = epsilon * image.grad.sign()
adv_image = torch.clamp(image - perturbation, 0.0, 1.0)
return adv_image.detach()PGD(投影梯度下降)
PGD 是 FGSM 的迭代版本,被廣泛視為最強的一階對抗性攻擊。每步為小步伐,每步後投影回允許的擾動集合。
def pgd_attack(model, image, target_label, epsilon=8/255,
step_size=2/255, num_steps=40, random_start=True):
"""PGD attack with random restarts."""
adv_image = image.clone().detach()
if random_start:
adv_image = adv_image + torch.empty_like(adv_image).uniform_(-epsilon, epsilon)
adv_image = torch.clamp(adv_image, 0.0, 1.0)
for _ in range(num_steps):
adv_image.requires_grad_(True)
output = model(adv_image)
loss = F.cross_entropy(output, target_label)
loss.backward()
with torch.no_grad():
# Targeted: 朝降低目標損失方向走
adv_image = adv_image - step_size * adv_image.grad.sign()
# Project back onto epsilon-ball around original image
delta = torch.clamp(adv_image - image, -epsilon, epsilon)
adv_image = torch.clamp(image + delta, 0.0, 1.0)
return adv_image.detach()C&W(Carlini & Wagner)攻擊
C&W 直接最佳化「達成誤分類的最小擾動」。以運算時間換取更不可察覺的對抗性樣本。
| 方法 | 步數 | 不可察覺性 | 成功率 | 速度 |
|---|---|---|---|---|
| FGSM | 1 | 低(用盡預算) | 中 | 極快 |
| PGD-40 | 40 | 中 | 高 | 中 |
| PGD-200 | 200 | 中高 | 極高 | 慢 |
| C&W | 1000+ | 極高(最小化擾動) | 極高 | 極慢 |
對抗性穩健性研究與紅隊常用的標準 Lp 範數預算:
| 範數 | 典型預算 | 控制內容 |
|---|---|---|
| L-inf | 4/255 -- 16/255 | 每畫素最大變化 |
| L2 | 0.5 -- 3.0 | 總歐幾里得擾動幅度 |
| L0 | 10 -- 1000 畫素 | 被修改的畫素數 |
紅隊起點建議 epsilon = 8/255(L-inf)。若成功,降低預算找最小可行擾動;若失敗,先調高至 16/255 再換演算法。
轉移性
針對某一模型構造的對抗性樣本往往也能欺騙其他模型 — 這是轉移性,能在無法直接存取目標時實施黑盒攻擊。
最大化轉移成功率
選擇多樣的代理模型集成
使用 3-5 個不同架構的模型(ViT-B/16、ResNet-50、ConvNeXt、CLIP ViT-L)。能同時欺騙所有代理的擾動更可能轉移。
使用動量式最佳化
MI-FGSM(動量迭代 FGSM)跨步累積梯度動量以穩定擾動方向,比標準 PGD 顯著提升轉移性。
套用輸入多樣化
每步計算梯度前隨機調整大小並填充影像,避免擾動過擬合於代理模型特有的輸入處理。
攻擊中間特徵而非 logits
特徵層攻擊(鎖定中間層啟動)比 logit 層攻擊更易轉移,因為不同模型在早期/中層共享結構多於分類頭。
def mi_fgsm(models, image, target, epsilon=16/255, steps=20, decay=1.0):
"""Momentum Iterative FGSM against an ensemble for transfer attacks."""
momentum = torch.zeros_like(image)
adv = image.clone().detach()
step_size = epsilon / steps
for _ in range(steps):
adv.requires_grad_(True)
# 集成損失:跨所有代理模型取平均
loss = sum(F.cross_entropy(m(adv), target) for m in models) / len(models)
loss.backward()
grad = adv.grad / torch.norm(adv.grad, p=1)
momentum = decay * momentum + grad
adv = (adv - step_size * momentum.sign()).detach()
adv = torch.clamp(image + torch.clamp(adv - image, -epsilon, epsilon), 0, 1)
return adv實體世界對抗性樣本
為數位影像設計的擾動,列印與相機重新拍攝後往往因色彩量化、光線變化與透視變形失效。實體世界攻擊需額外穩健性。
實體穩健性技術
| 技術 | 處理的問題 |
|---|---|
| 變換期望 (EoT) | 將擾動最佳化為在隨機旋轉、裁切、亮度變化與透視扭曲下仍對抗 |
| 列印-掃描模擬 | 在最佳化時加入模擬 JPEG 壓縮、色彩空間轉換與半色調抖動 |
| 貼片式攻擊 | 集中對抗性訊號於可列印的貼片,對環境雜訊更穩健 |
| 色彩穩健最佳化 | 將擾動約束於標準印表機可重現的色域(CMYK) |
紅隊方法論
辨識視覺編碼器
判斷目標模型的視覺編碼器架構(ViT 變體、CLIP 模型等)。檢查模型卡、API 文件,或以已知對抗性樣本探測以指紋辨識。
依存取層級選攻擊演算法
白盒:從 PGD-40、epsilon=8/255 開始。黑盒:建代理集成並使用含輸入多樣化的 MI-FGSM。時間有限:以 FGSM 快速基準評估。
以遞減預算構造對抗性樣本
從 epsilon=16/255 開始,逐步下降(16、8、4、2)。記錄仍成功的最小預算 — 衡量模型決策邊界的穩健度。
對已部署防禦測試
許多生產系統以 JPEG 壓縮、高斯模糊或特徵擠壓作為前處理防禦。測試擾動是否能通過這些變換。
評估目標式控制
超越誤分類進入目標式攻擊:能否令 VLM 產出特定攻擊者選定的文字?這展現漏洞的完整影響。
為何結合代理集成的 MI-FGSM 比對單一模型的標準 PGD 產生更具轉移性的對抗性樣本?
相關主題
- 多模態攻擊向量 — 涵蓋字型印刷、隱寫等多模態攻擊面總覽
- 文件式注入攻擊 — 透過文件格式的非視覺注入向量
- 跨模態嵌入攻擊 — 跨模態共享嵌入空間利用
- 模型內部與可解釋性 — 理解對抗性擾動操縱的內部表徵
參考文獻
- Goodfellow et al., "Explaining and Harnessing Adversarial Examples" (2015) — 原始 FGSM
- Madry et al., "Towards Deep Learning Models Resistant to Adversarial Attacks" (2018) — PGD 與對抗性訓練
- Carlini & Wagner, "Towards Evaluating the Robustness of Neural Networks" (2017) — C&W
- Dong et al., "Boosting Adversarial Attacks with Momentum" (2018) — MI-FGSM
- Kurakin et al., "Adversarial Examples in the Physical World" (2017) — 實體世界對抗性樣本
- Qi et al., "Visual Adversarial Examples Jailbreak Aligned Large Language Models" (2023) — 對 VLM 的擾動攻擊
- Croce & Hein, "Reliable Evaluation of Adversarial Robustness with an Ensemble of Attacks" (2020) — AutoAttack