我已经在TensorFlow的神经结构化nsl
学习(. 但是,这个问题与那些特定的结果无关,所以我不试图在这里复制它们。cleverhans
nsl.AdversarialRegularization
cleverhans.attacks.FastGradientMethod
我对对抗性扰动的实现差异nsl.AdversarialRegularization.perturb_on_batch()
与cleverhans
相同/相似功能的实现(这将是FastGradientMethod.generate()
.
nsl
文档不是特别清楚,但它们似乎暗示nsl
正在使用Goodfellow 等人的快速梯度符号方法。2014 年,这应该是在FastGradientMethod
. 例如,nsl
指 Goodfellow 等人。对抗性训练教程和一些函数文档中的论文。两个库都允许指定类似参数,例如epsilon
控制扰动水平和控制用于约束它的规范。然而,对抗训练的性能差异让我相信这些库没有使用相同的底层实现。nsl
很难解析,所以我特别好奇那里可能会发生什么。
在实现方面有什么不同,nsl.AdversarialRegularization.perturb_on_batch()
哪些cleverhans.attacks.FastGradientMethod.generate()
可能会导致相同输入的不同扰动?这些函数中是否还有其他差异可能导致它们的性能差异(我对速度或效率不感兴趣,但对于相同的模型、epsilon 和 norm 两种扰动的结果可能不同的方式)。