从数据分布的角度提高对抗样本的可迁移性

2023-10-29

1 引言

对抗迁移性攻击一般是先通过代理模型生成对抗样本,然后将该样本迁移到其它黑盒模型中进行攻击,对抗迁移性的根本原因目前仍有待于探究。以前的工作主要从模型的角度探讨原因,例如决策边界、模型架构和模型容量等。在该论文中,作者从数据分布的角度研究对抗样本的可迁移性,其核心思想是针对于无目标攻击,将图像移出其原始分布会使不同的模型很难对图像进行正确分类。针对于有目标攻击,则是将图像拖入目标分布会误导模型将图像分类为目标类。因此作者提出了一种通过操纵图像的分布来生成对抗样本的新方法。实验结果证明了所提出方法的有效性。

论文链接:https://arxiv.org/abs/2210.04213
论文代码:https://github.com/alibaba/easyrobust

2 预备知识

给定一个参数 θ \theta θ的代理模型 f θ f_\theta fθ,图像 x \boldsymbol{x} x,标签 y y y,其中共 n n n类, f θ ( x ) [ k ] f_\theta(x)[k] fθ(x)[k]表示神经网络最后一层第 k k k类输出,则条件概率 p θ ( y ∣ x ) p_\theta(y|\boldsymbol{x}) pθ(yx)表示为
p θ ( y ∣ x ) = exp ⁡ ( f θ ( x ) [ y ] ) ∑ k = 1 n exp ⁡ ( f θ ( x ) [ k ] ) p_\theta(y|\boldsymbol{x})=\frac{\exp(f_\theta(\boldsymbol{x})[y])}{\sum\limits_{k=1}^n \exp(f_\theta(\boldsymbol{x})[k])} pθ(yx)=k=1nexp(fθ(x)[k])exp(fθ(x)[y])对抗扰动通常是损失函数 L \mathcal{L} L关于样本 x \boldsymbol{x} x的梯度,无目标攻击可以表示为:
x ′ = x + ∇ x L ( f θ ( x ) , y ) = x − ∇ x log ⁡ p θ ( y ∣ x ) \boldsymbol{x}^\prime =\boldsymbol{x}+\nabla_{\boldsymbol{x}}\mathcal{L}(f_\theta(\boldsymbol{x}),y)=\boldsymbol{x}-\nabla_{\boldsymbol{x}}\log p_\theta(y|\boldsymbol{x}) x=x+xL(fθ(x),y)=xxlogpθ(yx)其中 x ′ \boldsymbol{x}^\prime x x \boldsymbol{x} x的对抗样本。有目标公式可以表示为 x ′ = x − ∇ x L ( f θ ( x ) , y t a r g e t ) = x + ∇ x log ⁡ p θ ( y t a r g e t ∣ x ) \boldsymbol{x}^\prime=\boldsymbol{x}-\nabla_{\boldsymbol{x}}\mathcal{L}(f_\theta(\boldsymbol{x}),y_{\mathrm{target}})=\boldsymbol{x}+\nabla_{\boldsymbol{x}}\log p_\theta(y_{\mathrm{target}}|\boldsymbol{x}) x=xxL(fθ(x),ytarget)=x+xlogpθ(ytargetx)

3 论文方法

在介绍论文方法之前,需要先对比一下在黑盒迁移攻击中作者的攻击策略与流行攻击策略的不同之处。如下图所示,一般流行的攻击策略先用数据集训练出一个普通的代理分类模型,然后在该代理模型中利用一个好的攻击算法去生成对抗样本,再将该对抗样本迁移到其它黑盒模型中进行攻击,该攻击策略的核心部分在于提出一个好的攻击算法。而论文中,作者的攻击策略是先训练出一个好的代理模型,该分类模型不仅可以正确分类样本,而且可以估计出数据分布关于样本的梯度,然后在该代理模型中利用一个普通攻击算法去生成对抗样本,再将该对抗样本迁移到其它黑盒模型中进行攻击,该攻击策略的核心部分在于提出一个多功能的代理模型分类器。

作者从数据分布的视角下提出了一个可以理解和提高对抗样本可迁移性的算法,该算法建立在机器学习方法中的经典假设之上,深度学习模型可以正确分类与训练集独立同分布的验证集的数据,但很难对分布外的样本进行分类,即深度学习模型能够正确将与 p D ( x ∣ y ) p_D(\boldsymbol{x}|y) pD(xy)独立同分布的数据分类预测为标签 y y y,但是它不能处理该分布以外的数据。作者假设将图片移动到初始分布以外的区域即可实现迁移性高的无目标攻击,将图片移动到目标分布 p D ( x ∣ y t a r g e t ) p_D(\boldsymbol{x}|y_{\mathrm{target}}) pD(xytarget)即可实现迁移性高的有目标攻击。即如下两图所示:


作者借用score-matching生成模型的想法,其中该方法主要估计真实数据分布的梯度,然后通过SGLD的迭代公式将图像从初始分布 P D ( x ∣ y 0 ) P_D(\boldsymbol{x}|y_0) PD(xy0)移动到目标分布 P D ( x ∣ y ) P_D(\boldsymbol{x}|y) PD(xy)
x t = x t − 1 + α ⋅ ∇ x t − 1 log ⁡ p D ( x t − 1 ∣ y ) + 2 α ⋅ ϵ \boldsymbol{x}_t = \boldsymbol{x}_{t-1}+\alpha \cdot \nabla_{\boldsymbol{x}_{t-1}}\log p_D(\boldsymbol{x}_{t-1}|y)+\sqrt{2\alpha}\cdot \epsilon xt=xt1+αxt1logpD(xt1y)+2α ϵ其中 ϵ ∼ N ( 0 , I ) \epsilon \sim\mathcal{N}(0,I) ϵN(0,I) α \alpha α表示固定步长。当 α → 0 \alpha \rightarrow 0 α0 T → ∞ T\rightarrow \infty T时, x T \boldsymbol{x}_T xT则精确地从分布 p D ( x ∣ y ) p_D(\boldsymbol{x}|y) pD(xy)采样。

作者定义了对数条件概率密度梯度和真实标签条件数据分布梯度的距离公式
D C G = E p D ( y ) E p D ( x ∣ y ) ∥ ∇ x log ⁡ p θ ( y ∣ x ) − ∇ x log ⁡ p D ( x ∣ y ) ∥ 2 2 = ∫ ∫ ∥ ∇ x log ⁡ p θ ( y ∣ x ) − ∇ x log ⁡ p D ( x ∣ y ) ∥ 2 2 p D ( x ∣ y ) p D ( y ) d x d y = ∫ ∫ ∥ ∇ x log ⁡ p D ( x ∣ y ) ∥ 2 2 p D ( x ∣ y ) p D ( y ) d x d y + ∫ ∫ ∥ ∇ x log ⁡ p θ ( y ∣ x ) ∥ 2 2 p D ( x ∣ y ) p D ( y ) d x d y − 2 ∫ ∫ ( ∇ x log ⁡ p θ ( y ∣ x ) ⊤ ⋅ ∇ x log ⁡ p D ( x ∣ y ) ) p D ( x ∣ y ) p D ( y ) d x d y \begin{aligned}\mathrm{DCG}&=\mathbb{E}_{p_D(y)}\mathbb{E}_{p_D(\boldsymbol{x}|y)}\|\nabla_{\boldsymbol{x}}\log p_\theta(y|\boldsymbol{x})-\nabla_{\boldsymbol{x}}\log p_D(\boldsymbol{x}|y)\|_2^2\\&=\int\int\|\nabla_{\boldsymbol{x}}\log p_\theta(y|\boldsymbol{x})-\nabla_{\boldsymbol{x}}\log p_D(\boldsymbol{x}|y)\|_2^2 p_D(\boldsymbol{x}|y)p_D(y)d\boldsymbol{x}dy\\&=\int\int\|\nabla_{\boldsymbol{x}}\log p_D(\boldsymbol{x}|y)\|_2^2 p_D(\boldsymbol{x}|y)p_D(y)d\boldsymbol{x}dy\\&+\int\int\|\nabla_{\boldsymbol{x}}\log p_\theta(y|\boldsymbol{x})\|_2^2 p_D(\boldsymbol{x}|y)p_D(y)d\boldsymbol{x}dy \\&-2\int\int(\nabla_{\boldsymbol{x}}\log p_\theta (y|\boldsymbol{x})^\top\cdot \nabla_{\boldsymbol{x}}\log p_D (\boldsymbol{x}|y))p_D(\boldsymbol{x}|y)p_D(y)d\boldsymbol{x}dy\end{aligned} DCG=EpD(y)EpD(xy)xlogpθ(yx)xlogpD(xy)22=∫∫xlogpθ(yx)xlogpD(xy)22pD(xy)pD(y)dxdy=∫∫xlogpD(xy)22pD(xy)pD(y)dxdy+∫∫xlogpθ(yx)22pD(xy)pD(y)dxdy2∫∫(xlogpθ(yx)xlogpD(xy))pD(xy)pD(y)dxdy第一项与参数 θ \theta θ无关可以忽略;中间项比较难求因为真实分布不可知;最后一项不能够直接计算,因为 ∇ x log ⁡ p D ( x ∣ y ) \nabla_{\boldsymbol{x}}\log p_D(\boldsymbol{x}|y) xlogpD(xy)是不可知的。利用部分积分法可以对以上公式进行简化,具体推导如下所示 ∫ − ∞ + ∞ p D ( y ) ∫ x ∈ R n ( ∇ x log ⁡ p θ ( y ∣ x ) ⊤ ⋅ ∇ x log ⁡ p D ( x ∣ y ) ) p D ( x ∣ y ) d x d y = ∫ − ∞ + ∞ p D ( y ) ∫ x ∈ R n ( ∇ x log ⁡ p θ ( y ∣ x ) ⊤ ⋅ ∇ x p D ( x ∣ y ) ) d x d y = ∫ − ∞ + ∞ p D ( y ) ∑ i = 1 n ∫ x ∈ R n ∇ x i log ⁡ p θ ( y ∣ x ) ∇ x i p D ( x ∣ y ) d x d y = ∫ − ∞ + ∞ p D ( y ) ∑ i = 1 n ∫ x ~ i ∈ R n − 1 [ ∫ − ∞ + ∞ ∇ x i log ⁡ p θ ( y ∣ x ) ∇ x i p D ( x ∣ y ) d x i ] d x ~ i d y = ∫ − ∞ + ∞ p D ( y ) ∑ i = 1 n ∫ x ~ i ∈ R n − 1 [ lim ⁡ M → ∞ p D ( x ∣ y ) ∇ x i log ⁡ p θ ( y ∣ x ) ∣ − M i + M i ] d x ~ i d y − ∫ − ∞ + ∞ p D ( y ) ∑ i = 1 n ∫ x ~ i ∈ R n − 1 [ ∫ − ∞ + ∞ p D ( x ∣ y ) ∇ x i 2 log ⁡ p θ ( y ∣ x ) d x i ] d x ~ i d y = ∫ − ∞ + ∞ p D ( y ) ∑ i = 1 n ∫ x ~ i ∈ R n − 1 [ lim ⁡ M → ∞ p D ( x ∣ y ) ∇ x i log ⁡ p θ ( y ∣ x ) ∣ − M i + M i ] d x ~ i − ∫ − ∞ + ∞ p D ( y ) ∑ i = 1 n ∫ x ∈ R n [ p D ( x ∣ y ) ∇ x i 2 log ⁡ p θ ( y ∣ x ) ] d x d y = ∫ − ∞ ∞ p D ( y ) d y ∑ i = 1 n ∫ x ~ ∈ R n − 1 [ lim ⁡ M → ∞ p D ( x ∣ y ) ∇ x i log ⁡ p θ ( y ∣ x ) ∣ − M i + M i ] d x ~ i d y − E p D ( y ) E p D ( x ∣ y ) [ t r ( ∇ x 2 log ⁡ p θ ( y ∣ x ) ) ] = − E p D ( y ) E p D ( x ∣ y ) [ t r ( ∇ x 2 log ⁡ p θ ( y ∣ x ) ) ] \begin{aligned}&\int_{-\infty}^{+\infty}p_D(y)\int_{\boldsymbol{x}\in\mathbb{R}^n}(\nabla_{\boldsymbol{x}}\log p_\theta(y|\boldsymbol{x})^{\top}\cdot\nabla_{\boldsymbol{x}}\log p_D(\boldsymbol{x}|y))p_D(\boldsymbol{x}|y)d\boldsymbol{x}dy\\=&\int_{-\infty}^{+\infty}p_D(y)\int_{\boldsymbol{x}\in\mathbb{R}^n}(\nabla_{\boldsymbol{x}}\log p_\theta(y|\boldsymbol{x})^\top \cdot \nabla_{\boldsymbol{x}}p_D(\boldsymbol{x}|y))d\boldsymbol{x}dy\\=&\int_{-\infty}^{+\infty}p_D(y)\sum\limits_{i=1}^n\int_{\boldsymbol{x}\in \mathbb{R}^n}\nabla_{x_i}\log p_\theta (y|\boldsymbol{x})\nabla_{x_i}p_D(\boldsymbol{x}|y)d\boldsymbol{x}dy\\=&\int_{-\infty}^{+\infty}p_D(y)\sum\limits_{i=1}^n \int_{\tilde{\boldsymbol{x}}_i\in\mathbb{R}^{n-1}}\left[\int_{-\infty}^{+\infty}\nabla_{x_i}\log p_\theta (y|\boldsymbol{x})\nabla_{x_i}p_D(\boldsymbol{x}|y)dx_i\right]d\tilde{\boldsymbol{x}}_idy\\=&\int_{-\infty}^{+\infty}p_D(y)\sum\limits_{i=1}^n\int_{\tilde{\boldsymbol{x}}_i\in \mathbb{R}^{n-1}}\left[\lim\limits_{M\rightarrow \infty}p_D(\boldsymbol{x}|y)\nabla_{\boldsymbol{x}_i}\log p_\theta(y|\boldsymbol{x})|_{-M_i}^{+M_i}\right]d\tilde{\boldsymbol{x}}_idy\\-&\int_{-\infty}^{+\infty}p_D(y)\sum\limits_{i=1}^n\int_{\tilde{\boldsymbol{x}}_i\in\mathbb{R}^{n-1}}\left[\int_{-\infty}^{+\infty}p_D(\boldsymbol{x}|y)\nabla_{x_i}^2 \log p_\theta (y|\boldsymbol{x})dx_i\right]d\tilde{\boldsymbol{x}}_idy\\=&\int_{-\infty}^{+\infty}p_D(y)\sum\limits_{i=1}^n \int_{\tilde{\boldsymbol{x}}_i\in\mathbb{R}^{n-1}}\left[\lim\limits_{M\rightarrow \infty}p_D(\boldsymbol{x}|y)\nabla_{x_i}\log p_\theta(y|\boldsymbol{x})|_{-M_i}^{+M_i}\right]d\tilde{\boldsymbol{x}}_i\\-&\int_{-\infty}^{+\infty}p_D(y)\sum\limits_{i=1}^n\int_{\boldsymbol{x}\in\mathbb{R}^n}\left[p_D(\boldsymbol{x}|y)\nabla_{x_i}^2 \log p_\theta (y|\boldsymbol{x})\right]d\boldsymbol{x}dy\\=&\int_{-\infty}^{\infty}p_D(y)dy\sum\limits_{i=1}^n\int_{\tilde{\boldsymbol{x}}\in\mathbb{R}^{n-1}}\left[\lim\limits_{M\rightarrow \infty}p_D(\boldsymbol{x}|y)\nabla_{x_i}\log p_\theta(y|\boldsymbol{x})|^{+M_i}_{-M_i}\right]d\tilde{\boldsymbol{x}}_idy\\-&\mathbb{E}_{p_D(y)}\mathbb{E}_{p_D(\boldsymbol{x}|y)}\left[\mathrm{tr}(\nabla_{\boldsymbol{x}}^2\log p_\theta(y|\boldsymbol{x}))\right]\\=&-\mathbb{E}_{p_D(y)}\mathbb{E}_{p_D(\boldsymbol{x}|y)}\left[\mathrm{tr}(\nabla^2_{\boldsymbol{x}}\log p_\theta(y|\boldsymbol{x}))\right]\end{aligned} =======+pD(y)xRn(xlogpθ(yx)xlogpD(xy))pD(xy)dxdy+pD(y)xRn(xlogpθ(yx)xpD(xy))dxdy+pD(y)i=1nxRnxilogpθ(yx)xipD(xy)dxdy+pD(y)i=1nx~iRn1[+xilogpθ(yx)xipD(xy)dxi]dx~idy+pD(y)i=1nx~iRn1[MlimpD(xy)xilogpθ(yx)Mi+Mi]dx~idy+pD(y)i=1nx~iRn1[+pD(xy)xi2logpθ(yx)dxi]dx~idy+pD(y)i=1nx~iRn1[MlimpD(xy)xilogpθ(yx)Mi+Mi]dx~i+pD(y)i=1nxRn[pD(xy)xi2logpθ(yx)]dxdypD(y)dyi=1nx~Rn1[MlimpD(xy)xilogpθ(yx)Mi+Mi]dx~idyEpD(y)EpD(xy)[tr(x2logpθ(yx))]EpD(y)EpD(xy)[tr(x2logpθ(yx))]其中 ∇ x \nabla_{\boldsymbol{x}} x表示关于 x \boldsymbol{x} x的Hessian矩阵, + M i +M_i +Mi表示向量 [ x 1 , ⋯   , x i − 1 , + M , x i + 1 , ⋯   , x n ] [x_1,\cdots,x_{i-1},+M,x_{i+1},\cdots,x_n] [x1,,xi1,+M,xi+1,,xn] − M i -M_i Mi表示向量 [ x 1 , ⋯   , x i − 1 , − M , x i + 1 , ⋯   , x n ] [x_1,\cdots,x_{i-1},-M,x_{i+1},\cdots,x_n] [x1,,xi1,M,xi+1,,xn] x = [ x 1 , ⋯   , x n ] \boldsymbol{x}=[x_1,\cdots,x_n] x=[x1,,xn]表示 n n n维向量。 x ~ i = [ x 1 , ⋯   , x i − 1 , x i + 1 , ⋯   , x n ] \tilde{x}_i=[x_1,\cdots,x_{i-1},x_{i+1},\cdots,x_n] x~i=[x1,,xi1,xi+1,,xn]。因为当 ∥ x ∥ 2 → ∞ \|\boldsymbol{x}\|_2\rightarrow \infty x2时,概率分布 p D ( x ∣ y ) → 0 p_D(\boldsymbol{x}|y)\rightarrow 0 pD(xy)0,进而则有如下公式 ∫ − ∞ + ∞ ∇ x i f ( x ) ∇ x i g ( x ) d x i = lim ⁡ M → ∞ g ( x ) ∇ x i f ( x ) ∣ − M i + M i − ∫ − ∞ + ∞ g ( x ) ∇ x i 2 f ( x ) d x i \int_{-\infty}^{+\infty}\nabla_{x_i}f(\boldsymbol{x})\nabla_{x_i}g(\boldsymbol{x})dx_i=\lim\limits_{M\rightarrow \infty}g(\boldsymbol{x})\nabla_{x_i}f(\boldsymbol{x})|_{-M_i}^{+M_i}-\int_{-\infty}^{+\infty}g(\boldsymbol{x})\nabla_{x_i}^2f(\boldsymbol{x})dx_i +xif(x)xig(x)dxi=Mlimg(x)xif(x)Mi+Mi+g(x)xi2f(x)dxi综上所述,DCG距离公式可以重新表示为 D C G = E p D ( y ) E p D ( x ∣ y ) ∥ ∇ x log ⁡ p θ ( y ∣ x ) − ∇ x log ⁡ p D ( x ∣ y ) ∥ 2 2 = E p D ( y ) E p D ( x ∣ y ) ∥ ∇ x log ⁡ p θ ( y ∣ x ) ∥ 2 2 + 2 E p D ( y ) E p D ( x ∣ y ) [ t r ( ∇ x 2 log ⁡ p θ ( y ∣ x ) ) ] + c o n s t \begin{aligned}\mathrm{DCG}&=\mathbb{E}_{p_D(y)}\mathbb{E}_{p_D(\boldsymbol{x}|y)}\|\nabla_{\boldsymbol{x}}\log p_\theta(y|\boldsymbol{x})-\nabla_{\boldsymbol{x}}\log p_D(\boldsymbol{x}|y)\|_2^2\\&=\mathbb{E}_{p_D(y)}\mathbb{E}_{p_D(\boldsymbol{x}|y)}\|\nabla_{\boldsymbol{x}}\log p_\theta(y|\boldsymbol{x})\|_2^2+2\mathbb{E}_{p_D(y)}\mathbb{E}_{p_D(\boldsymbol{x}|y)}\left[\mathrm{tr}(\nabla^2_{\boldsymbol{x}}\log p_\theta(y|\boldsymbol{x}))\right]+\mathrm{const}\end{aligned} DCG=EpD(y)EpD(xy)xlogpθ(yx)xlogpD(xy)22=EpD(y)EpD(xy)xlogpθ(yx)22+2EpD(y)EpD(xy)[tr(x2logpθ(yx))]+const忽略常数项,进而则有 L D C G = E p D ( y ) E p D ( x ∣ y ) ∥ ∇ x log ⁡ p θ ( y ∣ x ) ∥ 2 2 + 2 E p D ( y ) E p D ( x ∣ y ) [ t r ( ∇ x 2 log ⁡ p θ ( y ∣ x ) ) ] \mathcal{L}_{\mathrm{DCG}}=\mathbb{E}_{p_D(y)}\mathbb{E}_{p_D(\boldsymbol{x}|y)}\|\nabla_{\boldsymbol{x}}\log p_\theta(y|\boldsymbol{x})\|_2^2+2\mathbb{E}_{p_D(y)}\mathbb{E}_{p_D(\boldsymbol{x}|y)}\left[\mathrm{tr}(\nabla^2_{\boldsymbol{x}}\log p_\theta(y|\boldsymbol{x}))\right] LDCG=EpD(y)EpD(xy)xlogpθ(yx)22+2EpD(y)EpD(xy)[tr(x2logpθ(yx))]以上公式涉及到求解Hessian矩阵的迹,当矩阵的维度很高时,计算量也会飙升。当给定任意方阵 A \boldsymbol{A} A,可以采用一种随机算法去估计矩阵的迹 t r ( A ) \mathrm{tr}(\boldsymbol{A}) tr(A),给定一个随机向量 v \boldsymbol{v} v且有 E p ( v ) [ v v ⊤ ] = I \mathbb{E}_{p(\boldsymbol{v})}\left[\boldsymbol{v}\boldsymbol{v}^\top\right]=I Ep(v)[vv]=I,进而则有 t r ( A ) = E p ( v ) [ v ⊤ A v ] \mathrm{tr}({\boldsymbol{A}})=\mathbb{E}_{p(\boldsymbol{v})}\left[\boldsymbol{v}^\top\boldsymbol{A}\boldsymbol{v}\right] tr(A)=Ep(v)[vAv]。所以可以用 E p ( v ) [ v ⊤ ∇ x 2 log ⁡ p θ ( y ∣ x ) v ] \mathbb{E}_{p(\boldsymbol{v})}\left[\boldsymbol{v}^\top\nabla_{\boldsymbol{x}}^2\log p_\theta(y|\boldsymbol{x})\boldsymbol{v}\right] Ep(v)[vx2logpθ(yx)v]代替矩阵的迹 t r ( ∇ x 2 log ⁡ p θ p ( y ∣ x ) ) \mathrm{tr}(\nabla_{\boldsymbol{x}}^2\log p_\theta p(y|\boldsymbol{x})) tr(x2logpθp(yx)),所以损失函数 D C G \mathcal{\mathrm{DCG}} DCG可以表示为 L D C G = E p D ( y ) E p D ( x ∣ y ) ∥ ∇ x log ⁡ p θ ( y ∣ x ) ∥ 2 2 + 2 E p D ( y ) E p D ( x ∣ y ) E p ( v ) [ v ⊤ ∇ x 2 log ⁡ p θ ( y ∣ x ) v ] \mathcal{L}_{\mathrm{DCG}}=\mathbb{E}_{p_D(y)}\mathbb{E}_{p_D(\boldsymbol{x}|y)}\|\nabla_{\boldsymbol{x}}\log p_\theta(y|\boldsymbol{x})\|_2^2+2\mathbb{E}_{p_D(y)}\mathbb{E}_{p_D(\boldsymbol{x}|y)}\mathbb{E}_{p(\boldsymbol{v})}\left[\boldsymbol{v}^\top\nabla^2_{\boldsymbol{x}}\log p_\theta(y|\boldsymbol{x})\boldsymbol{v}\right] LDCG=EpD(y)EpD(xy)xlogpθ(yx)22+2EpD(y)EpD(xy)Ep(v)[vx2logpθ(yx)v]作者首先通过用交叉熵损失和DCG损失联合训练出一个代理模型,优化目标如下所示 min ⁡ θ [ L ( f θ ( x ) , y ) + λ L D C G ] \min\limits_{\theta}\left[\mathcal{L}(f_\theta(x),y)+\lambda \mathcal{L}_{\mathrm{DCG}}\right] θmin[L(fθ(x),y)+λLDCG]其中 λ \lambda λ表示正则化系数。模型训练结束后可以得到如下图所示的梯度分布,其中可以发现梯度是从样本点稀疏的区域流向样本点密集的区域,而且样本点稀疏的区域梯度值更大,样本点密集区梯度值更小。

之后再用该代理模型生成对抗样本,无目标攻击的形式如下所示 { x n = x n − 1 + η ⋅ s i g n ( ∇ x n − 1 L ( f θ ( x n − 1 ) , y l a b e l ) x n = c l i p ( x n , x 0 − ϵ , x 0 + ϵ ) \left\{\begin{aligned}\boldsymbol{x}_n&=\boldsymbol{x}_{n-1}+\eta \cdot \mathrm{sign}(\nabla_{\boldsymbol{x}_{n-1}}\mathcal{L}(f_\theta(\boldsymbol{x}_{n-1}),y_{\mathrm{label}})\\\boldsymbol{x}_n&=\mathrm{clip}(\boldsymbol{x}_n,\boldsymbol{x}_0-\epsilon,\boldsymbol{x}_0+\epsilon)\end{aligned}\right. {xnxn=xn1+ηsign(xn1L(fθ(xn1),ylabel)=clip(xn,x0ϵ,x0+ϵ)有目标攻击的形式表示为 { x n = x n − 1 − η ⋅ s i g n ( ∇ x n − 1 L ( f θ ( x n − 1 ) , y t a r g e t ) x n = c l i p ( x n , x 0 − ϵ , x 0 + ϵ ) \left\{\begin{aligned}\boldsymbol{x}_n&=\boldsymbol{x}_{n-1}-\eta \cdot \mathrm{sign}(\nabla_{\boldsymbol{x}_{n-1}}\mathcal{L}(f_\theta(\boldsymbol{x}_{n-1}),y_{\mathrm{target}})\\\boldsymbol{x}_n&=\mathrm{clip}(\boldsymbol{x}_n,\boldsymbol{x}_0-\epsilon,\boldsymbol{x}_0+\epsilon)\end{aligned}\right. {xnxn=xn1ηsign(xn1L(fθ(xn1),ytarget)=clip(xn,x0ϵ,x0+ϵ)综上所述可以发现,之前对抗迁移性的工作都是基于优化的方法,而本文作者则是关注点放在真实数据分布上,首先将真实数据分布关于样本的梯度与代理模型分布关于样本的梯度相匹配。然后在训练好的代理模型上生成对抗样本,具体过程如下图所示。

实验结果

该论文的实验结果非常出色,如下图所示为在黑盒迁移攻击下,不同的攻击算法的无目标攻击的攻击成功率。可以惊奇的发现论文中提出的方法的攻击成功率比其它攻击算法要高出一个等级,甚至在某些模型中如VGG19,RN152,DN121和DN201模型,其黑盒迁移攻击成功率要直逼白盒攻击成功率。

下图是论文的一个定性的结果,可以清晰的发现,当源类目标为青蛙,目标攻击类为玉米的时候,可以发现论文中提出的攻击方法生成的对抗样本在青蛙的腿上有清晰的玉米特征。

代码实现

论文的代码已开源,为了能够更好的理解论文方法,以下程序是根据论文的算法流程图编写的一个在mnist数据集上的一个简易的程序。论文中的损失函数变成起来较为棘手,原始的损失函数如下所示 L D C G = E p D ( y ) E p D ( x ∣ y ) ∥ ∇ x log ⁡ p θ ( y ∣ x ) ∥ 2 2 + 2 E p D ( y ) E p D ( x ∣ y ) E p ( v ) [ v ⊤ ∇ x 2 log ⁡ p θ ( y ∣ x ) v ] \mathcal{L}_{\mathrm{DCG}}=\mathbb{E}_{p_D(y)}\mathbb{E}_{p_D(\boldsymbol{x}|y)}\|\nabla_{\boldsymbol{x}}\log p_\theta(y|\boldsymbol{x})\|_2^2+2\mathbb{E}_{p_D(y)}\mathbb{E}_{p_D(\boldsymbol{x}|y)}\mathbb{E}_{p(\boldsymbol{v})}\left[\boldsymbol{v}^\top\nabla^2_{\boldsymbol{x}}\log p_\theta(y|\boldsymbol{x})\boldsymbol{v}\right] LDCG=EpD(y)EpD(xy)xlogpθ(yx)22+2EpD(y)EpD(xy)Ep(v)[vx2logpθ(yx)v]需要对该损失函数的形式进行一定的变换,变换形式如下所示: L D C G = E p D ( x , y ) ∥ ∇ x log ⁡ p θ ( y ∣ x ) ∥ 2 2 + 2 E p D ( x , y ) E p ( v ) [ v ⊤ ∇ x 2 log ⁡ p θ ( y ∣ x ) v ] \mathcal{L}_{\mathrm{DCG}}=\mathbb{E}_{p_D(x,y)}\|\nabla_{\boldsymbol{x}}\log p_\theta(y|\boldsymbol{x})\|_2^2+2\mathbb{E}_{p_D(x,y)}\mathbb{E}_{p(\boldsymbol{v})}\left[\boldsymbol{v}^\top\nabla^2_{\boldsymbol{x}}\log p_\theta(y|\boldsymbol{x})\boldsymbol{v}\right] LDCG=EpD(x,y)xlogpθ(yx)22+2EpD(x,y)Ep(v)[vx2logpθ(yx)v]进一步可得其离散的形式为,根据离散形式的损失函数,可以更好地对论文算法进行实现。 L D C G = 1 N ∑ i = 1 N ∥ ∇ x i log ⁡ p θ ( y i ∣ x i ) ∥ 2 2 + 2 M N ∑ i = 1 N ∑ j = 1 M [ v j ⊤ ∇ x i 2 log ⁡ p θ ( y i ∣ x i ) v j ] \mathcal{L}_{\mathrm{DCG}}=\frac{1}{N}\sum\limits_{i=1}^N\|\nabla_{\boldsymbol{x}_i}\log p_\theta(y_i|\boldsymbol{x}_i)\|_2^2+\frac{2}{M N}\sum\limits_{i=1}^N\sum\limits_{j=1}^M\left[\boldsymbol{v}_j^\top\nabla^2_{\boldsymbol{x}_i}\log p_\theta(y_i|\boldsymbol{x}_i)\boldsymbol{v}_j\right] LDCG=N1i=1Nxilogpθ(yixi)22+MN2i=1Nj=1M[vjxi2logpθ(yixi)vj]

from torchvision import datasets, transforms
from torch.utils.data import DataLoader, Dataset
import torch
import torch.nn as nn
from torch.autograd import Variable
import torch.optim as optim
import torch.nn.functional as F
import os

        
class Net(nn.Module):
	def __init__(self):
		super(Net, self).__init__()
		self.fc1 = nn.Linear(784, 300)
		self.fc2 = nn.Linear(300, 100)
		self.fc3 = nn.Linear(100, 10)
	def forward(self, x):
		x = F.relu(self.fc1(x))
		x = F.relu(self.fc2(x))
		out = self.fc3(x)
		return out

def DR_training():
	lambda1 = 0
	lambda2 = 1
	epoch = 5
	model = Net()
	optimizer = torch.optim.SGD(model.parameters(), lr=0.005)
	loss_fn = torch.nn.CrossEntropyLoss()
	use_cuda = torch.cuda.is_available()

	mnist_transform = transforms.Compose([transforms.ToTensor(), transforms.Lambda(lambda x : x.resize_(28*28))])
	mnist_train = datasets.MNIST(root="mnist-data", train=True, download=True, transform=mnist_transform)
	train_loader = torch.utils.data.DataLoader(mnist_train, batch_size=32, shuffle=True, num_workers=0)

	for epoch_idx in range(epoch):
		for batch_idx, (inputs, targets) in enumerate(train_loader):
			if use_cuda:
				inputs, targets = inputs.cuda(), targets.cuda()
			inputs, targets = Variable(inputs), Variable(targets)

			inputs.requires_grad_(True)

			predict = model(inputs)

			CE_loss = loss_fn(predict, targets)

			# DCG loss

			# Grad loss
			log_pro = torch.log(F.softmax(predict, 1))
			log_pro_target = log_pro.gather(1, targets.view(-1,1)).squeeze(1)
			grad = torch.autograd.grad(log_pro_target, inputs, grad_outputs = torch.ones_like(log_pro_target), retain_graph = True, create_graph=True)
			DCG_grad_loss = torch.mean(torch.norm(grad[0], dim = 1, p = 2))


			# Hessian loss
			v = torch.rand_like(inputs)
			v = v / torch.norm(v, dim = -1, keepdim = True)

			mid_vector = torch.sum(v * grad[0], dim = 1)

			grad2 = torch.autograd.grad(mid_vector, inputs, grad_outputs = torch.ones_like(mid_vector), retain_graph = True, create_graph = True)

			DCG_Hessian_loss = torch.mean(torch.sum(v * grad2[0], dim = 1))


			DCG_loss = DCG_grad_loss + 2 * DCG_Hessian_loss


			loss = lambda1 * CE_loss + lambda2 * DCG_loss

			print('CE_loss: ', CE_loss.item(), 'grad_loss: ',  DCG_grad_loss.item(), 'Hessian_loss: ', DCG_Hessian_loss.item(), 'loss: ',loss.item)

			optimizer.zero_grad()
			loss.backward()
			optimizer.step()

			print('successful')



if __name__ == '__main__':
	DR_training()



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从数据分布的角度提高对抗样本的可迁移性 的相关文章

随机推荐

  • 解决python3 pkl文件打印出的数组有省略号的问题(numpy, pytorch)

    问题描述 python3 load了pkl文件后 发现打印出来的数组有省略号 不能用于继续的计算和操作 import pickle with open filename pkl rb as f data pickle load f prin
  • 'chcp' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 'cmd' 不是内部或外部命令,也不是可运行的...

    打开anaconda promp 提示 chcp 不是内部或外部命令 也不是可运行的程序 或批处理文件 cmd 不是内部或外部命令 也不是可运行的 解决办法 我在安装Anaconda是默认添加了环境变量 此时需要在环境变量的系统变量的pat
  • 经典网络VGGNet介绍

    经典网络VGGNet 其中VGG为Visual Geometry Group 由Karen Simonyan等于2014年提出 论文名为 Very Deep Convolutional Networks for Large Scale Im
  • oracle expdp导出时报 ora-39070:无法打开日志文件

    在通过expdp导出命令导出某个用户的对象时出现以下截图错误 ORA 39002 操作无效 ORA 39070 无法打开日志文件 ORA 39087 目录名
  • MVG学习笔记(1) --无处不在的射影几何

    文章目录 前言 无处不在的射影几何 坐标 齐次性 仿射和欧几里得几何 仿射几何 欧几里得几何 3D欧几里得几何 前言 关于计算机视觉圣经的学习笔记 本次此系列的博文除了本次博文 基本不会包含前言了 参考书 多视图几何 第二版 无处不在的射影
  • python基础一(print函数+变量赋值 )

    1print 函数 注意 敲代码必须是英文输入状态 1 1 无引号 print 123 1 2单引号 print 路飞 1 3 双引号 注意 是英文输入法下的双引号 不是两个单引号 与单引号效果没什么差别 print one piece 1
  • 如何分析和提高大型项目(C/C++)的编译速度?

    C 编译基本原理 对于C C 代码通常来说整个构建过程分为以下几个主要部分 预处理 在此阶段主要完成的工作是将头文件展开 替换宏指令 条件编译展开 消除注释 编译 在此阶段主要将预编译好的文件转换成汇编语言 高级语言 gt LLVM平台无关
  • 生产制造业ERP系统模块

    生产制造业ERP系统模块 1 计划管理系统 1 物料需求管理 支持如下功能 配置产品的管理 用户可以定义可选件 必选件 以及必选件中的可选件 BOM成批修改 BOM合法性 完整性和嵌套性检查 BOM单级正查和反查 多级正查和反查 以及综合查
  • 手把手教你实现红黑树

    目录 一 红黑树介绍与优势 二 红黑树的特性 所有节点不是黑色就是红色 根节点为黑色 红色节点的左右孩子节点必须为黑色 每一条路径均含有相同的黑色节点数 叶子节点为黑色 三 红黑树实现原理 一 插入节点颜色选择 二 插入后 父节点是黑色 三
  • Waiting for changelog lock....

    Could not acquire change log lock Currently locked by XXXXXX 在本地启动 的时候 一直停在Waiting for changelog lock 然后最后的异常是Could not
  • 自学Python能干些什么副业

    Python是一种非常优秀的编程语言 它逐渐受到越来越多人的青睐 并且已经了解到Python可以做很多事情 同时 还可以使用Python做一些兼职工作 如 兼职数据处理 兼职数据查询 兼职p图等 自学Python能干些什么副业 Python
  • 抖音C#版,自己抓第三方抖音网站

    感谢http dy lujianqiang com技术支持 文章更新 http dy lujianqiang com这个服务器已经关了 现在没用了 版权归抖音公司所有 该博客只是为交流学习所使用 编译后的内容将24小时内删除 该程序所获取到
  • 深度分析:Spring Boot 的接口限流算法

    在一个高并发系统中对流量的把控是非常重要的 当巨大的流量直接请求到我们的服务器上没多久就可能造成接口不可用 不处理的话甚至会造成整个应用不可用 那么何为限流呢 顾名思义 限流就是限制流量 就像你宽带包了1个G的流量 用完了就没了 通过限流
  • 「MindMaster」思维导图 使用「指南」

    前言 思维导图是一个可视化的图形思维工具 为什么要用思维导图 能帮助你从多方面多角度去思考 去发散 能帮助你理清复杂的逻辑关系 其倡导的网状的分散性思维和纵深性的逻辑思维有助于你形成相对完整的结构性思维 常见的逻辑结构 思维导图 发散和纵深
  • 机器学习 day26(多标签分类,Adam算法,卷积层)

    1 多标签分类 多标签分类 对于单个输入特征 输出多个不同的标签y 多类分类 对于单个输入特征 输出单个标签y 但y的可能结果有多个 2 为多标签分类构建神经网络模型 我们可以构建三个不同的神经网络模型来分别预测三个不同的标签y 但这种方法
  • 【宜搭】低代码开发师(中级)考试仓库库存管理系统流程

    目标 根据步骤能快速通过考试 一 建一个进货登记表 注意点 如图 公式如下
  • 数据结构与算法-线性表-线性存储结构

    数据结构中的线性表的第一种物理结构 顺序存储结构 它的c 实现代码如下 ifndef SHUNXUBIAO H define SHUNXUBIAO H include
  • js模糊匹配数组中含有某字符串

    数组中匹配单个字符串的方法 传入数组支持格式 function searchStr str arr let newList 要匹配字符串的首个字符 let startChar str charAt 0 要匹配字符串的字符长度 let str
  • php服务器性能计算,CPU主频和内核数量以及服务器性能之间的关系

    CPU主频和内核数量以及服务器性能之间的关系 要点 本文介绍了CPU主频和内核数量以及服务器性能之间的关系 希望对您有用 如果有疑问 可以联系我们 在系统维护工作中曾经被问到CPU内核数量和主频之间的关系的一个问题 当时和服务器厂家磨叽了几
  • 从数据分布的角度提高对抗样本的可迁移性

    1 引言 对抗迁移性攻击一般是先通过代理模型生成对抗样本 然后将该样本迁移到其它黑盒模型中进行攻击 对抗迁移性的根本原因目前仍有待于探究 以前的工作主要从模型的角度探讨原因 例如决策边界 模型架构和模型容量等 在该论文中 作者从数据分布的角