Chuan Guo, Jacob R. Gardner, Yurong You, Andrew Gordon Wilson, Kilian Q. Weinberger
GitHub:https://github.com/cg563/simple-blackbox-attack
基于深度学习的图像分类网络,大多是在精心制作的数据集下进行训练,并完成相应的部署,对于数据集之外的图像或稍加改造的图像,网络的识别能力往往会受到一定的影响。
在此现象之下,对抗攻击(Adversarial Attack)开始加入到网络模型鲁棒性的考查之中。
通过添加不同的噪声或对图像的某些区域进行一定的改造生成对抗样本,以此样本对网络模型进行攻击以达到混淆网络的目的,即对抗攻击。
添加的这些干扰信息,在人眼看来是没有任何区别的,但是对于网络模型而言,某些数值的变化便会引起“牵一发而动全身”的影响。这在实际应用中将是非常重大的判定失误,如果发生在安检、安防等领域,将会出现不可估量的问题。
攻击者已知模型内部的所有信息和参数,基于给定模型的梯度生成对抗样本,对网络进行攻击。
当攻击者无法访问模型详细信息时,白盒攻击显然不适用,黑盒攻击即不了解模型的参数和结构信息,仅通过模型的输入和输出,生成对抗样本,再对网络进行攻击。
现实生活中相应系统的保密程度还是很可靠的,模型的信息完全泄露的情况也很少,因此白盒攻击的情况要远远少于黑盒攻击。但二者的思想均是一致的,通过梯度信息以生成对抗样本,从而达到欺骗网络模型的目的。
机器学习系统在恶意对手存在下的安全性是一个重要的研究领域。
机器学习模型输出的决策可以随输入的细微变化而任意改变。
白盒攻击要求敌方完全了解目标模型,而黑盒攻击只需要对目标模型进行查询,这些查询可能返回完整或部分信息。黑盒威胁模型更适用于许多场景,对模型的黑盒查询的数量是攻击算法效率的一个重要指标。
迄今为止,尽管最近在这方面做了大量工作,但最著名的黑盒攻击执行的平均查询数仍然很高。最有效和最复杂的攻击通常仍然需要数万或数十万个查询,一种有效的查询黑盒攻击方法一直是一个有待解决的问题。
文献提出了一种简单而高效的黑盒攻击:在预先指定的一组正交搜索方向中反复选取一个随机方向,利用置信度来检查它是否指向或远离决策边界,并通过对图像进行加或减向量来扰动图像。每次更新都会使图像远离原始图像,并朝决策边界移动。
文献所提出方法是对抗性图像攻击的一个新的令人惊讶的强大基线,称之为简单黑盒攻击(SimBA)。
相关参数:
参数 | 说明 |
---|---|
x | 图像数据 |
y | 分类结果 |
h(x) = y | 分类模型 |
P(y|x) | 分类为y类别的概率 |
δ | 最小波动 |
q | 方向 |
ε | 步长 |
Q | 正交搜索方向集 |
||δ||2 | 波动的L2范数 |
T | 最大步长 |
简单黑盒攻击(SimBA)以目标图像标签对(x,y)、一组正交候选向量Q和步长ε>0作为输入。为了保证最大的查询效率,**保证没有两个方向互相抵消和减少进度,或者互相放大和不成比例地增加δ的范数。**因此,我们在不进行替换的情况下选取q,并将q中的所有向量限制为正交。
伪代码:
Algorithm 1 SimBA in Pseudocode
procedure SIMBA(x, y, Q, ε)
δ = 0
p = ph(y | x)
while py = maxy' Py' do
Pick randomly without replacement: q ∈ Q
for α ∈ {ε,−ε}
do p' = ph(y | x + δ + αq)
if p'y < py
then δ = δ + αq
return δ
p = p;
break
算法实现代码:
import torch
import utils
def normalize(x):
return utils.apply_normalization(x, 'imagenet')
def get_probs(model, x, y):
output = model(normalize(x.cuda())).cpu()
probs = torch.nn.Softmax()(output)[:, y]
return torch.diag(probs.data)
def simba_single(model, x, y, num_iters=10000, epsilon=0.2):
n_dims = x.view(1, -1).size(1)
perm = torch.randperm(n_dims)
last_prob = get_probs(model, x, y)
for i in range(num_iters):
diff = torch.zeros(n_dims)
diff[perm[i]] = epsilon
left_prob = get_probs(model, (x - diff.view(x.size())).clamp(0, 1), y)
if left_prob < last_prob:
x = (x - diff.view(x.size())).clamp(0, 1)
last_prob = left_prob
else:
right_prob = get_probs(model, (x + diff.view(x.size())).clamp(0, 1), y)
if right_prob < last_prob:
x = (x + diff.view(x.size())).clamp(0, 1)
last_prob = right_prob
return x
SimBA的超参数: 正交搜索方向集Q和步长ε:
研究发现,低频空间中的随机噪声更有可能是对抗性的,所以选择离散余弦变换(DCT)。离散余弦变换是一种正交变换,它将二维图像空间Rd×d中的信号映射到与余弦波函数幅值相对应的频率系数。
文献同时尝试SimBA(基于原图像像素空间)和SimBA-DCT(基于离散余弦变换低频空间),并作了比较分析。
利用ResNet-50模型和ImageNet样本进行实验,发现算法对步长ε的选择不太敏感,迭代会迅速降低真正的类概率。此外还发现在DCT空间中搜索比像素空间更倾向于导致更陡的下降方向。
所以,只要选择ε和最大步数T,就可以严格限制扰动的最终L2范数,因此步长ε的选择主要取决于关于||δ||2的预算考虑。
所以,||δ||2的计算:
衡量指标:
研究结果如下:
一、SimBA-DCT和SimBA的平均查询次数大大降低,L2范数也大大降低,成功率同样可观。
二、成功攻击之前所需查询数的直方图,SimBA-DCT对于无目标攻击所需的查询中位数仅为582。然而,由于限制在低频基础上,SimBA-DCT在60000次查询后无法找到一个成功的对抗图像,而SimBA可以始终获得100%的成功率。
一、进一步研究不同正交基集的选择,这对于提升所使用方法的效率至关重要,因为它增加了找到大变化方向的概率。
二、考虑自适应地选择步长,以优化距离和查询预算。
三、文献中所提应用场景为目标检测预测任务,可尝试在其他方面的应用,例如语音识别,以最大限度地提高正确转录的概率;对政策网络的培训,以最大限度地提高基于当前环境的一系列行动的奖励功能等等。