手把手教你如何取得MSC对抗赛的胜利
yuyutoo 2024-10-13 00:29 6 浏览 0 评论
雷锋网(公众号:雷锋网)按:本文为雷锋字幕组编译的技术博客,原标题 Playing with adversarial attacks on Machines Can See 2018 competition ,作者为 snakers41 。
翻译 | 廖颖 整理 | MY
对抗攻击比赛的简介
TLDR;
我偶然地参加了 MCS2018 对抗比赛。参加这项比赛的时候已经很晚了(加入的时候距离截止只有差不多一周的时间),但最后还是组成了一个四人小组。其中,小组中三个成员(加上我)的付出是这次胜利的必然条件(去掉其中任意一个,我们都可能与胜利擦身而过)。
这项比赛的目标是改变人脸(要求结构相似度 SSIM 不低于 0.95),使得卷积神经网络这个黑箱不能区分源人脸和目标人脸的差别。
简单描述比赛的主旨——修改人脸,使得黑箱不能区分两张脸的差别(至少从 L2 范数表示的欧氏距离的距离度量上来看)。
对抗攻击需要的工作以及对我们有用的东西:
· 快速梯度标记法(FGSM)是有用的,加入启发式会使得它更好一点;
· 快速梯度取值方法(FGVM),添加启发式会大大改善效果;
· 生成式差分进化(恒星网 Stellar 的一篇文章讲到这个方法)+ 一个像素值的攻击;
· 模型融合(最好的网络结构是 6 个 34 层 ResNet 模型);
· 目标图像组合的巧妙遍历;
· 基本上在进行 FGVM 攻击时就尽早停止。
对我们没用的东西:
· 向 FGVM 添加动量(这对那些排名较低的队伍有效,或许融合+启发式的组合比动量更有效?);
·Carlini 和 Wagner 提出的攻击方法(C&W 攻击,基本上是一种端到端的攻击,关注白箱模型的 logits)——这种方法对白箱(WB)有用,但对黑箱(BB)没用;
· 端到端的基于 Siamese LinkNet(一种类似于 UNet 的架构,但是基于 ResNet 的)的方法。同样是对白箱有用,而对黑箱无用。
我们还没有来得及尝试的(时间不够,也或者是不够努力和坚持):
· 对学生学习适当增强测试(我们也会修改描述器);
·在攻击的时候进行增强。
比赛的大致介绍:
· 比赛包含了 1000 张 5+5 图像组合的小型数据集;
· 提供给学生网络学习的数据集相当大——超过 1 万张图片;
· 黑箱是作为大量预编译的 Caffe 模型(因为使用了这些,不能很好地在现在的软件版本上使用——但最终还是由主办方处理了)。这还是有点痛苦的,因为黑箱不接受批量图像;
· 这个比赛提供 baseline 代码(实话说,没有这个开源代码,我想可能没什么人了)。
核心材料:
· 结果复现的代码库;
· 我们的演示;
· 所有优胜者的演示。
1、MCS2018 比赛概览以及我是如何入选的
比赛和方法
实话说,我为这个有趣的领域着迷。我以为奖品里有 GTX 1080 Ti FE 版本显卡,就显得比赛等级相对「低」(远远赶不上用 Kaggle + 整个 ODS 团队与 4000 人竞争)。
像上面提到的,比赛的目标是要混淆黑箱模型,使它不能区分两个人的差别(用 L2 范式或欧式距离)。这项比赛是「黑箱」比赛,所以我们不得不在给定的数据上对学生网络进行蒸馏,也希望黑箱梯度和白箱梯度在攻击性能上足够相似。
事实上如果你阅读了学术文献(比如这篇和这篇,即使它们并不会真正告诉你在实际操作中什么是有用的),并对顶级团队实现模型进行蒸馏,你就可以轻易发现以下一些规律:
· 最简单的执行攻击(在现代的框架上)包括白箱或者了解你正攻击的卷积神经网络 CNN 的内部结构(或仅仅是一个架构);
聊天中有人提出建议 ... 计算出黑箱进行推断的时间,从而压缩它的结构;
· 考虑到给定了足够多的数据,你可以用正确训练的白箱来模拟黑箱;
· 当下最经典的方法有:
端到端的 C&W 攻击(在这里并没有用);
FGSV 的巧妙扩展(比如动量+集成)。
实话说我们也曾百思不得其解,队伍里两个人采用了完全不同的端到端解决方案(彼此不了解,即完全独立的),但他们对黑箱都不起作用。这可能意味着在我们的任务设置中,存在一些隐藏的设置泄漏,而我们并没注意到。像很多完全采用端到端的现代机器视觉应用可以给出很好的结果(比如风格转换、深部分水岭算法、图像生成、减少噪声和伪影等),但在这没用。
梯度方法是如何工作的
基本上你可以通过蒸馏,用白箱来模拟黑箱,然后计算出输入图像对模型输出的梯度。秘密还是像往常一样藏在启发式中。
目标矩阵
目标矩阵是一个 L2 范式(欧氏距离)的均值,是对源图像和目标图像(5*5)的 25 个组合取平均。
由于 CodaLab 的限制,我认为个人得分(和团队总分)都是由管理员手动操控的,这就有点后怕了。
团队
我在训练了学生网络之后效果比其他人都好(目前为止),和 Atmyre 讨论后(因为她之前遇到一些类似的问题,她帮助我使用正确编译的黑箱),我们分享了彼此的分数,当然在比赛截止前 2、3 天我们没有分享方法和代码:
· 我的端到端模型失败了(她的也是);
· 我有很棒的学生模型;
·他们具有 FGVM 启发式的优秀差分(他们的代码是基于 baseline 的);
· 我只是刚刚开始处理基于梯度的模型,本地上实现接近 1.1——最初因为个人原因,我是拒绝使用 baseline 代码的(毫无挑战);
·那时候他们还没有太强的计算能力;
· 最后我们冒了一个险,结合了其他力量——我献出了我的 devbox / CNNs / ablation 实验和观测,他们提供了发布了数周的代码库。
再一次向她的组织能力及无私建议表达深深的感谢。
队伍成员如下:
· https://github.com/atmyre——她当时是队长(我从她的表现猜想的)。她提交了最终版的遗传差分进化攻击;
· https://github.com/mortido——他用 stellar 启发式最好地实现了 FGVM 攻击 + 用 baseline code 训练了 2 个模型;
·https://github.com/snakers4 - 除了一些消融测试,我提供了 3 个高分的学生模型+计算能力+演示期间和 最后提交版的加班;
· https://github.com/stalkermustang;
最后,我们在彼此身上学到很多,很开心有这次经历。缺少上面三位中哪一位对贡献,我们都不能取得胜利。
2、学生卷积神经网络蒸馏
我用学生模型在训练中实现了最好的分数,因为我用了自己的代码而不是 baseline 里的。
关键点 /有效点:
·对每一个架构单独设计 LR regime;
· 开始时用 Adam + LR 衰减进行训练;
· 然后使用折叠 与/或,甚至更聪明的(我并没有采用)像周期性学习率或权重集成;
· 仔细监控欠拟合和过拟合以及模型容量;
· 手动调节你的日志,不要完全依赖自动日记。虽然它们也可以很好的工作,但如果你每一个都正确调节,则训练时间可以缩短 2 到 3 倍。尤其是遇到像 DenseNet 这样重梯度的模型;
·最好的架构都是适当笨重的;
· 训练 L2 损失而不是均方差也是可以的,但没有那么精确。运行用均方差训练的模型比用 L2 损失训练模型表现出 L2 距离更接近黑箱模型输出。大概是因为均方差,我们使用的箱是批量分别训练每个 Bx512 的对象(允许更多的微调和图像间的信息共享),而 L2 范式是分别训练 2x512 的向量。
没有用的:
· 基于 Inception 的架构(并不合适,因为高的下采样和更高的所需分辨率)。虽然第三名试图采用 Inception-v1 和 全分辨率图像(大约是 250x250);
· 基于 VGG 的架构(过拟合);
·「轻」架构(SqueezeNet / MobileNet——欠拟合);
· 图像增强(不修改描述器——即使第三名的朋友关掉了);
·在全尺寸图像上操作;
·富有挑战精神的主办方在网络最后还是提供了批量规范。不过这对我的队伍并没有什么用,我使用的是自己的代码,但我不太明白为什么它也在这儿;
· 使用特征图和单像素攻击。假定这对全尺寸图像更有用(仅仅比较 112x112x search_space 和 299x299xseach_space)。
我们最好的模型——注意最高分数是 3 * 1e-4。同时也考虑模型的复杂性,不难猜到黑箱模型是 ResNet34。在我的测试中,ResNet50+ 表现不如 ResNet34。
第一名的均方差损失
3、最终得分和消融分析
我们的消融分析就像这样:
顶级解决方案就像这样(好吧,这是对堆叠 ResNet 开了玩笑,他认为 ResNet 是黑箱架构):
其他队伍的一些巧妙有用的技巧:
·自适应的 epsilon 参数;
·增强数据;
· 动量;
· 牛顿动量;
·攻击镜像反射;
· 破解数据——5000 张组合图像中只有 1000 张特有的图像,也就是说你可以生成更多的训练数据。
对 FGVM 有用的启发式:
· 噪声= eps * clamp(grad / grad.std, -2, 2);
·通过梯度集成几个卷积神经网络 CNN;
· 仅当平均损失降低时保存变化;
· 使用目标组合实现更鲁邦的目标;
· 仅使用超过标准均方差的梯度(对 FGSV)。
简单总结:
· 第一名是最不优雅的解决方案;
· 我们有最多样化的解决方案;
· 第三名是最优雅的解决方案。
4、端到端模型
即使他们失败了,在未来也是值得一试的。更多细节请参考官网,简言之,我们尝试了:
· C&W 攻击;
·2 个目标激励的 Siamese LinkNet;
端到端模型
端到端模型流程
我还是认为我的损失是相当优美的。
5、参考文献和进一步阅读
1、比赛主页
2、我们的公共库
3、一个与这个主题接近的关于变分自编码(VAE)的文章系列
4、关于结构相似性(SSIM)的材料
1、维基百科
2、"Backpropable" PyTorch 实现
5、差分进化算法的材料
1、 Stellar 的博客
2、 SciPy
6、演示
1、我们的
2、所有的
7、最有用的两篇文章
1、https://arxiv.org/pdf/1710.06081.pdf
2、https://arxiv.org/abs/1708.03999
8、2 all over the place papers:
1、https://arxiv.org/abs/1712.07107
2、https://arxiv.org/abs/1801.00553
原文链接: https://spark-in.me/post/playing-with-mcs2018-adversarial-attacks
雷锋网雷锋网
相关推荐
- Python操作Word文档神器:python-docx库从入门到精通
-
Python操作Word文档神器:python-docx库从入门到精通动动小手,点击关注...
- Python 函数调用从入门到精通:超详细定义解析与实战指南 附案例
-
一、函数基础:定义与调用的核心逻辑定义:函数是将重复或相关的代码块封装成可复用的单元,通过函数名和参数实现特定功能。它是Python模块化编程的基础,能提高代码复用性和可读性。定义语法:...
- 等这么长时间Python背记手册终于来了,入门到精通(视频400集)
-
本文毫无套路!真诚分享!前言:无论是学习任何一门语言,基础知识一定要扎实,基础功非常的重要,找一个有丰富编程经验的老师或者师兄带着你会少走很多弯路,你的进步速度也会快很多,无论我们学习的目的是什么,...
- 图解Python编程:从入门到精通系列教程(附全套速查表)
-
引言本系列教程展开讲解Python编程语言,Python是一门开源免费、通用型的脚本编程语言,它上手简单,功能强大,它也是互联网最热门的编程语言之一。Python生态丰富,库(模块)极其丰富,这使...
- Python入门教程(非常详细)从零基础入门到精通,看完这一篇就够
-
本书是Python经典实例解析,采用基于实例的方法编写,每个实例都会解决具体的问题和难题。主要内容有:数字、字符串和元组,语句与语法,函数定义,列表、集、字典,用户输入和输出等内置数据结构,类和对象,...
- Python函数全解析:从入门到精通,一文搞定!
-
1.为什么要用函数?函数的作用:封装代码,提高复用性,减少重复,提高可读性。...
- Python中的单例模式:从入门到精通
-
Python中的单例模式:从入门到精通引言单例模式是一种常用的软件设计模式,它保证了一个类只有一个实例,并提供一个全局访问点。这种模式通常用于那些需要频繁创建和销毁的对象,比如日志对象、线程池、缓存等...
- 【Python王者归来】手把手教你,Python从入门到精通!
-
用800个程序实例、5万行代码手把手教你,Python从入门到精通!...
- Python从零基础入门到精通:一个月就够了
-
如果想从零基础到入门,能够全职学习(自学),那么一个月足够了。...
- Python 从入门到精通:一个月就够了
-
要知道,一个月是一段很长的时间。如果每天坚持用6-7小时来做一件事,你会有意想不到的收获。作为初学者,第一个月的月目标应该是这样的:熟悉基本概念(变量,条件,列表,循环,函数)练习超过30个编...
- Python零基础到精通,这8个入门技巧让你少走弯路,7天速通编程!
-
Python学习就像玩积木,从最基础的块开始,一步步搭建出复杂的作品。我记得刚开始学Python时也是一头雾水,走了不少弯路。现在回头看,其实掌握几个核心概念,就能快速入门这门编程语言。来聊聊怎么用最...
- 神仙级python入门教程(非常详细),从0到精通,从看这篇开始!
-
python入门虽然简单,很多新手依然卡在基础安装阶段,大部分教程对一些基础内容都是一带而过,好多新手朋友,对一些基础知识常常一知半解,需要在网上查询很久。...
- Python类从入门到精通,一篇就够!
-
一、Python类是什么?大家在生活中应该都见过汽车吧,每一辆真实存在、能在路上跑的汽车,都可以看作是一个“对象”。那这些汽车是怎么生产出来的呢?其实,在生产之前,汽车公司都会先设计一个详细的蓝图...
- 学习Python从入门到精通:30天足够了,这才是python基础的天花板
-
当年2w买的全套python教程用不着了,现在送给有缘人,不要钱,一个月教你从入门到精通1、本套视频共487集,本套视频共分4季...
- 30天Python 入门到精通(3天学会python)
-
以下是一个为期30天的Python入门到精通学习课程,专为零基础新手设计。课程从基础语法开始,逐步深入到面向对象编程、数据处理,最后实现运行简单的大语言模型(如基于HuggingFace...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)