FGSM & PDG

FGSM & PDG

版权申明:本文为原创文章,转载请注明原文出处

原文链接:http://example.com/post/cda691ed.html

FGSM & PDG

FGSM

论文链接: [1412.6572] Explaining and Harnessing Adversarial Examples (arxiv.org)[1412.6572] Explaining and Harnessing Adversarial Examples (arxiv.org)

研究点

设计更强大的优化方法,能够在训练过程中有效处理非线性模型的复杂性,从而同时实现训练的易用性和对抗性扰动的抵抗能力

线性模型中的对抗扰动

  1. 对抗扰动的累积效应
    • 假设我们有一个输入向量 \(x\) 和一个权重向量 \(w\)
    • 我们施加一个微小的扰动 \(η\) 到输入向量 \(x\),得到新的输入 \(\tilde{x}=x+\eta.\)
  2. 权重向量和扰动的点积
    • 对于线性模型,激活值是通过计算权重向量 \(w\) 和输入向量 \(x\) 的点积得到的,即\(\boldsymbol{w}^\top\tilde{\boldsymbol{x}}=\boldsymbol{w}^\top\boldsymbol{x}+\boldsymbol{w}^\top\boldsymbol{\eta}\)
    • 这里 \(w^\top x\)是原始激活值,而\(w^\top n\)是由扰动引起的激活值变化。
  3. 最大化扰动的影响
    • 为了使激活值变化\(w^\top n\)最大化,可以将 \(η\) 设置为 \(\mathrm{sign}(w)\),即 \(η\) 的每个元素的符号与 \(w\) 的对应元素相同。
    • 这种设置会使得点积 \(w^\top n\) 取得最大值。
  4. 累积效应
    • 如果权重向量 \(w\)\(n\) 个维度,每个元素的平均值为 \(m\),那么总的激活值变化为\(\epsilon mn\)
    • 这是因为每个小的扰动 \(n\) 的元素都被放大了 \(m\) 倍,并且有 \(n\) 个这样的元素。
  5. 高维度的影响
    • 由于 \(η\) 的最大范数\(\|\eta\|_{\infty}\)是固定的(即每个元素的最大值是固定的),不会随着维度\(n\)增加而增加。
    • 但是,由于\(n\)增加,累积效应使得总的激活值变化\(w^\top n\)可以线性增加。
  6. 意外隐写术
    • 这种现象类似于隐写术,即通过许多小的变化隐藏一个大的变化。
    • 线性模型会被迫专注于最符合其权重的信号,即使输入数据中存在多个信号且其他信号的幅度更大。

非线性模型的线性特性

非线性模型被有意设计为以非常线性的方式运行

LSTM(长短期记忆网络)
公式和结构:

LSTM单元由以下主要部分组成:

  • 输入门:控制有多少新信息被写入记忆单元。
  • 遗忘门:控制有多少记忆单元中的信息被保留。
  • 输出门:控制有多少信息从记忆单元输出。

LSTM单元的公式如下:

\(\begin{aligned} &i_t=\sigma(W_i\cdot[h_{t-1},x_t]+b_i) \\ &f_t=\sigma(W_f\cdot[h_{t-1},x_t]+b_f) \\ &o_t=\sigma(W_o\cdot[h_{t-1},x_t]+b_o) \\ &\tilde{C}_t=\tanh(W_C\cdot[h_{t-1},x_t]+b_C) \\ &C_t=f_t\cdot C_{t-1}+i_t\cdot\tilde{C}_t \\ &h_t=o_t\cdot\tanh(C_t) \end{aligned}\)

其中:

  • \(σ\) 是sigmoid函数,输出范围在(0, 1)之间。
  • \(⁡tanh\) 是tanh函数,输出范围在(-1, 1)之间。
  • \(i_t\)\(f_t\)\(o_t\) 分别是输入门、遗忘门和输出门的激活值。
  • \(C_t\) 是记忆单元的状态。
  • \(h_t\) 是隐藏状态。
线性特性:
  • 门控机制:LSTM通过输入门、遗忘门和输出门控制信息的流动,这些门的输出是线性的(在0到1之间)。这种设计使得信息在较长时间内保持稳定,梯度传递时不会消失或爆炸,从而表现得更为线性。
ReLU(整流线性单元)
公式和特性:

ReLU的激活函数定义为: \(𝑓(𝑥)=max⁡(0,𝑥)\)

线性特性:
  • 线性部分:当输入 \(𝑥≥0\) 时,ReLU的输出是 \(x\),即线性关系;当输入 \(𝑥<0\)时,输出为0。这使得在大部分情况下,ReLU的输出是线性的,尤其是在正区间内。
  • 避免梯度消失:与sigmoid和tanh等激活函数相比,ReLU的正区间内梯度为1,不会出现梯度消失的问题,使得优化过程更加高效。
Maxout网络
公式和特性:

Maxout单元输出若干线性函数的最大值,具体公式为:

\(f(x)=\max(w_1^\top x+b_1,w_2^\top x+b_2,\ldots,w_k^\top x+b_k)\)

其中:

  • \(w_i\)\(b_i\) 是可学习的参数。
  • \(k\) 是Maxout单元的线性函数数量。
线性特性:
  • 线性组合:Maxout通过输出多个线性函数中的最大值,实现在局部线性化的非线性映射。这种设计使得每个Maxout单元在一小段范围内是线性的。
  • 增强非线性表达能力:虽然Maxout单元在局部是线性的,但通过组合多个线性函数,整体上可以实现复杂的非线性映射,同时保持优化的稳定性。

初始FGSM

快速梯度符号法 —— 生成对抗样本

  1. 符号说明
    • \(θ\):模型的参数。
    • \(𝑥\):模型的输入。
    • \(𝑦\):与 \(𝑥\) 相关联的目标(对于有目标的机器学习任务)。
    • \(𝐽(𝜃,𝑥,𝑦)\):用于训练神经网络的损失函数(成本函数)。
  2. 线性化损失函数
    • 我们可以在当前参数 \(𝜃\) 的值附近对损失函数 \(𝐽(𝜃,𝑥,𝑦)\) 进行线性化处理,以获得一个最佳的最大范数约束扰动。
  3. 生成对抗扰动
    • 对抗扰动 \(𝜂\) 可以表示为: \(𝜂=𝜖 * \mathrm{sign}(\nabla_xJ(\theta,x,y))\)
    • 其中,\(𝜖\) 是一个小的常数,用于控制扰动的大小。
    • \(\nabla_xJ(\theta,x,y)\) 表示损失函数对输入 \(𝑥\) 的梯度。
    • sign(⋅)sign(⋅) 是符号函数,表示取梯度中每个元素的符号(正为 +1,负为 -1)。
  4. 快速梯度符号法(FGSM)
    • 这种方法被称为快速梯度符号法,用于生成对抗样本。
    • 通过反向传播算法,可以高效地计算所需的梯度。
具体实例

假设有一个简单的神经网络模型用于图像分类,输入 \(𝑥\) 是一个手写数字图片,目标 \(y\)是图片对应的数字(比如3)。

  1. 模型参数和损失函数
    • 模型的参数 \(θ\) 包括权重和偏置。
    • 损失函数 \(𝐽(𝜃,𝑥,𝑦)\)是交叉熵损失函数,用于评估模型预测的准确性。
  2. 计算损失函数对输入的梯度
    • 通过反向传播算法,我们可以计算损失函数$ 𝐽(𝜃,𝑥,𝑦)$ 对输入 \(𝑥\) 的梯度\(\nabla_xJ(\theta,x,y)\)
  3. 生成对抗扰动
    • 假设我们计算出的梯度为:\(\nabla_xJ(\theta,x,y)=\begin{bmatrix}-0.1&0.3&-0.2&0.4\end{bmatrix}\)
    • 使用符号函数得到: \(\mathrm{sign}(\nabla_xJ(\theta,x,y))=\begin{bmatrix}-1&1&-1&1\end{bmatrix}\)
    • 设定一个小的扰动幅度\(\epsilon=0.1\),我们得到对抗扰动:\(\eta=0.1\cdot\begin{bmatrix}-1&1&-1&1\end{bmatrix}=\begin{bmatrix}-0.1&0.1&-0.1&0.1\end{bmatrix}\)
  4. 生成对抗样本
    • 我们将扰动添加到原始输入 \(𝑥\) 中,得到对抗样本\(\tilde{x}\): $=x+$
  5. 对抗样本的影响
    • 新的对抗样本\(\tilde{x}\) 看起来与原始输入\(x\)很相似,但由于添加了精心设计的扰动,神经网络可能会错误地分类这个对抗样本。

L1正则化 vs FGSM对抗性训练

L1正则化
  • L1正则化通过在损失函数中加入权重的 L1 范数(即权重的绝对值和)来控制模型的复杂度,从而避免过拟合。
  • 损失函数为\(\mathcal{L}(w,b)+\lambda||w||_1\),其中\(\lambda\)是正则化参数。通过最小化这个损失函数,模型不仅需要减少原始损失(提高准确率),还需要控制权重的绝对值之和。这会使得某些权重变得更小,甚至接近于零,从而达到减少模型复杂度、防止过拟合的目的。
对抗性训练
  • 在对抗性训练中,我们最小化的损失函数为\(\mathbb{E}_{x,y\sim p_{\mathrm{data}}}\zeta(y(||w||_1-w^Tx-b))\)

  • 这里的损失函数在训练过程中直接减去了权重的 L1 范数,而不是将其加到损失函数中。这种减法会在模型信心足够高时(即$$函数饱和时)使惩罚项逐渐消失。

    这里所说的饱和指的是当模型对某个样本的预测非常自信时,\(w^Tx+b\)的值使得$\(函数的输入值变得非常小,无论是正类还是负类样本,这导致\)\(函数的值也很小,从而使得对抗性训练中的损失变得非常小。这种情况下,惩罚项\)||w||_1$对总损失的影响变得不明显,因为模型在自信的预测上已经让损失趋近于零。

总结
  • L1 正则化通过惩罚权重大小来控制模型复杂度,始终存在于损失函数中。在训练过程中将 L1 惩罚项加到损失函数上,即使损失小,惩罚还是一样会增加
  • 对抗性训练通过扰动输入数据增强模型的鲁棒性,损失函数中的惩罚项会在模型足够自信时消失。对抗性训练则将其减去,损失越小,对抗性训练的惩罚越少,达到饱和,不再影响(当模型欠拟合时,对抗性训练会导致进一步欠拟合)

深度模型的对抗扰动

通用逼近定理:给定足够数量的隐藏单元和适当的权重,一个神经网络可以表示从输入到输出的几乎任何复杂关系。

对抗性训练 vs 数据增强

前者通过对抗样本直接暴露模型的弱点,使得模型在训练过程中不断改进其决策边界,变得更加鲁棒。

后者虽然能提供多样化的训练数据,但对模型潜在的脆弱性没有直接的改进效果。

损失函数优化

\(\tilde{J}(\boldsymbol{\theta},\boldsymbol{x},y)=\alpha J(\boldsymbol{\theta},\boldsymbol{x},y)+(1-\alpha)J(\boldsymbol{\theta},\boldsymbol{x}+\epsilon \,\mathrm{sign}\left(\nabla_{\boldsymbol{x}}J(\boldsymbol{\theta},\boldsymbol{x},y)\right).\)

前半部分是模型在标准输入 \(\boldsymbol{x}\) 上的损失,通常用于衡量模型在干净数据上的表现

后半部分是模型在对抗样本 \(\boldsymbol{x} + \epsilon \, \mathrm{sign}\left(\nabla_{\boldsymbol{x}} J(\boldsymbol{\theta}, \boldsymbol{x}, y)\right)\) 上的损失。对抗样本是通过对标准输入 \(\boldsymbol{x}\) 进行小扰动生成的,这种扰动方向由损失函数对输入的梯度决定,目的是最大化损失。

α 控制标准损失和对抗损失的相对权重。当 \(\alpha\) 接近 1 时,更加关注标准损失;当 \(\alpha\) 接近 0 时,更加关注对抗损失。

噪声添加位置选择
  • Szegedy等人的实验表明,在一个使用sigmoid激活函数的神经网络中,如果在隐藏层添加噪声,模型的正则化效果(即防止过拟合的能力)最好。
  • 在使用快速梯度符号方法的实验中,研究人员发现,对于那些隐藏单元激活值无界的网络,隐藏单元的激活值会变得非常大。因此,通常最好只是扰动原始输入。
  • 在饱和模型(如Rust模型)中,研究人员发现扰动输入层与扰动隐藏层的效果相当。
  • 基于旋转隐藏层的扰动解决了无界激活值增长的问题,使得加性扰动相对较小。研究人员成功训练了带有隐藏层旋转扰动的maxout网络,但效果不如扰动输入层强。
  • 由于神经网络的最后一层(线性- sigmoid或线性- softmax层)不是最终隐藏层函数的通用逼近器,将对抗扰动应用于最后隐藏层可能会遇到欠拟合问题。研究人员确实发现了这种效果。

研究人员认为,对抗训练只有在模型有能力学习抵抗对抗样本时才明显有用。这仅在通用近似定理适用时才明显。

容量低的模型表现出好性能(RBF)

RBF(径向基函数):一种常用的激活函数,通常用于神经网络中。RBF网络使用这些函数来将输入映射到高维空间,并进行分类或回归。假设我们有一个RBF网络用于分类任务,它的激活函数是高斯函数,表示为: \(\phi(x) = \exp(-\frac{\|x - \mu\|^2}{2\sigma^2})\) 其中,\(\mu\) 是中心,\(\sigma\) 是标准差。RBF网络会根据输入与中心的距离来计算激活值。

由于RBF单元只对特定点有强响应,对其他点的响应较弱或没有响应,这意味着它们无法识别所有相关的正类样本,从而降低了召回率。假设RBF网络用于识别手写数字“3”。网络可能只对一些非常典型的“3”有强烈响应,但对一些稍微不同的“3”响应较弱,导致它们未被识别。

由于RBF单元在对抗样本(即故意加入扰动以欺骗模型的样本)上的表现较好,因为它们在不确定的情况下置信度较低,研究人员希望通过二次单元模型进一步提高这种鲁棒性。这类模型包括了更复杂的激活函数(例如二次函数),以更好地处理对抗样本。

在尝试使用具有足够二次抑制(即能够抵抗对抗扰动的能力)的模型时,研究人员发现这些模型在训练集上的误差很高。这意味着模型虽然在理论上能够抵抗对抗扰动,但在实际训练中表现不佳。

对抗样本在不同模型之间的泛化现象

对抗样本是故意添加微小扰动,使模型做出错误预测的样本。一个为某个模型生成的对抗样本,往往也能欺骗其他模型,即使这些模型的结构不同或在不同的数据上训练过。

我们可以用“线性视角”来解释这一现象。根据这种观点,对抗样本在高维空间中形成了广泛的区域,而不是精细的点。

具体来说,只要扰动的方向和模型的损失函数梯度方向一致,并且扰动幅度足够大,就能生成对抗样本。这些样本并不是分散在精确的位置上,而是覆盖了一个较大的子空间。

研究人员假设,当前的训练方法使得神经网络在面对对抗样本时,表现得类似于一个简单的线性分类器。即使这些模型结构不同,它们学到的分类权重是相似的,这导致了对抗样本的跨模型泛化现象。

这个假设解释了一部分模型错误分类的原因,但并不能解释所有情况。

PGD

投影梯度下降(PGD)作为通用的“一阶对手”,即利用有关网络的本地一阶信息的最强攻击。

研究点

精确地了解我们想要实现的安全保证类型,即我们想要抵抗的广泛类型的攻击(与仅防御特定的已知攻击相反)

将攻击和防御纳入一个共同的理论框架中,将对抗性训练直接对应于优化

PGD方法

  1. 攻击目标:PGD的目标是生成对抗性样本,即在原始输入数据 \(x\) 上添加扰动 \(\delta\),使得最大化模型的损失函数 \(L(\theta, x + \delta, y)\)。这个损失函数考虑了在给定模型参数 \(\theta\) 下,经过扰动后的输入\(x + \delta\) 的预测误差。攻击者的目标是找到一个使得损失函数值最大化的扰动 \(\delta\)

  2. 扰动的约束:PGD通常会限制扰动 \(\delta\) 的大小,以确保生成的对抗性样本在人类感知上仍然是接近原始样本的。这种限制可以是 \(\ell_p\) 范数约束(如 \(\ell_\infty\) 范数,即扰动的每个分量都不超过某个最大值),也可以是其他形式的约束,例如在像素空间中保持每个像素值在合理范围内。

  3. 算法步骤:

    1. 初始化:从原始输入 \(x\) 开始,设定一个初始扰动 \(\delta^{(0)}\)
    2. 迭代优化
      • 对于每一轮 \(t\),计算梯度 \(\nabla_\delta L(\theta, x + \delta^{(t)}, y)\)
      • 将扰动 \(\delta^{(t)}\) 更新为 \(\delta^{(t+1)} = \text{Clip}_{\epsilon}(\delta^{(t)} + \alpha \cdot \text{sign}(\nabla_\delta L(\theta, x + \delta^{(t)}, y)))\),其中 \(\alpha\) 是学习率,\(\text{Clip}_{\epsilon}\) 表示对扰动进行约束,确保其不超过 \(\epsilon\) 的范围。
    3. 终止条件:通常根据迭代次数或者达到满足某个条件的对抗性样本来决定停止迭代。
  4. 优化方法:PGD通过迭代优化来找到最大化损失函数的扰动 \(\delta\),同时尽可能维持扰动的大小在合理范围内,以确保生成的对抗性样本在实际应用中具有可行性和现实意义。

  5. 结论:

    • 使用投影梯度下降(PGD)生成对抗性样本时,对抗性损失(adversarial loss)会以相当一致的方式快速增加
    • 通过PGD优化生成的对抗性样本的损失值在多次尝试后趋于一致。这种现象暗示着损失函数的优化空间可能存在局部最大值,但这些最大值的分布是相对稳定和可预测的。
    • 损失函数的优化空间具有一定的结构性质,即在对抗性攻击中,通过微小扰动生成的对抗性样本的损失函数是相对一致且可预测的。这也暗示了在给定条件下,攻击者可以利用这种结构来有效地生成对抗性样本。
    • 在不同尺度的对抗性攻击中,对抗性样本的生成方式可能不仅仅依赖于梯度的正向调整,还可能涉及到更复杂的攻击策略和模型响应方式。这提示我们在设计防御策略时需要考虑更广泛和复杂的攻击场景。

    投影梯度下降(PGD)在所有一阶方法中可以被视为一种“通用”的对抗者。换句话说,通过观察和实验发现,PGD在对抗性攻击中表现出的效果和稳定性,使其成为所有基于一阶信息(例如梯度)的攻击方法中的一个普适选择。

原理总结

1. 快速梯度符号方法(FGSM):
  • 输入梯度计算:对于给定的输入样本 \(x\),计算其关于损失函数 \(L\) 的梯度 \(\nabla_x L(\theta, x, y)\),其中 \(\theta\) 是模型的参数, \(y\) 是真实标签。
  • 对抗样本生成:根据梯度的方向和符号,对输入 \(x\) 进行修改: \(x_{adv} = x + \epsilon \cdot \text{sign}(\nabla_x L(\theta, x, y))\) 其中, \(\epsilon\) 是扰动的大小或步长, \(\text{sign}(\cdot)\) 表示取梯度的符号。

FGSM生成的对抗样本只进行一次梯度方向的扰动,因此它相对简单和高效。但由于只考虑了单步的梯度信息,生成的对抗样本可能不够健壮,容易被模型在更复杂的攻击检测中发现和修正。

2. 投影梯度下降(PGD):

PGD通过多次迭代梯度下降来生成对抗样本,以增加攻击的成功率和对抗的鲁棒性。

  • 多次迭代:从原始样本 \(x\) 开始,进行多轮迭代来生成对抗样本。
  • 梯度计算和投影:在每一轮迭代中,计算当前样本 \(x_t\) 的梯度 \(\nabla_{x_t} L(\theta, x_t, y)\),然后将梯度方向投影到一个允许的扰动集合 \(S\) 中。例如,\(S\) 可以是\(\epsilon\)-范数球 $ |_{} $。
  • 对抗样本更新:根据投影后的梯度方向,更新当前样本 \(x_t\)\(x_{t+1} = \text{Clip}_{x, \epsilon}(x_t + \alpha \cdot \text{sign}(\nabla_{x_t} L(\theta, x_t, y)))\) 其中, \(\alpha\) 是学习率(步长), \(\text{Clip}_{x, \epsilon}(\cdot)\) 是将结果限制在 \(x \pm \epsilon\) 范围内的操作。

PGD通过多次迭代和投影操作,能够更有效地探索对抗样本的空间,提高了攻击的成功率和对抗的鲁棒性。相比于FGSM,PGD生成的对抗样本更具挑战性,更难以被模型检测和防御。

区别总结:
  • 迭代次数:FGSM只进行一次梯度方向的修改,而PGD通过多次迭代来逐步优化对抗样本。
  • 复杂度:PGD比FGSM更复杂,因为它涉及到多次梯度计算和更新操作。
  • 对抗鲁棒性:PGD生成的对抗样本通常更具挑战性和鲁棒性,相比之下,FGSM生成的对抗样本可能较容易被检测和防御。

实验部分

实验环境和基本参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
"""
实验环境:
镜像:PyTorch 1.10.0 + Python 3.8 (Ubuntu 20.04) + Cuda 11.3
硬件配置:GPU: 1 x RTX 2080 Ti (11GB) + CPU: 12 vCPU Intel(R) Xeon(R) Platinum 8255C @ 2.50GHz
内存: 40GB
存储:系统盘: 30GB + 数据盘: 50GB
"""

criterion = nn.CrossEntropyLoss() # 损失函数
optimizer = optim.SGD(model.parameters(), lr=0.01) # 优化函数
epoch = 10 # 训练迭代次数

# 数据加载
transform = transforms.Compose([transforms.ToTensor()])
train_dataset = datasets.MNIST(root='../data_row', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST(root='../data_row', train=False, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=64, shuffle=False)

模型训练迭代次数:10次

模型选择

简单全连接神经网络

模型结构

SimpleFNN
训练效果

准确率 && 损失

全连接层的准确率达到93%左右,损失变化波动较大(可能是迭代次数太小了?)

SimpleFCN_accuraciesSimpleFCN_losses

FGSM攻击效果

样本展示

SimpleFCN_fgsm_epsilon_0.05_batch_0_image_1SimpleFCN_fgsm_epsilon_0.1_batch_0_image_1SimpleFCN_fgsm_epsilon_0.15_batch_0_image_1

SimpleFCN_fgsm_epsilon_0.2_batch_0_image_1SimpleFCN_fgsm_epsilon_0.25_batch_0_image_1SimpleFCN_fgsm_epsilon_0.3_batch_0_image_1

攻击后的准确率随着设置的epsilons增大逐步下降,前期下降很快,特别是在0.1处下降最快,且SimpleFNN的准确度再epsilons达到0.2接近0,再增加eps就准确率就直接降为0了SimpleFCN_fgsm_accuracies

对抗训练之后的攻击效果

当以eps=0.1的对抗样本对模型做对抗训练,同样以eps为0.1的对抗样本做测试,能看出准确率有一个稳定上升,右边是对抗不同eps产生的对抗样本的效果

SimpleFCN_adversarial_fgsm_accuraciesSimpleFCN_adversarial_accuracies

PGD攻击效果

自变量:

1
2
3
eps:epsilon,对抗攻击的幅度,即每次攻击时允许的最大扰动量。
num_iter:轮数,对抗攻击迭代的次数,即进行对抗攻击的循环次数。
alpha:单步攻击步长,每次对原始样本进行梯度上升的步长大小

每种攻击幅度下的准确率的变化幅度并不大,eps为0.05时,变化规模为0.7480-0.7472,在eps为0.1就降到了0.3,0.15降到了0.12,后面还有进一步下降,但无论哪种攻击幅度,alpha和num_iter只要不是最小值,准确率下降效果都很好

SimpleFCN_0.05_accuraciesSimpleFCN_0.1_accuraciesSimpleFCN_0.15_accuracies

SimpleFCN_0.2_accuraciesSimpleFCN_0.25_accuraciesSimpleFCN_0.3_accuracies

卷积神经网络

模型结构

SimpleCNN
训练效果

准确率 && 损失

简单卷积网络的的准确率比全连接层效果较好,且迭代一次准确率就达到91%以上,同样loss的变化存在一定波动,不够平滑,但相对于全连接层效果更好

SimpleCNN_accuraciesSimpleCNN_losses

FGSM攻击效果

样本展示

SimpleCNN_fgsm_epsilon_0.05_batch_0_image_1SimpleCNN_fgsm_epsilon_0.1_batch_0_image_1SimpleCNN_fgsm_epsilon_0.15_batch_0_image_1

SimpleCNN_fgsm_epsilon_0.2_batch_0_image_1SimpleCNN_fgsm_epsilon_0.25_batch_0_image_1SimpleCNN_fgsm_epsilon_0.3_batch_0_image_1

攻击后的准确率随着设置的epsilons变化

这个变化趋势和全连接层的变化规律相似,但对抗效果比SImpleFNN好,在eps达到0.2是准确率还没完全下降到0,同样在0.1-0.15区间下降最快

SimpleCNN_fgsm_accuracies

对抗训练之后的攻击效果

当以eps=0.1的对抗样本对模型做对抗训练,同样以eps为0.1的对抗样本做测试,能看出准确率有一个稳定上升,右边是对抗不同eps产生的对抗样本的效果

SimpleCNN_adversarial_fgsm_accuraciesSimpleCNN_adversarial_accuracies

PGD攻击效果

自变量:

1
2
3
eps:epsilon,对抗攻击的幅度,即每次攻击时允许的最大扰动量。
num_iter:轮数,对抗攻击迭代的次数,即进行对抗攻击的循环次数。
alpha:单步攻击步长,每次对原始样本进行梯度上升的步长大小

在eps上升到0.15之前,攻击效果并没呈现出随着其他参数增加而变化的效果,但是相同的是,每种幅度下的攻击效果相似,准确率变化幅度不大,eps为0.05,几乎没有攻击效果,其他参数增加,攻击效果反而下降,eps为1效果同样如此,特别是alpha参数增加,攻击效果下降,而eps加到0.15及以上之后,准确率的变化形式几乎和SImpleFNN一致,但是准确率保持在了0.2的最高值,效果比全连接层好

SimpleCNN_0.05_accuraciesSimpleCNN_0.1_accuraciesSimpleCNN_0.15_accuracies

SimpleCNN_0.2_accuraciesSimpleCNN_0.25_accuraciesSimpleCNN_0.3_accuracies

深度卷积神经网络

模型结构

DeepCNN
训练效果

准确率 && 损失

迭代次数较小的准确率并不高,但存在"突飞猛进"点,即epoch为2-4区间发生了猛增,并保持高准确率,虽前期准确率没有上面两种结构高,但学习速度远超于以上两种模型,此外,损失率也很快逼近0并保持,不存在过大起伏,基本保持持续下降后保持

DeepCNN_accuraciesDeepCNN_losses

FGSM攻击效果

样本展示

DeepCNN_fgsm_epsilon_0.05_batch_0_image_1DeepCNN_fgsm_epsilon_0.1_batch_0_image_1DeepCNN_fgsm_epsilon_0.15_batch_0_image_1

DeepCNN_fgsm_epsilon_0.2_batch_0_image_1DeepCNN_fgsm_epsilon_0.25_batch_0_image_1DeepCNN_fgsm_epsilon_0.3_batch_0_image_1

攻击后的准确率随着设置的epsilons变化

效果略好于SimpleCNN,但优势不明显,eps为0.1-0.15变化最快

DeepCNN_fgsm_accuracies

对抗训练之后的攻击效果

当以eps=0.1的对抗样本对模型做对抗训练,同样以eps为0.1的对抗样本做测试,训练过程准确率虽有上升但不稳定,右边是对抗不同eps产生的对抗样本的效果,比上图有改进,但效果不大,对eps再增加产生的对抗样本的对抗效果不好

DeepCNN_adversarial_fgsm_accuraciesDeepCNN_adversarial_accuracies

PGD攻击效果

自变量:

1
2
3
eps:epsilon,对抗攻击的幅度,即每次攻击时允许的最大扰动量。
num_iter:轮数,对抗攻击迭代的次数,即进行对抗攻击的循环次数。
alpha:单步攻击步长,每次对原始样本进行梯度上升的步长大小

eps大于0.15变化趋势和上面两种一致,且对抗效果优于以上两种神经网络结构,同样存在eps为0.05时,其他参数增加反而降低攻击效果

DeepCNN_0.05_accuraciesDeepCNN_0.1_accuraciesDeepCNN_0.15_accuracies

DeepCNN_0.2_accuraciesDeepCNN_0.25_accuraciesDeepCNN_0.3_accuracies

残差神经网络

模型结构

ResNet
训练效果

准确率 && 损失

效果时这四种模型中效果最好的,即使迭代次数少,但准确率已能达到98.7%以上,甚至超过了上面某些模型迭代十次的效果,损失率页很快就逼进了0

ResNet18_accuraciesResNet18_losses

FGSM攻击效果

样本展示

ResNet18_fgsm_epsilon_0.05_batch_0_image_1ResNet18_fgsm_epsilon_0.1_batch_0_image_1ResNet18_fgsm_epsilon_0.15_batch_0_image_1

ResNet18_fgsm_epsilon_0.2_batch_0_image_1ResNet18_fgsm_epsilon_0.25_batch_0_image_1ResNet18_fgsm_epsilon_0.3_batch_0_image_1

攻击后的准确率随着设置的epsilons变化

对抗效果虽略优于其他模型,但是准确率仍下降到了0.2以下,只是没有特别逼近0,按照后面的趋势,应该能保证这个幅度

ResNet18_fgsm_accuracies

对抗训练之后的攻击效果

当以eps=0.1的对抗样本对模型做对抗训练,同样以eps为0.1的对抗样本做测试,和深度卷积网络一样,训练过程没有保持持续上升,但是准确率提升很多,右边是对抗不同eps产生的对抗样本的效果,相比于没有对抗训练的效果提升很多

ResNet18_adversarial_fgsm_accuraciesResNet18_adversarial_accuracies

PGD攻击效果

自变量:

1
2
3
eps:epsilon,对抗攻击的幅度,即每次攻击时允许的最大扰动量。
num_iter:轮数,对抗攻击迭代的次数,即进行对抗攻击的循环次数。
alpha:单步攻击步长,每次对原始样本进行梯度上升的步长大小

对抗效果是最差的,eps从0.1开始,其准确率就下降到了10%以下

ResNet18_0.05_accuraciesResNet18_0.1_accuraciesResNet18_0.15_accuracies

ResNet18_0.2_accuraciesResNet18_0.25_accuraciesResNet18_0.3_accuracies

分析总结

某些情况中,当alpha和num_iter增大时,攻击效果反而变差

过度迭代导致过拟合对抗方向

  • 如果步长和迭代次数太大,扰动可能会变得过于复杂(特别eps较小时),远离了使得模型误分类的有效方向,从而导致对抗样本变得无效。
  • 过度迭代可能会导致对抗样本变得更加离散,不再沿着最有效的攻击方向。

数值稳定性问题

  • 过大的步长和迭代次数可能会导致数值不稳定性,扰动值可能超出有效范围,无法正确引导模型误分类。
ResNet在非对抗情况下表现最好,但在对抗攻击下表现最差

模型复杂性和过拟合

  • ResNet由于其复杂性和深度,在训练时可能会过度拟合训练数据,导致在对抗攻击时,模型更容易受到影响。
  • 复杂的模型可能捕捉到数据中的细微特征,导致对抗样本能更容易地找到这些特征的脆弱点。
epsilon(ε)

在PGD攻击中,epsilon(ε)代表了对抗扰动的最大幅度,alpha(α)是每一步的步长,而num_iter是总的迭代次数。固定epsilon之后,alpha和num_iter的作用相对较小:

epsilon定义了扰动的上限

  • epsilon(ε)直接控制了扰动的最大幅度。因此,无论alpha和num_iter如何调整,扰动的总幅度不能超过epsilon定义的范围。这意味着epsilon是决定攻击强度的主要因素。

alpha和num_iter影响攻击的细节

  • alpha和num_iter更多地影响了生成对抗样本的路径和细节。当epsilon固定时,增加alpha和num_iter可以帮助更细致地探索对抗方向,但最终的扰动幅度还是受到epsilon的限制。
  • 增大num_iter会使攻击更加逼近epsilon所能达到的极限,而增大alpha则可能会让每一步的扰动更大,但由于最终扰动不能超过epsilon,过大的alpha可能导致不稳定的扰动,反而不利于有效攻击。

步长和迭代次数的权衡

  • 较大的alpha可能在每一步产生过大的扰动,导致无法有效逼近最优对抗方向。而较小的alpha配合更多的迭代次数可以在epsilon范围内更细致地调整扰动,使得攻击效果更佳。
  • num_iter的增加可以让扰动更充分地逼近epsilon的边界,但如果alpha过大,num_iter的增加作用会减弱,因为每一步的扰动已经很接近epsilon。
对抗训练有效提升模型对抗样本的鲁棒性

通过对抗训练,模型(特别是ResNet)的准确率在对抗样本上有显著提升。这表明对抗训练有效增强了模型对对抗扰动的抵抗能力。对抗训练通过在训练过程中引入对抗样本,使模型学会如何处理和抵御这些样本,从而在测试时能够更好地应对对抗攻击。

总结
  1. epsilon是决定攻击强度的主要因素
    • 它定义了对抗扰动的最大范围,因此是决定攻击效果的主要因素。
  2. alpha和num_iter的选择需要平衡
    • 适中的alpha和num_iter组合能够在epsilon范围内生成有效的对抗扰动。过大的alpha和num_iter可能导致扰动过度复杂化,扰动效果反而下降。
  3. 复杂模型对抗效果的特殊性
    • 复杂模型(如ResNet)在高维特征空间中的扰动路径更容易不稳定,因此需要特别注意alpha和num_iter的选择。
  4. 对抗训练的重要性
    • 对抗训练增强了模型的泛化能力,使其在面对未见过的对抗样本时也能表现出色
Author

yyyyyyxnp

Posted on

2024-07-02

Updated on

2024-09-29

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.