Я реализовал то, что я считаю одной и той же моделью обучения 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()
, которые могут вызывать разные возмущения для одних и тех же входов? Существуют ли другие различия в этих функциях, которые могут способствовать различиям в их характеристиках (меня не интересует скорость или эффективность, но способы, которыми результаты двух возмущений могут отличаться для та же модель, эпсилон и норма).