目前,研究者们提出了越来越多的黑盒攻击算法,其中基于「模拟」的攻击成为了一种新的攻击形式。来自清华的研究者解决了模型窃取攻击中长久以来存在的一个问题:训练代理模型的时候需要查询目标模型。训练了一个「万能的模拟器」, 可以模拟任何未知模型的输出,并且该模拟器在训练的时候无需查询目标模型。
介绍
最近几年,元学习风生水起,这阵风也刮到了对抗攻击领域。本文解读对抗攻击与元学习联姻的两篇典型的论文(本文分为上下两篇,此为上篇),希望对后来的研究者有所启发。
利用元学习,可以将黑盒攻击的查询复杂度降低几个数量级!CVPR 2021 的《Simulating Unknown Target Models for Query-Efficient Black-box Attacks》这篇论文解决了模型窃取攻击中长久以来存在的一个问题:训练代理模型的时候需要查询目标模型,因此查询量仍然很大,而且更为严重的问题是这种攻击方式可以被轻易地检测和防御。所以本篇论文的工作目标是训练一个「模拟器」(即 Simulator) 可以模拟任何未知模型的输出。为此,基于知识蒸馏的 MSE 损失函数被应用在元学习中的内部和外部更新来学习多种不同网络模型的输出。如此,一旦训练完成,模拟器只需要少量的查询数据微调(fine-tune) 就可以精确地模拟未知网络的输出,从而使大量的查询转移到模拟器上,有效降低攻击中目标模型的查询复杂度。
论文链接:https://arxiv.org/abs/2009.00960
代码链接:https://github.com/machanic/SimulatorAttack
在正式介绍模拟器攻击之前,我们先看看对抗攻击的分类。
本文介绍的方法对应于 Query-based attacks 下的 Score-based setting。
元学习帝国的崛起:背景知识
元学习的诞生可以追溯到八十年代,当时的深度学习还没有如今的火热规模, Jürgen Schmidhuber 在 1987 年的论文《 Evolutionary principles in self-referential learning》一文中宣告了一种全新的机器学习方法的诞生:元学习。后来, Tom Schaul、 Jürgen Schmidhuber 两人在 2010 年的论文《Metalearning》中更是确定了元学习的复兴。时间进入 2012 年,随着 Hinton 深度学习崭露头角,元学习与强化学习更是借着深度学习的大潮,在各个领域扩展到了极致(例如人脸识别领域等,均可用元学习来加以强化 cross domain 的性能)。
典型的元学习技术包括以下几个概念:
Task:元学习通常将训练数据切分成一个个小的数据子集来训练 meta-learner。“task”的意思与多任务学习的 “task” 不同,是指元学习训练所使用的数据子集。
Support set & query set: 每个 task 分成 support set 和 query set 两个子集。Support set 对应于算法中的内部更新,query set 对应于算法中的外部更新。在本论文中,support set 被命名为 meta-train set,query set 被命名为 meta-test set。
Way:是 class(类别)的别称。
Shot:指的是每个类别的样本数量。例如:1-shot 指的并不是一共只有一个数据样本,而是每个类有 1 个样本。
图 1 展示了一个典型的 K-shot 的元学习方法的一般套路,其训练阶段的数据和测试阶段的数据包含不同的类别,而训练的每个 task 又被切分成 support set(又名 meta-train set)和 query set(又名 meta-test set)。
图 1:一个典型的元学习将数据切分成 task 训练,而每个 task 包含的 5 个分类不同,1-shot 是指每个分类只有一个样本。
在测试的时候,元学习同样是在 task 上面测,每个 task 测出的准确率,汇总求和后求整体的均值。但是,值得注意的是,这种测试方法并不被本文中的模拟器攻击所采用,因为该研究的目标是攻击,而非测试各个 task 的准确度。
图 2 是一个典型的元学习方法(MAML)的算法流程,它学习每个 task 的时候先执行内部更新,再执行外部更新。内部更新学习 support set 的数据并用 SGD 将参数θ更新为θ'。而外部更新利用θ'作为网络参数,输入 query set 的数据,计算一个对θ求导的高阶梯度 meta-gradient。这些 meta-gradient 最终被用于外部更新,去更新元学习器。
图 2:MAML 的训练流程,内部更新将初始化参数的θ更新为θ',而外部更新利用θ'去计算 loss。
元学习与对抗攻击的联姻
在 ICLR 2020 的 Meta Attack 论文中,元学习与对抗攻击第一次结合。Meta Attack 方法使用 Reptile 训练一个元学习器,这是一个典型的 conv-deconv 结构的 auto-encoder。此 auto-encoder 学习不同网络的梯度数据来回归各种网络梯度。在攻击的时候,由于元学习器可以直接提供梯度输出,因此可以不用查询目标模型去估计梯度。然而如果图片分辨率较高,则梯度 map 是一个很大的矩阵,此时轻量级的 auto-encoder 就无法准确预测梯度 map 的梯度值。因此,Meta Attack 采取了一种取巧的办法,它从梯度图选择最大梯度值的 125 个元素进行回归。但是这种做法在攻击高分辨率图片时仍显得心有余而力不足(关于 Meta Attack 的详细分析见《Simulating Unknown Target Models for Query-Efficient Black-box Attacks》的 related work 一节)。于是,一种新的基于元学习的攻击方法便呼之欲出。
模拟器攻击
模拟器攻击(Simulator Attack)这篇论文致力于降低 query-based attack 的查询复杂度,因为假若攻击单个样本仅需要两位数的查询量时,该攻击便具有现实威胁。研究发现,任何黑盒模型都可以被一个相似的代理模型(即模拟器)所替代,如果能将一部分查询转移到这个模拟器上,那么真正的目标模型的查询压力便随之降低。
为了做出这种模拟器,研究者们不断探索,诞生了被称为模型窃取攻击的办法,然而,模型窃取攻击需要在训练模拟器的时候大量查询目标模型。因此,这种攻击方式仍然会造成大量的查询,而且这种查询可以轻易地被目标模型的拥有者检测和防御。
模拟器攻击首次解决了这个问题,Simulator 在训练的阶段中没有与目标模型有任何交互,仅仅是攻击时花费少量的查询,便可以极大地节省攻击的查询量。总结一下,模拟器攻击在训练阶段时使用大量不同的现有模型生成的训练数据,并且将知识蒸馏损失函数应用在元学习中,这样在测试的时候就可以模拟任何未知的黑盒模型。
模拟器的训练
模拟器的训练流程开始之前,为了达到模拟任意黑盒模型的泛化能力,研究人员收集了大量不同的分类网络,如 VGG-19、ResNet-50、MobileNet 等来构建 task,如此便建造了一个巨大的模拟环境。每个 task 中包含的数据是如下步骤生成得到:
1. 随机选择一个已训练的网络;
2. 施加 Bandits 攻击来攻击该网络产生的中间数据,数据包括攻击中产生的 query sequence 和与之对应的该网络的输出 logits 两种;
3.query sequence 按照 query pair 生成对应的迭代编号被切分成两部分:meta-train set 和 meta-test set。
图 3:模拟器攻击的数据生成流程和训练过程。
图 3 和算法 1 展示了模拟器攻击的训练过程。首先找一些真实图片作为输入,用黑盒攻击算法(Bandits)攻击一个随机选择的分类网络生成 query sequence,这些 query sequence 都是攻击中间数据,被存储在硬盘上。另外除了 query sequence,它们对应的那个分类网络的输出 logits 也被存储在硬盘上,被称为“伪标签”(即 pseudo label)。
生成好数据之后便是模拟器的训练过程了,其过程如下:
1. 初始化。该研究随机采样 K 个 task 组成一个 mini-batch 进行学习。在学习每个 task 之前,模拟器将其参数重新初始化为θ(由上一批更新得到的),这些权重θ在外部更新的时候还会再次使用,因此需要保存起来。
2.Meta-train。模拟器以 meta-train set 作为输入来进行内部更新,其内部更新过程是一个典型知识蒸馏:该研究优化 MSE 损失函数来推动模拟器的输出与随机采样的分类网络一致,优化中采用 SGD 梯度下降若干次循环。这个过程对应于攻击阶段的微调过程。
3.Meta-test。在若干迭代次数之后,模拟器网络的参数收敛到θ’。然后,损失函数值L_i通过输入第 i 个 task 的 meta-test set 到网络而得到。之后,元梯度(meta-gradient)
对θ计算得到。以上只是一个 task 得到的元梯度,K 个 task 的所有元梯度被汇总并且求均值
来更新模拟器(外部更新),由此模拟器可以学到泛化的模拟任意网络的能力。
4. 损失函数。为了训练模拟器,损失函数必不可少。我们选择了基于知识蒸馏的损失函数来让模拟器与随机选择的分类网络输出一致。这个损失函数同时被用在内部和外部更新中。给定一个 query pair Q_i的两个 query Q_i,1和Q_i,2(由于 Bandits 攻击使用有限差分法去估计梯度,因此每次迭代生成一个 query pair)。模拟器和随机选择的分类网络的 logits 输出分别记为
和p。如下 MSE 损失函数将使得模拟器的输出和伪标签趋近于一致。
模拟器攻击算法介绍
模拟器攻击的算法流程如算法 2 和图 4 所示,它沿袭了 Bandits 攻击的逻辑,值得注意的是第 8 行至第 17 行:在刚开始攻击的 t 个迭代内(warm-up 阶段),query 直接被输入到目标模型中,并且使用一个双端队列
收集这些输入和输出。在 warm-up 之后的迭代中,每隔 m 次迭代才使用一次目标模型,其余迭代一律输入使用模拟器来输出。因此目标模型和模拟器的使用是轮流交替进行的,这种方法一方面保证了大部分查询压力被转移到模拟器中,另一方面保证了模拟器每隔 m 次迭代就得到机会微调一次,这保证了后期的迭代中模拟器能「跟得上不断演化的 query 的节奏,及时与目标模型保持一致。」
图 4:模拟器攻击。前 t 次迭代为 warm-up 阶段,收集输入图片和输出来微调模拟器,后面 m 次迭代直接输入模拟器,减轻查询压力。
实验
该研究在三个数据集上进行实验:CIFAR-10、CIFAR-100 和 TinyImageNet,其中在 CIFAR-10 和 CIFAR-100 数据集上攻击 PyramidNet-272、GDAS、WRN-28 和 WRN-40 这四种网络,而在 TinyImageNet 数据集上攻击 ResNeXt-101(32x4d)、ResNeXt-101 (64x4d)和 DenseNet-121 三种网络。
在 targeted attack 中,该研究设置 target label 为原始(true label+1)%class_number。对比方法该研究选择 NES、RGF、P-RGF、Meta Attack 和 Bandits,其中 Bandits 作为基准。方法设置参数可参见表 1:
表 1:模拟器攻击的默认参数设置。
图 5:Ablation Study。
剥离实验的结果如图 5 所示。值得一看的是图 5(b),它展示了不同的 simulator-predict interval m 设置下的 untargeted 和 targeted attack 的攻击结果,虽然越大的 simulator-predict interval 会造成越多的 query 被输入给模拟器,但是也意味着模拟器得到越少的机会被微调,因此在 targeted attack 这种困难的攻击中很难达到较高的成功率。其他的结果分析可详见原始论文。
表 2:untargeted attack 的 CIFAR-10 和 CIFAR-100 数据集的实验结果。
表 3:targeted attack 的 CIFAR-10 和 CIFAR-100 数据集的结果。
表 4:
范数下的 untargeted attack 攻击 TinyImageNet 的实验结果。
表 5:
范数下的 targeted attack 攻击 TinyImageNet 的实验结果。
图 6:不同最大查询预算的限制下的成功率。
表 2 - 表 5 展示的 10000 次查询限制下实验结果,而不同的最大查询预算限制下的成功率见图 6。可以得出结论:模拟器攻击相比于 Bandits 攻击和其他攻击,可以将查询复杂度降低几个数量级而不改变成功率。这一结果同样也显示在攻击防御模型的结果中(表 6)。
表 6:
范数攻击防御模型的结果,所有防御模型皆选择 ResNet-50 backbone。
结论
「万物皆可模拟!」运用模拟器可以模仿各种未知网络的输出,甚至是训练过程中没见过的网络,这就是模拟器攻击这篇论文所展现出的强大能力。这篇论文确定了一种新的攻击形式:攻击者可以在获知目标模型的最少量的信息的情况下成功地伪造出相似的模型,即模拟器。在攻击时,这就可以将大量的查询转移到模拟器上,从而将查询复杂度显著降低而不过多地改变成功率。