【置顶】IJCAI 参赛方案分享

赛题介绍及获得名次

大赛地址: https://tianchi.aliyun.com/markets/tianchi/ijcai19_en
天池地址: https://tianchi.aliyun.com/competition/entrance/231701/introduction
队伍名称: 草帽小子海贼团
线上成绩:

  • non-targeted attack track: 3 / 2519
  • targeted attack tack: 8 / 2519
  • defense track: 9 / 2519

近年来深度学习技术的不断突破,极大促进了人工智能行业的发展,而人工智能模型本身的安全问题,也日益受到AI从业人员的关注。2014年Christian Szegedy等人首次提出针对图像的对抗样本这一概念,并用实验结果展示了深度学习模型在安全方面的局限性。我们可以通过对原始样本有针对性的加入微小扰动来构造对抗样本,该扰动不易被人眼所察觉,但会导致AI模型识别错误,这种攻击被称为“对抗攻击“。该成果引发了学术界和工业界的广泛关注,成为目前深度学习领域最热的研究课题之一,新的对抗攻击方法不断涌现,应用课题从图像分类扩展到目标检测。对抗攻击技术也引发了业界对于AI模型安全的担忧,研究人员开展了针对对抗攻击的防御技术研究,也提出了若干种提升模型安全性能的方法,但迄今为止仍然无法完全防御来自对抗样本的攻击。

IJCAI-19 阿里巴巴人工智能对抗算法竞赛的目的是对AI模型的安全性进行探索。这个比赛主要针对图像分类任务,包括模型攻击与模型防御。参赛选手既可以作为攻击方,对图片进行轻微扰动生成对抗样本,使模型识别错误;也可以作为防御方,通过构建一个更加鲁棒的模型,准确识别对抗样本。

本次比赛,首次采用电商场景的图片识别任务进行攻防对抗。总共会公开110,000左右的商品图片,来自110个商品类目,每个类目大概1000个图片。选手可以使用这些数据训练更加鲁棒的识别模型或者生成更具攻击性的样本。

任务目标及评测标准

本次比赛包括以下三个任务:

  • 无目标攻击: 生成对抗样本,使模型识别错误。
  • 目标攻击: 生成对抗样本,使模型识别到指定的错误类别。
  • 模型防御: 构建能够正确识别对抗样本的模型。

三个赛道的评分独立计算, 计算方式分别为:

  1. 无目标攻击:
    • 无目标攻击是不指定具体类目,只要让模型识别错误即可,同时扰动越小越好。
    • 评估方法:
      对每个生成的对抗样本,会采用 5 个基础防御模型对该样本进行预测,并根据识别结果计算相应的扰动量,$D(I, I^a)$。具体距离度量公式如下:其中 $M$ 表示防御模型,$y$ 表示样本 $I$ 的真实标签。如果防御算法对样本识别正确,此次攻击不成功,扰动量直接置为上限 64。如果攻击成功,计算对抗样本 $I^a$ 和原始样本 $I$ 的扰动量,采用平均 $L_2$ 距离。每个对抗样本都会在 5 个防御模型上计算扰动量,最后对所有的扰动量进行平均,作为本次攻击的得分,得分越小越好。具体计算公式如下:其中 $n$ 为评测的样本数量。
  2. 目标攻击:
    • 目标攻击比无目标攻击更加困难,不仅需要使模型识别错误,还需要使模型识别到指定的类别,同时扰动越小越好。
    • 评估方法:
      和无目标攻击一样,对每个生成的对抗样本,会采用 5 个基础防御模型对该样本进行预测。扰动量的计算方式和无目标攻击类似。在无目标攻击中,防御模型的输出是和真实类别 $y$ 进行比较,判断是否攻击成功。在目标攻击中,防御模型的输出是与指定攻击类别 $y^t$ 进行比较判断是否攻击成功。和无目标攻击一样,目标攻击也使用平均扰动量作为最终的得分。得分越小越好。
  3. 模型防御:
    • 选手需要提供更加鲁棒的防御模型,能够正确识别对抗样本,同时处理的扰动越大越好。
    • 评估方法:
      对于每个样本,使用 5 个攻击模型生成对抗样本去评估防御模型,如果防御模型识别错误,得分为 0。如果防御模型识别正确,计算扰动样本与原始样本之间的平均 $L_2$ 距离作为得分。得分越大越好。防御模型的最终得分计算公式如下:其中 $A_i(I_j)$ 表示第 $i$ 个攻击模型对 $I_j$ 生成的对抗样本.
      需要注意的是,所有图片都会被resize到299X299进行评测。

数据及提交格式

数据

  • 训练
    会提供 110 个类目 11 万左右的商品图片作为训练数据,这些商品图片来自阿里巴巴的电商平台。每个图片对应一个类目ID。另外,我们会提供一些基础分类模型供参赛选手使用。训练数据和基础分类模型会在近期开放下载。
  • 评测
    在比赛的第一阶段,会使用 110 个图片和 dev.csvdev.csv中包含了每个图片对应的真实类目 ID 和目标攻击的类目 ID(用于目标攻击),具体格式如下:
    1
    2
    filename,trueLabel,targetedLabel
    0.png,0,43

另外,会使用 550 个图片作为第二阶段的评测数据,比赛的最终得分将在此数据上计算。

提交格式

参赛选手需要在阿里云的容器服务上https://cr.console.aliyun.com/构建一个Docker镜像,然后将Docker镜像的具体地址粘贴到提交框中进行提交。

限制:

所有的提交镜像都会运行在Docker容器中(物理机的环境centos 7.2 and cuda8.0 ,driver 384.66)。由于资源有限,对提交镜像的大小和容器的运行时间有一些限制:

  • Docker镜像大小限制:
    Docker镜像大小不能超过8GB。
  • 运行时间限制:
    评测的时候,会使用GPU进行评测(1块P100卡),每次提交的运行时间限制在25分钟以内。
  • 容器运行的过程中,网络是不可能用的。

Docker 镜像格式:

Docker 镜像中必须包含一个 shell 脚本run.sh。 运行时的当前目录必须是/competition

  • 无目标攻击与目标攻击
    run.sh用于生成对抗样本,输入参数是${INPUT_DIR}${OUTPUT_DIR}

    1
    ./run.sh ${INPUT_DIR}  ${OUTPUT_DIR}

    在评测过程中,${INPUT_DIR}会被映射到输入数据的路径,${OUTPUT_DIR}会被映射到对抗样本的路径。会用以下的方式来调用参赛选手提供的镜像:

    1
    2
    3
    4
    5
    6
    7
    8
    nvidia-docker run \
    -v ${INPUT_DIR}:/input_images \
    -v ${OUTPUT_DIR}:/output_images \
    -w /competition \
    ${DOCKER_IMAGE_NAME} \
    sh ./run.sh \
    /input_images \
    /output_images
  • 模型防御
    在模型防御任务中,run.sh用于预测对抗样本的类别。输入参数和输出分别是${INPUT_DIR}${OUTPUT_FILE}

    1
    ./run.sh ${INPUT_DIR} ${OUTPUT_FILE}

    ${OUTPUT_FILE}的输出格式如下:

    1
    2
    3
    4
    5
    6
    7
    57.png,57
    50.png,50
    41.png,62
    55.png,55
    30.png,30
    6.png,6
    58.png,58

    第一列是文件名,第二列是模型输出的 label.
    会采用以下的方式来运行参赛选手提供的镜像:

    1
    2
    3
    4
    5
    6
    7
    8
    nvidia-docker run \
    -v ${INPUT_DIR}:/input_images \
    -v ${OUTPUT_DIR}:/output_data \
    -w /competition \
    ${DOCKER_IMAGE_NAME} \
    sh ./run.sh \
    /input_images \
    /output_data/result.csv

无目标攻击参赛方案

简述

baseline 方法, 基于模型参数梯度的攻击方法, 这个方法的攻击条件就是要知道模型的结构和参数, 也就是所谓的白盒攻击. 攻击的时候首先将图片传到神经网络中, 计算相应的损失函数, 然后, 我们计算这个损失值相对于图片上每个像素点的梯度, 我们用这个梯度构造一个噪声, 将这个噪声的值添加到图片上相应位置以后, 会使得损失函数的值增大, 通过若干次的迭代后, 就能让该图片变成一个攻击样本, 使得网络对这张图片的类别分类错误.

两个重要性质:

  1. Transferability(可迁移性): 对于需要知道模型结构和参数取值的攻击方法, 我们称之为 “白盒攻击”. “白盒攻击” 在 “白盒” 条件(已知模型和参数)下通常具有很高的攻击成功率, 但是, 当它面对 “black-box setting” 时, 白盒攻击方法所产生的对抗样本往往表现很差, 尤其是在面对使用模型集成方法的防御模型时, 攻击成功率会降低到 10% 以下.
  2. Robustness(鲁棒性): 实际上,基于梯度的方法所生成的对抗图像是脆弱的。通过实验,我们可以观察到,一旦对抗图像的完整性被破坏,攻击的成功率将大大降低。比如, ResNet 和 Inception 的放缩尺寸和归一化策略不同, 这使得在一个模型上攻击后的图像无法在另一个模型上保持鲁棒.

从这两个角度出发, 我们提出了若干的优化方法来提升攻击图片的攻击效果

  • Input Diversity (输入多样化)
  • Gaussian Blur(高斯模糊):
    • Image Gaussian
    • Noise Gaussian
  • central attack(中央攻击)
  • Cross Attack(交替攻击)

no_momentum

输入多样化(Input Diversity)

现阶段, 不论是在图像分类任务, 还是目标检测, 实例分割等其他视觉任务, 数据增广技术对于最终的性能提升来说都是不可或缺的一步, 基于此, 2019 由 Johns Hopkins University 的一篇文章中提出了通过多样化的图片输入来增强生成的对抗样本的攻击能力. 由于不同的网络通常具有不大一样的预处理流程, 包括 resize, cropping, rotating 等等, 因此, 和传统的 FGSM 方法不同, 我们不是直接在原始图像上计算相应的噪声, 相反, 我们会在每一次的迭代过程中以一定的概率 p, 随机的对图片进行缩放, 剪裁, 填充等等操作. 通过这种类似于数据增广式的处理之后, 可以使得我们生成的对抗图片本身具有泛化性更好的噪声, 进而可以提高在 “黑盒攻击设定” 下的成功率.

降噪攻击(Denoised Attack)

图片在送入神经网络之前, 先经过一步降噪处理, 此时, 可以使得模型的防御能力提升. 为此, 我们提出了基于降噪处理的攻击方法, 生成可以对降噪图片起作用的攻击图片. 降噪处理方法有很多种, 如压缩, 高斯模糊等等. 下面我们以高斯模糊为例, 对其进行介绍. (其他类型的降噪方法理论上也可起到不同程度的强化攻击的作用)

图像高斯

在进行模型防御任务时, 我们发现, 当对原始图片执行高斯模糊之后, 可以降低防御模型的准确率, 我们对大量的模型结构都进行了相同的实验, 发现这种准确率的降低是普遍存在的. 因此, 我们认为高斯模糊可以通过弱化图片的显著特征, 来使得神经网络无法根据这些特征正确判别物体的类别.
因此, 我们提出在每一次的迭代过程中, 都对当前的输入图像执行相应的高斯模糊操作, 我们这么做的好处有两点, 第一, 经过高斯模糊后的图片, 本身以及具有一定的攻击性, 它可以在一定程度上使得网络分类错误; 第二, 我们在高斯模糊后的图片上计算相应的 loss 函数值, 然后求取该 loss 相对于原始图像 x 的梯度, 并根据该梯度计算相应的 noise, 此时的 noise 相当于进一步是在误导性更强的图片上计算得到的, 因此, 在相应的扰动量约束下, 这种方式获得的 noise 具有更强的攻击能力.

噪声高斯

另一方面, 我们从 noise 角度出发, 通常我们会将生成的 noise 进行归一化处理后加到原始的图片中. 而我们在这里同时还会添加对 noise 的高斯模糊, 由于基于梯度的攻击方法是 “白盒攻击” 中的一类, 因此它产生的噪声非常依赖于模型的结构和参数, 而经过高斯模糊以后的 noise, 它原先的显著特征会趋于平滑, 使得 noise 对于单个模型的依赖性更小, 结合我们后面提出的交替攻击方法, 就可以使 noise 对于更大范围内的模型都普遍具有较强的攻击性.

中央攻击(Central Attack)

优势

该项改进的灵感来自于人类平常看待物体的方式, 通常, 对于任何一个物体, 我们第一眼总是会去关注这个物体的中心部分, 而对于边缘部分来说, 则关注度较少. 基于这个先验假设,我们提出了一种中央攻击方法,其核心思想就是在每一次的迭代中我们只保留 noise 的中央部分, 并将其添加到原始图像上. 简单来说, 采用中央攻击方法具有两点好处

  1. 可以有效的减少对抗样本的扰动量。通过使用中央攻击, 我们可以在确保攻击成功的前提下,大幅度减少扰动量的大小。这是因为对于图像边缘来说, 我们的中央攻击方法可以令它的扰动量始终保持在 0 这一水平. 而对于最终的扰动量大小, 我们可以通过调节中央攻击区域的大小灵活的控制. 一般来说, 中央攻击区域的面积越小, 其所产生的扰动量就越小, 但是另一方面, 如果区域过于小的话, 就会造成攻击失败的情况。
  2. 可以增加对抗样本对 Image Crops 预处理的鲁棒性。 在神经网络中,我们通常使用一系列图像增强方法来处理图像,其中 five crops 和 center crop 都是非常常用的方法. 在进行模型防御任务时, 我们发现, 当我们将对抗样本按照 five crop 或者 center crop, 或者其他的剪裁方式进行剪裁以后, 这个对抗样本的攻击成功率就会大打折扣. 因此我们推测, 基于 FGSM 方法生成的对抗样本中, 其每一个像素点上的 noise 并不是完全独立的, 它们之间可能存在某种关系来共同支持对抗样本的攻击性. 所以说当我们执行 crop 操作时, 实际上我们破坏了对抗图像上 noise 的完整性, 这样就会使得攻击的成功率急剧下降. 而当我们使用了中央攻击以后, 图像中中央区域就会产生一个完整的噪声, 此时虽然对于包含边缘部分的 crops 来说, 仍然破坏了对抗图像的完整性, 但是对于 center corp 以及 random crops 来说, 在大部分情况下, 都可以保证一定程度的完整性, 因此它具有抵御防御模型的裁剪操作的作用。

使用

一般来说, 在使用中央攻击的时候, 我们通常分成以下两步:

  1. 当我们获得了一个很强的 baseline 分数时, 我们可以直接对其执行 central attack, 根据我们实验显示, 这样做了以后, 几乎总是能够获得更好的结果, 具体的提升幅度则取决于如何权衡中央攻击区域的大小.
  2. 当我们以及利用第一步 central attack 获得一个更好的分数时, 由于在一定程度上, 模型的攻击成功率和图像的扰动量是呈正相关的, 根据这一点我们可以逐渐放宽对于扰动量的限制, 进而使得模型的攻击成功率更高. 这是因为, 在经过第一步的 central attack 之后, 我们产生的图像 不仅分数更好, 同时扰动量也更低! 因此, 为了进一步获得更好的分数, 我们可以通过增加扰动量来提升模型的攻击成功率, 这样, 我们就可以在扰动量不超过最初对抗样本扰动量的前提下, 获得更高的攻击成功率. 需要注意的是, 这一步带来的提升是不稳定的, 也就是说它不能保证一定会获得更好的分数, 有时也会变得更差, 这是因为我们无法保证提升扰动量一定可以增加攻击成功率.

扩展

基于显著特征的攻击方法.
中央攻击的方法虽然实现简单并且卓有成效, 但是它其实可以更进行更多的扩版, 例如, 我们并非只攻击中间部分, 而是将根据模型损失求得的梯度, 选择性的值更新那些响应最大的区域, 我们可以统计图像上的每一个像素的 noise 值, 并且选择 top-k 个像素点, 然后以这 k 个像素点为中心, 以一定的尺寸为半径, 只对这一部分区域进行更新. 又或者, 我们可以结合传统的边缘检测算子, 只对纹理特征明显的部分进行更新. 通过这些扩展, 我们认为在理论上可以进一步提高生成的对抗图像的攻击成功率.

交替攻击(Cross Attack)

由于我们采用的是基于 FGSM 的 “白盒攻击” 方法

通常情况下, 为了获得更广泛的迁移能力和更强的鲁棒性, 我们通常会选择是模型集成方法来增强对抗样本的攻击成功率. 对于基于 FGSM 的方法来说, 在进行模型集成的时候, 通常会在每一次的迭代过程中, 同时计算多个模型的预测结果, 然后会基于一定的集成策略, 来计算最终的集成 noise. 常用的集成策略可以基于 logits, 或者基于 predictions, 或者基于最终 loss 等等. 不论是哪一种集成策略, 我们都需要将相应的模型加载到显存中并执行计算. 通常来说, 当集成的模型数量和种类越多时, 产生的对抗样本的迁移性和鲁棒性就越好, 但是由于有限的计算资源和时间限制, 我们往往无法集成太多的模型. 故此, 我们提出了一种交替攻击的对抗样本生成方法. 具体来说, 就是在每一次的迭代过程中, 我们都攻击不同的模型, 这样, 我们就可以在相同的时间限制和资源限制下, 尽可能的使对抗样本对于更多的模型都具体攻击性. 举个例子, 假设我们现在有 ABC 三个模型, 由于资源和时间的限制, 我们在每次迭代中最多同时攻击这三个模型并计算集成后的 noise. 当我们通过模型防御赛道获得了一些效果很不错的模型时, 假设获取到了 6 个表现不错的模型, 将其记为 D, E, F, H, I, J.(为了简单起见, 我们假设A~J模型的大小均相同) 此时我们希望对这 6 个模型也进行攻击, 那么我们通常的做法是直接用这 6 个模型来替换 ABC 中的模型. 但是这样实际上仍然无法获得更鲁棒的对抗样本.
因此, 我们提出, 将 A~J 这 9 个模型随机分成三组, 每一组包含三个模型, 然后依次执行三次迭代, 每一次迭代的输出仍然和传统方法一样会作为下一次迭代的输入, 这样, 经过三次迭代以后, 我们的对抗样本就会带有对这 9 个模型都有效的 noise. 然后, 我们再重新的随机分组, 执行相同的逻辑. 这样一来, 我们可以在使用了相同的显存资源和运行时间的前提下, 生成攻击范围更广的对抗样本. 在实际使用中, 由于各个模型之间的大小差异比较大, 因此在进行分组的时候, 无法完全随机, 但是即使是人工设定的分组方案, 也可以在相同条件下, 获得更好的分数. 根据我们的实验效果, 我们认为这种提升是稳定的, 并且可以和其他方法想兼容, 就是说当我们获得了一个较好的分数时, 我们往往可以利用这种方法, 获得一个更好的分数.

模型集成

Preprocessing Unified Ensembling

使用基于 FGSM 的方法在进行模型集成的时候, 我们需要就同样的 input x 作为输入, 输送到不同的网络中去, 然后计算相应的 logits 和集成后的 loss, 进而求得关于 input x 的梯度, 然后利用这个梯度计算相应的 noise. 需要注意的是 noise 和 input x 的 shape 是完全相同的, 因此, 当集成不同的模型时, 如果他们的输入具有不同的尺寸, 那么就会有多个不同 shape 的 input x. 但是 noise 却只有一个, 在这种情况下, 我们无法令对抗样本更新, 也无法执行有效的模型集成工作. 除此此外, 不同的模型参与的归一化方法也不同, 有的模型会将图像的像素值归一化到 [0, 1] 之间, 而有的则会归一化到 [-1, 1] 之间.
对于这种情况, 我们普遍的做法是将计算得到的 noise 分别 resize 到不同的尺寸上, 同时将其值转化都不同的区间上, 以此来匹配 input x 的 shape. 但是经过实验我们发现, 这种集成方式会大大破坏 noise 的整体性, 从而使得攻击效果大幅降低.

为了解决上述问题,我们提出了一种通用的模型集成方法, 使其可以利用图像预处理操作(调整大小,标准化等)可微分的性质的。 具体来说, 与将调整大小和标准化作为预处理操作的传统 pipeline 不同, 我们会将图像的预处理操作放入 pytocrh(或 tensorflow 等)计算图中,这样我们就可以直接沿着反向传播的方向求出原始图像上的扰动, 通过这样一个简单的操作, 我们可以最大程度地确保所产生的扰动的完整性,从而显著提高了集成模型的有效性。

通过这种方法, 我们消除了对模型预处理操作的约束, 使得我们可以对每一个模型进行针对性的预处理操作, 尽量的提升单个模型的性能, 这样一来, 在模型集成的时候, 就可以获得更加鲁棒的对抗样本结果.

集成策略

在进行模型继承的时候, 我们尝试了多种不同的集成策略, 总的来说有三种, 第一种是按照 softmax 激活函数的输出进行集成, 第二种是按照模型的预测结果进行集成, 第三种是按照每个模型的 loss 进行集成.

这三种集成方法的区别在于选取的模型输出位置的不同, 因为我们的 loss 是通过 predictions 计算来的, 而 predictions 又是通过 logits 计算来. 通过大量的实验我们发现, 在 logits 处进行集成可以在无目标攻击任务上获得最好的分数.
原因: 对于无目标攻击来说, 我们只需要模型出错即可, 不要求它必须在哪一类出错, 因此, 相对于集成 loss 和 predictions, 集成 logits 更加直接, 当 logits 发生一定程度的变化时, 自然就会使得最终的 loss 升高, 进而让模型预测错误.

模型权重

在进行模型集成的时候, 我们发现, 并不是每一个模型的重要性都是相同的, 根据我们的实验结果, 我们认为用于生成对抗图像的模型的重要性可以通过在集成多个模型时的平均权重设置来反映。 因此我们会尝试不同模型的类型,并增加相应模型的权重。 这一步的提升是不稳定的, 我们不能保证权重的修改一定能带来多少提升. 需要根据具体的场景做修改.

将高斯模糊和中心剪裁应用在基于图像和梯度产生的噪声矩阵当中, 可以在一定程度上提高对抗样本的可迁移性.

除此之外, 我们还提出了一个统一的模型继承方法, 使得我们可以将预处理流程不同的多个模型集成到一起. 从而大大提高对抗图片的攻击范围.

一些研究表明,使用基于梯度算法生成的对抗图像可以很容易地愚弄神经网络。但是,当攻击者处于黑匣子设置或者对抗图像的完整性受到损害时,攻击成功概率将大大降低。在本文中,我们探索高斯模糊和中心裁剪方法,有助于生成对抗图像,这些图像更强大,具有更好的传递能力。大量关于IJCAI-2019阿里巴巴对抗性人工智能挑战(AAAC 2019)的实验表明,我们提出的调整产生的对抗图像在黑盒设置下也具有更好的性能,并且对于具有防御措施的模型更具鲁棒性。此外,我们还提出了一种新颖有效的模型集成方法,称为预处理统一集成(PUE),它可以在不同的图像尺寸和不同的预处理模型上集成模型。结合提出的方法和PUE,AAAC 2019的在线分数在非目标对抗性攻击中排名第3,在目标对抗性攻击中排名第8。

神经网络广泛用于各种任务并实现高精度。 然而,研究表明,CNN网络容易受到对抗性图像的影响[Szegedy等,2014,Goodfellow等人,2015],这使得CNN网络在一些具有高安全性要求的应用场景中面临着巨大的威胁。 对抗图像意味着通过某些方法将噪声添加到原始图像。 这些噪声可能不容易被人类检测到,但它们经常导致神经网络中非常错误的错误。 例如,[Brown et al.2017]提出,他们可以通过在图片上添加贴纸来混淆神经网络,以便神经网络将任何图像识别为烤面包机,[Thys et al.2019]提出打印 a4纸的图像可以使人在物体检测系统中不可见。 这些研究表明,尽管神经网络功能强大,但在面对精心设计的对抗图像时它非常脆弱。

实验效果

CompetitionIJCAI%2Fattack_tab1.jpg

CompetitionIJCAI%2Fattack_fig1.jpg

CompetitionIJCAI%2Fattack_fig2.jpg

目标攻击参赛方案

区别一

目标攻击和无目标攻击相差不多, 只不过目标攻击需要让模型将物体识别成指定的类别. 具体来说, 就是在更新 noise 的方式上有所不同, 下面分别是无目标攻击和目标攻击的 noise 更新代码.

无目标攻击:

1
2
3
4
5
6
7
8
9
10
11
cross_entropy = F.cross_entropy(logits, y)
cross_entropy.backward()
noise = x.grad
noise = noise.cpu()
x = x.cpu()
noise = noise / torch.reshape(
torch.std(torch.reshape(noise, [args.batch_size, -1]), dim=1),
shape=[args.batch_size, 1, 1, 1])
x = x + alpha * torch.clamp(torch.round(noise), -2, 2)
x = torch.min(x, x_max)
x = torch.max(x, x_min)

目标攻击:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cross_entropy_vgg = F.cross_entropy(logits_vgg, y)
cross_entropy_vgg.backward()
noise_vgg = processed_imgs_vgg.grad
noise = (noise_inc1 + noise_den264 + noise_res + noise_vgg) / 4.0
noise = noise / torch.reshape(
torch.std(torch.reshape(noise, [args.batch_size, -1]), dim=1),
shape=[args.batch_size, 1, 1, 1])
noise = momentum * grad + noise
noise = noise / torch.reshape(
torch.std(torch.reshape(noise, [args.batch_size, -1]), dim=1),
shape=[args.batch_size, 1, 1, 1])
grad = noise
x = x - alpha * torch.clamp(torch.round(noise), -2, 2)
x = x.cpu()
x = torch.min(x, x_max)
x = torch.max(x, x_min)

区别二

目标攻击参赛方案和无目标攻击参赛方案的另外一处不同点在于模型的集成方法不同, 对于无目标攻击来说, 按照 logits 进行集成可以获得最佳的效果, 而对于目标攻击来说, 按照 loss 进行集成可以获得最佳的效果. 这是因, 对于目标攻击来说, 我们需要将物体识别成特定的物体时才能算是攻击成功, 因此, 对于 logits 的变化, 如果它不能将物体特定类别的预测概率提高, 那么他就不应该产生相应的 loss, 所以, 当我们使用目标攻击时, 直接按照 loss 进行融合, 可以获得更可观的性能提升.

模型防御参赛方案

简述

目前我们已经知道, 神经网络很容易就会受到对抗样本的攻击,这对于处在安全敏感系统中的应用来说是一个潜在的威胁。 我们可以通过逐层累积对抗性的噪声来使得模型产生错误的分类。基于这一点, 我们提出了将映射函数变换(mapping function transforms, MFT)作为针对图像分类任务的防御策略。 MFT 的核心思想就将原始图像和对抗图像分别映射到其他的图像空间, 我们的目的就是要找到可以完成这一任务的函数 $f$, 进而解决神经网络容易受到对抗样本攻击的问题。在这个新的图像空间中,原始图像和对抗图像之间的 $L_2$ 范数将会变得更小,从而让模型在面对具有较大扰动的图像时, 依然能够保持较强的分类能力。MFT 有两个优点:

  1. MFT 可以使目标模型对白盒和黑盒对抗性攻击更加健壮。
  2. MFT 可以非常容易地扩展到大型数据集,并且在 Inference 阶段也只花费很少的时间。

CompetitionIJCAI%2Ffig1.jpg

目前神经网络已经广泛用于各种任务, 并且能够在大多数任务中达到较高的精度。 但是,神经网络很容易受到对抗样本的影响。 对抗样本是指通过向原始图像添加一下细微小扰动而获得的图像。并且在更新的研究结果和技术的加持下, 对抗样本可以在不同模型之间保持迁移性。 这种迁移性能够在不知道目标模型的权重和结构的情况下实现黑盒对抗性攻击。 黑盒攻击在现实世界的场景中已被证明是可行的,它对一些安全敏感的深度学习应用程序(如身份验证和自动驾驶)会构成巨大的潜在威胁。 因此,找到有效的防御对抗性攻击的方法就显得尤为重要。

传统方法

传统的去噪方法是找到一个去噪函数 $f$,其目标是使得距离 $\Vert x - f(x_{adv})\Vert$ 尽可能的小, 这样一来它就可以在一定程度上减少对抗样本的干扰,进而提高神经网络处理对抗图像的能力(如下面的图2所示)。 但是, 通过大量实验, 我们发现传统的去噪方法对减小距离 $\Vert x - f(x_{adv}) \Vert$ 的能力有限。

CompetitionIJCAI%2Ffig2.jpg

MFT Operation

为了进一步提高神经网络处理具有更大扰动的对抗样本的能力,我们提出了映射函数变换(mapping function transforms, MFT)。我们发现我们可以找到一个映射函数 $f$,来使得距离 $\Vert f(x) - f(x_{adv}) \Vert$ 尽可能小,而不是传统方法中的减小距离 $\Vert x - f(x_{adv}) \Vert$. 通过这种函数变换, 我们希望在另一个空间中建立原始图像和对抗图像之间的相互关系。映射函数 $f$ 可以是传统的去噪方法,也可以是通过神经网络学习的。在进行比赛的时候, 我们使用的是传统的去燥方法, 因为这样实现起来相当容易, 并且在效果上也很不错, 可以大幅降低扰动带来的影响, 进而显著提高模型的防御能力, 如图3所示.

CompetitionIJCAI%2Ffig3.jpg

使用 MFT 进行训练和预测

MFT可以显着减少扰动,这比传统的去噪方法更好。但是MFT可能会导致图像质量下降,同时还会使得神经网络的输入出现不一致的现象. 为了解决这个问题,我们选择在 MFT 图像上训练神经网络而不是原始图像。在 Inference 阶段,我们还会将 MFT 图像馈送到神经网络中, 进而获得预测结果。

MFT Operations

我们尝试了许多不同的函数作为我们的 MFT operations, 最有效果的为以下两种:

  • Gaussian Filter: 高斯滤波器是一种广泛用于图像处理降噪处理的线性平滑滤波器。 它用来自附近像素的强度值的加权平均值替换每个像素的强度。上式中的权重 $f(x_i, x_j)$ 是基于 Gaussian distribution 的, 并且其值并不仅仅取决于像素的欧几里德距离. $C(x)$ 是归一化函数
  • Biateral Filter: 双边滤波器,它是一个用于图像的非线性滤波器,具有边缘保持和降噪平滑等特点。 它用来自附近像素的强度值的加权平均值替换每个像素的强度。从形式上来看,它的定义如下:上式中权重 $f(x_i, x_j)$ 可以基于高斯分布。需要注意,其权重也不仅仅取决于像素的欧几里德距离,还取决于辐射度差异(例如颜色强度,深度距离等), 同样, 分式中的 $C(x)$ 也是归一化函数。

我们使用训练好的模型, 从验证集中随机挑选了 1000 张图片, 分别进行了两组实验来验证 MFT Operations 的有效性.

Vanilla Attack Scenario

Vanilla Attack 攻击者不知道 MFT 操作的存在,也就说说攻击者不会专门针对 MFT 操作进行攻击.

对于 vanilla attack scenario,我们使用 $sigma = 5$ 的高斯滤波器作为 MFT 操作,由于攻击者不知道 $MFT$ 操作,因此它会直接使用原始网络作为目标模型来生成对抗样本。 从表1中列出的 top-1 精度可以看出,MFT 操作可以显著提升单步和迭代攻击生成的具有较大扰动的对抗图片的识别准确率。 对于单步攻击 $FGSM-\epsilon$,较大的 $\epsilon$ 表示较强的可迁移性,因此更难以防御。 但是,使用 Inception-ResNet-v2(99.54% 的 top-1 精度),我们仍然可以在单步攻击(即使是较大的 $\epsilon$)上获得令人满意的防御模型准确度。 对于迭代攻击,攻击者总是在目标模型上达到非常高的攻击率,但在面对应用 MFT 操作后的模型几乎无法攻击成功。 这是因为迭代攻击方法会过度拟合到目标模型,因此具有较弱的可转移性。

CompetitionIJCAI%2Ftab1.jpg

Un-vanilla Attack Scenario

Un-vanilla Attack 代表攻击者知道 MFT 操作的存在。

对于 Un-vanilla attack scenario,我们使用 $sigma = 5$ 的高斯滤波器作为 $MFT$ 操作,并且攻击者知道 $MFT$ 操作的存在, 也就是说在攻击之前会先对图片进行 MFT 操作, 使之在攻击时, 可以针对 MFT 进行攻击。表2显示了目标模型和防御模型的 top-1 精度,可以看出, 虽然结果比 vanilla attack scenario 更差一些(这是意料之中的),但是仍然具有比目标模型更好的结果,这也意味着 MFT 操作可以普遍的提高对抗样本的 top-1 准确度。

CompetitionIJCAI%2Ftab2.jpg