[关闭]
@shaobaobaoer 2020-04-03T11:12:21.000000Z 字数 1964 阅读 629

Universal adversarial perturbations

论文阅读 对抗样本


概要

对于任意给定的高效DNN分类器,作者都能为输入图片施加一个扰动,使得分类器以较大概率分类错误,从而实现对于dCNN的攻击。

这个“扰动”有两个特点:
1.universal,即扰动与输入图片无关,仅与模型本身相关。
2.very small,具有小的范数,从而不改变图片本身的结构。

对此,作者提出了一个算法,使得对于不同的模型VGG、GoogLeNet、ResNet等都很容易计算出各自对应的扰动。

算法步骤

为他图像空间中的分布。

对于图片集

有扰动向量

问题转化为满足确定,

其中的超参数包括了,作者称其为 fooling rate

扰动算法是基于的情况下不断迭代出最优的的,如果当前不是一个有效扰动,则令

之后再更新

计扰动图片集合为

,则停止的条件为

综上,算法的伪代码如下所示

20180525215629496.png-29.8kB

其核心部分的计算最小值,可以用多种方法来计算,如FGSM,DeepFool等

算法原理

作者用了一张很形象的图来比喻其算法

TIM截图20200403182622.png-27.2kB

假设图像集合有三个分类,图像的维度的重合情况如上所示。

那么算法在做的,就是遍历测试数据集,不断求解样本跨越决策平面的最小扰动,使用这个扰动不断优化通用对抗扰动。从而让原本距离相近的点“变远”

代码实现

UAP真的跑的,非常非常非常慢。

  1. model = tf.keras.models.load_model(MINST_LeNet5_HD5)
  2. # %%
  3. from tensorflow.keras.datasets.mnist import load_data
  4. # from dataset.GTSRB import load_data
  5. #
  6. (x_train, y_train), (x_val, y_val) = load_data()
  7. x_train = x_train.reshape(-1, 28, 28, 1).astype(np.float32) / 255.0
  8. x_val = x_val.reshape(-1, 28, 28, 1).astype(np.float32) / 255.0
  9. from art.classifiers import TensorFlowV2Classifier
  10. from art.attacks import UniversalPerturbation
  11. classifier = TensorFlowV2Classifier(model=model, clip_values=(0, 1), nb_classes=10,
  12. loss_object=tf.keras.losses.SparseCategoricalCrossentropy(),
  13. input_shape=(28, 28, 1))
  14. adv = UniversalPerturbation(classifier)
  15. img_adv = adv.generate(np.stack([x_val[0]]), np.stack([y_val[0]]))

TIM截图20200403191042.png-15.4kB

  1. Image Size 784 Shape (28, 28, 1)
  2. Noise L_0 norm: 426 54%
  3. Noise L_2 norm: 5.9866156578063965 78%
  4. Noise L_inf norm: 0.30000004172325134 1%
  5. Out[5]: (54, 78, 1)
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注