防住CV中这颗“不定时炸弹”,有哪些捷径?丨独家公开课实录(4)

在这里插入图片描述
尽管深度学习在很多计算机视觉领域的任务上表现出色,Szegedy 为首的研究者仍然发现了深度神经网络在图像分类领域存在有意思的弱点。他们证明尽管有很高的正确率,现代深度网络是非常容易受到对抗样本的攻击的。

这些对抗样本仅有很轻微的扰动,以至于人类视觉系统无法察觉这种扰动(图片看起来几乎一样)。这样的攻击会导致神经网络完全改变它对图片的分类。此外,同样的图片扰动可以欺骗好多网络分类器。

这类现象的深远意义,吸引了诸多研究员在对抗攻击和深度学习安全性领域的研究。

近日,biendata 平台邀请科大讯飞金牌讲师阿水,共同打造一门针对人脸识别的 AI 对抗攻防系列课程,主题囊括对抗样本介绍、人脸识别对抗样本、对抗防御、视频人脸检测与对抗防御等。

除对抗攻防的知识讲解外,课程还设有实战项目演练:以时下两个热门的 AI 对抗主题的竞赛为案例,详细讲解赛题及 baseline 模型代码,让参与者能够学以致用,快速上手实战。

本文为第四讲课程演讲实录整理,主要内容为对抗防御方法,以及图像、视频和音频的对抗防御思路。建议读者在前三讲的基础上进行第四讲的阅读。

第一讲:

Biendata,公众号:数据实战派
它为什么是人脸识别中的 “不定时炸弹”?丨独家公开课实录

第二讲:

Biendata,公众号:数据实战派
60万元奖金 “人脸攻防战”,怎么打?丨独家公开课实录(附baseline)

第三讲:

biendata,公众号:数据实战派
60万奖金“人脸攻防大战”,全部进阶妙招奉上丨独家公开课实录(3)

点击文末“阅读原文”可获取视频,“数据实战派”后台按指示获取 ppt。

获取代码、加入课程及竞赛讨论群可添加小助手。
图片

一、对抗样本防御方法

深度学习模型并不是绝对安全的。人们可以通过一系列的方法产生对抗样本,让模型分类错误。

如果想要增加模型的鲁棒性,一般有以下 4 种方法:

第一种方法,可以提前通过额外的模型检测得到该样本是真实样本还是对抗样本。将真实样本视为一类,对抗样本视为一类。此时利用额外的检测模型,将对抗样本的来源做二分类。

第二种方法,将对抗样本加入到数据集中进行对抗训练,这也是较为常见的方法。可以将真实样通过正向传播反向传播来调节模型的参数。

对抗训练,利用原始的数据集将产生的对抗样本加到训练过程中。对于模型根据批量的数据产生对抗样本,再将对抗样本重复正向传播和反向传播。此时对抗样本的标签是正常样本对应的标签,修改的只是模型的输入,标签并不会发生改变。

这两种方法可以不改变识别模型,而在数据层面上做对抗训练。也可以改变网络结构的超参数。

这些改变都会增加模型的鲁棒性,尽可能降低模型的敏感性。针对模型可以用不同的激活函数。激活函数不同,对抗样本的鲁棒性也会不同。

第三种方法,通过利用激活函数、网络结构或用知识蒸馏对模型b的网络结构进行修改,尽可能的让模型 a 和模型 b 存在一定的差异。

因为修改模型的激活函数网络结构得到新的网络模型的过程,本质是黑盒攻击。

第四种方法,对数据进行压缩或者是重进。对于数据集而言,原始样本和对抗存在较大的差异,可以对原始输入进行压缩。对于图片而言,可以对图片的质量进行压缩。

或者重建文件,可以对输入的数据训练降噪自编码器,让数据通过降噪自编码器,作为压缩、数据的恢复,也是特别常见的。
图片
对抗防御的这些方法都比较耗时。

特别是对抗训练,因为对抗训练需要产生对抗样本,如上图表中所示,通过 FGSM 或者说 GSMA 来产生一系列对抗样本。如果之前对于每个 batch 做一次正向传播和反向传播,此时就需要做两次正向传播和反向传播,训练的周期直接加倍。

训练速度太慢的话,可以考虑去分析具体的瓶颈是什么。比如用 gpu 训练的话,可以看看代码瓶颈是什么,通过命令行去分析是卡在文件读取 /cpu 计算或者 gpu 计算/数据传输上,去找到更好的方法。

比如文件读取上,你可以提前让图片整体成为二进制格式,尽可能将原始数据规整化,也可以加速文件的读取。

针对不同的瓶颈去分析代码,再去对代码进行优化。

对 TF record 或者 lmdb 都是可以用来存这种二进制数据。如果是卡在 GPU,需要考虑你能不能换显卡,或者说用降低模型的复杂度。
图片
从表格可以看到,不同的对抗样本的产生方法,对对抗训练速度影响非常大。

三个方法只能改 Fgsm 所参与的对抗训练过程时间最短,所以,在对抗防御或者对抗训练的过程中,可能并不会用很复杂的机器学习、很复杂的对抗样本产生方法。比较简单的方法就足够了。
图片
综上,对抗样本的检测中,我们有正常的样本,然后通过一定的方法得到对抗样本,需要通过一系列方法去识别样本是不是包含对抗噪音,或者增加模型对对抗样本的分类精度。

通过对模型做相关的改进,或者对输入去噪,或者对提前训练二分类输入、对抗样本的检测模型都是可以的。
图片

二、对抗防御方法:检测样本

现在有很多不同的对抗样本的防御方法。

如上图所示,每个分支都是一些对应的内容。比如可以从统计的角度,来识别出真实样本和对抗的差异性,或者从降维的方法,对图片做降维、去噪,也可以增加模型的对抗鲁棒性。感兴趣的同学可以直接搜索对应的名词,就能找到相关论文。
图片
首先介绍如何检测对抗。

检测得到对抗样本,也是一种基于统计角度的尝试,即能不能通过具体统计值来检测到对抗样本。

具体是统计对正常样本和对抗样本整体分布性的差异,然后通过不同的距离进行度量。
图片
从上表可以看出一些不同。第一行是原始的正常样本的 mmd 和 ed 的统计值,然后有 fgsm 和 gsma 以及不同的产生方法的距离,很直观的看到,原始样本和所产生的对抗样本,在统计角度上是可以分开的。

假如你已经知道了已有数据集,那么就可以提前计算得到相关的统计值,然后和对抗样本进行比较。
图片
当然也可以用上图的方法来做统计、进行识别。对于对抗样本,它和正常样本的主要差异在于能不能让模型分类错误。

用 gan 生成对抗样本是一种方向,但它并不是要考验生成样本的真实性,是统计所产生的对标样本和原始样本的差异,gan 方法也可以生成对抗样本,但是这种方法是没有对比的。

进行具体建模的过程中,你会发现,深度学习往往是多层卷积神经网络,或者是多层的网络模型。

深度学习中有这种流行学习、分布式知识表征的思路,也就是说,虽然样本是在高维空间内,但可以通过一定的方法把它嵌入,相当于是把它嵌入到低维的空间内,在低维空间内,样本之间是可以比较的,相似的样本是距离相近的。

基于这种假设,就可以用 knn 方法来检测对抗样本。Detecting Adversarial Samples Using Influence Functions and Nearest Neighbors 这篇论文的思路是,通过正常样本完成 feature map 的计算,然后在 feature map 嵌入空间内,可以找到跟它的相似的样本。

如果对抗样本在嵌入空间内没有这种相关的特性,也可以通过此种方法来检测。其实也是基于一种统计的方法,基于先验知识。

还有一类方法是基于原始的输入的统计,或者说基于样本在 feature map 嵌入空间内的 k-NN 思路,当然你也可以直接对于对抗样本和真实样本做二分类,即对抗样本和真实样本直接训练二分类模型,对抗样本,让它输出 0,真实样本,让它输出 1。这种情况下,就是训练分类器用来进行对抗样本的识别。

分类器可能效果不一定会特别好。因为在很多情况下,分类器容易过拟合,而且如果对抗样本方法不同,所产生的对抗样本也是存在较大差异的。

有同学说这个地方有点像判别器,有点类似,就是电网络的 discriminate 判别器,其实有点类似的,直接用来用网络模型结构来做二分类,这也是可以的。

三、对抗防御方法:对抗训练

图片
第 2 种方法是作对抗训练。

一般而言,网络模型用正常的样本来完成正向传播反向传播的过程来进行训练。对抗训练,则将对抗样本也加到正常训练的过程中,每个 batch 的训练过程通过正向传播,即先完成一次正常样本的正常传播反向传播,然后再完成一次对抗样本的正向传播反向传播。

这样可以得到正常样本的梯度信息以及样本的梯度信息,然后通过这两者的梯度相加,然后进行参数的更新。

如上图所示,对抗训练将对抗样本也加入到建模过程中,假如原始的风格面是非常线性的情况下,加入了对抗样本,上图中五角星就是所产生的对抗样本。

你会发现,训练得到的分割面更加符合数据的分布规律了,这就是对抗训练的思路。

但是其实对抗训练也有它的弊端。日常生活中,训练大规模卷积神经网络或者说在 imagenet 训练网络结构模型,可能需要几天的时间,即训练完整的数据集、图片的尺寸是 256×256 的情况下,网络结构产生对抗样本就已经非常费时间了,再让对抗样本完成正向传播反向传播,时间复杂度基本上翻倍。

上图有不同颜色的点,可以得到它真实的分割面,或者说知道对应的五角星的真实类别。

一条直线得到分割面,能够将已知的样本成功分隔开,但是你会找到类别非常近、相当于是让模型直接误分类的样本。

模型有时候会过于线性,要让网络模型结构,再去对边界的知识向量进行二次训练,分割面与理想的样本区域,是比较一致的。
图片
对抗训练,本质是在每个 batch 中,先用正常样本来训练网络结构模型,然后用对抗样本来训练网络结构模型。

在对抗训练的过程中,能不能减少模型的正向传播反向传播次数?

如果用 fgsm 或者 fgm 的方法来产生对抗样本,如果将正常样本和对抗样本都参与训练,都做两次传播,还可以做一些改进。

比如说用 Free AT 的方法,上图提到的 2019 年的一篇论文,探讨了在进行产生对抗样本、让对抗样本进行训练的过程中,能不能减少正向传播反向传播的次数。

这篇论文的思路是,在每个样本进行计算的过程中,产生对象的方法可以复用上一步的梯度,不断去迭代产生下一步的对抗样本,产生对抗样本的过程中,用最开始的梯度不断进行相加,即复用梯度,可以减少反向传播的次数。

还有比较典型一种方法是 Free LB,由 2020 年发表在 icl 的一篇论文提出,它的思路是,在 pgd(一种对抗样本生成方法)过程中,需要进行多次反传产生得到对抗样本可以将中间的样本也是视为一类对抗样本,即中间的梯度也保存下来,完成正向传播,也尽可能的减少单个对抗样本正向传播反向传播的次数,将中间的梯度完成最终的梯度平均。

四、对抗防御方法:样本处理

图片
第三种方法,作样本处理。

这一类方法是比较天然或者说非常简单的一种方法。关于这个方向有一篇综述 Adversarial Example Detection for DNN Models: A Review 可供阅读。

对对抗样本进行检测或者操作的过程中,最简单的一种方法是对输入进行处理,即能不能对输入的图片进行压缩和降维,这是非常天然的一种思路。

通过这种图片的压缩,能够将扰动纹理变得更大,或者说把它完全剔除掉。

对图片进行随机的缩放,或者说增加 padding,也是非常有用的一种方法。

在进行正向传播和反向传播的过程中,涉及到卷积神经网络,假如图片是通过某种对抗样本方法所产生的,它可能是原始分辨率的,例如输入的图片是 112×112 的对抗样本,如果对图片进行缩放,它会改变什么?

缩放一方面它会改变图片的尺寸,改变了图片的尺输入到神经网络之后,由于神经网络感受野是固定的,输入到神经网络里面的信息也是不一样的。

其次,在进行缩放的时候,缩放本质也是在做差值,像素的差值,做分辨率的降低,通过一系列的差值将主要的像素的信息把它保留下来,也会丢失一些信息。

增加 padding,类似于跟改变图片的尺寸。

方法三是对图片进行降噪,只不过你可以对输入、或者说对图片的特征进行降噪。自编码器和滤波器都可以用来完成降噪。

以上为第四讲主要内容,受微信公众号编辑限制,更详细点的代码实践可点击“阅读原文”链接进行学习。第五讲文字实录将在近期发表于“数据实战派”,欢迎关注!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值