JJJYmmm Blog - 对抗样本
type: channel
link: http://jjjymmm.cn/index.php/tag/%E5%AF%B9%E6%8A%97%E6%A0%B7%E6%9C%AC/
items: Practical no-box adversarial attacks against DNNs
items: AdvGAN++
items: AdvGAN

Practical no-box adversarial attacks against DNNs
type: item
date: 2023-04-19T10:05:00+00:00
description: 论文地址：https://dl.acm.org/doi/abs/10.5555/3495724.3496802摘要与引言目前针对深度神经网络对抗脆弱性的研究进展迅速(如对抗样本、鲁棒性检验等)。现有的攻击需要内部访问（如受害者模型架构，参数或训练集）或外部访问（查询受害者模型）。然而在许多场景中，这两种访问都可能是不可行的或成本昂贵的。本文研究了无框对抗的例子，其中攻击者既不能访问模型信息或训练集，也不能查询模型。相反，攻击者只能从与受害者模型相同的问题域中收集少量示例。这种更强大的威胁模型大大扩展了对抗性攻击的适用性。实验表明，在prototypical auto-encoding models上制作的对抗样本可以很好地转移到各种图像分类和人脸验证模型中。在www.example.com拥有的商业名人识别系统上clarifai.com，此方法将系统的平均预测准确率显著降低到仅15.40%，这与从预训练的Arcface模型中转移对抗样本的攻击相当。No-box攻击相比于现在基于查询或转移的黑盒攻击来说，攻击条件更为严格:攻击者既不能访问大规模的训练数据，也无法查询模型，只能通过从同一问题域中收集少量的辅助样本。文章的亮点在于基于无框攻击的假设，提出了在少样本(few-shot)情况下训练"替代"模型的方法。具体来说有三种训练机制：1）估计每张旋转图像的正视图；2）估计每个拼图的正确组合；3）原型图像重建。这三种策略中，前两种属于自监督学习(Self-Supervised Learning)，第三种属于监督学习。结果是第三种基于图像重建的训练方式效果最好。替代模型采用的是编码器-解码器架构的image-to-image auto-encoding models；模型预测时，首先将样本重建，通过判断重建后的样本与样本库之间的相似性确定其类别。制作对抗样本则采用在"替代"模型上应用I-FGSM方法(源码中还使用了PGD)。最后在编码器输出上还使用了ILA。ILA aims to enlarge intermediate-level perturbations in the direction of guiding examples,by maximizing projections on their mid-layer representations训练策略目标：假设良性样本$x_0$被扰动，使得被错误分类到其他标签中。我们的目标是在一个小型的数据集$\textstyle{\mathcal{X}}:=\{(x_{i},y_{i})\}_{i=0}^{n-1}$上训练一个判别(替代)模型，包括扰动的实例$x_0$。我们首先考虑仅涉及两个类的数据集，即，$y_i ∈ \{0,1\}$。在本文中，如果没有其他说明，限制n ≤ 20,从而满足few-shot的条件。对于传统监督学习来说，比如交叉熵损失+Softmax的分类DNN，少样本训练很容易带来过拟合的问题。模型的train loss会很快下降收敛，但是valid loss下降到一定程度就进入平台期(极端一点来说，就是模型记住了每张训练集图像，并没有从训练集中学到有用的特征拿来分类)。虽然可以通过数据增广、权重衰退、BN层等正则化手段弥补少样本的不足，但是在无框假设下这些手段还是不能很好地训练替代模型。(毕竟才20张图片，实在是太少了)下图是传统监督学习(以VGG/Resnet为例)在小型数据集的表现，第二行加入了各种正则化手段，基本没什么效果。(最近打比赛深刻认识到数据质量/数量的重要性在传统监督学习效果有限的情况下，作者采用了image to image方法，它在建模数据的内部分布比较成功，可能适合无框攻击的假设。在这种情况下，作者提出了他的受害者替代模型：编码器-解码器架构的image-to-image auto-encoding models。并在此基础上提出了三种训练策略(传统的交叉熵损失在这里不适用)。Reconstruction from chaos前两种方法属于自监督学习。一个是预测图像旋转角度，另一个是拼图重建，这两种方法已经证明可以提高DNN的辨别能力。这两个人物的学习目标可以表述为：$$ {\cal L}_{\mathrm{rotation/jigsaw}}={\frac{1}{n}}\sum_{i=0}^{n-1}\left|\right|\mathrm{Dec}(\mathrm{Enc}(T(x_{i})))-x_{i}|^{2} $$其中$T(.)$指旋转操作或裁剪拼接操作。虽然学习任务仍然是无监督的，但pretext information(前置任务的语义信息)是与内容相关的，应该有利于分类。Prototypical image reconstructio…

AdvGAN++
type: item
date: 2023-04-10T09:38:00+00:00
description: 简介本篇论文主要是对AdvGAN进行了一些小改进,证明了在非定向攻击中，潜在特征作为对抗生成的先验比整个输入图像更好，同时消除了对生成器遵循基于编码器-解码器的架构的需要，从而减少了训练/推理开销。论文地址：只有4页的AdvGAN++网络框架跟AdvGAN相比，主要区别在于生成器G的输入产生了变化，从原来的原始图像x变成了图像x的特征图与噪声向量的级联。而图像x的特征图是通过目标网络M的特征提取器f得到的。这两点就是AdvGAN和原始版本的最大区别。损失函数与AdvGAN类似，损失函数为$$ L(G,D)=L_{GAN}+\alpha L_{adv}+\beta L_{pert} $$其中$$ L_{GAN}=E_x[\log D(x)+E_xlog(1-D(G(z|f(x)))]\\ L_{adv}=E_x[M_t(G(z|f(x)))]\\ L_{pert}=E_x||x-G(z|f(x))||_2 $$$L_{adv}$中的$M_t$是指目标模型M将输入识别成类别t的概率(softmax处理后).其他部分与AdvGAN的损失函数一致,这里不再赘述.AdvGAN - JJJYmmm Blog训练过程训练过程如算法1所示,跟AdvGAN/GAN的方法一致,使用min-max博弈依次迭代G/D.详见Generative Adversarial Nets - JJJYmmm Blog的理论证明.总结AdvGAN++算是一个对原版的小迭代.一句话总结:使用目标模型的特征抽取器抽取原始样本的潜在特征,并将其作为生成器G的输入,取消了G需要是"encoder-decoder"架构的限制,达到了比原版更好的性能和效果.

AdvGAN
type: item
date: 2023-04-09T11:46:00+00:00
description: 简介论文地址 Generating Adversarial Examples with Adversarial Networks|IJCAI 2018本篇论文基于GAN生成对抗样本。首先提出训练一个产生扰动的前馈网络(G)来生成不同的对抗样本，再通过一个判别网络(D)判别扰动图像的真实性。并在半白盒和黑盒两种场景下进行实验。由于条件GANs能够生成高质量的图像，他们使用了类似的范例(LSGAN)来生成对抗样本。在以前的白盒攻击中，如FGSM和优化方法，对手需要有攻击的目标模型的架构和所有参数。然而，通过部署AdvGAN，一旦G得到训练，它可以立即为任何输入样本产生扰动，而不再需要访问模型本身。此攻击场景称之为半白盒。网络主体问题定义假设$X \subseteq R^n$为特征空间，n为特征维度。设训练集中的一个样本($x_i,y_i$),其中$x \subseteq X$,并服从分布$\mathbf{x_{i}}\sim\mathbf{P}_{\mathrm{data}}$,且$y_i \in Y$.攻击的目标网络是一个分类器$\mathbf{f}:{\boldsymbol{X}}\rightarrow{\boldsymbol{Y}}$,将样本空间映射到分类集合的大小,$|Y|$即分类输出的数量.对于一个样本x,攻击者的目标是生成对抗样本$x_A$,使$f(x_A) \neq y$(非定向攻击),其中y是x对应的真实标签;或者实现$f(x_A) = t$(定向攻击),其中t是目标类别.除此之外,$x_A$也应该在$L_2$等其他度量上与原始样本x足够接近(隐蔽性).AdvGAN框架与白盒攻击下图展示了AdvGAN的总体架构，主要由生成器$G$、判别器$D$和目标神经网络$f$三部分组成。这里生成器$G$以初始实例$x$为输入，产生扰动$G(x)$。然后将$x+G(x)$发送给判别器$D$，用来区分生成的数据和原始实例$x$。首先执行白盒攻击，在本例中，目标模型是$f$。$f$以$x + G ( x )$为输入输出其损失$L_{adv}$，表示预测类别与目标类 $t$ (定向攻击)之间的距离，或预测值(除去真实类别外概率最大的那个类别的概率值)与真实类别的(非定向攻击)之间的距离。对于GAN那一部分,损失函数可以写成$$ \left.{\mathcal{L}}_{\mathrm{GAN}}=\mathbb{E}_{x}\log D(\mathbf{x})+\mathbb{E}_{x}\log(1-{\mathcal{D}}(\mathbf{x}+{\mathcal{G}}(\mathbf{x}))\right) $$这部分和原始的GAN网络的损失函数基本一致,只不过原始公式第二项$D$的输入直接是$G(z)$,而不是原始图像加扰动值$x+G(x)$.因为GAN是用$G$生成图像,这里的$G$只是生成扰动.通过$L_{GAN}$,$G$和$D$将不断迭代,最终使$G$生成与原图差别不大(加上$x$后)的扰动$G(x)$.对于需要攻击的目标模型,我们定义$f$的损失函数为$$ {\mathcal{L}}_{\mathrm{adv}}^{\mathrm{f}}=\operatorname{E}_{\mathbf{x}}1_{\mathbf{f}}\left(\mathbf{x}+g(\mathbf{x}),\mathbf{t}\right) $$这里的$t$是目标类别,$l_f$是目标模型$f$的损失函数(比如交叉熵),通过$L_{adv}$,可以鼓励$x+G(x)$被目标模型$f$分类到错误的类别$t$中.当然这是定向攻击的写法,对于非定向攻击,将在代码部分讲解.还有一项损失是Hinge Loss,用于限制扰动的大小,之前在机器学习常常用作正则项.(有时间可以单独写一章细说).$$ {\mathcal{L}}_{\mathrm{hinge}}=\mathbb{E}_{\mathbf{x}}{\mathrm{max}}(0,||G(\mathbf{x})||_{\mathbf{x}}-\mathbf{c}) $$这里的$c$是超参数,限定扰动$G(x)$的$L_2$范数在c之内.至此损失函数就结束了,总结为$$ {\mathcal{L}}={\mathcal{L}}_{\mathrm{adv}}^{\mathrm{f}}+\alpha{\mathcal{L}}_{\mathrm{GAN}}+\beta{\mathcal{L}}_{\mathrm{huge}} $$这里的$\alpha,\beta$分别是$L_{GAN},L_{Hinge}$的权重.训练时和GAN一致,使用最大最小博弈迭代$G,D$.训练完成后,可以用$G$对输入的任何…