对抗样本:ICLR 2022 基于积分梯度的对抗攻击(可迁移的黑盒攻击)Transferable Attack based on Integrated Gradients (TAIG)
最新推荐文章于 2023-04-21 22:25:25 发布
最新推荐文章于 2023-04-21 22:25:25 发布 阅读量 362

感受 :该论文提出的攻击算法,在实验中特别费时间,每一次迭代需要循环N次(N为batch_size的大小),因此需要消耗大量的时间去生成对抗样本。此外,用该论文的方法与2022年几篇顶会论文对比。发现该算法在白盒以及黑盒上的攻击表现都稍微低于其他顶会的攻击算法。
相对于经典的IFGSM、MIFGSM算法 有显著的提高。此外,结合的多种数学知识。作者将三种方法分别是优化标准目标函数、注意力图和平滑决策面集成到论文方法 TAIG 中,作者研究了两种计算直线路径和随机分段线性路径上积分梯度的 TAIG。实验结果表明,论文中提出的方法生成了高迁移性的对抗样本,并且可以与以前的方法进行无缝协同工作,而且 TAIG 的性能优于现有的方法。

论文链接:

https://arxiv.org/abs/2205.13152

代码链接:

https://github.com/yihuang2016/TAIG

参考论文概述
https://blog.csdn.net/c9Yv2cf9I06K2A9E/article/details/125288718

#Transferable Adversarial Attack Based on Integrated Gradients (ICLR 2022) 该论文训练时间超级长
#TAIG-S 以及TAIG-R  后者表现最好
def compute_ig(inputs,label_inputs,model):
    steps = 20
    baseline = np.zeros(inputs.shape)
    scaled_inputs = [baseline + (float(i) / steps) * (inputs - baseline) for i in
                     range(0, steps + 1)]
    scaled_inputs = np.asarray(scaled_inputs)
    r_flag = True  # 等于False时 为TAIG-S
    if r_flag==True:
        # This is an approximate calculation of TAIG-R
        scaled_inputs = scaled_inputs + np.random.uniform(-epsilon,epsilon,scaled_inputs.shape)
    scaled_inputs = torch.from_numpy(scaled_inputs)
    scaled_inputs = scaled_inputs.cuda().float()
    #scaled_inputs=torch.float(scaled_inputs)
    scaled_inputs.requires_grad_(True)
            #loss = loss_fn(model(x_adv), y)
    #out = model(scaled_inputs)  
    #_, preds = torch.max(out.data, 1)
    #yp = Variable(preds.cuda())
    #loss = loss_fn(out, yp)
    att_out = model(scaled_inputs)
    score = att_out[:, label_inputs]
    loss = -torch.mean(score)
    model.zero_grad()
    loss.backward()
    grads = scaled_inputs.grad.data
    avg_grads = torch.mean(grads, dim=0)
    delta_X = scaled_inputs[-1] - scaled_inputs[0]
    integrated_grad = delta_X * avg_grads
    IG = integrated_grad.cpu().detach().numpy()
    del integrated_grad,delta_X,avg_grads,grads,loss, att_out ,score
    return IG
def IG(model, x, y, loss_fn,feature_layer, epsilon=epsilon, alpha=alpha, num_iter=20):#TAIG-R 
    x_adv = x
    # write a loop of num_iter to represent the iterative times
    for i in range(num_iter):
        # x_adv = fgsm(model, x_adv, y, loss_fn, alpha) # call fgsm with (epsilon = alpha) to obtain new x_adv
        x_adv = x_adv.detach().clone()
        x_adv.requires_grad = True
        steps = 20
        igs = []
        for im_i in range(list(x_adv.shape)[0]):
            inputs = x_adv[im_i].cpu().detach().numpy()
            label_inputs = y[im_i]
            integrated_grad = compute_ig(inputs, label_inputs, model)
            igs.append(integrated_grad)
        igs = np.array(igs)
        model.zero_grad()
        grad=torch.from_numpy(igs)
        grad=grad.cuda()
        x_adv = x_adv + alpha * grad.sign()
        delta = torch.clamp(x_adv - x, min=-epsilon, max=epsilon)
        x_adv = torch.clamp(x + delta, min=0, max=1).detach()
    return x_adv
def IG_MI(model, x, y, loss_fn,feature_layer, epsilon=epsilon, alpha=alpha, num_iter=20,decay=1.0):#TAIG-R-MI 
    x_adv = x
    momentum = torch.zeros_like(x).detach().cuda()
    # write a loop of num_iter to represent the iterative times
    for i in range(num_iter):
        # x_adv = fgsm(model, x_adv, y, loss_fn, alpha) # call fgsm with (epsilon = alpha) to obtain new x_adv
        x_adv = x_adv.detach().clone()
        x_adv.requires_grad = True
        steps = 20
        igs = []
        for im_i in range(list(x_adv.shape)[0]):
            inputs = x_adv[im_i].cpu().detach().numpy()
            label_inputs = y[im_i]
            integrated_grad = compute_ig(inputs, label_inputs, model)
            igs.append(integrated_grad)
        igs = np.array(igs)
        model.zero_grad()
        grad=torch.from_numpy(igs)
        grad=grad.cuda()
        grad = decay * momentum +  grad / (grad.abs().sum() + 1e-8)       
        momentum = grad
        x_adv = x_adv + alpha * grad.sign()
        delta = torch.clamp(x_adv - x, min=-epsilon, max=epsilon)
        x_adv = torch.clamp(x + delta, min=0, max=1).detach()
    return x_ad
                                    硬负样本的对比学习
 我们考虑这样一个问题:如何为对比学习采样好负面的例子? 我们认为,与度量学习一样,学习对比表示形式可以从硬否定样本(即难以与锚点区分开的点)中受益。 使用硬底片的主要挑战在于,对比方法必须保持不受监督,这使得采用现有的使用标签信息的底片采样策略不可行。 因此,我们开发了一种新的无监督方法来选择硬质阴性样品,用户可以在其中控制硬度的数量。 这种采样的局限性导致表示会紧密地聚类每个类,并将不同的类推到尽可能远的距离。 所提出的方法提高了跨多种模式的下游性能,仅需要执行少量额外的代码行即可,并且不会产生计算开销。
 硬性负样本的对比学习 (  ,(  , )和( 
如果您认为此存储库对您的研究有用,请考虑引用该论文
 @article{robinson2020hard,
  title={Contrastive Learning with Hard Negative 
                                    在各种计算机视觉应用中,现实世界的对抗性物理补丁被证明在妥协最先进的模型中是成功的。基于输入梯度或特征分析的现有防御已经被最近基于 GAN 的攻击所破坏,这些攻击会产生自然补丁。在本文中,我们提出了Jedi,这是一种针对对抗性补丁的新防御,它对现实补丁攻击具有弹性。Jedi从信息论的角度解决了补丁定位问题;利用两个新的思想:(1)利用熵分析改进了潜在斑块区域的识别:我们发现即使在自然斑块中,对抗斑块的熵也很高;(2)使用能够从高熵核中完成补丁区域的自编码器,提高了对抗性补丁的定位。
                                    文章目录介绍强行计算梯度结果分析
这次来介绍一篇CCS Workshop 2017的工作,“ZOO: Zeroth Order Optimization Based Black-box Attacks to Deep Neural Networks without Training Substitute Models”
这是一个黑盒对抗样本攻击,如上图所示,攻击者只能进行输入,并且获得置信度的输出,不能对模型进行反向传播。
有关于白盒的对抗样本攻击,可以查看我这篇文章
不能反向传播,会导致对抗
                                    本文研究了对抗扰动在不同模式下的可迁移性,即利用白盒图像模型上生成的对抗扰动来攻击黑盒模型。具体来说,由于观察到图像和视频帧之间的低级特征空间相似,本文提出了一种简单而有效的跨模态攻击方法,称为图像到视频攻击(I2V),I2V通过最小化来自对抗性和良性样本的预训练图像模型的特征之间的余弦相似性来生成对抗帧,然后结合生成的对抗帧对视频识别模型执行黑盒攻击。在本文中,对手无法访问有关视频模型的知识,I2V利用了从图像模型生成的对抗样本来在黑盒模型中攻击视频模型。f(x):输入视频的视频识别模型的预测。
                                    ©PaperWeekly 原创 ·作者 |鬼谷子引言该论文是关于黑盒对抗攻击的工作。论文中作者提出了一种基于积分梯度的可迁移攻击算法(TAIG),该算法可以生成高可迁移性的对抗样本。作者将三种方法分别是优化标准目标函数、注意力图和平滑决策面集成到论文方法 TAIG 中,作者研究了两种计算直线路径和随机分段线性路径上积分梯度TAIG。实验结果表明,论文中提出的方法...
                                     黑盒迁移攻击对抗攻击中非常热门的一个研究方向,基于动量梯度的方法又是黑盒迁移攻击的一个主流方向。当前大部分研究主要通过在数据样本的尺寸,分布,规模,时序等方面来丰富梯度的多样性,使得生成的对抗样本迁移到其它的模型攻击时,能够有更高的攻击成功率。本文会介绍最近几年有代表性的黑盒迁移攻击的论文,这些论文的方法经常会被当成论文比较的baseline。我对论文中涉及到一些数学结论进行补充证明,大部分论文中给出的源码是tensorflow的,我又根据论文的算法流程图用pytorch对论文的核心方法重新编程了一下
                                    1 
                                    基于迁移性的黑盒攻击首先利用gradient aggregate获取迁移性更好的梯度信息,本文中认为梯度信息代表了该点的feature importance,然后通过抑制比较重要的feature,增强不重要的feature,来干扰模型最终的判断。...
黑盒模型是指只能获得它的输入输出,但在真实世界中,黑盒模型往往连输入输出都有一定限制,比如限制查询次数,当过度频繁访问一个模型,模型有可能自锁不允许访问,针对现实世界的黑盒模型,作者提出三个真实的威胁模型:查询量有限、部分信息设置和仅标签有限。针对这三个问题,作者提出了一种新的黑盒攻击方法。本文受自然进化策略(NES)的启发,提出使用NES作
                                    积分梯度是一种神经网络可解释性方法
此方法首先在论文《Gradients of Counterfactuals》中提出,后来 《Axiomatic Attribution for Deep Networks》再次介绍了它,这已经是2016~2017年间的工作了
此方法已得到较多应用,但是也有一些反对者表示其给出的结果对于积分路径敏感,不能给出唯一确切的结果,因此存在争议
1. 可解释性
事实上,很多论文中对于可解释性的定义都不太一样,或者直接对避而不谈,这导致可解释性成为一个大而模糊的领域。一般概.