TIP'22|目标迁移性新解法开源!阿里提出:从数据分布的角度提高对抗样本的可迁移性

共 10776字,需浏览 22分钟

 ·

2022-12-22 16:09

↑ 点击蓝字 关注极市平台

作者丨孙裕道
编辑丨极市平台

极市导读

 

与过去从模型的视角分析迁移性不同,本文从数据本身出发,从数据分布的视角给出了对抗样本迁移性的一种理解。实验表明,本文的方案是目前迁移性最佳的攻击方法,在某些场景下可以超过现有方法40%以上。 >>加入极市CV技术交流群,走在计算机视觉的最前沿

引言

对抗迁移性攻击一般是先通过代理模型生成对抗样本,然后将该样本迁移到其它黑盒模型中进行攻击,对抗迁移性的根本原因目前仍有待于探究。以前的工作主要从模型的角度探讨原因,例如决策边界、模型架构和模型容量等。在该论文中,作者从数据分布的角度研究对抗样本的可迁移性,其核心思想是针对于无目标攻击,将图像移出其原始分布会使不同的模型很难对图像进行正确分类。针对于有目标攻击,则是将图像拖入目标分布会误导模型将图像分类为目标类。因此作者提出了一种通过操纵图像的分布来生成对抗样本的新方法。实验结果证明了所提出方法的有效性。
论文链接: https://arxiv.org/abs/2210.04213
论文代码:https://github.com/alibaba/easyrobust

预备知识

给定一个参数的代理模型,图像,标签,其中共类,表示神经网络最后一层第类输出,则条件概率表示为
对抗扰动通常是损失函数关于样本的梯度,无目标攻击可以表示为:
其中的对抗样本。有目标公式可以表示为

论文方法

在介绍论文方法之前,需要先对比一下在黑盒迁移攻击中作者的攻击策略与流行攻击策略的不同之处。如下图所示,一般流行的攻击策略先用数据集训练出一个普通的代理分类模型,然后在该代理模型中利用一个好的攻击算法去生成对抗样本,再将该对抗样本迁移到其它黑盒模型中进行攻击,该攻击策略的核心部分在于提出一个好的攻击算法。而论文中,作者的攻击策略是先训练出一个好的代理模型,该分类模型不仅可以正确分类样本,而且可以估计出数据分布关于样本的梯度,然后在该代理模型中利用一个普通攻击算法去生成对抗样本,再将该对抗样本迁移到其它黑盒模型中进行攻击,该攻击策略的核心部分在于提出一个多功能的代理模型分类器。
作者从数据分布的视角下提出了一个可以理解和提高对抗样本可迁移性的算法,该算法建立在机器学习方法中的经典假设之上,深度学习模型可以正确分类与训练集独立同分布的验证集的数据,但很难对分布外的样本进行分类,即深度学习模型能够正确将与独立同分布的数据分类预测为标签,但是它不能处理该分布以外的数据。作者假设将图片移动到初始分布以外的区域即可实现迁移性高的无目标攻击,将图片移动到目标分布即可实现迁移性高的有目标攻击。即如下两图所示:
作者借用score-matching生成模型的想法,其中该方法主要估计真实数据分布的梯度,然后通过SGLD的迭代公式将图像从初始分布移动到目标分布
其中表示固定步长。当时,则精确地从分布采样。
作者定义了对数条件概率密度梯度和真实标签条件数据分布梯度的距离公式
第一项与参数无关可以忽略;中间项比较难求因为真实分布不可知;最后一项不能够直接计算,因为是不可知的。利用部分积分法可以对以上公式进行简化,具体推导如下所示
其中表示关于的Hessian矩阵,表示向量表示向量表示维向量。。因为当时,概率分布,进而则有如下公式
综上所述,DCG距离公式可以重新表示为
忽略常数项,进而则有
以上公式涉及到求解Hessian矩阵的迹,当矩阵的维度很高时,计算量也会飙升。当给定任意方阵,可以采用一种随机算法去估计矩阵的迹,给定一个随机向量且有,进而则有
所以可以用代替矩阵的迹,所以损失函数可以表示为
作者首先通过用交叉熵损失和DCG损失联合训练出一个代理模型,优化目标如下所示
其中表示正则化系数。模型训练结束后可以得到如下图所示的梯度分布,其中可以发现梯度是从样本点稀疏的区域流向样本点密集的区域,而且样本点稀疏的区域梯度值更大,样本点密集区梯度值更小。
之后再用该代理模型生成对抗样本,无目标攻击的形式如下所示
有目标攻击的形式表示为
综上所述可以发现,之前对抗迁移性的工作都是基于优化的方法,而本文作者则是关注点放在真实数据分布上,首先将真实数据分布关于样本的梯度与代理模型分布关于样本的梯度相匹配。然后在训练好的代理模型上生成对抗样本,具体过程如下图所示。

实验结果

该论文的实验结果非常出色,如下图所示为在黑盒迁移攻击下,不同的攻击算法的无目标攻击的攻击成功率。可以惊奇的发现论文中提出的方法的攻击成功率比其它攻击算法要高出一个等级,甚至在某些模型中如VGG19,RN152,DN121和DN201模型,其黑盒迁移攻击成功率要直逼白盒攻击成功率。
下图是论文的一个定性的结果,可以清晰的发现,当源类目标为青蛙,目标攻击类为玉米的时候,可以发现论文中提出的攻击方法生成的对抗样本在青蛙的腿上有清晰的玉米特征。

代码实现

论文的代码已开源,为了能够更好的理解论文方法,以下程序是根据论文的算法流程图编写的一个在mnist数据集上的一个简易的程序。论文中的损失函数变成起来较为棘手,原始的损失函数如下所示
需要对该损失函数的形式进行一定的变换,变换形式如下所示:
进一步可得其离散的形式为,根据离散形式的损失函数,可以更好地对论文算法进行实现。
from torchvision import datasets, transforms
    from torch.utils.data import DataLoader, Dataset
    import torch
    import torch.nn as nn
    from torch.autograd import Variable
    import torch.optim as optim
    import torch.nn.functional as F
    import os



    class Net(nn.Module):
        def __init__(self):
            super(Net, self).__init__()
            self.fc1 = nn.Linear(784, 300)
            self.fc2 = nn.Linear(300, 100)
            self.fc3 = nn.Linear(100, 10)
        def forward(self, x):
            x = F.relu(self.fc1(x))
            x = F.relu(self.fc2(x))
            out = self.fc3(x)
            return out




    def DR_training():
        randon_number = 1
        lambda_ = 1
        epoch = 5
        model = Net()
        optimizer = torch.optim.SGD(model.parameters(), lr=0.005)
        loss_fn = torch.nn.CrossEntropyLoss()
        use_cuda = torch.cuda.is_available()



        mnist_transform = transforms.Compose([transforms.ToTensor(), transforms.Lambda(lambda x : x.resize_(28*28))])
        mnist_train = datasets.MNIST(root="mnist-data", train=True, download=True, transform=mnist_transform)
        train_loader = torch.utils.data.DataLoader(mnist_train, batch_size=32, shuffle=True, num_workers=0)
    
        for epoch_idx in range(epoch):
            for batch_idx, (inputs, targets) in enumerate(train_loader):
                if use_cuda:
                    inputs, targets = inputs.cuda(), targets.cuda()
                inputs, targets = Variable(inputs), Variable(targets)
    
                inputs.requires_grad_(True)
    
                predict = model(inputs)
    
                CE_loss = loss_fn(predict, targets)



                # DCG loss
    
                log_pro = torch.log(F.softmax(predict, 1))
    
                log_pro_target = log_pro.gather(1, targets.view(-1,1)).squeeze(1)


                grad = torch.autograd.grad(log_pro_target, inputs, grad_outputs = torch.ones_like(log_pro_target), retain_graph = True, create_graph=True)


                DCG_grad_loss = torch.mean(torch.norm(grad[0], dim = 1, p = 2))


                Hessian = torch.tensor([])
    
                for anygrad in grad[0].T:
                    Hessian_entry = torch.autograd.grad(anygrad, inputs, grad_outputs = torch.ones_like(anygrad), retain_graph = True, create_graph=True)
                    Hessian_temp = Hessian_entry[0].unsqueeze(2)
                    Hessian = torch.cat((Hessian, Hessian_temp), 2)
    
                DCG_Hessian_loss = 0
    
                for idx in range(randon_number):
                    v = (torch.randn_like(inputs) + 1).unsqueeze(1)
                    v_t = v.permute(0, 2, 1)
    
                    DCG_Hessian_loss +=  torch.mean((torch.bmm(torch.bmm(v, Hessian), v_t)))
    
                DCG_Hessian_loss = DCG_Hessian_loss / randon_number


        

                DCG_loss = DCG_grad_loss + 2 * DCG_Hessian_loss


                loss = CE_loss + lambda_ * DCG_loss
    
                optimizer.zero_grad()
                loss.backward()
                optimizer.step()
    
                print('successful')



    if __name__ == '__main__':
        DR_training()

公众号后台回复“CNN100”,获取100 篇 CNN 必读的经典论文资源下载

极市干货

技术干货数据可视化必须注意的30个小技巧总结如何高效实现矩阵乘?万文长字带你从CUDA初学者的角度入门

实操教程Nvidia Jetson TX2使用TensorRT部署yolov5s模型基于YOLOV5的数据集标注&训练,Windows/Linux/Jetson Nano多平台部署全流程

极市原创作者激励计划 #


极市平台深耕CV开发者领域近5年,拥有一大批优质CV开发者受众,覆盖微信、知乎、B站、微博等多个渠道。通过极市平台,您的文章的观点和看法能分享至更多CV开发者,既能体现文章的价值,又能让文章在视觉圈内得到更大程度上的推广,并且极市还将给予优质的作者可观的稿酬!

我们欢迎领域内的各位来进行投稿或者是宣传自己/团队的工作,让知识成为最为流通的干货!

对于优质内容开发者,极市可推荐至国内优秀出版社合作出书,同时为开发者引荐行业大牛,组织个人分享交流会,推荐名企就业机会等。


投稿须知:
1.作者保证投稿作品为自己的原创作品。
2.极市平台尊重原作者署名权,并支付相应稿费。文章发布后,版权仍属于原作者。
3.原作者可以将文章发在其他平台的个人账号,但需要在文章顶部标明首发于极市平台

投稿方式:
添加小编微信Fengcall(微信号:fengcall19),备注:姓名-投稿
△长按添加极市平台小编
点击阅读原文进入CV社区
获取更多技术干货

浏览 90
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐