6.5 迁移学习攻击算法
6.5 迁移学习攻击算法
在黑盒攻击中,迁移学习攻击算法是非常重要的一种攻击算法,它的基本思想是,结构类似的深度学习网络,在面对相同的对抗样本的攻击时,具有类似的表现。也就是说如果一个攻击样本可以攻击模型a,那么有一定的概率,可以用它攻击与模型a结构类似的模型b。在机器视觉领域,大量使用了结构类似的深度学习网络,并且大量知名的机器视觉领域的深度学习模型都已经开源,比如vgg、resnet等,这也为迁移学习提供了大量的资源。
如图6-4所示,以advbox/foolbox为例,假设要攻击模型b,并且我们并不知道模型b的具体细节,但是可以找到与模型b功能和结构类似的模型a。我们使用advbox/foolbox,基于测试数据对模型a进行白盒攻击,得到可以成功攻击模型a的对抗样本。之后我们再用这些攻击样本去攻击模型b,通过advbox/foolbox得到可以成功攻击模型b的对抗样本。
图6-4 基于advbox/foolbox的迁移学习攻击流程
安全研究人员yanpei liu、xinyun chen和dawn song等人在论文《delving into transferable adversarial examples and black-box attacks》中对迁移学习攻击算法进行了系统的阐述。如图6-5所示,横轴代表已知的模型a,纵轴代表被攻击的模型b,每格代表针对模型a生成的对抗样本可以被模型b正确识别的比例。可以看出,如果使用针对同一模型白盒攻击生成的对抗样本,已经无法被原模型正确识别,因此从左上角到右下角的对角线全部都是0%。这说明在白盒攻击模型中,构建对抗性图像的效果非常好,全部不能正确识别。当验证模型和构造模型并不一致时,大部分对抗性图像的百分比也在10%~40%浮动,该结果有效证明了对抗样本在不同算法之间有一定的迁移性,或者称对抗样本的传递性。其中rmsd是均方根偏差,是对抗样本相对原始数据的扰动量的平均值。
图6-5 对抗样本在不同图像识别模型之间的迁移性
虽然基于对抗样本的传递性可以构造出对抗样本,但是成功率并不能令人满意。基于此,yanpei liu、xinyun chen和dawn song等人提出了对抗样本领域的集成学习的方法,以多个深度神经网络模型为基础构造对抗样本。
假设已知k个模型,并且可以针对这k个模型进行白盒攻击。这k个模型的softmax层输出分别为j1,…,jk,原始图像为x,原始图像对应的分类标签为y,定向攻击的分类标签为y*,对抗样本为x*,集成学习的模型可以表示为:
其中i为集成学习的参数,并且有,那么生成对抗样本的问题就可以转换成一个优化问题,优化的目标就是损失函数:
损失函数主要由两部分组成,一个是各个模型分类结果与定向攻击的分类标签的差异,另一个是扰动量的大小。优化器使用adam,经过最多100轮迭代进行优化求解,反向传递调整的参数就是针对原始数据的扰动量。下面基于tensorflow介绍主要实现过程,论文中使用的工具核心文件位于:
https://github.com/sunblaze-ucb/transferability-advdnn-pub/blob/master/
optimization.py
首先定义扰动量modifier,modifier是变量,可以用优化器调整其大小。batch_size代表批处理大小,spec.crop_size表示从原图中剪切的正方形图片的边长,spec.channels为图片通道数。
modifier = tf.variable(
np.zeros( (batch_size,spec.crop_size,spec.crop_size,spec.channels),
dtype=np.float32))
定义输入的原始图像input_image和定向攻击的标签input_label。
input_image = tf.placeholder( tf.float32, (none, spec.crop_size, spec.crop_size,
spec.channels))
input_label = tf.placeholder(tf.int32, (none))
true_image为原始图像叠加扰动后被截断后的数据,截断的上限和下限由spec.rescale[0]和spec.rescale[1]定义。
true_image = tf.minimum(tf.maximum(modifier + input_image,
-spec.mean + spec.rescale[0]),
-spec.mean + spec.rescale[1])
diff = true_image - input_image
loss2表示对抗样本和原始数据之间的差异,损失函数包含loss2主要是为了让对抗样本尽可能地接近原始数据。
loss2 = tf.sqrt(tf.reduce_mean(tf.square(true_image - input_image)))
获得各个模型的softmax层输出true_label_prob。
probs, variable_set = models.get_model(sesh, true_image, model_name)
true_label_prob = tf.reduce_mean(
tf.reduce_sum( probs *tf.one_hot(input_label,1000),[1]))
定义整个损失函数,其中loss1为各个模型分类结果与攻击目标标签的差异,使用了1e-6是机器学习训练时的一个技巧,主要为了避免log函数处理0值导致异常。
loss1 = -tf.log(true_label_prob + 1e-6)
loss = weight_loss1 * loss1 + weight_loss2 * loss2
如果是无定向攻击,损失函数的定义稍有变化。
loss1 = -tf.log(1 - true_label_prob + 1e-6)
loss = weight_loss1 * loss1 + weight_loss2 * loss2
定义优化器,使用adam,优化对象为loss,调整的参数为modifier。
optimizer = tf.train.adamoptimizer(learning_rate)
train = optimizer.minimize(loss, var_list=[modifier])
实验结果如图6-6所示,一共有五种模型,每次攻击时都使用其中四种进行集成学习,然后攻击剩下的那种模型,可以明显看出攻击效果有了很大提升,仅有不超过6%的对抗样本可以被正确识别。
位于以下网址中的论文所使用到的实验工具也已经开源。
https://github.com/sunblaze-ucb/transferability-advdnn-pub
实验中使用的数据来自于imagenet 2012,可以通过该工具中的脚本进行下载。
cd scripts
bash retrieve_data.sh
图6-6 基于集成学习算法的对抗样本攻击效果
可以通过以下命令进行测试,其中白盒攻击算法使用的是fgsm,被攻击对象目前仅支持googlenet,集成学习的模型目前支持resnet、vgg16和alexnet。
python fg_and_fgs.py -i test -o output/googlenet --model googlenet --file_list
test/test_file_list.txt
主要的命令行参数含义如下:
--input_dir: 测试数据目录
--output_dir: 对抗样本生成目录
--model: 黑盒攻击的对象,目前仅支持googlenet
--file_list: 测试数据的文件列表
在黑盒攻击中,迁移学习攻击算法是非常重要的一种攻击算法,它的基本思想是,结构类似的深度学习网络,在面对相同的对抗样本的攻击时,具有类似的表现。也就是说如果一个攻击样本可以攻击模型a,那么有一定的概率,可以用它攻击与模型a结构类似的模型b。在机器视觉领域,大量使用了结构类似的深度学习网络,并且大量知名的机器视觉领域的深度学习模型都已经开源,比如vgg、resnet等,这也为迁移学习提供了大量的资源。
如图6-4所示,以advbox/foolbox为例,假设要攻击模型b,并且我们并不知道模型b的具体细节,但是可以找到与模型b功能和结构类似的模型a。我们使用advbox/foolbox,基于测试数据对模型a进行白盒攻击,得到可以成功攻击模型a的对抗样本。之后我们再用这些攻击样本去攻击模型b,通过advbox/foolbox得到可以成功攻击模型b的对抗样本。
图6-4 基于advbox/foolbox的迁移学习攻击流程
安全研究人员yanpei liu、xinyun chen和dawn song等人在论文《delving into transferable adversarial examples and black-box attacks》中对迁移学习攻击算法进行了系统的阐述。如图6-5所示,横轴代表已知的模型a,纵轴代表被攻击的模型b,每格代表针对模型a生成的对抗样本可以被模型b正确识别的比例。可以看出,如果使用针对同一模型白盒攻击生成的对抗样本,已经无法被原模型正确识别,因此从左上角到右下角的对角线全部都是0%。这说明在白盒攻击模型中,构建对抗性图像的效果非常好,全部不能正确识别。当验证模型和构造模型并不一致时,大部分对抗性图像的百分比也在10%~40%浮动,该结果有效证明了对抗样本在不同算法之间有一定的迁移性,或者称对抗样本的传递性。其中rmsd是均方根偏差,是对抗样本相对原始数据的扰动量的平均值。
图6-5 对抗样本在不同图像识别模型之间的迁移性
虽然基于对抗样本的传递性可以构造出对抗样本,但是成功率并不能令人满意。基于此,yanpei liu、xinyun chen和dawn song等人提出了对抗样本领域的集成学习的方法,以多个深度神经网络模型为基础构造对抗样本。
假设已知k个模型,并且可以针对这k个模型进行白盒攻击。这k个模型的softmax层输出分别为j1,…,jk,原始图像为x,原始图像对应的分类标签为y,定向攻击的分类标签为y*,对抗样本为x*,集成学习的模型可以表示为:
其中i为集成学习的参数,并且有,那么生成对抗样本的问题就可以转换成一个优化问题,优化的目标就是损失函数:
损失函数主要由两部分组成,一个是各个模型分类结果与定向攻击的分类标签的差异,另一个是扰动量的大小。优化器使用adam,经过最多100轮迭代进行优化求解,反向传递调整的参数就是针对原始数据的扰动量。下面基于tensorflow介绍主要实现过程,论文中使用的工具核心文件位于:
https://github.com/sunblaze-ucb/transferability-advdnn-pub/blob/master/
optimization.py
首先定义扰动量modifier,modifier是变量,可以用优化器调整其大小。batch_size代表批处理大小,spec.crop_size表示从原图中剪切的正方形图片的边长,spec.channels为图片通道数。
modifier = tf.variable(
np.zeros( (batch_size,spec.crop_size,spec.crop_size,spec.channels),
dtype=np.float32))
定义输入的原始图像input_image和定向攻击的标签input_label。
input_image = tf.placeholder( tf.float32, (none, spec.crop_size, spec.crop_size,
spec.channels))
input_label = tf.placeholder(tf.int32, (none))
true_image为原始图像叠加扰动后被截断后的数据,截断的上限和下限由spec.rescale[0]和spec.rescale[1]定义。
true_image = tf.minimum(tf.maximum(modifier + input_image,
-spec.mean + spec.rescale[0]),
-spec.mean + spec.rescale[1])
diff = true_image - input_image
loss2表示对抗样本和原始数据之间的差异,损失函数包含loss2主要是为了让对抗样本尽可能地接近原始数据。
loss2 = tf.sqrt(tf.reduce_mean(tf.square(true_image - input_image)))
获得各个模型的softmax层输出true_label_prob。
probs, variable_set = models.get_model(sesh, true_image, model_name)
true_label_prob = tf.reduce_mean(
tf.reduce_sum( probs *tf.one_hot(input_label,1000),[1]))
定义整个损失函数,其中loss1为各个模型分类结果与攻击目标标签的差异,使用了1e-6是机器学习训练时的一个技巧,主要为了避免log函数处理0值导致异常。
loss1 = -tf.log(true_label_prob + 1e-6)
loss = weight_loss1 * loss1 + weight_loss2 * loss2
如果是无定向攻击,损失函数的定义稍有变化。
loss1 = -tf.log(1 - true_label_prob + 1e-6)
loss = weight_loss1 * loss1 + weight_loss2 * loss2
定义优化器,使用adam,优化对象为loss,调整的参数为modifier。
optimizer = tf.train.adamoptimizer(learning_rate)
train = optimizer.minimize(loss, var_list=[modifier])
实验结果如图6-6所示,一共有五种模型,每次攻击时都使用其中四种进行集成学习,然后攻击剩下的那种模型,可以明显看出攻击效果有了很大提升,仅有不超过6%的对抗样本可以被正确识别。
位于以下网址中的论文所使用到的实验工具也已经开源。
https://github.com/sunblaze-ucb/transferability-advdnn-pub
实验中使用的数据来自于imagenet 2012,可以通过该工具中的脚本进行下载。
cd scripts
bash retrieve_data.sh
图6-6 基于集成学习算法的对抗样本攻击效果
可以通过以下命令进行测试,其中白盒攻击算法使用的是fgsm,被攻击对象目前仅支持googlenet,集成学习的模型目前支持resnet、vgg16和alexnet。
python fg_and_fgs.py -i test -o output/googlenet --model googlenet --file_list
test/test_file_list.txt
主要的命令行参数含义如下:
--input_dir: 测试数据目录
--output_dir: 对抗样本生成目录
--model: 黑盒攻击的对象,目前仅支持googlenet
--file_list: 测试数据的文件列表