MIM攻击原论文地址——https://arxiv.org/pdf/1710.06081.pdf

1.MIM攻击的原理

MIM攻击全称是 Momentum Iterative Method,其实这也是一种类似于PGD的基于梯度的迭代攻击算法。它的本质就是,在进行迭代的时候,每一轮的扰动不仅与当前的梯度方向有关,还与之前算出来的梯度方向相关。其中的衰减因子就是用来调节相关度的,decay_factor在(0,1)之间,decay_factor越小,那么迭代轮数靠前算出来的梯度对当前的梯度方向影响越小。其实仔细想想,这样做也很有道理,由于之前的梯度对后面的迭代也有影响,那么这使得,迭代的方向不会跑偏,使得总体的大方向是对的。到目前为止都是笔者对MIM比较感性的认识,下面贴出论文中比较学术的观点。

 其实为了加速梯度下降,通过累积损失函数的梯度方向上的矢量,从而(1)稳定更新(2)有助于通过 narrow valleys, small humps and poor local minima or maxima.(专业名词不知道怎么翻译,可以脑补函数图像,大致意思就是,可以有效避免局部最优)

是decay_factor,另外,在原论文中,每一次迭代对x的导数是直接算的1-范数,然后求平均,但在各个算法库以及论文实现的补充中,并没有求平均,估计这个对结果影响不太大。

2.代码实现(直接把advertorch里的代码贴过来了)

 1 class MomentumIterativeAttack(Attack, LabelMixin):
 2     """
 3     The L-inf projected gradient descent attack (Dong et al. 2017).
 4     The attack performs nb_iter steps of size eps_iter, while always staying
 5     within eps from the initial point. The optimization is performed with
 6     momentum.
 7     Paper: https://arxiv.org/pdf/1710.06081.pdf
 8     """
 9
10     def __init__(
11             self, predict, loss_fn=None, eps=0.3, nb_iter=40, decay_factor=1.,
12             eps_iter=0.01, clip_min=0., clip_max=1., targeted=False):
13         """
14         Create an instance of the MomentumIterativeAttack.
15
16         :param predict: forward pass function.
17         :param loss_fn: loss function.
18         :param eps: maximum distortion.
19         :param nb_iter: number of iterations
20         :param decay_factor: momentum decay factor.
21         :param eps_iter: attack step size.
22         :param clip_min: mininum value per input dimension.
23         :param clip_max: maximum value per input dimension.
24         :param targeted: if the attack is targeted.
25         """
26         super(MomentumIterativeAttack, self).__init__(
27             predict, loss_fn, clip_min, clip_max)
28         self.eps = eps
29         self.nb_iter = nb_iter
30         self.decay_factor = decay_factor
31         self.eps_iter = eps_iter
32         self.targeted = targeted
33         if self.loss_fn is None:
34             self.loss_fn = nn.CrossEntropyLoss(reduction="sum")
35
36     def perturb(self, x, y=None):
37         """
38         Given examples (x, y), returns their adversarial counterparts with
39         an attack length of eps.
40
41         :param x: input tensor.
42         :param y: label tensor.
43                   - if None and self.targeted=False, compute y as predicted
44                     labels.
45                   - if self.targeted=True, then y must be the targeted labels.
46         :return: tensor containing perturbed inputs.
47         """
48         x, y = self._verify_and_process_inputs(x, y)
49
50         delta = torch.zeros_like(x)
51         g = torch.zeros_like(x)
52
53         delta = nn.Parameter(delta)
54
55         for i in range(self.nb_iter):
56
57             if delta.grad is not None:
58                 delta.grad.detach_()
59                 delta.grad.zero_()
60
61             imgadv = x + delta
62             outputs = self.predict(imgadv)
63             loss = self.loss_fn(outputs, y)
64             if self.targeted:
65                 loss = -loss
66             loss.backward()
67
68             g = self.decay_factor * g + normalize_by_pnorm(
69                 delta.grad.data, p=1)
70             # according to the paper it should be .sum(), but in their
71             #   implementations (both cleverhans and the link from the paper)
72             #   it is .mean(), but actually it shouldn't matter
73
74             delta.data += self.eps_iter * torch.sign(g)
75             # delta.data += self.eps / self.nb_iter * torch.sign(g)
76
77             delta.data = clamp(
78                 delta.data, min=-self.eps, max=self.eps)
79             delta.data = clamp(
80                 x + delta.data, min=self.clip_min, max=self.clip_max) - x
81
82         rval = x + delta.data
83         return rval

View Code

个人觉得,advertorch中在迭代过程中,应该是对imgadv求导,而不是对delta求导,笔者查看了foolbox和cleverhans的实现,都是对每一轮的对抗样本求导,大家自己实现的时候可以改一下。

 

转载于:https://www.cnblogs.com/tangweijqxx/p/10623831.html

4.基于梯度的攻击——MIM相关推荐

  1. 3 基于梯度的攻击——MIM

    MIM攻击原论文地址--https://arxiv.org/pdf/1710.06081.pdf 1.MIM攻击的原理 MIM攻击全称是 Momentum Iterative Method,其实这也是 ...

  2. 2 基于梯度的攻击——PGD

    PGD攻击原论文地址--https://arxiv.org/pdf/1706.06083.pdf 1.PGD攻击的原理 PGD(Project Gradient Descent)攻击是一种迭代攻击,可 ...

  3. 3.基于梯度的攻击——PGD

    PGD攻击原论文地址--https://arxiv.org/pdf/1706.06083.pdf 1.PGD攻击的原理 PGD(Project Gradient Descent)攻击是一种迭代攻击,可 ...

  4. 论文 ❀《评价联邦学习中梯度泄漏攻击的框架》- A Framework for Evaluating Gradient Leakage Attacks in Federated Learning

    摘要 联合学习(FL)是一个新兴的分布式机器学习框架,用于与客户网络(边缘设备)进行协作式模型训练.联合学习允许客户将其敏感数据保存在本地设备上,并且只与联合服务器共享本地训练参数更新,从而默认客户隐 ...

  5. 理解GBDT算法(三)——基于梯度的版本

     理解GBDT算法(三)--基于梯度的版本 标签: GBDT梯度残差代价函数回归树 2015-03-31 16:13 1395人阅读 评论(3) 收藏 举报 本文章已收录于: 分类: Machin ...

  6. 图形处理(四)基于梯度场的网格编辑-Siggraph 2004

    基于梯度场的网格编辑,对应的Paper为<Mesh Editing with Poisson-Based Gradient Field Manipulation>,是Siggraph 20 ...

  7. 【CV】CVPR2020丨SPSR:基于梯度指导的结构保留超分辨率方法

    作者 | Alan 授权转载自 | https://zhuanlan.zhihu.com/p/121721537 CVPR2020:Structure-Preserving Super Resolut ...

  8. 合流超几何函数_【CV】CVPR2020丨SPSR:基于梯度指导的结构保留超分辨率方法

    作者 | Alan 授权转载自 | https://zhuanlan.zhihu.com/p/121721537 CVPR2020:Structure-Preserving Super Resolut ...

  9. 吴恩达机器学习(十四)推荐系统(基于梯度下降的协同过滤算法)

    目录 0. 前言 1. 基于内容的推荐算法(Content-based recommendations) 2. 计算电影特征 3. 基于梯度下降的协同过滤算法(Collaborative filter ...

最新文章

  1. python简单入门_Python简明入门教程
  2. 洛谷-不高兴的津津(升级版)-数组
  3. CIW《操作系统安全》目录
  4. C# WINFORM ListView用法详解(转)
  5. oracle set parseonly on,Set noexec on 与 Set parseonly on的区别及SQL语法检查
  6. RadioWar_RFID_LiveCD_Alpha330
  7. 盖茨买下一座城,想建成沙漠中的智慧城市
  8. 如何使用 Siri 拨打电话并使用电话功能?
  9. Atitit ftp概念与ftpclient 目录 1. Concept 1 1.1. Tftp(simple ftp) sftp ssh port22 1 1.2. ftp server
  10. 澳门中区停电2小时影响396户 1人困电梯后获救
  11. 采样频率和带宽的关系_等效时间采样示波器和实时示波器的差别?
  12. 产品经理入门攻略(3岁的PM成长分享)
  13. 关于MySql中explain结果filtered的理解
  14. 声声不息,新“声”报到
  15. 鸿蒙3.0 APP混合开发闪退问题笔记
  16. UTD2102CEX 示波器波形数据导出注意事项
  17. 【颜纠日记】精华乳,精华液,精华水和化妆水相通吗,分享操纵手段
  18. WPF的Prism框架简介
  19. 从输入URL到渲染的完整过程?
  20. 查找过的资料-防丢失

热门文章

  1. 给Mac版微信手动添加URL Scheme
  2. Java的匿名内部类
  3. 分割两个字符串得到回文串[抽象--去除具体个性取共性需求]
  4. 通达信程序接口与量化交易之间的关系
  5. linux zip命令不存在,Linux压缩命令:zip命令详解
  6. 市场前瞻:$100平板电脑
  7. 半导体领域知识 - 初级入门
  8. 前端笔记-使用CSS为前端界面设置背景底纹
  9. 《赢》+《原则》 读后感
  10. 有多远滚多远 html5游戏,自以为聪明的说说 有多远滚多远