Разница между состязательной тренировкой / возмущением с FGSM в Tensorflow nsl и cleverhans - PullRequest
0 голосов
/ 07 апреля 2020

Я реализовал то, что я считаю одной и той же моделью обучения oop как в нейронно-структурированном обучении (nsl) TensorFlow, так и в библиотеке cleverhans, и что любопытно, они показывают, что модели, обученные с использованием состязательного обучения с двумя библиотеками (через nsl.AdversarialRegularization и cleverhans.attacks.FastGradientMethod), не достигают сопоставимой производительности. Однако этот вопрос не относится к этим конкретным c результатам, поэтому я не пытаюсь повторить их здесь.

Мне более интересно узнать, каковы различия в реализации для состязательного возмущения в nsl.AdversarialRegularization.perturb_on_batch() по сравнению с cleverhans реализацией той же / аналогичной функциональности, которая была бы FastGradientMethod.generate().

Документы nsl не особенно ясны, но, похоже, они подразумевают, что nsl использует метод быстрого знака градиента Goodfellow et al. 2014 , который предположительно является тем же методом, который был реализован в FastGradientMethod. Например, nsl относится к Goodfellow et al. статья в учебном пособии по состязательности и в некоторых функциях документы . Обе библиотеки позволяют задавать одинаковые параметры, например epsilon, чтобы контролировать уровень возмущения и контролировать норму, используемую для его ограничения. Тем не менее, различия в производительности, обучаемой соперниками, заставляют меня поверить, что эти библиотеки не используют одну и ту же базовую реализацию. nsl разобрать сложно, поэтому мне особенно любопытно, что там может происходить под капотом.

Каковы различия в реализации в nsl.AdversarialRegularization.perturb_on_batch() и cleverhans.attacks.FastGradientMethod.generate(), которые могут вызывать разные возмущения для одних и тех же входов? Существуют ли другие различия в этих функциях, которые могут способствовать различиям в их характеристиках (меня не интересует скорость или эффективность, но способы, которыми результаты двух возмущений могут отличаться для та же модель, эпсилон и норма).

1 Ответ

0 голосов
/ 13 апреля 2020

Да, и nsl.AdversarialRegularization.perturb_on_batch(), и cleverhans.attacks.FastGradientMethod.generate() реализуют метод быстрого градиентного знака в Goodfellow et al. 2014 . И оба предлагают параметры, такие как эпсилон и тип нормы для контроля возмущений. Поскольку и nsl, и cleverhans реализуют FGSM, сгенерированные возмущения не имеют разницы, когда конфигурации тщательно заданы. Однако некоторые детали реализации могут обрабатываться по-разному, особенно в конфигурации по умолчанию. Например,

  • cleverhans по умолчанию принимает предсказания модели в качестве меток для генерации состязательных возмущений, тогда как nsl принимает истинные метки.
  • cleverhans обычно ожидает, что модель выведет logits (поскольку по умолчанию loss_fn равен softmax_cross_entropy_with_logits), в то время как модели nsl могут выводить разные вещи. В состязательном обучении nsl tutorial модель выводит распределения вероятностей.

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

Что касается обучения состязательности, nsl.keras.AdversarialRegularization воспринимает состязание в качестве регуляризации, что означает, что модель обучается как на оригинальных, так и на состязательных примерах. cleverhans.loss.CrossEntropy также вычисляет потери как на оригинальных, так и на состязательных примерах, но схема взвешивания немного отличается. В nsl исходные и состязательные примеры взвешиваются как 1:multiplier, а в cleverhans они взвешиваются как (1-adv_coeff):adv_coeff. Обратите внимание, что в некоторых литературах используется другой подход к обучению, где модель обучается только на состязательных примерах.

...