motivation:当构建为了欺骗模型的输入时,模型是否健壮。比如垃圾邮件分类、恶意软件检测等。
- 无目标攻击:比如在图像分类中,只要让模型判别错误即可。
- 有目标攻击:想要模型将A判断为B(即B是目标)。
攻击方法
假设图片的正确类别为\(\hat{y}\),我们输入\(x\)(即对原始图片做某些改变),模型输出为\(y\)。特别注意,我们已经知道了模型参数,是为了寻找\(x\):
对于无目标攻击,我们希望\(y\)与\(\hat{y}\)差距越大越好,或者说交叉熵越大越好,所以令损失函数为\(L(x)=-e(y,\hat{y})\)
对于有目标攻击,假设目标类别为\(y_{target}\),我们会希望\(y\)与\(\hat{y}\)差距较大的同时与\(y_{target}\)差距较小,则损失函数为\(L(x)=-e(y,\hat{y})+e(y,y_{target})\)
假设原始图片为\(x^0\)(展开为向量),我们将每个维度都加一个变化量\(\bigtriangleup x_i\)(即\(x=x^0+ \bigtriangleup x\)),但是我们希望\(x\)与\(x^0\)的变化不要被人眼观测到,即设置阈值\(\varepsilon\),使得\(d(x,x^0)<\varepsilon\),\(d(x,x^0\)的计算可以使用L-2范数与L-infinity,如下图:
因此,我们的优化过程即:\(x^*=\arg \min_{d(x,x^0)< \varepsilon}L(x)\)
以上,我们是在知道模型参数的条件下进行的攻击,称为白盒攻击。如果不知道模型参数,则称为黑盒攻击,攻击方法可以是,如果有训练资料,自己train模型,如果没有也有一些其他方法......知道了攻击,如何进行防御呢?除了使用filter等,一个很好的方法就是数据增强(Data Augmentation)。