[论文阅读笔记]Evading Defenses to Transferable Adversarial Examples by Translation-Invariant Attacks(CVPR)

Evading Defenses to Transferable Adversarial Examples by Translation-Invariant Attacks(2019 CVPR Oral)

文章简介:

  • 本文的方法既可以untargeted attack,也可以targeted attack
  • 提出一种translation-invariant攻击方法,被攻击的白盒模型的识别区域不那么敏感且可以产生迁移性更好的样本来攻击现有的防御模型。下图的结果正好证明这一效果。
  • 本文的方法可以推广到任何基于梯度的攻击方法,其具体做法就是在梯度应用于原图像前先进行卷积操作(这个处理后的梯度就是与我们的扰动息息相关了) 下图是应用于I-FGSM的效果,作者觉得这个扰动相比于FGSM更加平滑,总体来说个人感觉处理之后,把离散的密集小噪声像聚类一般聚成了不太密集的大噪声,看起来更舒服,但是我觉得这个还是比较明显的。
  • 采用上条卷积的操作方法,可以使本来需要的计算量 ( 2 k + 1 ) 2 (2k+1)^2 (2k+1)2转为了只需要计算一张图片,通过卷积的方法来模拟不同偏移的影响,大大地提高了效率!
  • 采用 L ∞ L_\infin L范数作为扰动大小衡量标准
  • DataSet: ImageNet-compatible
  • black-box模式下,攻击现有8个state-of-the-art防御模型,最好的方法TI-DIM可以达到平均82%的成功率(可迁移率)

思路来源:
防御模型对可转移的对抗实例的抵抗主要是由于防御模型与正常训练的模型相比,基于不同的识别区域进行预测。下图是使用CAM来可视化attention maps的结果,可以发现

  • 现有的模型都具有类似的attention maps,然而防御模型的attention maps会与原模型产生一定的区别(这种防御模型要么是在不同的数据分布下进行训练,要么是在分类前对输入进行转换)
  • 对于black-box attack,通常针对white-box模型.
  • 生成单个输入的对抗样本。因此,所生成的对抗样本与white model在给定输入点处的识别区域或梯度高度相关,使得很难转移到其他依赖于不同区域进行预测的防御模型。

详细过程:

由于卷积神经网络具有一定的平移不变性.事实上,CNN不是严格的平移不变的, 所以假设平移不变性是在较小的移动下才能保持。(作者在实际处理时, k &lt; = 10 k&lt;=10 k<=10,即平移的像素点也不超过10),所以有如下的近似

经过一系列推导后有

获得上述公式后,我们就可以不必计算 ( 2 k + 1 ) 2 (2k+1)^2 (2k+1)2张图片了( 2 k + 1 2k+1 2k+1是由于平移范围 ∈ [ − k , k ] \in [-k, k] [k,k]),相反我们只需要计算一张未变换前图片的梯度然后平均所有平移的梯度,作者把他化为

原则上来说越大的平移对应的权重应该越小,本文尝试了下面三种核

作者分别使用这三种核来攻击现有的最好的防御模型,结果如下

  • TI-DIM方法攻击防御模型的性能最好
  • 最佳的选择是Gaussian核
  • 不管是Gaussian核还是Linear核都比Uuniform核效果好,这也验证了我们需要对大的偏移更小的权重。

我的问题:

  • 下面代码中的似乎存在问题?
def graph(x, y, i, x_max, x_min, grad):
    ..................
    noise = tf.gradients(cross_entropy, x)[0]
    noise = tf.nn.depthwise_conv2d(
        noise, stack_kernel, strides=[
            1, 1, 1, 1], padding='SAME')
    noise = noise / tf.reduce_mean(tf.abs(noise), [1, 2, 3], keep_dims=True)
    noise = momentum * grad + noise
    x = x + alpha * tf.sign(noise)
    x = tf.clip_by_value(x, x_min, x_max)
    i = tf.add(i, 1)
    return x, y, i, x_max, x_min, noise

因为grad在代码中初始化为0,但后续没有任何的更新操作,因此这里等价于没有使用Momentum

noise = momentum * grad + noise

我觉得可能得改成

grad = momentum * grad + noise
x = x + alpha * tf.sign(grad)

如果觉得我有地方讲的不好的或者有错误的欢迎给我留言,谢谢大家阅读(点个赞我可是会很开心的哦)~

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值