Towards Evaluating the Robustness of Neural Networks
文章目录
摘要
- 介绍了三种攻击算法,证明了防御蒸馏不能很好的提高模型的鲁棒性
- 建议在一个简单的可转移性测试中使用高置信度的对抗性示例,我们展示了它也可以用于打破防御蒸馏,对抗样本的转移性
1 介绍
- 评估一个模型鲁棒性的两种方法:
- 尝试证明其下限
- 构造证明上限的攻击
2 背景
2.1 威胁模型
- 在本文中的攻击具备模型的所有知识,包括其架构和其参数
2.2 攻击样本
- 本文研究有目标的攻击,这些目标分情况通过以下三种方法得到:
- Average Case:在非正确标签的标签中随机选择目标类
- Best Case:对所有不正确的类执行攻击,并报告最不难攻击的目标类
- Worst Case:对所有不正确的类执行攻击,并报告最难攻击的目标类。
2.3 距离度量
p-范式的定义:
- L_0距离:元素不同的数量
- L_2距离:欧式距离
- L_∞距离:最大的元素改变量
2.4 防御蒸馏方法介绍
- 训练模型时,用更加平滑的softmax方法(将模型的输出除以常数T),训练结束后生成soft训练标签
- 丢掉1中训练的模型,使用得到的soft训练标签训练得到第二个模型
- 该方法的关键点:避免任何训练数据的过拟合
- 作者认为该方法没有用,因为其是基于神经网络模型是高度非线性化的观点(防止过拟合可以消除盲点blind-spots,从而消除对抗样本),作者认为这证明了模型的线性假设的观点
3 攻击算法
3.1 L-BFGS
- 基于L2距离,建模成一个有约束的最小化问题:
- 该问题难以解决,作者将其转化为如下的形式:
- 式中参数c的作用是为了找到有最小距离的x‘,通过多次重复自适应的更新参数c
3.2 FGSM
- 基于L∞距离,关注点在找对抗样本更快而不是其相似程度
- 式中符号要足够小为了对抗样本不被侦测到
- Iterative Gradient Sign:一个简单的改进,将一步替换为多步再修剪
3.3 JSMA
- 基于L0距离,是一种贪心算法,每次选取一个像素进行修改,不断迭代。
3.4 Deepfool
- 基于L2距离,假设神经网络是完全线性的,用一个超平面将每个类和另一个类分开来构造Deepfool,解最优解构造对抗样本,再将网络视作非线性对对抗样本进行调整。公式较复杂。
4 提出的方法
- 依赖之前的公式
D是距离度量
- 通过将其作为一个合适的优化实例来解决这个问题,该实例可以通过现有的优化算法来解决
4.1 目标函数
- C(x + δ) = t高度非线性不好解,定义一个目标函数 f 使得 f<=0 来代替这一部分,可选如下:
- 问题转化为:
- 再转化为如下的等价形式:
- 将距离度量D写作范式的形式:
- 式子中的c是一个适当选择的常数,存在c>0,使得后者的最优解与前者的最优解相匹配,根据实验绘制 c 的取值不同下结果情况:
-
发现:
- c 小,则攻击成功率下降
- c 大则攻击有效性下降(攻击样本距离大)
因此,使用改进的二分搜索来寻找合适的 c 值。
4.2 盒子约束(Box constraints)
-
盒子约束:确保修改后的值即 xi + δi 在 0 和 1 之间
-
本文介绍并实验了三种方法:
- Projected gradient descent:每次迭代都修剪
- Clipped gradient descent:就最后修剪一次,即在进入目标函数前修剪
- Change of variables:迭代时改变 w 而不是 δ
- 这些方法允许我们使用不带该功能的优化器,实验表明Adam的速度较快。
4.3 方法的评价
- 探究不同函数、盒子约束方法下算法的效果
4.4 离散化
-
算法中的是连续的数,但图像中是0,1,2……255的整数,需要处理,可以直接四舍五入,但这样会略微降低对抗样本的质量,可以通过一次改变一个像素值来对离散解定义的晶格进行贪婪搜索来恢复确保质量
-
在我们的工作中,我们要找到图片上改变更小的对抗样本,因此离散化的影响不能忽略
5 我们的三种攻击算法
5.1 L2攻击
- 选择前面讨论过的Change of variables盒子约束和最佳目标函数 f ,对 f 进行稍微的修改从而可以通过调整κ来控制错误分类发生的置信度
- Multiple starting-point gradient descent:梯度下降的主要问题是它的贪心搜索不能保证找到最优解,可能陷入局部极小值,可以选取多个靠近原始图像的随机起始点,并从每个点进行梯度下降,迭代次数固定
5.2 L0攻击
- L0距离度量是不可微的,因此不适合标准梯度下降,从而使用迭代算法
- 每次迭代中,识别出对分类器没有太大影响的一些像素,然后固定他们的值,固定像素集会随着迭代次数增多而增长,直到确定最小像素子集,通过对其进行修改可以生成对抗样本。
- 每次迭代中使用L2攻击来确定哪些像素不重要:
- 用L2攻击确定 δ ,并计算 g = ∇f(x + δ)
- 挑选出像素 i = arg mini gi · δi ,固定其值,下次L2攻击中不允许改变它,重新用L2攻击
- 重复该过程直到不能生成对抗样本
5.3 L∞攻击
- 用最原始的公式会出现在两个次优解之间来回震荡的情况(每次只允许改变一个值)
- 使用迭代攻击解决此问题,将目标函数中的L2项替换为超过 τ 的任何项的惩罚(最初为1,每次迭代都会减少)。在每次迭代中,如果全部的 δi < τ ,将 τ 减少 0.9 倍并重复;否则,中止搜索。(每个 δi 代表改变的绝对值,当出现一个δj大于 τ 的且是对抗样本,即无须再迭代进行改变了,此时的无穷范数就是δj,再变无穷范数就会继续增大)
6 攻击的评价
- 生成合成数字实验:在一张全黑/白的图上生成指定类别的对抗样本,基本看不出变化
- 我们的算法和之前的算法都能在很短的几分钟里生成有效的对抗样本,但我们的算法速度稍慢
7 防御蒸馏的评价
-
防御蒸馏使用蒸馏方法去提高模型的鲁棒性,但有两个重要的改变:
- 训练时第一个模型和第二个模型的尺寸大小完全相同
- softmax之前除以 T 来使模型对其预测更加自信
- 防御蒸馏方法在训练时(第一个模型和第二个模型)设置 T ,在测试时将 T 设置为 1
7.1 原先攻击算法的脆弱性
- L-BFGS 和、Deepfool 、 JSMA-F 和 FGSM 失败是由于梯度几乎总是为 0
- 防御蒸馏使用了除以 T 的方法,使得进入softmax的数据Z(称为logits) 非常的大所以softmax后的值非常的hard
- JSMA-Z(使用 logits 攻击)失败是由于 logits 增大了 T 倍,其改变几乎没影响
7.2 转移性
- 作者提出了击破防御蒸馏的另一种方法,利用对抗样本的可转移性在容易攻击的模型上生成对抗样本用来攻击,此时寻找的对抗样本是无目标的攻击(像其他任何 label 都可以)
- 参数κ的目的是控制对抗性示例的强度,这里的 κ 越大,代表生成的对抗样本越强大
- 作者认为该方法可作为评估防御的鲁棒性的一种通用方法
原文链接:https://arxiv.org/pdf/1608.04644.pdf