Нужно ли повторно использовать маски Dropout во время состязательного обучения? - PullRequest
0 голосов
/ 20 ноября 2018

Я реализую состязательное обучение с помощью метода 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, ...)

Это хорошо работает для простой сверточной нейронной сети.

Во время вызова logits_adv = model(inputs_adv) модель вызывается во второй раз.Это означает, что он будет использовать другие маски пропуска, чем в исходном проходе с прямой связью с model.inputs.inputs_adv, однако, были созданы с tf.gradients(cross_ent, model.input), то есть с масками выпадения из исходного прохода прямой связи.Это может быть проблематично, так как разрешение модели использовать новые маски отсева, вероятно, ослабит эффект состязательной партии.

Поскольку реализация повторного использования масок отсева в Keras будет громоздкой, меня интересует фактический эффектповторного использования масок.Имеет ли это значение для точности теста как на законных, так и на состязательных примерах?

1 Ответ

0 голосов
/ 20 ноября 2018

Я попытался повторно использовать маски отсева во время прохода прямой связи этапа состязательного обучения с простым CNN на MNIST.Я выбрал ту же сетевую архитектуру, которая использовалась в этом уроке cleverhans с дополнительным выпадающим слоем перед слоем softmax.

Это результат (красный = повторное использование пропускающих масок, синий = наивная реализация) : enter image description here

Сплошные линии представляют точностьна законных тестовых примерах.Пунктирные линии обозначают точность на примерах состязаний, сгенерированных на тестовом наборе.

В заключение , если вы используете только состязательное обучение в качестве регуляризатора, чтобы улучшить саму точность теста, повторно используя отсевмаски могут не стоить усилий.Однако для устойчивости к состязательным атакам это, кажется, имеет значение.

Чтобы обеспечить удобочитаемость рисунка выше, я опустил точность примеров состязательных испытаний для модели, обученной без состязательного обучения.Значения лежат около 10%.

Код для этого эксперимента можно найти в this gist .В активном режиме TensorFlow было довольно просто реализовать сохранение и повторное использование маски выпадения.

...