如何系统地欺骗图像识别神经网络

本文最初发表于 Towards Data Science 博客 , 经原作者 Andre Ye 授权 , InfoQ 中文站翻译并分享
卷积神经网络(Convolutional Nerual Network , CNN)构成了图像识别的基础 , 这无疑是深度学习最重要的应用之一 。 然而“不幸”的是 , 有关深度学习的许多研究都是在数据集的“完美世界”约束下进行的——追求几个百分点的正确率 。 因此 , 尽管我们开发的架构在理论测试中效果非常好 , 但在现实世界中却不一定如此了 。
对人眼来说 , 对抗性样本或输入与普通图像难以区分 , 但却能完全骗过各种图像识别架构 。 对抗性输入的部署显然会带来许多令人不安的危险影响 , 特别是当人工智能被赋予更多自主决策的权力时 , 尤为如此 。
因此 , 理解和解决应用于深度学习的系统产生对抗性输入——伦理黑客的方法是非常重要的 。
由 Goodfellow 等人提出的一种简单的方法 , 用于系统生成对抗性输入 , 称为“快速梯度符号法”(fast gradient signed method) 。
考虑如下:

  • 输入向量 x(此为输入信息所在的位置 , 但可以将其视为一维列表) 。
  • 对抗性输入 x-hat(与 x 相同的形状 , 但值有所改变) 。
  • 一个 perbutation 向量 η(“eta” , 以产生对抗性输入向量) 。
为了执行逐个元素的乘法和求和(例如[1,2,3] [1,2,3] = 1+4+9 = 14) , 我们将第一个向量的转置乘以第二个向量 。 这就是所谓的“加权总和” 。
如何系统地欺骗图像识别神经网络文章插图
在这方面 , 我们必须实现两个目标 , 以产生对抗性输入:
  • 我们希望最大化原始输入向量的加权与扰动(改变)的加权和之间的差值 。 这会改变模型的激活状态 , 并使模型的决策过程中断 。
  • 我们希望使对抗性向量 η 的每个单独值尽可能小 , 这样整个图像在人眼来看没有改变 。
Goodfellow 等人提出的解决方案是双管齐下的 , 而且相当聪明 , 原因有几个 。
η 设置为符号 (w) , 其中 sign 函数对于负值返回 -1 , 正值返回 1(0 表示 0) 。 如果权重为负 , 则将其乘以 -1 以得到正和;如果权重为正 , 则乘以 1 而结果无变化 。
例如 , 如果权重向量为[3,-5,7] , η 将为[1,-1,1] 。 加权和为3+5+7=15 。 请注意 , 执行这个操作本质上是将负值转换为正值 , 而使正值保持不变(abs()函数) 。 这意味着每个数字都是尽可能大的 , 如果权重在区间内 , 那么就是最大可能的加权和[-1, 1] 。
考虑下面的一些“图像” 。 尽管它们以二维形式表示的 , 但可以将它们视作一维向量 。
如何系统地欺骗图像识别神经网络文章插图
【如何系统地欺骗图像识别神经网络】最终总和为 10 , 与原始输出 -7 相差很大 。 当然 , 这将会使网络的预测更加糟糕 。
这样做可以达到进行较大更改的目的 , 但一点也不谨慎 。 毕竟 , 我们的图像在我们进行干扰的时候 , 发生了明显的改变:
如何系统地欺骗图像识别神经网络文章插图
请记住 , 我们之前将最终总和表示为W(x) + w(η) , 其中w()是加权综合 , η是 perbutation 向量 , 实际上是w(x+η)的展开 。 我们想要稍微改变每个像素的值 , 虽然总效应必须最大化 , 但η的每个元素都必须足够小 , 以至于不能被注意到 。
在对抗性输入的实际产生中 , 像素数j被定义为x的jth 值加上η的第j个值 。 首先引入的表示法使用了一种简单的方式来证明η的目的 , 即大幅增加总和 , 而不一定是单个像素值 。
η 的每个元素都相当大:+1 或 -1 , 这对适当缩放的数据有很大的影响 。 为了解决这个问题 , 我们将每个 η 元素乘以一个带符号的 ? , 其中 ? 是传感器检测到的最小数值单位(或更小) 。 对于 8 位颜色 , 该数字将为 256 , 因此 ?=1/255 。