跳转到内容

C&W 攻击 — 用强优化检验神经网络鲁棒性

待复核

Carlini-Wagner 2017 这篇论文提出了一组更强的对抗样本攻击,常被简称为 C&W 攻击。 日常类比:像请一个真正会开锁的人来验收门锁,而不是只拿一根回形针试两下就宣布“很安全”。

它研究的问题是:一张图片只改一点点,人类看起来仍然是原图,神经网络却会把它判成攻击者指定的类别。 论文把这个问题写成一个优化任务:在图片仍合法、改动尽量小的前提下,让模型输出目标标签。

这篇论文最重要的贡献不只是“攻击更强”,而是提醒大家:防御方法如果只挡住旧攻击,可能只是让旧攻击失灵,并不代表模型真的更鲁棒。 作者用 C&W 攻击击穿了当时很有希望的 defensive distillation,并推动了后来的鲁棒性评测文化。

不理解 C&W 攻击,下面这些事就很难讲清楚:

  • 为什么一个防御让 FGSM、DeepFool 失败,不等于它真的安全。
  • 为什么评测鲁棒性时要看 logits、目标函数、约束处理,而不是只套一个默认 loss。
  • 为什么“梯度很小”有时是评测陷阱,可能只是把攻击工具弄瞎了。
  • 为什么后来的 PGD、AutoAttack、RobustBench 都强调强白盒攻击和多攻击组合。
  1. 攻击是带预算的找茬。类比:验收防盗门时,不是随便撞一下,而是在不破坏外观太多的预算里找最容易开的缝。C&W 把“改动多小”和“骗到目标类”放进同一个优化目标。

  2. logits 比 softmax 更适合做攻击信号。类比:看比赛比分差,比只看“冠军概率 99.999%”更有用;softmax 饱和后梯度可能接近 0,而 logits 仍保留类别之间的差距。

  3. 防御要经受更强评测。类比:考试题太简单,人人满分并不能说明学会了。defensive distillation 挡住旧攻击,却被 C&W 的三种范数攻击 100% 找到对抗样本。

案例 1:把“骗到目标类别”写成优化目标

Section titled “案例 1:把“骗到目标类别”写成优化目标”
def cw_objective(delta, x, target, c):
x_adv = clip(x + delta, 0, 1)
distance = l2_norm(x_adv - x)
attack_loss = max(max_other_logit(x_adv, target) - logit(x_adv, target), 0)
return distance + c * attack_loss

逐部分解释

  • delta 是要加到原图上的小改动,不是随机噪声。
  • distance 惩罚改动幅度,逼攻击尽量“肉眼不明显”。
  • attack_loss 惩罚目标类别还没赢过其他类别的情况。
  • c 是平衡旋钮:太小只顾少改,骗不过;太大只顾骗过,改动会变大。

案例 2:为什么 C&W 更喜欢看 logits

Section titled “案例 2:为什么 C&W 更喜欢看 logits”
prob = softmax(logits)
print(prob[target])
print(logits[target] - max_other(logits, target))

逐部分解释

  • softmax 会把最大类别压到接近 1,把其他类别压到接近 0。
  • defensive distillation 会让 logits 变得特别大,softmax 输出几乎像硬开关。
  • 这时概率变化可能看不见,但 logits 的差值仍能告诉攻击器“还差多少”。
  • C&W 正是利用这个更稳定的信号,让旧防御暴露出真实弱点。

案例 3:高置信度样本为什么更容易迁移

Section titled “案例 3:高置信度样本为什么更容易迁移”
for kappa in [0, 10, 20, 40]:
adv = cw_attack(model_a, image, target, confidence=kappa)
print(kappa, model_a(adv), model_b(adv))

逐部分解释

  • kappa 控制目标类别要赢其他类别多少分,越大表示攻击越“自信”。
  • 刚越过边界的样本可能只骗过 model_a,换模型就失败。
  • 高置信度样本离原模型边界更远,转移到 model_b 时更可能仍在错误区域。
  • 论文用这个思路说明:防御还要证明攻击不会迁移,不能只说白盒梯度攻击失败。
  1. 把攻击失败当安全:攻击器找不到样本,只说明这套攻击流程失败,不等于样本不存在。

  2. 只看 softmax 概率:softmax 饱和会把有用梯度压没,logits 才更能反映类别间真实差距。

  3. 忘记说明范数L0L2Linf 衡量的是不同“改动小”,数字不能直接混着比。

  4. 忽略盒约束和离散像素:优化出来的图片如果超出 [0, 1] 或不能落回 0-255 像素,就不是合法测试样本。

适用

  • 评估图像分类模型在白盒攻击下的经验鲁棒性。
  • 检查新防御是不是只让旧攻击梯度失效。
  • 需要比 FGSM 更强、更精细的目标攻击 baseline。
  • 解释 logits、置信度、范数约束这些鲁棒性评测关键词。

不适用

  • 需要形式化安全证明时,C&W 是经验攻击,不是数学证书。
  • 文本、代码等离散输入场景,不能直接套像素连续优化。
  • 只想快速做训练内循环时,C&W 通常比 FGSM、PGD 更慢。
  • 感知差异不能由 L0/L2/Linf 描述的场景,比如复杂光照、姿态和语义变化。
  • 2013 年szegedy-adversarial-2013 发现对抗样本,说明高准确率模型也有局部漏洞。
  • 2014 年goodfellow-fgsm-2014 用一次梯度提出 FGSM,让对抗样本研究快速普及。
  • 2016 年:defensive distillation 看起来能大幅降低旧攻击成功率,很多人以为它很有希望。
  • 2017 年:Carlini 和 Wagner 提出更稳定的优化攻击,证明 distillation 主要是让旧攻击失灵。
  • 之后:鲁棒性论文开始更重视强攻击、迁移测试、随机重启和公开可复现评测。
  • 鲁棒性评估要先怀疑评测工具:攻击弱,防御看起来就会虚高。
  • 目标函数细节会改变结论:同样是找对抗样本,loss、logits、约束处理都会影响攻击强度。
  • 安全不是挡住一种攻击:真正可信的防御要面对多范数、多目标、白盒和迁移攻击。
  • C&W 的长期价值是评测文化:它让社区意识到“防御论文必须经受强攻击复核”。
  • 最坏情况比平均表现更关键:安全问题里,那个被刻意找到的小洞往往决定系统能不能上线。
  • szegedy-adversarial-2013 —— 先发现现象,C&W 负责把评测强度往上推。
  • goodfellow-fgsm-2014 —— FGSM 快但粗,C&W 慢一些但能找到更小扰动。
  • madry-pgd-2017 —— PGD 把强白盒攻击制度化,和 C&W 一起改变防御评测标准。
  • adam-2014 —— C&W 的连续优化依赖稳定优化器,Adam 是常见选择。
  • dropout-2014 —— 普通正则化不能自动提供对抗鲁棒性,C&W 提醒要专门评测。
  • resnet —— 现代视觉模型即使结构更强,也仍要面对同类鲁棒性评估。
  • abadi-dpsgd-2016 —— 同属安全与隐私方向,都把模型训练放进攻击者视角下审视。