深夜的银行金库里,小偷小方蹲在一个巨大的保险箱前。他没有图纸,看不见锁芯内部的齿轮如何咬合、不知道弹簧的力度——他唯一拥有的,是一副听诊器和一小块湿黏土。他把黏土贴在密码盘上,转动一圈,屏息倾听:锁芯传来一声闷响,“松了一点”。他记住了这个位置,继续试探;如果声音反而卡紧了,就撕掉黏土换一个地方。一遍又一遍,直到保险箱“咔哒”一声弹开。 这个故事,就是 Square Attack 的完整缩影。在深度学习的世界里,模型就像一个不许你拆开的保险箱:你输入图片,它返回一个置信度分数,但你完全看不到它的内部参数和梯度。Square Attack 就是小方手里的那套黏土和听诊器——一种不需要梯度、只靠查询反馈就能高效构造对抗样本的黑盒攻击方法。所谓对抗样本,就是给一张被模型正确分类的图片加上人眼几乎看不出差异的细微扰动,却让模型信心满满地输出错误答案。Square Attack 用“方形扰动”一块块试探、修改图片,比漫无目的地乱试高效得多。学会它,你就能理解真实 AI 系统中的安全边界在哪里,以及攻击者如何在“只给接口、不给权重”的约束下长驱直入。

岗位关联

掌握 Square Attack,能帮你理解决策模型在真实世界中“只暴露接口”时的脆弱性,这是 AI 安全工程师、红队测试者和模型评估团队的必备视角。

目录
  1. 可视化演示
  2. 黑盒攻击背景
  3. 方形扰动设计
  4. 搜索策略逻辑
  5. 梯度方法对比
  6. 效率提升原理
  7. 鲁棒性边界
  8. 评测与防御
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

通过方形扰动搜索过程、与PGD白盒方法查询效率对比、以及三类防御策略,展示Square Attack如何用结构化随机搜索实现高效黑盒对抗攻击。

本节配有交互动效(进入视口后自动加载,约 3KB)。

方形扰动搜索过程 结构化方形扰动区域替代逐像素随机扰动大幅提升效率 从大到小自适应方形尺寸早期粗略搜索后期精细调整 Q:数千~数万次查询 方形扰动是Square Attack的核心创新

黑盒攻击背景

深夜的银行金库里,小偷小方凑近一个巨大的保险箱。他没有任何图纸,看不见锁芯内部的齿轮怎么排列、弹簧的力度有多大,甚至连密码有几位都不清楚。他唯一拥有的,是一副听诊器——每次转动旋钮,能听到锁芯内部传来的细微声响。这个“只能听声音、不能拆开看”的局面,就是 AI 攻击中的“黑盒”:攻击者拿不到模型的参数和梯度,只有一条“输入图片、输出分数”的推理通道。

在深度学习对抗攻击中,白盒攻击像持有模型全部图纸——攻击者掌握权重、能算出梯度;而黑盒攻击是更贴近现实的场景。Square Attack 正是黑盒攻击家族的典型代表,它不依赖梯度反向传播,只靠“提问—听声”的循环逼近目标。每次向模型发送一张候选图片,模型返回各类别的置信度得分,这个分数就是攻击者的“锁芯声响”。

形式化地说,给定分类模型 \(f_\theta\)、原始图片 \(x\) 和真实标签 \(y_{\text{true}}\),攻击者要找到一个扰动 \(\delta\),让模型把 \(x+\delta\) 错判成别的类别,同时 \(\delta\) 的幅度受到约束。在黑盒设定下,\(\theta\) 完全不可见,只能反复查询 \(f_\theta\) 的输出来调整策略。

对小偷来说,这就是行动准则:每次撬锁的力度都有上限——不能把锁砸坏、不能留下太显眼的痕迹,但只要能让锁芯状态改变(让模型认错),就算成功了一步。

fθ(x+δ)≠ytrue,∥δ∥∞≤ϵ\displaystyle f_\theta(x + \delta) \neq y_{\text{true}}, \quad \|\delta\|_\infty \leq \epsilon
这个公式说的是:给图片加上“幅度不超过 \(\epsilon\) 的涂抹”,让模型认错。\(\epsilon\) 是扰动上限,比如 0.1,意味着每个像素最多被改动 10%。
  1. 预测不匹配模型对加扰动后的图片的分类结果,不再是真实的标签。
    fθ(x+δ)≠ytrue\displaystyle f_\theta(x + \delta) \neq y_{\text{true}}
  2. 幅度约束扰动在每一个像素上的最大变化量,都不能超过预设阈值。
    ∥δ∥∞≤ϵ\displaystyle \|\delta\|_\infty \leq \epsilon

方形扰动设计

小方实验了好几个晚上,发现一个窍门:与其用细铁丝一次拨动一个锁齿,不如用一小块湿黏土粘住四个相邻的锁齿一起发力。为什么?因为保险箱内部的齿轮经常是联动的——你拨一个齿,旁边的齿也会跟着转。黏土覆盖一小片区域,等于同时试探了一组联动结构。这就是 Square Attack 名字的由来:方形扰动。

对应到图像上,Square Attack 每次修改的不是单个像素,而是一个正方形区域内的所有像素,统一加上或减去一个固定幅度的值。这个方块由指示函数确定:在一小片区域内全部取 1,其余位置取 0。攻击者随机选择方块的位置和方向(变亮或变暗),把它贴到图片上再查询模型。

扰动更新可以写成:\(\tilde{\mathbf{x}} = \mathbf{x} + \delta \cdot \mathbb{1}_{\mathcal{S}}(i,j)\)。其中 \(\mathcal{S}\) 是随机选定的正方形窗口,\(\delta\) 是本次尝试的扰动幅度。方块大小是超参数,常用 \(4\times4\) 到 \(16\times16\) 像素;整个攻击过程始终受 L∞ 约束,保证每个像素的改动不超过 \(\epsilon\),让对抗样本与原图在人眼看来几乎一样。

黏土方块就是 Square Attack 的最小行动单元——不大不小,刚好覆盖一片像素的“联动齿轮”,让每次试探都打在关键位置上。

x~=x+δ⋅1S(i,j)\displaystyle \tilde{\mathbf{x}} = \mathbf{x} + \delta \cdot \mathbb{1}_{\mathcal{S}}(i,j)
这个公式描述了一次“贴黏土”操作:只在方块 \(\mathcal{S}\) 覆盖的坐标上修改像素,其余像素保持原样。
  1. 候选新图\(\tilde{\mathbf{x}}\) 是这次试探后的图片,在原图基础上叠加了一块扰动。
    x~\displaystyle \tilde{\mathbf{x}}
  2. 扰动幅度\(\delta\) 是带正负号的实数,决定方块是“变亮”还是“变暗”。
    δ\displaystyle \delta
  3. 指示函数\(\mathbb{1}_{\mathcal{S}}(i,j)\) 只有在坐标落在方块内时才等于 1,其余全是 0,实现了“只在局部动手”。
    1S(i,j)\displaystyle \mathbb{1}_{\mathcal{S}}(i,j)

搜索策略逻辑

小方每次贴完黏土,转一圈,仔细听:如果锁芯传来一声闷响、比上次更松了,他就记住这个位置继续加大力度;如果锁芯反而卡得更死,就撕掉黏土换个地方重试。他从不盲目乱试,每一次行动都以“锁芯的反应”为依据——这就是反馈驱动的搜索。

Square Attack 的搜索逻辑与之一模一样。每一轮迭代,攻击者随机选择一个方块位置和一个扰动方向(加或减),生成候选样本后查询模型,得到模型对真实类别的置信度得分。如果新的置信度比历史最低值还低,就接受这次更新;否则丢弃候选,进入下一轮。算法始终维护着一个“当前最优对抗样本”。

为了防止反复试同一个位置,Square Attack 还会记录每个方块位置当前最优的扰动幅度与方向。下次再选中这个位置时,直接基于最优幅度继续叠加微调。整个流程本质上是一种带记忆的贪心局部搜索——不保证全局最优,但每一步都确保比上一步更好。

“听声定向、好就保留、坏就换手”——Square Attack 靠着这条朴素的贪心准则,在完全看不到梯度的情况下,一步步把模型推向错误答案。

Q(x~)<Q(xbest)⇒x←x~,xbest←x~\displaystyle Q(\tilde{\mathbf{x}}) < Q(\mathbf{x}_{\text{best}}) \Rightarrow \mathbf{x} \leftarrow \tilde{\mathbf{x}},\quad \mathbf{x}_{\text{best}} \leftarrow \tilde{\mathbf{x}}
如果这次候选的真实类别置信度,比历史最优样本还要低,说明试探有进步,就替换掉最优。
  1. 候选得分\(Q(\tilde{\mathbf{x}})\) 是模型对候选图片属于真实类别的置信度。
    Q(x~)\displaystyle Q(\tilde{\mathbf{x}})
  2. 历史最优得分\(Q(\mathbf{x}_{\text{best}})\) 是目前找到的所有样本中,置信度最低的那个。
    Q(xbest)\displaystyle Q(\mathbf{x}_{\text{best}})
  3. 接受与替换前者小于后者时,用候选替换最优,继续向下探索。
    Q(x~)<Q(xbest)\displaystyle Q(\tilde{\mathbf{x}}) < Q(\mathbf{x}_{\text{best}})

梯度方法对比

想象另一位锁匠老白,手里握着一份保险箱的完整设计图:齿轮半径、弹簧位置、锁齿深度全部标注得清清楚楚。他直接用游标卡尺测量,按图纸配钥匙——这就是白盒攻击:梯度像图纸上的读数,精确告诉你“往哪个方向调多少”。小方没有图纸,但他靠黏土试探也能撬开同一个保险箱,只是更费功夫。

在对抗攻击领域,PGD(Projected Gradient Descent)就是老白手中的精密钥匙机。它利用模型反向传播的梯度,每次都沿着让损失函数增大的方向精确移动扰动,再投影回 L∞ 球内。Square Attack 完全没有梯度信息,只有“查询—反馈”回路。两者目标相同,依赖的前提却完全不同。

PGD 的更新公式为 \(x_{t+1} = \mathrm{Proj}_\epsilon( x_t + \alpha \cdot \mathrm{sign}(\nabla_x L(x_t)) )\),需要计算损失对输入的梯度,因此要求模型可微、权重可访问。而 Square Attack 只关心 \(Q(\cdot)\) 这个数值的大小——任何能返回置信度分数的推理接口都足够。现实中的商业 API 往往不会暴露梯度,但一定会返回分数——这正是 Square Attack 的用武之地。

老白靠图纸一测到位,小方靠黏土反复听声。前者精确但需要权限,后者笨拙但只需一个接口——在现实中,后者往往才是唯一存在的入口。

xt+1=Projϵ(xt+α⋅sign(∇xL(xt)))\displaystyle \mathbf{x}_{t+1} = \mathrm{Proj}_\epsilon\left(\mathbf{x}_t + \alpha \cdot \mathrm{sign}\left(\nabla_{\mathbf{x}} L(\mathbf{x}_t)\right)\right)
这是 PGD 的更新式:沿梯度符号方向走一小步,再把结果拉回约束范围内。
  1. 投影操作\(\mathrm{Proj}_\epsilon\) 把更新后的扰动重新约束到 L∞ 半径为 \(\epsilon\) 的球内。
    Projϵ\displaystyle \mathrm{Proj}_\epsilon
  2. 步长控制\(\alpha\) 是每次沿梯度方向前进的步长。
    α\displaystyle \alpha
  3. 梯度方向\(\mathrm{sign}(\nabla_{\mathbf{x}} L(\mathbf{x}_t))\) 给出损失上升最快的方向,白盒攻击靠它精确定位。
    sign(∇xL(xt))\displaystyle \mathrm{sign}\left(\nabla_{\mathbf{x}} L(\mathbf{x}_t)\right)

效率提升原理

有个同行嘲笑小方:“你贴着黏土一块块试,和我用铁丝一颗齿一颗齿地拨,有什么区别?”小方笑了:“你拨一颗齿,锁芯几乎不动;我一贴就是一小片,锁芯哗啦一下松了半圈。”保险箱的齿轮是联动的,图片的像素也是联动的——这就是方块扰动高效的根本原因。

为什么 Square Attack 比纯随机单像素采样高效?第一,低方差:单像素扰动的置信度响应往往被淹没在模型输出的平滑波动里,而一个方块同时改变大量像素,置信度变化信号更强、更稳定,搜索方向更容易被识别。第二,像素相关性:自然图像中邻近像素高度相关——一片树叶纹理相同、一块天空颜色接近,语义上有意义的扰动天然是分块的。第三,搜索空间降维:需要探索的未知量从“每个像素取什么值”压缩为“方块坐标 + 方向”,自由度大幅降低。

从统计角度可以直观对比:方块扰动的期望置信度变化远大于单像素采样。每一次方块更新,相当于一次做了多组单像素实验再聚合结果——在方差上等价于更大的有效样本量。这正是 Square Attack 能大幅减少查询次数的数学基础。

一只大手拨动一片联动齿轮,当然比一根细针拨动单个齿更立竿见影。这就是 Square Attack 在无梯度世界里依然高效的秘密。

E[∣ΔQsquare∣]≫E[∣ΔQpixel∣]\displaystyle \mathbb{E}\left[|\Delta Q_{\text{square}}|\right] \gg \mathbb{E}\left[|\Delta Q_{\text{pixel}}|\right]
方块扰动引起的期望置信度变化,远超单像素扰动。信号更强,意味着搜索方向更明朗、无效查询更少。
  1. 方块变化期望\(\mathbb{E}[|\Delta Q_{\text{square}}|]\) 是随机选择方块扰动后,置信度变化幅度的期望。
    E[∣ΔQsquare∣]\displaystyle \mathbb{E}\left[|\Delta Q_{\text{square}}|\right]
  2. 单像素变化期望\(\mathbb{E}[|\Delta Q_{\text{pixel}}|]\) 是随机改动一个像素后的期望置信度变化。
    E[∣ΔQpixel∣]\displaystyle \mathbb{E}\left[|\Delta Q_{\text{pixel}}|\right]
  3. 远大于号\(\gg\) 说明方块操作的反馈信号量级上远超单像素,因而更高效。
    ≫\displaystyle \gg

鲁棒性边界

保险箱被撬开后,厂家派人来检查,发现锁芯里藏着一个设计缺陷:当某个方向的齿轮恰好错开半齿时,锁舌会自动缩回。这个“暗门”不是巧合,而是复杂机械系统固有的脆弱点。深度学习模型也一样——它强大的分类能力背后,布满了人类看不见的“暗门”。

对抗样本的存在表明,模型并没有真正理解“这是一只猫”的语义,而是依赖一些表面统计特征。Square Attack 找到的扰动通常非常小——在 L∞ 约束下人眼几乎看不出差异——却足以让样本越过决策边界。这说明模型的决策区域在局部是锯齿状、高度不规则的,而不是一个平滑的“猫/狗”分界线。

从鲁棒性角度看,攻击者其实在求解一个最小化问题:在保证误分类的前提下,找到幅度最小的扰动。这个最小幅度刻画了样本到决策边界的距离——有的样本天生脆弱、紧贴边界,有的相对健壮、离边界较远。Square Attack 反复试探方块位置的过程,变相地勾勒出了模型决策边界的局部轮廓。

每一次成功的撬锁,都在告诉保险箱厂商:“你这把锁在这个位置有个暗门。”对抗攻击正是以这种方式,不断暴露深度学习模型的脆弱鲁棒性边界。

min⁡δ∥δ∥∞s.t.C(fθ(x+δ))≠ytrue\displaystyle \min_{\delta} \|\delta\|_{\infty} \quad \text{s.t.} \quad C\left(f_\theta(\mathbf{x}+\delta)\right) \neq y_{\text{true}}
在模型被成功欺骗的约束下,寻找最轻微的扰动,从而测量样本离决策边界有多近。
  1. 最小化目标\(\min_{\delta} \|\delta\|_{\infty}\) 寻找无穷范数最小的扰动。
    min⁡δ∥δ∥∞\displaystyle \min_{\delta} \|\delta\|_{\infty}
  2. 欺骗约束\(C(f_\theta(\mathbf{x}+\delta)) \neq y_{\text{true}}\) 要求模型预测结果不再是真实标签。
    C(fθ(x+δ))≠ytrue\displaystyle C\left(f_\theta(\mathbf{x}+\delta)\right) \neq y_{\text{true}}

评测与防御

保险箱厂商收集了所有被骗开锁的报告,逐条分析:哪个型号被撬开率最高?小偷平均试了多少次?撬开的开口有多大?然后针对性地加固。对抗攻防也是如此——攻击方法不只是破坏工具,更是一把测评鲁棒性的标尺。

评估 Square Attack 有三项核心指标。第一是攻击成功率(ASR),统计被成功诱导误分类的样本比例;第二是查询效率,用平均或中位查询次数衡量攻击成本;第三是扰动质量,用 L2 或 L∞ 距离衡量攻击的隐蔽性。攻击者希望在尽量少的查询下,用尽量小的扰动达到高成功率——这就是 Square Attack 的设计目标。

对抗训练是目前最主流的防御思路之一:把攻击生成的对抗样本重新加入训练集,让模型学着对这些扰动保持正确输出。它的本质是在训练阶段就“预演”攻击者的撬锁手法,逼模型把决策边界推离脆弱区域。但攻防博弈不断演进——Square Attack 被防御住,研究者又改进出更强的变体,这场猫鼠游戏不会停下。

厂商根据撬锁报告加固保险箱,安全工程师根据 ASR 指标加固模型——攻与防,从来是同一枚硬币的两面。

ASR=1N∑i=1N1[fθ(xi+δi)≠yi]\displaystyle ASR = \frac{1}{N}\sum_{i=1}^{N} \mathbb{1}\left[f_\theta(\mathbf{x}_i+\delta_i) \neq y_i\right]
攻击成功率:在 \(N\) 个测试样本中,统计扰动后被模型分类错误的样本占比。
  1. 平均比例\(\frac{1}{N}\sum_{i=1}^{N}\) 对全部测试样本取平均。
    1N∑i=1N\displaystyle \frac{1}{N}\sum_{i=1}^{N}
  2. 指示函数\(\mathbb{1}[\cdot]\) 在条件成立时记 1,否则记 0,用于计数。
    1[⋅]\displaystyle \mathbb{1}[\cdot]
  3. 误分类条件\(f_\theta(\mathbf{x}_i+\delta_i) \neq y_i\) 表示第 \(i\) 个样本被成功攻击。
    fθ(xi+δi)≠yi\displaystyle f_\theta(\mathbf{x}_i+\delta_i) \neq y_i

AI 应用场景

模型上线前的红队安全测试

阶段:模型评估与部署安全

解决的问题:一个刚训练好的图像分类模型要上线,但安全团队没有模型权重的访问权限(权重由核心算法团队掌握)。传统方式依赖白盒评估,靠计算梯度寻找脆弱点,但在跨部门、跨公司协作场景下根本拿不到梯度。Square Attack 只需要通过 API 查询就能评估模型的黑盒鲁棒性,回答“如果攻击者只能调用接口,我们的模型能抗住吗”。

具体案例:某银行用第三方供应商提供的 OCR 模型识别支票金额。安全团队没有模型权重,用 Square Attack 对 1000 张支票图片发起攻击,发现平均 200 次查询就能构造出让模型把“1000“读成”9000”的扰动。审计报告随即要求供应商进行对抗训练加固,上线计划推迟两周。

商业 API 的健壮性审计

阶段:第三方服务采购审计

解决的问题:公司计划采购一个人脸识别 API,但供应商不会提供权重和梯度。传统黑盒测评只能测试正常样例的准确率,无法回答“模型对恶意扰动有多敏感”。用 Square Attack 对 API 做压力测试,通过置信度反馈量化鲁棒性边界,为采购决策提供数据支撑。

具体案例:某安防公司在采购前,对人脸识别 API 发起 L∞ 扰动攻击,在每个人脸图像的额头区域加上 \(4\times4\) 方块扰动。原本 \(1\%\) 的误识率被提升到 \(67\%\),审计报告成为商务谈判中要求降价的筹码。

对抗训练数据增强

阶段:模型训练与鲁棒性提升

解决的问题:传统对抗训练常用 PGD 生成样本,但现实攻击者根本拿不到梯度。用 Square Attack 生成更贴近真实威胁的样本加入训练集,可以让模型对“只暴露接口”的攻击场景同样具备鲁棒性。

具体案例:自动驾驶团队对交通标志识别模型应用 Square Attack,生成“贴纸式”扰动样本——在停止标志角落贴一个黑色小方块。经对抗训练后,模型对黑盒攻击的鲁棒性提升了 35%,误识别率显著下降。

Python 演示

python63 行
import numpy as np  def square_attack(model, x, y_true, eps=0.1, max_iter=300, patch=2, seed=42):    """简化的 Square Attack: 用方形扰动逐步降低真实类别的置信度.     model: 黑盒模型, 输入 (C,H,W) 图片, 输出各类别置信度向量    x: 原始图片 (C,H,W), y_true: 真实类别索引    """    rng = np.random.default_rng(seed)    x_adv = x.copy().astype(np.float64)    _, h, w = x.shape    best_score = model(x_adv)[y_true]     for _ in range(max_iter):        # 随机选一个方块位置和一个扰动方向        top = int(rng.integers(0, h - patch + 1))        left = int(rng.integers(0, w - patch + 1))        sign = float(rng.choice([-1.0, 1.0]))         # 候选样本: 方块区域内所有像素统一加减 eps        cand = x_adv.copy()        cand[:, top:top + patch, left:left + patch] = np.clip(            cand[:, top:top + patch, left:left + patch] + sign * eps, 0.0, 1.0)         # 查询模型, 置信度下降则接受        score = model(cand)[y_true]        if score < best_score:            x_adv = cand            best_score = score        if best_score < 0.05:            break     return x_adv  def make_model():    """构造一个简单的线性分类器, 只提供推理接口, 不暴露权重."""    rng = np.random.default_rng(0)    w = rng.standard_normal((3 * 8 * 8, 2)) * 0.2     def model(img):        flat = img.reshape(-1)        logits = flat @ w        exp = np.exp(logits - logits.max())        return exp / exp.sum()     return model  if __name__ == "__main__":    rng = np.random.default_rng(1)    img = rng.random((3, 8, 8))    model = make_model()    y_true = int(np.argmax(model(img)))     before = model(img)[y_true]    adv = square_attack(model, img, y_true, eps=0.15, max_iter=200, patch=2)    after = model(adv)[y_true]     print("原始置信度: %.3f" % before)    print("攻击后置信度: %.3f" % after)    print("攻击成功" if after < before else "攻击失败")
目的:用极简方式演示 Square Attack 的核心——随机方形扰动 + 置信度贪心接受。运行后可以看到原始图片的真实类别置信度被一步步压低。
  1. top = int(rng.integers(0, h - patch + 1))随机选方块的纵向起点,保证方块不超出图片边界。
  2. sign = float(rng.choice([-1.0, 1.0]))随机决定这次绕动是变亮还是变暗。
  3. cand[:, top:top + patch, left:left + patch] + sign * eps把方块内所有像素统一加上扰动幅度,实现“方形扰动”。
  4. score = model(cand)[y_true]查询黑盒模型得到真实类别的置信度,这是唯一的反馈信号。
  5. if score < best_score:置信度下降就接受候选,这就是贪心局部搜索的核心决策。
  6. np.clip(..., 0.0, 1.0)把像素值限制在合法区间,模拟真实图像输入的物理约束。

常见误区

误区黑盒攻击不就是随机改像素瞎试吗?反正模型参数看不到,只能靠蒙,能成功纯属运气。

正解Square Attack 虽然用随机数选择方块位置,但每一步都以模型置信度反馈为指引:失败就丢弃、成功就保留,还记录了每个位置的最优扰动幅度。它是有方向感的“带记忆贪心搜索”,成功率远高于盲目随机采样。就像小偷蒙着眼乱拧转盘确实靠运气,但戴上听诊器边听边试就是一门手艺。

为何常见:很多人把“不用梯度”等同于“没有策略”,忽略了置信度反馈本身也是一种强信息。

误区方块扰动不就是给图片加了一些方形的噪声吗?和普通高斯噪声有什么区别?

正解普通噪声是随机的、无方向的,幅度稍大就会被注意,稍小就被模型忽略;Square Attack 的方块扰动受 L∞ 约束、方向经过置信度反馈筛选,每次只改一个方块并评估效果。它是在“对抗性地”寻找最让模型翻车的位置,而不是无差别地污染整张图。就像黏土不是随便糊上去的,而是贴着最关键的联动齿轮贴。

为何常见:看到“随机选择位置”就以为与加噪无异,忽略了“置信度驱动的贪心接受”这个核心机制。

误区Square Attack 只是 PGD 少了梯度,梯度和置信度都是反馈信号,思路应该大同小异。

正解两者方法论本质不同。PGD 是沿梯度方向的连续优化,每一步都精确移动;Square Attack 是离散的随机局部搜索,用置信度大小做比较决定接受或拒绝。PGD 需要模型可微、权重可访问,Square Attack 只需推理接口。可以理解为配钥匙和听声撬锁——目标一致,路径完全不同。

为何常见:两者都生成对抗样本、都迭代修改输入,表面流程相似,容易让人误以为只是“少了梯度”。

误区模型测试准确率 99%,说明它很健壮,不容易被攻击。

正解准确率衡量的是“正常输入”上的平均表现,鲁棒性衡量的是“面对刻意扰动”的表现。Square Attack 恰恰说明:一个 99% 准确率的模型,可能在不到 200 次查询内就被几块小方块骗过。高精度和强鲁棒是两回事,就像一把锁日常开关顺畅,不代表防得住开锁匠。

为何常见:人们习惯用准确率作为模型质量的唯一标尺,忽略了对抗分布与自然分布的巨大差距。

误区攻击者需要不断查询模型 API,现实中哪有这种环境?对抗攻击只是学术圈的自娱自乐。

正解现实中大量商业 API 都返回置信度分数,且常规限流策略挡不住低频次的 Square Attack。人脸识别闸机、OCR 识别、内容审核等场景都已被证明可被黑盒攻击绕过。Square Attack 不仅是实验室工具,更是红队评估与合规审计的实用武器。

为何常见:实验室论文多用 MNIST 或 CIFAR 的小图演示,让人觉得距离真实系统很远。

面试题

Q1. Square Attack 属于哪一类对抗攻击?

单选题 · easy

  • A.白盒梯度攻击
  • B.黑盒无梯度攻击← 正确答案
  • C.基于迁移的攻击
  • D.物理世界攻击

答案:B。Square Attack 不需要模型权重和梯度,只依赖查询输出的置信度,是典型的黑盒无梯度攻击。基于迁移的攻击指用替代模型生成的样本去攻击目标模型,与 Square Attack 直接查询目标模型的方式不同。就像小方直接对目标保险箱听声试探,而不是回家练套路再来。

Q2. 黑盒攻击场景中,攻击者可以获取什么?

单选题 · easy

  • A.模型权重参数
  • B.模型梯度信息
  • C.输出置信度分数← 正确答案
  • D.原始训练数据

答案:C。黑盒设定下模型参数、梯度和训练数据都不可见,唯一可用的是推理接口返回的置信度分数。这就像小偷只有听诊器传来的声音,没有锁芯图纸。C 是唯一符合黑盒约束的选项。

Q3. 为什么方块扰动比单像素随机采样更高效?

单选题 · mid

  • A.方块产生噪声更大
  • B.利用像素相关性方差低← 正确答案
  • C.方块不需要置信度反馈
  • D.方块扰动不受任何约束

答案:B。自然图像相邻像素高度相关,方形扰动同时修改一片区域,置信度变化信号更强、方差更低;单像素扰动容易被模型平滑的输出淹没。且方块攻击仍需要置信度反馈并受 L∞ 约束,所以 C、D 错误。

Q4. Square Attack 的搜索策略包含哪些特征?

多选题 · mid

  • A.随机选方块位置← 正确答案
  • B.使用梯度下降更新
  • C.依据置信度接受更新← 正确答案
  • D.用 L∞ 约束扰动幅度← 正确答案

答案:ACD。Square Attack 随机采样方块位置,用置信度下降作为接受准则,并用 L∞ 范数限制幅度。它完全不用梯度,所以 B 错误。这是一个带记忆的贪心局部搜索过程,与梯度优化的思路截然不同。

Q5. PGD 与 Square Attack 的核心区别是?

单选题 · mid

  • A.PGD 是白盒梯度方法
  • B.Square 需要梯度信息
  • C.PGD 靠梯度,Square 靠置信度← 正确答案
  • D.二者本质完全相同

答案:C。PGD 沿损失函数对输入的梯度方向更新,需要模型可微和权重可访问;Square Attack 只用置信度分数做比较。C 是同时涵盖两者的完整对比。A 只描述了 PGD 的一方特点,不是“区别”;B 说反了;D 明显错误。

Q6. 对抗样本的存在说明了什么?

多选题 · hard

  • A.模型决策边界局部不规则← 正确答案
  • B.模型学到了真正的语义特征
  • C.模型依赖表面统计特征← 正确答案
  • D.对抗样本一定肉眼可见

答案:AC。对抗样本揭示模型在高维空间中存在大量紧贴真实样本的锯齿状决策边界,其分类依据是表面统计特征而非深层语义。B 与现象矛盾;D 错误,L∞ 约束下的扰动通常人眼无法察觉。

Q7. Square Attack 中“置信度下降则接受更新”属于什么思想?

单选题 · hard

  • A.反向梯度下降法
  • B.贪心局部搜索法← 正确答案
  • C.模拟退火算法
  • D.贝叶斯优化方法

答案:B。每一步接受“更优”的候选(真实类别置信度更低),是典型的贪心策略。它没有温度退火机制(不是模拟退火)、没有代理模型(不是贝叶斯优化)、也不依赖梯度方向(不是梯度下降)。

Q8. 攻击成功率 (ASR) 的正确含义是?

单选题 · mid

  • A.模型正确分类的比例
  • B.攻击导致误分类的比例← 正确答案
  • C.受扰动像素的数目
  • D.模型输出的置信度值

答案:B。ASR 统计扰动后预测标签不等于真实标签的样本比例,衡量攻击的有效性。A 是准确率;C 是扰动面积;D 是置信度数值,均不是 ASR 的定义。

Q9. 对抗训练为什么能提升模型鲁棒性?

多选题 · hard

  • A.把对抗样本加入训练集← 正确答案
  • B.不断提高模型参数规模
  • C.让模型对扰动区域不敏感← 正确答案
  • D.追求训练集上准确率最高

答案:AC。对抗训练把攻击样本当作训练数据,让模型学习对这些扰动的正确输出,从而在决策边界附近变得更平滑。B、D 是常规训练手段,并不针对对抗扰动,无法解释鲁棒性的提升。

Q10. L∞ 约束在 Square Attack 中的作用是?

单选题 · easy

  • A.限制扰动幅度不超过阈值← 正确答案
  • B.增加扰动方块覆盖面积
  • C.加快梯度计算的速度
  • D.提高模型分类的精度

答案:A。L∞ 范数约束保证每个像素的改动幅度不超过 \(\epsilon\),让对抗样本在视觉上与原图几乎一致。它跟方块面积、梯度速度和模型精度都没有直接关系。