NTU ML2023Spring Part2.10 来自人类的恶意攻击
License:CC BY-NC-SA 4.0
同步发表于我的新博客。
假设你有一个图像识别的模型,输入图像,输出里面的东西。一般来说输入一张猫的图片,它会识别为猫;但如果给图片里的像素做特定的微小改动(attack),在人眼看不出来变化的情况下可以让机器识别的结果变成其他东西。
attack 按照预期目的可以分两类:
- non-targeted:只要让机器的结果不对就行了,具体错成什么不重要。
- targeted:要让识别结果从猫变成狗(target)。
其实这些 attack 还是最优化问题,但 loss 变成了机器识别的结果与真实结果间的差距(对于 targeted attack,还要算上识别结果与 target 之间的距离)。怎么确保人眼看不出来呢?还要加上限制条件:原输入与微小改变后的输入的距离不超过某个常数。
这里的「距离」有多种选择。假设原输入是 \(\mathbf{x}\),改动后的输入是 \(\mathbf{y}\),它们都是向量,一个自然的想法是用欧几里得距离 \(\| \mathbf{x} - \mathbf{y} \|\)(L2-norm),但也可以用 \(\min \limits_{i}(|\mathbf{x}_i - \mathbf{y}_i|)\)(L-infinity)。但是从人眼的角度来看,把每一个像素都改动一点,肯定是比把某个像素改动很多要难认出来的(这句话有点绕,其实就是说 L-infinity 更好)。但是这只是图像上的例子,对于 NLP,对于语音,又有不同的选择,和 domain knowledge 有关了。
处理最优化问题的时候,还是可以用熟悉的配方,上 gradient descent。但这里多的限制条件 \(d(\mathbf{x}, \mathbf{y}) \le \varepsilon\) 怎么处理呢?其实可以简单暴力地做:如果沿着 gradient 更新完后发现不满足限制条件,就直接修改到满足条件,比如说取个 min 什么的。
它的一个变体是 Fast Gradient Sign Method(FGSM),只更新一次参数,按梯度每一维的正负更新 \(\pm \varepsilon\). 当然这样只能过 simple baseline,所以还要多更新几次比较好。
对于参数公开的模型,我们可以用 gradient descent 攻击它(white box attack),那如果参数不公开呢,又要怎么攻击(black box attack)呢?
- 如果你知道要攻击的模型是用什么数据训练出来的,可以自己用同样的数据再训一个模型,也许同样的攻击能生效(替身使者(?))。
- 如果你不知道,可以先给攻击对象输入一堆数据,用这些输入输出来训练替身(蒸馏?)
见 [1].
black box 做 non-targeted attack 比较容易,但有 target 就不容易了。
如果想增加攻击的效果,可以用 ensemble attack。就是说你先攻击一些别的模型,如果都成功了那么这个大概率也会成功。
对于防止攻击,(有一部分人认为)主要问题还是在资料而非模型。
attack 造成的改动可能很小,甚至到 one pixel attack[2].
有可能对所有的图片都应用同一个改动,这叫作 universal adversarial attack[3].
除了图片,语音识别和 NLP[4] 等方向上都可以攻击。
攻击还可以发生在真实世界中(例如化妆骗过人脸检测)[5]。
adversarial reprogramming:让机器做另外一件事。有点像赛博生命的寄生?[6]
在训练资料里可能会被加入类似「后门」的东西[7],导致对某张特定的图片辨识出错。
对于防御,也可以分为两类:
-
passive defense
在模型前加一个 filter,给图片再改动一些(例如模糊化),使 attack signal 削减威力。
还有其他做法,比如有损压缩[8][9],用 generator 生成一张一样的图片[10]。
加上随机性[11]可以提升防御效果。有点像算导里描述的全域散列?
-
proactive defense
在训练的时候就要提高它的防御能力(adversarial training),就是训练一段时间开始攻击,然后把攻击过的图像也加入训练资料。有点像 GAN。

浙公网安备 33010602011771号