对cleverhans FastGradientMethod (FGM),对抗图像生成的质疑
Doubts with cleverhans FastGradientMethod (FGM), adversarial image generation
我有一个 keras 模型(带有最终 softmax 的 CNN),它是一个 RGB 图像 classifier。模型的输出是输入图像的 5 个可能类别(one-hot 编码)。
我正在尝试使用 Cleverhans (tensorflow library).
为我的 keras 模型生成对抗图像
生成一张对抗图像的我的代码的简化版本如下:
# model is the CNN keras model
wrap = KerasModelWrapper(model)
fgsm = FastGradientMethod(wrap, sess=session)
fgsm_params = {'eps': 16. / 256,
'clip_min': 0.,
'clip_max': 1.
}
x = tf.placeholder(tf.float32, shape=(None, img_rows, img_cols,
nchannels))
adv_x = fgsm.generate(x, **fgsm_params)
# original image is a tensor containing only one RGB image, shape=(1,48,48,3)
adv_image = adv_x.eval(session=session, feed_dict={x: original_image})
第 1 章,eps
根据我的理解,'eps' FGM参数是输入变化步长(一张图像的最小变化value/pixel)。
我观察到最终结果受eps的影响很大,有时我需要高eps才能获得有效的对抗图像,有效改变原始图像类别标签的图像。
低 eps 有时 FGM 无法获得有效的对抗性图像,即具有图像 O,标签 lO FGM 失败用 lO'!= lO 生成对抗图像 O',例如,对于 lO = [0,0,1,0,0] 我们仍然得到 lO' = [0,0,1,0,0],未能生成具有不同标签。
问题(很抱歉问题需要一组问题):
- FGM 是否总能找到有效的对抗图像?即,FGM 失败是否正常?
- 有没有办法获得生成的对抗性图像的估计质量(无需使用模型进行预测)?
- 为什么 eps 步骤的值如此重要?
- 最重要的:有没有办法告诉 FGM 更加努力地搜索对抗图像(例如,更多步骤)?
第 2 章,y_target
我还试验了 y 和 y_target 参数。
你也能解释一下参数 'y'
、'y_target'
是什么吗?
我认为 'y_target'
告诉我们要生成针对特定类别的对抗图像。
例如,我认为 feed_dict
中的 y_target = [[0,1,0,0,0]]
应该强制生成一个对抗性图像,该图像 class 与模型中的第二个 class 相结合。
- 我说得对吗? ..或者
- 我错过了什么吗?
P.s:我的问题是设置 y_target 无法生成对抗性图像。
请给我一些提示.. ;-)
此致
我从 Cleverhans 开发人员那里得到了 github 的答案,我在这里引用他们的答案:
第 1 章:
FGSM(与任何攻击一样)不能保证找到被模型错误class的对抗性图像,因为它在解决定义对抗性示例的优化问题时会进行近似。
由于各种原因,攻击可能无法找到对抗图像,一个常见的原因是梯度掩蔽。您可以在 blog post and in this paper as well as this paper.
中阅读相关内容
eps 这一步很重要,因为它是扰动的幅度。攻击首先计算扰动图像的方向(使用模型的梯度),然后在该方向上采取大小为 eps 的步长。因此,eps 大致对应于人们直觉上对 "power" 攻击的看法。
您可以在 BasicIterativeMethod
中找到 FGSM 的多步骤变体
第 2 章:
y 用于在无目标攻击的情况下指定标签(任何错误的 class 都被认为是对手的成功),而 y_target 用于在目标攻击案例中指定目标 class(仅当模型在选定的 class).
通常情况下,有针对性的攻击比无针对性的攻击需要更多的扰动(即,在 FGSM 情况下需要更高的 eps 值)。
我有一个 keras 模型(带有最终 softmax 的 CNN),它是一个 RGB 图像 classifier。模型的输出是输入图像的 5 个可能类别(one-hot 编码)。 我正在尝试使用 Cleverhans (tensorflow library).
为我的 keras 模型生成对抗图像生成一张对抗图像的我的代码的简化版本如下:
# model is the CNN keras model
wrap = KerasModelWrapper(model)
fgsm = FastGradientMethod(wrap, sess=session)
fgsm_params = {'eps': 16. / 256,
'clip_min': 0.,
'clip_max': 1.
}
x = tf.placeholder(tf.float32, shape=(None, img_rows, img_cols,
nchannels))
adv_x = fgsm.generate(x, **fgsm_params)
# original image is a tensor containing only one RGB image, shape=(1,48,48,3)
adv_image = adv_x.eval(session=session, feed_dict={x: original_image})
第 1 章,eps
根据我的理解,'eps' FGM参数是输入变化步长(一张图像的最小变化value/pixel)。
我观察到最终结果受eps的影响很大,有时我需要高eps才能获得有效的对抗图像,有效改变原始图像类别标签的图像。
低 eps 有时 FGM 无法获得有效的对抗性图像,即具有图像 O,标签 lO FGM 失败用 lO'!= lO 生成对抗图像 O',例如,对于 lO = [0,0,1,0,0] 我们仍然得到 lO' = [0,0,1,0,0],未能生成具有不同标签。
问题(很抱歉问题需要一组问题):
- FGM 是否总能找到有效的对抗图像?即,FGM 失败是否正常?
- 有没有办法获得生成的对抗性图像的估计质量(无需使用模型进行预测)?
- 为什么 eps 步骤的值如此重要?
- 最重要的:有没有办法告诉 FGM 更加努力地搜索对抗图像(例如,更多步骤)?
第 2 章,y_target
我还试验了 y 和 y_target 参数。
你也能解释一下参数 'y'
、'y_target'
是什么吗?
我认为 'y_target'
告诉我们要生成针对特定类别的对抗图像。
例如,我认为 feed_dict
中的 y_target = [[0,1,0,0,0]]
应该强制生成一个对抗性图像,该图像 class 与模型中的第二个 class 相结合。
- 我说得对吗? ..或者
- 我错过了什么吗?
P.s:我的问题是设置 y_target 无法生成对抗性图像。
请给我一些提示.. ;-) 此致
我从 Cleverhans 开发人员那里得到了 github 的答案,我在这里引用他们的答案:
第 1 章:
FGSM(与任何攻击一样)不能保证找到被模型错误class的对抗性图像,因为它在解决定义对抗性示例的优化问题时会进行近似。
由于各种原因,攻击可能无法找到对抗图像,一个常见的原因是梯度掩蔽。您可以在 blog post and in this paper as well as this paper.
中阅读相关内容eps 这一步很重要,因为它是扰动的幅度。攻击首先计算扰动图像的方向(使用模型的梯度),然后在该方向上采取大小为 eps 的步长。因此,eps 大致对应于人们直觉上对 "power" 攻击的看法。
您可以在 BasicIterativeMethod
第 2 章:
y 用于在无目标攻击的情况下指定标签(任何错误的 class 都被认为是对手的成功),而 y_target 用于在目标攻击案例中指定目标 class(仅当模型在选定的 class).
通常情况下,有针对性的攻击比无针对性的攻击需要更多的扰动(即,在 FGSM 情况下需要更高的 eps 值)。