这两天正好看过一篇相关的paper,“EXPLAINING AND HARNESSING ADVERSARIAL EXAMPLES” 作者是Ian Goodfellow、Jonathon Shlens、Christian Szegedy,发在ICLR 2015上。

之前很多人认为是由于模型非线性的特征导致了对抗样本的产生,而Goodfellow他们却提出恰恰是模型本身的线性(或者说是通过点乘得到score的方式)引发了对抗样本。

用最简单的score function s = W.T * X举例,W是权重,X是图像转化成的矩阵。那么我如果让X' = X + n,n足够小的话,W.T * X' = W.T * X + W.T * n,也就是所谓的线性本质。

放一个cs231n中的例子:

<img src="https://pic3.zhimg.com/3ef0e44b614d1e44d22ca3ca30aa8f16_b.png" data-rawwidth="1932" data-rawheight="1082" class="origin_image zh-lightbox-thumb" width="1932" data-original="https://pic3.zhimg.com/3ef0e44b614d1e44d22ca3ca30aa8f16_r.png">
可以看到通过把x的每个维度加或减去0.5, 某一class的得分大大提升。

当然n不是随便乱取的。Goodfellow他们认为在某一个特定方向(特定方向取决于weights)上进行调整就非常容易愚弄训练出来的模型。Goodfellow他们在文章中提出了一种fast gradient sign method的方法,他们取n = sign(w)来generate一些对抗样本。具体感兴趣的话可以去看一下paper。

注意,这里的不是参数,而是样本。
就拿NN(Neural network)来说,假设我们的模型就是一个映射函数,其实如果最终NN收敛的点周围非常平坦,那么, 也就是你周围非常smooth,那么这种情况根本不会出现。 然而现在的每一层都是这种形式,这会带来的的性质就是local linear,还有一点和我们采用的激活函数ReLU等类似的有关系. 导致整个空间非常的不光滑,同时存在大量的区域是局部线性的。所以在维度足够高的空间中,在X邻域稍微变化一些,会导致的值剧烈变化。
那么这个也可以说明一些?,我们的优化最终收敛在了类似于一个坡上。
总结来说,主要原因就是 linearity和 high dimension。
对于training sample中加入adversarial samples在一定程度上与加入L2 regularization有同样的作用,但是效果比L2 regularization在adversarial samples表现的上更加好。
----------------------------------
NN训练的时候是对于参数求导,做梯度下降,收敛的时候是对于参数的梯度接近0。但是从直觉上来说,一个训练足够好的NN,对于识别物体,做物体分类,那么其结果也应该使得接近于0,如果是一个很“明确的概念”,比如非常容易识别这个图是一只猫,那么在这个概念的一个邻域内,对于图片任意微小(比如生成adverserial examples中的抖动)的抖动,不应该出现从一个概念被以较高的的置信度认为是例外一个概念。概念与概念之间应该是一个渐变的过程。
-----------------------------------
可以参考karparthy博客Breaking Linear Classifiers on ImageNet
大致介绍了最先提出adversarial examples的 Intriguing properties of neural networks ,以及后续Ian Goodfellow提出的Explaining and Harnessing Adversarial Examples,这篇文章提出的主要原因是高维度的点乘运算,使得样本的一点点小的改变,对于预测的结果影响很大。
当然啦,这种adversarial example在这些文章中都是用特别的方法构造的(上面两篇文章里有提不同的方法),最近bengio他们组发文表示就算是从相机自然采集的图像,也会有这种特性http://arxiv.org/abs/1607.02533

如何看待机器视觉的“对抗样本”问题,其原理是什么?相关推荐

  1. 对抗样本之MIM原理coding

    目录 1 引言 2 MIM原理 3 coding 3.1 训练模型 3.2 MIM对抗样本生成 3.3 可视化展示 附录 1 引言 MIM,即基于动量的基本迭代法.在BIM上加了动量的操作.不会BIM ...

  2. 对抗样本之CW原理coding

    目录 1 引言 2 算法详解 2.1 常人思路 2.2 CW算法思路 3 攻击直观对比 4 总结 5 附录 1 引言 本文采用手稿模拟的角度,尽量使读者较为直白的面对冷冰冰的公式. 抛去CW算法不谈. ...

  3. ACL2020 | 使用强化学习为机器翻译生成对抗样本

    2020-07-12 03:08:49 本文介绍的是 ACL 2020 论文<A Reinforced Generation of Adversarial Examples for Neural ...

  4. pytorch 对抗样本_【炼丹技巧】功守道:NLP中的对抗训练 + PyTorch实现

    本文分享一个"万物皆可盘"的NLP对抗训练实现,只需要四行代码即可调用.盘他. 最近,微软的FreeLB-Roberta [1] 靠着对抗训练 (Adversarial Train ...

  5. CVPR 2021 出自港中文,对抗变换提高对抗样本的可迁移性

    关注公众号,发现CV技术之美 1 引言 该论文发表于CVPR2021,主要是关于黑盒攻击中对抗样本可迁移性的研究.论文的创新点很新颖,虽然论文代码没有开源,但是自己实现起来也相对简单. 论文作者借助对 ...

  6. 对抗攻击之利用水印生成对抗样本

    本文为52CV粉丝鬼道投稿,介绍了对抗学习领域最新的工作Adv-watermark. 论文标题:Adv-watermark: A Novel Watermark Perturbation for Ad ...

  7. Push Pull:注意力攻击生成可迁移对抗样本

    1 引言  该论文是关于对抗样本可迁移性的文章.在该论文中,作者提出了一种可迁移注意力攻击(TAA\mathrm{TAA}TAA),该方法基于关注图像特定区域和特征对干净图像进行对抗扰动.另外,作者还 ...

  8. 神经网络中的对抗攻击与对抗样本

    文章来源:https://baijiahao.baidu.com/s?id=1596201339578975526&wfr=spider&for=pc 前言 在学习神经网络白盒.黑盒对 ...

  9. 对抗样本学习笔记:Adversarial Examples: Attacks and Defenses for Deep Learning

    (持续更新) 一.相关优质博客 1.全面入门 2.直观理解原理 3.相关补充论文 4.对抗防御分类 二.论文细节知识点 1.hessian矩阵(表一):hessian矩阵实际上就是函数的二阶导矩阵 H ...

最新文章

  1. 图像合成与风格转换实战
  2. android 蓝牙耗电量,外媒测试手机蓝牙耗电情况:近乎毫无影响
  3. linux 库函数拦截,如何使用net_dev_add()API过滤和拦截Linux数据包?
  4. mysql centos 源码安装_CentOS5下MySQL源码安装方式
  5. 红黑树(二)之 C语言的实现
  6. jcDate时间选取jQuery插件
  7. 必读:Java Java
  8. linux的exec函数
  9. pymongo 增删改查基本操作汇总(基本)
  10. PE知识复习之PE的各种头属性解析
  11. 【慢慢学Android】:2.SharedPreferences对数据的存储
  12. car-like robot运动机构简析
  13. 程序员心髓:移动应用API设计10大技巧
  14. 文档02_JavaScript
  15. 为Struts 2.0做好准备
  16. FXMarket奇米股指:清明节期间产品休市和出入金安排通知
  17. 微信公众号怎么发PDF?
  18. 【组合数学】通俗解释 Burnside引理和Polya定理
  19. IM即时通讯工具可以这样个性定制
  20. 顶级评委“天团”亮相,强势围观算法大咖争夺战

热门文章

  1. c语言计算日出日落时间_计算日出日落算法实现
  2. mysql索引能重复吗_mysql重复索引与冗余索引实例分析
  3. android 默认中文时区,修改android默认系统语言为中文和时区
  4. 搭建struts2.1.6环境所需要的包(7个)
  5. 关于ES性能调优几件必须知道的事
  6. Java豆瓣电影爬虫——减少与数据库交互实现批量插入
  7. 50篇经典珍藏 | Docker、Mesos、微服务、云原生技术干货
  8. 不伦不类的Action Script 3.0
  9. Guidance Package Manager button doesn’t appear in the VS menu
  10. java i 原子_为什么i ++不是原子的?