为什么cleverhans pytorch教程使用log_softmax而不是logits作为输出

为什么cleverhans pytorch教程使用log_softmax而不是logits作为输出,pytorch,cleverhans,Pytorch,Cleverhans,生成对抗性示例时,通常使用logits作为神经网络的输出,然后使用交叉熵对网络进行训练 然而,我发现克里夫汉斯的教程使用log softmax,然后将pytorch模型转换为tensorflow模型,最后训练模型 我想知道是否有人知道使用logits而不是log_softmax是否会有什么不同?正如你所说,当我们从神经网络获得logits时,我们使用交叉熵来训练它。另一种方法是计算log\u softmax,然后通过最小化负对数似然(NLLLoss)来训练网络 如果您正在为分类任务培训网络,则

生成对抗性示例时,通常使用logits作为神经网络的输出,然后使用交叉熵对网络进行训练

然而,我发现克里夫汉斯的教程使用log softmax,然后将pytorch模型转换为tensorflow模型,最后训练模型


我想知道是否有人知道使用logits而不是log_softmax是否会有什么不同?

正如你所说,当我们从神经网络获得logits时,我们使用
交叉熵来训练它。另一种方法是计算
log\u softmax
,然后通过最小化负对数似然(
NLLLoss
)来训练网络

如果您正在为分类任务培训网络,则这两种方法基本相同。但是,如果您有不同的目标函数,您可能会发现这两种技术中的一种,在您的场景中特别有用

参考


我同意你所说的,但我的问题是使用logit和softmax是否会在对抗性攻击性能上有所不同。例如,在C&W攻击中,强烈建议使用logit而不是softmax。我假设在一些基本攻击中应该没有大的区别,但我不知道这在其他攻击中是否会有所不同。@DennyLaw从训练的角度来看,CrossEntropyLoss和log_softmax以及NLLLoss之间没有区别(除了数值稳定性)。如果你说的是黑匣子攻击,那么我可以理解为什么你可能想要输出softmax值,因为softmax是不可逆的,因此“隐藏”了一些关于你激活的信息。我很感激你指出了“数值稳定性”。据我所知,logsoftmax可能会受到影响,因此我很好奇其他人是如何看待它的,而且我希望有人能证实克里夫汉斯教程中是否存在“数值稳定性”问题