@shaobaobaoer
2020-04-03T11:12:21.000000Z
字数 1964
阅读 629
论文阅读
对抗样本
对于任意给定的高效DNN分类器,作者都能为输入图片施加一个扰动,使得分类器以较大概率分类错误,从而实现对于dCNN的攻击。
这个“扰动”有两个特点:
1.universal,即扰动与输入图片无关,仅与模型本身相关。
2.very small,具有小的范数,从而不改变图片本身的结构。
对此,作者提出了一个算法,使得对于不同的模型VGG、GoogLeNet、ResNet等都很容易计算出各自对应的扰动。
计为他图像空间中的分布。
对于图片集
问题转化为满足确定,
其中的超参数包括了,作者称其为 fooling rate
扰动算法是基于的情况下不断迭代出最优的的,如果当前不是一个有效扰动,则令
之后再更新。
计扰动图片集合为
综上,算法的伪代码如下所示
其核心部分的计算最小值,可以用多种方法来计算,如FGSM,DeepFool等
作者用了一张很形象的图来比喻其算法
假设图像集合有三个分类,图像的维度的重合情况如上所示。
那么算法在做的,就是遍历测试数据集,不断求解样本跨越决策平面的最小扰动,使用这个扰动不断优化通用对抗扰动。从而让原本距离相近的点“变远”
UAP真的跑的,非常非常非常慢。
model = tf.keras.models.load_model(MINST_LeNet5_HD5)
# %%
from tensorflow.keras.datasets.mnist import load_data
# from dataset.GTSRB import load_data
#
(x_train, y_train), (x_val, y_val) = load_data()
x_train = x_train.reshape(-1, 28, 28, 1).astype(np.float32) / 255.0
x_val = x_val.reshape(-1, 28, 28, 1).astype(np.float32) / 255.0
from art.classifiers import TensorFlowV2Classifier
from art.attacks import UniversalPerturbation
classifier = TensorFlowV2Classifier(model=model, clip_values=(0, 1), nb_classes=10,
loss_object=tf.keras.losses.SparseCategoricalCrossentropy(),
input_shape=(28, 28, 1))
adv = UniversalPerturbation(classifier)
img_adv = adv.generate(np.stack([x_val[0]]), np.stack([y_val[0]]))
Image Size 784 Shape (28, 28, 1)
Noise L_0 norm: 426 54%
Noise L_2 norm: 5.9866156578063965 78%
Noise L_inf norm: 0.30000004172325134 1%
Out[5]: (54, 78, 1)