如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

RainmtTank 2019-05-30

现阶段,AI 安全性研究逐渐成为学术界和工业界的重要议题和研究方向。之前大多数研究放在了测试阶段的攻击(例如对抗样本)。本文从另一个角度,即训练阶段入手,探讨如何通过有界扰动修改训练数据,从而最大程度上混淆分类器,让其在测试部署阶段做出错误判断。为此,来自南京大学和创新工场 AI 工程院的研究者提出使用类似自编码器的网络来生成这样的扰动,此类扰动具有较强的鲁棒性和迁移能力,并在 CIFAR-10 等数据集上验证了所提方法的有效性。

论文链接:https://arxiv.org/pdf/1905.09027.pdf

具有有界可迁移扰动的训练数据会导致模型泛化能力弱,那么该如何修改这样的训练数据呢?换句话说,研究者想在训练数据中添加不可感知的噪声,希望在训练数据上训练好的分类器在面对干净的测试数据时,能尽可能多地做出错误的判断,从而最大程度上混淆对应的分类器。

为了实现这一想法,文中定义了一个类似于深度编码器 - 解码器的架构来生成这样的扰动。它以干净的样本为输入,在相同的样本空间中输出相应的对抗噪声,然后在训练数据中加入这些有界噪声。与此同时,本文还将一个虚构的神经网络作为受骗分类器(victim classifier),这里的目标是让噪声生成器通过观测受骗分类器的训练过程,对抗地更新自身权重,学习出如何产生最高质量的恶意训练样本。

这里的目标是通过让自编码器更新权重来同时训练这两个网络,这样可以让受骗分类器的准确率降到最低。

和传统自编码器中将重建误差视为学习目标不同,本文将这一问题视为非线性等式约束优化问题。和 GAN 不同,这样的优化问题更难解决,而且直接实现交替更新会导致结果不稳定。受到强化学习中一些常用技术(比如引入目标网络(target-nets)等单独的记录追踪网络来稳定 Q 学习)的启发,本文提出了类似的方法,即在训练自编码器时引入伪更新步骤而解耦训练过程。通过这样的方法,优化过程在实践中非常稳定。

类似的设置还有安全社区中的数据攻击(data poisoning),但和这项工作的目的非常不同。本文采用该设置的主要目的是通过添加有界噪声检验训练数据的鲁棒性,这样可以揭示神经网络一些有趣的特性,而数据攻击关注的是只允许改变少量数据的限制。事实上,完全控制(而非只改变一些)训练数据是一个很现实的假设,例如,在一些应用中,智能体可能会同意发布一些用于同行评估或学术研究的内部数据,但不愿意启用数据接收器建立可以在真实测试数据上表现很好的模型;现在可以在发布数据前应用对抗噪声来实现这一点。

这项工作的另一个贡献在于,这种形式可以轻易地扩展到指定标签的情况,在这样的情况中,人们想要更加有针对性地欺骗分类器,它们希望分类器可以将一个输入模式识别为特定的、预定义的分类,而不是只做出错误的预测。最后,实验 2 的结果表明,对其他结构不同或类型不同的机器学习模型(比如随机森林或支持向量机)来说,这样学习到的噪声也是有效且鲁棒的。

本文所提方法详解

在用于分类的标准有监督学习过程中,人们可能想从数据学到映射 f_θ:X →{0,1}^K,式中的 K 是要预测的类别数量。为了学习最优参数 θ,需要根据训练数据定义像交叉熵这样用于分类的损失函数

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

,这样才可以应用经验风险最小化,也就是说,可以根据训练数据将损失函数最小化为:

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

图 1:学习混淆分类器的概述:解耦 f_θ 和 g_ξ 的交替更新。

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

当 f_θ 是像神经网络这样的可微分系统时,可以通过随机梯度下降(SGD)或其变体更新 θ。

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

式中 α 指学习率。

这项工作的目标是通过添加人工无法感知的噪声来扰乱训练数据,这样在测试时,分类器在干净的测试集上的行为就会有显著的不同。

为了表示这一点,我们首先要定义一个噪声生成器 g_ε:X→X,它在 X 中取一个训练样本 x,然后将它转换成同一空间 X 中不可感知的噪声模式。对于图像数据来说,这样的约束可以表示为:

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

这里的控制扰动强度是对抗设置中的常见操作。本文选择噪声生成器 g_ε 当作编码器 - 解码器神经网络,将最后一层的激活函数定义为 ε・(tanh (・)) 来促进约束 (3)。

在上述想法和公式背景下,可以将该项目表示为以下优化问题:

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

换句话说,每个可能的配置 ε 都和根据相应修正数据训练得到的分类器 f_θ∗(ξ) 搭配成对,这里的目标是找到噪声生成器 g_ξ∗,这样在所有可能的 ξ 中,成对的分类器 f_θ∗(ξ∗) 在干净的测试数据集上会得到最糟糕的表现。

这种非凸优化问题极具挑战性,特别是在非线性等式约束的背景下。本文提出了一种交替更新程序,该程序使用了一些在强化学习中保证稳定性的常用操作,这种方法很简单,但实践证明它是有效的。

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

首先,因为文中假设 f_θ 和 g_ξ 是神经网络,因此可以将等式约束近似为:

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

式中的 i 是 SGD 更新的索引。

其次,基本思想是通过梯度下降根据对抗训练数据交替更新 f_θ,并通过梯度上升根据干净数据更新 g_ξ。主要问题在于,如果直接使用这种交替方法,实际上 f_θ 和 g_ξ 都无法收敛。为了稳定这一过程,要先根据对抗训练数据更新 f_θ,同时收集 f_θ 的更新轨迹,然后根据收集到的轨迹,通过计算 f_θ 在每一个时间步上的伪更新来更新对抗训练数据和 g_ξ。这样将整个过程重复实验 T 次直到收敛为止。算法 1 和图 1 详细地说明了这一过程。

最后,本文还提出了一种修改方法以提升效率。注意在训练 f_θ 时存储整个梯度更新的轨迹是一种低效使用内存的方法。为了避免直接存储这样的信息,在训练的每一次实验中,都可以创建 g_ξ 的副本 g'ξ,用 f_θ 交替更新 g'ξ,然后将参数复制回 g_ξ。通过这样的方式,可以将每一次试验中的两个循环合并为一个循环,而且根本不需要存储梯度。算法 2 中详细地说明了这一过程。

指定标签的对抗数据

这一节简要介绍了如何将本文的设置扩展到指定标签的情况中。指定标签对抗数据的目标是,攻击者不仅希望分类器能做出错误的预测,还希望分类器的预测值能符合之前定义好的规则。例如,攻击者希望分类器可以将 A 类错误地识别为 B 类(而不是 C 类)。为了实现这一目的,预定义标签转移函数 η:Z_+→Z_+,该函数可以从一个标签映射到另一个。这里的 η 是攻击者预定义的,而且它将一个标签索引转换成了另一个不同的标签索引。这种指定标签的对抗数据可以表示为:

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

不难看出,上述问题的优化过程和算法 2 中描述的基本一致。唯一要改变的是将算法 2 中第 10 行的梯度上升换成梯度下降,并将同一行的 η(y) 换成 y,其他不变。

实验

为了验证本文提出方法的有效性,研究者用经典的 MNIST 和 CIFAR-10 数据集进行多分类,并使用 ImageNet 的子集进行二分类。对抗训练数据的随机样本如图 2 所示:

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

图 2:第一行:原始训练样本;第二行:对抗训练样本。

本文分别根据 MNIST、ImageNet 以及 CIFAR-10 训练了噪声生成器 g_ξ,相应的分类器 f_θ 的扰动约束分别为 0.3、0.1、0.032。分类结果如表 1 所示。

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

文中还可视化了在对抗训练集上训练的 f_θs 的最后隐藏层的激活,如图 3 所示。

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

图 3:第一行:对抗训练数据的深度特征;第二行:干净测试数据的深度特征。

了解扰动约束如何影响准确率和可视化表现是很有趣的,结果如图 4 所示。

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

图 4:变化的效果。

研究者还检验了修改部分训练数据后得到的结果,结果如图 5 所示:

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

图 5:在不同的 ε 下改变对抗的比率。

在 MNIST 中,研究者加倍 / 减半了所有通道 / 隐藏单元,并将模型标记为 CNNlarge 和 CNNsmall。此外,文中还训练了有 300 棵树的标准随机森林以及使用了 RBF 核、核系数等于 0.01 的支持向量机。实验结果如图 6 所示。

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

图 6:使用不同分类器时的测试性能。红色的水平线表示随机猜测的准确率。

针对 CIFAR-10 和 ImageNet,文中尝试了层数不同、包括 VGG、ResNet 以及 DenseNet 在内的不同卷积网络,并相应地评估了它们的性能。结果如图 7 所示。

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

图 7:不同模型架构的测试表现。红色的水平线表示随机猜测准确率。

为了充分说明对抗数据造成的泛化差距,在获得对抗性训练数据之后,研究者重新训练了 3 个有相同架构 f_θ 的卷积网络(每个数据集对应一个网络),并在图 8 中绘制了训练曲线。

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

图 8:f_θ 的学习曲线

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

图 9:MNIST、CIFAR-10 和 ImageNet 中的干净样本以及对应的对抗噪声。

为了验证本文提出的猜想,研究者还衡量了真实标签和仅以对抗噪声作为输入的 f_θ(g_ξ(x)) 的预测值之间的预测准确率。结果如表 2 所示。

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

表 2:仅以噪声作为输入的预测准确率。也就是说,真实标签和 f_θ(g_ξ(x)) 之间的准确率,其中 x 是干净的样本。

为了验证指定标签对抗设置的有效性,在没有泛化损失的情况下,将预测值转换为 1。对 MNIST 数据集来说,研究者希望在对抗数据上训练的分类器可以将类别 1 预测为类别 2,将类别 2 预测为类别 3…… 将类别 9 预测为类别 0。用本文第 4 节中描述的方法,研究者训练了相应的噪声生成器并在测试集上评估了相应的 CNN,如图 10 所示。

如何引诱分类器犯错?周志华等提出用自编码器生成恶意训练数据

图 10:MNIST 在不同场景下的测试集的混淆矩阵。图中总结了训练设置不同的分类器的测试性能:(a)干净的训练数据;(b)非特定标签设置;(c)特定标签设置。

相关推荐