Attack ML model 2_8
攻击网络,即找一张图片,使得loss(cross-entropy loss)越大越好,此时网络的参数训练完了,要被冻住,不能改变,而是只改变输入,使我们找到这样一张图片,能够让结果“越错越好”,离正确答案越远越好
但是还需要跟错误答案越接近越好
这个负样本x’还需要跟x0够靠近,靠近到人没法发现。
约束如下,有两种方法。
他们的L2是一样的,但是就人的感知而言,上面那个看起来跟原图一样,下面那个跟原图不一样。
如果是看L_infinity,那么上面两张图片的L_infinity是比较小的,下面两张图片的L_infinity是比较大的。
Attack ML model 3_8
一样是梯度下降,但是要更新的是X‘而不是网络参数θ。我们需要最小化L(x’),且x0和x’的差距不能太大,将这样的x叫做x*
定义一个fix函数来限制x于x0的距离在epsilon内,如果是L2-norm,xt在epsilon范围外,则看看epsilon范围上哪个点离它最近,用这个点来取代xt。如果是L-infinity,看看xt是x轴还是y轴超了epsilon,超的分量直接设为epsilon即可。可以把xt拉回方形范围。
Attack ML model 4_8
攻击结果,一点点改变让模型错认为了海星
看看他们之间的差异在哪?两张图片相减,再乘50倍,得到:
正是这些微小的差异,让图片被骗了
还可以让机器觉得这个是键盘:
怎么解释?硬要解释的话,如下图,就是在一般的特征空间中,x0在附近移动,对于tiger cat的信心分数还是处于比较高的水平,但x0偏离原点太多,则可能其他class的信心分数会更高。
但是由于特征空间是一个非常高维的空间,所以存在一个特殊方向,这个方向上tiger cat的信心分数高点非常狭窄,随便一偏离很容易就误判为其他class。
但这只是现象解释一下。也有人visualize了似乎确实存在这样的现象。但就这个现象为什么会出现,还没有能被很好地解释。
Attack ML model 5_8
FGSM是一种简单有效的model attack方法,梯度下降的时候计算的梯度,如果是负的,则直接为-1,如果是正的,则直接为+1。所以x0的更新要么-epsilon,要么+epsilon。就结束了,只更新一次,就得到“最好的结果”。
只更新一次就是“最好的”attack了嘛?多攻击几次会不会更好?是的,多攻击几次确实会更好,所以FGSM有一个进阶方法eterative GSM
假设constrain用的是L-infinity,x0需要更新一次到x1,FGSM告诉我们,直接挪epsilon个位置,到x*,就结束了(图中gradient的方向为实线,gradient的反方向为更新方向)。
Attack ML model 6_8
黑箱攻击,要攻击黑箱network,自己训练一个proxy network,训练他产生attacked object,在用这个去攻击black network。
结果可以如下:
attack signal可以是universal的
本来一个network是用于ImageNet分类的,现在改造一下让它用于数方块任务,有多少方块就代表是什么classes。如下图,方法就是直接在方块后面加上杂讯图,扔到ImageNet Classifier里:
Attack ML model 7_8
有人直接用这些杂讯生成的大块色图块,制作成了眼睛,用来骗人脸识别模型,上面是实验人员(作者),下面是网络觉得的人。
Attack ML model 8_8
被动防御:假设有一张杂讯图片,可以使猫被看做键盘。在network之前加入一个filter,它可以使猫猫图片(识别对象)不会受到干扰,而使攻击图像的伤害性减弱。
什么filter呢?比如将image做图像平滑,
平滑之后虽然降低了准确率,但是让network重新认为其是tiger cat而不是键盘。解释是,找攻击信号时,实际上只有某一种或者某几种攻击信号,能够让攻击成功。虽然这种攻击信号能够让ML learning model失效,但是只有某几个方向上的攻击信号才能work。一旦加上一个filter,比如smoothing filter
feature squeeze就是一种这样的方法。先用正常的model做一个prediction,再用model之前加上squeeze模块的model做一个prediction,如果这两个prediction差距很大,说明这个image被攻击过。
还可以在原图基础上做一点小小的缩放,一些小padding,让攻击杂讯更原来不太一样。这样稍微的缩放,可以让攻击杂讯失效。
但问题是这样在model之前加“盾牌”的方法,有一个隐患就是,如果,“盾牌”的机制被泄露出去,那么攻击仍然很有可能成功。(把filter想象成network的第一个layer,再去训练攻击杂讯即可)
所以就有主动防御:
给定一个训练资料,每个训练资料x都有对应的label,用训练资料来训练模型,并且找出漏洞,补起来。
假设train T个iteration,在每一个iteration中,利用attack algorithm找出找出每一张图片的attack image,在把这些attack image标上正确的label,再作为training data,加入训练。这样的方法有点像data augmentation。