对抗训练是一种用于提高深度学习模型抵御对抗样本(即经过有意修改以欺骗模型的输入)鲁棒性的技术。这些对抗样本是通过向数据添加微小、精心设计的扰动来创建的,这些扰动通常对人类来说是难以察觉的,却会导致模型做出错误的预测。对抗训练的目标是在训练过程中让模型接触这些样本,迫使它学习对这些操纵更具弹性的特征。这种方法解决了标准神经网络的一个关键弱点,即它们在干净数据上表现良好,但在对抗条件下会失效。
一种常见的实现方法是在训练过程中动态生成对抗样本,并将其纳入训练批次中。例如,快速梯度符号方法(FGSM)是一种流行的攻击方法,它通过计算损失函数对输入数据的梯度,并沿着最大化损失的方向调整数据来创建对抗性输入。在对抗训练期间,模型会同时在原始样本和 FGSM 生成的样本上进行训练,有效地“练习”如何抵御此类攻击。更高级的方法,如投影梯度下降(PGD),则使用多步迭代攻击来创建更强的对抗样本。通过反复让模型接触这些具有挑战性的案例,模型学会了更好地泛化,并降低了对输入扰动的敏感性。
尽管对抗训练增强了模型的安全性,但它也带来了权衡。由于生成对抗样本增加了计算开销,训练时间会显著增加。例如,在每个训练步骤中使用 PGD 可能需要比标准训练多 5-10 倍的计算资源。此外,以这种方式训练的模型可能会牺牲在干净、非对抗数据上的部分准确性——这种现象被称为鲁棒性-准确性权衡。尽管存在这些挑战,对抗训练仍然是一种基础防御方法,尤其是在自动驾驶汽车或欺诈检测等安全关键型应用中。开发者可以使用 PyTorch 或 TensorFlow 等框架实现它,方法是将攻击库(例如 CleverHans)集成到其训练循环中,并根据具体需求平衡鲁棒性和效率。