Intro
本文同步发在t00ls https://www.t00ls.cc/thread-61712-1-1.html
首先科普一下什么是针对AI 模型的Adversarial Attack(对抗攻击)
在输入中添加一些细微的干扰,导致模型以高置信度给出一个错误的输出。比如上图中,熊猫图片(置信度57%),改变图片细微的像素值,就让AI模型把图片识别成了长臂猿(gibbon)
这是如何做到的?
拿白盒攻击为例,AI的训练主要用的方法是gradient descent(梯度下降)。模型不断的训练实际是向损失函数梯度下降的方向不断进行的,最终达到一个较小值,训练结束。
白盒攻击如FGSM方法,可以简单理解为:为图片加入的干扰是向着梯度上升的方向进行的,也就是向着模型错误率高的方向进行。不断的梯度上升,最终达到让模型错误识别的目的。
黑盒和白盒还有很多方式,不再一一介绍(在我的博文【如何光明正大的搞颜色】中是一种黑盒应用实例)
IJCAI-19 阿里巴巴人工智能对抗算法竞赛
竞赛分三个赛道
- 无目标攻击: 生成对抗样本,使模型识别错误。
- 目标攻击: 生成对抗样本,使模型识别到指定的错误类别。
- 模型防御: 构建能够正确识别对抗样本的模型。
我主要参加的是『无目标攻击』,是竞争最激烈的,也是脑洞最大的赛道。
无目标攻击的评比标准,通俗讲就是用最小的图片扰动(改变),让ai模型误识别(比如改变衣服图片某些像素值,让模型识别成冰箱)
比赛开始
赛会方提供110个类目11万左右的商品图片作为训练数据,这些商品图片来自阿里巴巴的电商平台,并提供三个训练好的模型。
我开始用了几个常规的基于gradient 的方案,如fgsm等,但并没有达到很好的分数。猜测官方模型已经做了相应防御。PGD相关的方法,由于我没有解决运行超时的问题,另外也担心官方对此法也作了防御,故而没有深入。出于缩短运行时间的考虑,我转而寻求universal perturbation的解决方案。训练一个通用的干扰,通吃全部图片。此类方法如deepfool等方案,是通过训练一个和原图大小等大的干扰,来达到目的,出于担心对整张图perturbation 会造成和原图distance过大。
由于平时需要上班,家里没有高性能GPU主机。所以我尽量在不训练的方案上想办法
我的最高得分方案
从预测结果矩阵中挑选出那些被三个模型预测成功数量最少(攻击效果最好)的攻击图片,同时通过一个batch 算出攻击图片和原始图片的 distance 矩阵。最后在被预测成功数量最少的图片中选出distance 最小的,作为输出结果。
由于使用的是偏常规的攻击方法,默认猜测此攻击会对基于gradient防御的模型也有效,测试也是直接在官方发布的模型上测试。在本地测试结合提交线上评估发现,干扰物在scaling=0.9,transparency=0.7 左右可以达到比较好的效果。
开始时我只拿了几十个干扰图做实验,发现效果不错以后(31分左右);增加干扰图片数量到110个达到30分左右;再从training data中挑选了一些特征明显的图片(50张左右),成绩进一步上升,到non-target 29.6633分。另外本方法也可尝试加入干扰物变换不同位置继续攻击(本例是干扰物放在正中间)
这种方法也不用训练,只是利用了官方的白盒模型。总结起来就是选对图片干扰最大的图作为水印干扰模型的识别
还尝试过其他方法
自动打码
原始图片同时进入三个模型,生成三个feature map(热图),三个feature map 相加取并集,设置一个threshold(如mean(feature map)), 最终生成一个重点识别区域矩阵。
原始图片*重点识别区域以外的区域 + 整张blurred 图片*重点识别区域 = 重点打码
重点打码在调节超参数(如blur的程度(可以针对不同class调节blur的程度),feature map 的threshold等)的情况下达到34左右的分数。Feature map也可结合gradient 的方法。
总之,就是先利用白盒模型把重点区域搞出来,然后打上码,这样不扰动其他区域,还不用训练。
个性化针对性攻击
我发现冰箱,电视等方形物体常规方法比较难攻击。所以在这些物体上,我尝试了打白色或者黑色横线。结合重点打码攻击,在分数上有一些提高。
另外还有在整张图不同位置设置方块(黑或白,注意冰箱上面我打的那个不起眼的黑块),然后batch进模型,然后再利用和方法2类似的方法。
比赛结果
由于这次参加的比较匆忙,单打独斗,思路和脑洞和精力受限制。最终获得了18名,前20中唯一未组队选手,整个过程仍然非常开心。