DeepFool(迷惑深度学习分类模型)测试

      AI+网络安全是当前网络攻击与防御方向比较热门和前沿的领域。同时网络安全中的漏洞挖掘、入侵检测、异常流量等传统任务也已经出现了大量基于深度学习的实现方法。然而当以深度学习为主流的人工智能应用越来越广泛之后,陆续又出现了对于人工智能应用的攻击,主要分为两种:一是白盒测试,即深度学习的模型架构和参数都已经的情况下,这种场景的攻击一般可以进行参数的修改来达到攻击的效果;二是黑盒测试,即上述情况未知的情况下进行攻击,这时候采用的攻击手段主要是对抗样本,对抗样本(adversarial examples)这一概念在Szegedy et al. (2014b)中被提出:对输入样本故意添加一些人无法察觉的细微的干扰,导致模型以高置信度给出一个错误的输出。对抗样本现在已经广泛应用于人脸识别、声纹识别等相关应用场景。

(一)论文原理      

     本文的DeepFool模型(https://arxiv.org/pdf/1511.04599.pdf)是对抗样本方法之一,它主要用以生成针对模型的minimal perturbation,且因为生成的是(近似)最小的干扰,所以可以用来估量模型的鲁棒性。

     论文中,其原理首先从二分类推导,再进一步推广到多分类中。

               

                          二分类 多分类

即在二分类问题中,超平面是实现分类的基础 ,那么要改变某个样本X0的分类,那么最小的扰动就是将X0挪到超平面上,这个距离的代价最小。多分类的问题也是类似。


  (二)实验测试

https://github.com/LTS4/DeepFool/blob/master/Python/test_deepfool.py从这个Pytorch代码进行测试,其代码写得非常简洁,其核心算法如下:

while k_i == label and loop_i < max_iter:
        pert = np.inf
        fs[0, I[0]].backward(retain_graph=True)
        grad_orig = x.grad.data.cpu().numpy().copy()

        for k in range(1, num_classes):
            zero_gradients(x)

            fs[0, I[k]].backward(retain_graph=True)
            cur_grad = x.grad.data.cpu().numpy().copy()

            # set new w_k and new f_k
            w_k = cur_grad - grad_orig
            f_k = (fs[0, I[k]] - fs[0, I[0]]).data.cpu().numpy()

            pert_k = abs(f_k)/np.linalg.norm(w_k.flatten())

            # determine which w_k to use
            if pert_k < pert:
                pert = pert_k
                w = w_k

        # compute r_i and r_tot
        # Added 1e-4 for numerical stability
        r_i =  (pert+1e-4) * w / np.linalg.norm(w)
        r_tot = np.float32(r_tot + r_i)

        pert_image = image + (1+overshoot)*torch.from_numpy(r_tot)

        x = Variable(pert_image, requires_grad=True)
        fs = net.forward(x)
        k_i = np.argmax(fs.data.cpu().numpy().flatten())

        loop_i += 1

代码测试:

(1) 输入熊猫的照片,得到的结果indri(大狐猴)


(2)大灰狼,扰动之后为:red wolf (红狼)



(3)野兔,扰动之后为:Angora(安哥拉兔)



从上面可见,这种深度学习模型的应用设计 需要考虑到这种攻击的情况 。

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值