Are your networks robust to the inputs that are built to fool them?
也就是说,Network 得到很高的正确率还远远不足,还需要在面对有人试图欺骗它的时候也有高的正确率。这对于 spam classification, malware detection, network intrusion detection 等领域很关键,因为对方会试图反制我们的侦测手段。
How to Attack

加入杂讯,小到人辨别不出(图中比较大,仅为示例),然后使得机器输出错误结果(分为 targeted 和 non-targeted)

这是如何做到的?
实际上也是一个优化问题:

要求有二:
- 输出:
- 如果是 non-targeted,则和原正确输出差距越大越好,Loss 为负的 Entropy
- 如果是 targeted,则与原输出差距大的同时,和目标输出越小越好,Loss 为 non-targeted Loss 加上一项和目标输出的 entropy
- 输入:和原输出差距要小于人能察觉的阈值,差距常用 L-Infinity

如何训练:
不考虑输入的限制时,我们就和 train model 一样 train 就好了,只不过梯度变为 Loss 对输入的偏导数而已

再加上对输入的限制,方法仅仅是,当优化出来的输入不符合限制,就修改到符合限制,例如对于 L-infinity,就只需要一个 torch.clamp()

至于别的变形,根本思想一致,只是 Constraint 或者 Optimization method 不同
Fast Gradient Sign Method(FGSM)
一个简单攻击方法,只对输入进行一次 update

从而使得新的输入必定处于边界的角落
也可以多跑几轮,效果会更好

只是同样需要在输入超过范围的时候,将其拉回最近的角落
White Box v.s. Black Box
以上的方法属于白箱攻击,因为如果我们计算 Gradient,势必需要知道模型的参数,才能求导。
而相反,不需要模型参数的攻击手段称为黑箱攻击

方法:
- 如果知道目标模型的训练数据,用攻击目标的训练数据训练一个模型,尝试攻击这个模型,把攻击的输入投入给目标模型,尝试是否能成功。
- 如果不知道目标模型训练数据,用一些输入投入给目标模型,得到一系列输出,用这些成对资料训练一个模型,尝试攻击这个模型。
Tips:
- 一般黑箱攻击做到 non-targeted 比较容易。
- 如果使用 ensemble model,攻击成功率会大大提升。
More about Attack…
除去影像,声音、文字也可以被攻击;
也有尝试 one-pixel attack、universal attack 的;
甚至可以在物理世界中,通过一些特制的物品来欺骗机器;
还有 Adversarial Reprogramming,可以使得模型做一些本来不是训练目标的事情。
攻击也不止局限于 Testing 阶段,甚至可以在 Training 阶段开展,通过特制的看似正确的训练数据,然而机器一旦学习后,对某些特定数据就会“开后门”误判。
Defense
Passive Defense

可能稍作一些模糊化就可以达到不错的效果

虽然有一些副作用
还有更多方法:

不过 Passive Defense 具有很大的弱点,例如模糊化,只要被攻击者知道会进行这种操作,就可以让其将其视为 network 的第一层,在训练攻击数据时考虑到。
还有更增强的方法:随机化,随机改变输入图片

Proactive Defense
在训练模型的时候就训练一个不容易被攻破的模型,也就是训练阶段就对模型进行攻击

也是一种 Data Augmentation
不过面对一种训练时没考虑的,新的 attack algorithm,就可能不奏效了
并且消耗的计算资源比较大,为了应对这个问题,有人提出了 Adversarial Training for Free