论文笔记(三)《Enhancing the Transferability of Adversarial Attacks through Variance Tuning》

《通过方差调整来增强对抗攻击的可转移性》
一、Abstract
在本文中,我们提出了一种新的方法,称为方差调优,以增强基于迭代梯度的攻击方法,并提高它们的攻击可转移性。
进一步考虑前一次迭代的梯度方差来调整当前梯度,以稳定更新方向,避免局部最优。
在这里插入图片描述
在这里插入图片描述
之前的方法只考虑优化路径上的数据点,为了避免过拟合,进一步提高对抗性攻击的可转移性,本文在每次迭代中采用先前数据点附近的梯度信息来调整当前数据点的梯度。
方差调整方法如下:
在这里插入图片描述
分类器f带有参数θ,J(x,y,θ)表示损失函数,领域上界∈’。
简单表示为:
在这里插入图片描述
实际应用中,由于输入空间的连续性,我们不能直接计算,因此,我们通过在x的邻域采样N个例子来近似它的值来计算V(x),主要代码,但是没看懂。啊啊啊啊

def grad_finish(x, one_hot, i, max_iter, alpha, grad):
    return tf.less(i, max_iter)
#
def batch_grad(x, one_hot, i, max_iter, alpha, grad):
    x_neighbor = x + tf.random.uniform(x.shape, minval=-alpha, maxval=alpha)
    # slim.arg_scope()为目标函数设置默认参数.
    with slim.arg_scope(inception_v3.inception_v3_arg_scope()):
        logits_v3, end_points_v3 = inception_v3.inception_v3(
            x_neighbor, num_classes=1001, is_training=False, reuse=tf.AUTO_REUSE)
        cross_entropy = tf.losses.softmax_cross_entropy(one_hot, logits_v3)
        grad += tf.gradients(cross_entropy, x_neighbor)[0]
    i = tf.add(i, 1)
    return x, one_hot, i, max_iter, alpha, grad

#
def graph(x, y, i, x_max, x_min, grad, variance):
    eps = 2.0 * FLAGS.max_epsilon / 255.0#max_epsilon=16
    num_iter = FLAGS.num_iter
    alpha = eps / num_iter#num_iter=10
    momentum = FLAGS.momentum#1.0
    num_classes = 1001
    #slim.arg_scope()为目标函数设置默认参数.
    with slim.arg_scope(inception_v3.inception_v3_arg_scope()):
        logits_v3, end_points_v3 = inception_v3.inception_v3(
            x, num_classes=num_classes, is_training=False, reuse=tf.AUTO_REUSE)
#返回最大的那个数值所在的下标.第一个参数是矩阵,第二个参数是0或者10表示的是按列比较返回最大值的索引,1表示按行比较返回最大值的索引)。
    pred = tf.argmax(end_points_v3['Predictions'], 1)

    first_round = tf.cast(tf.equal(i, 0), tf.int64)
    y = first_round * pred + (1 - first_round) * y
    one_hot = tf.one_hot(y, num_classes)

    cross_entropy = tf.losses.softmax_cross_entropy(one_hot, logits_v3)
    new_grad = tf.gradients(cross_entropy, x)[0]

    
    iter = tf.constant(0)
    max_iter = tf.constant(FLAGS.number)
    _, _, _, _, _, global_grad = tf.while_loop(grad_finish, batch_grad, [x, one_hot, iter, max_iter, eps*FLAGS.beta, tf.zeros_like(new_grad)])


    current_grad = new_grad + variance

    noise = momentum * grad + (current_grad) / tf.reduce_mean(tf.abs(current_grad), [1, 2, 3], keep_dims=True)

    variance = global_grad / (1. * FLAGS.number) - new_grad

    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, print_op
    return x, y, i, x_max, x_min, noise, variance

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值