sách gpt4 ai đã đi

python - 在对抗训练期间是否应该重复使用 Dropout 面具?

In lại 作者:行者123 更新时间:2023-12-01 08:43:34 hai mươi bốn 4
mua khóa gpt4 Nike

Tôi đang sử dụng Explaining and Harnessing Adversarial Examples 中的 FGSM 方法实现对抗性训练使用自定义损失函数:

使用自定义损失函数在 tf.keras 中实现,它在概念上如下所示:

model = Sequential([
...
])

def loss(labels, logits):
# Compute the cross-entropy on the legitimate examples
cross_ent = tf.losses.softmax_cross_entropy(labels, logits)

# Compute the adversarial examples
gradients, = tf.gradients(cross_ent, model.input)
inputs_adv = tf.stop_gradient(model.input + 0.3 * tf.sign(gradients))

# Compute the cross-entropy on the adversarial examples
logits_adv = model(inputs_adv)
cross_ent_adv = tf.losses.softmax_cross_entropy(labels, logits_adv)

return 0.5 * cross_ent + 0.5 * cross_ent_adv

model.compile(optimizer='adam', loss=loss)
model.fit(x_train, y_train, ...)

这对于简单的卷积神经网络来说效果很好。

hiện hữu logits_adv = model(inputs_adv) 调用期间,模型被第二次调用。这意味着,它将使用与 model.inputs 的原始前馈传递不同的丢弃掩码。然而,inputs_adv 是使用 tf.gradients(cross_ent, model.input) 创建的,即使用原始前馈传递中的 dropout mask。这可能会出现问题,因为允许模型使用新的 dropout mask 可能会削弱对抗批处理的效果。

由于在 Keras 中实现 dropout mask 的重用会很麻烦,因此我对重用 mask 的实际效果感兴趣。这有什么不同吗?合法示例和对抗示例的测试准确性?

1 Câu trả lời

我尝试在 MNIST 上使用简单的 CNN 进行对抗性训练步骤的前馈传递过程中重用 dropout mask。我选择了与此cleverhans tutorial中使用的相同的网络架构。在 softmax 层之前有一个额外的 dropout 层。

这是结果(红色=重用dropout mask,蓝色=简单实现): nhập mô tả hình ảnh ở đây

实线代表合法测试示例的准确性。虚线表示测试集上生成的对抗性示例的准确性。

总之,如果您仅使用对抗性训练作为正则化器来提高测试准确性本身,那么重复使用 dropout mask 可能不值得。对于对抗性攻击的鲁棒性来说,它khả thi会产生很小的影响。但是,您需要对其他数据集、架构、随机种子等进行进一步的实验,才能做出更有信心的声明。

为了保持上图的可读性,我省略了未经对抗训练的模型的对抗测试示例的准确性。该值约为 10%。

您可以在 this gist 中找到此实验的代码。通过 TensorFlow 的 eager 模式,实现 dropout mask 的存储和重用非常简单。

关于python - 在对抗训练期间是否应该重复使用 Dropout 面具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53395329/

hai mươi bốn 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com