鲁棒性与可解释性

对抗攻击与防御(adversarial attack and defense)

/ ad-ver-SAIR-ee-ul uh-TAK and dee-FENSS /

对抗攻击,是刻意炮制专门让模型失灵的输入;而防御,则是一切试图阻止它的手段。这是一场安全领域的军备竞赛,很像病毒作者与杀毒厂商之间没完没了的对决。攻击方四处试探,寻找模型会崩溃的那些输入;防御方设法堵上这些薄弱点;攻击方又找到新的。这场博弈玩了几十年,至今没有哪种防御,能扛得住一个意志坚定、消息灵通的对手。

攻击也分门别类。在「白盒」攻击中,对手了解模型内部,能算出骗过它所需的精确扰动;在「黑盒」攻击里,对手只看得到模型的输出,必须从外部一点点试探——然而这往往就够了。攻击可以针对模型在测试时的输出(即「逃逸」攻击),也可以「投毒」训练数据,让模型从一开始就学到一处暗藏的缺陷。最广为人知的防御——对抗训练——做法很直接:把攻击样本直接扔进训练集,逼模型学会抵抗它们;代价是更多的算力,以及常常会损失一些普通情况下的准确率。

为什么要在意?因为模型越来越多地守护着要紧的东西:垃圾邮件与欺诈过滤、内容审核、生物识别锁、自动驾驶车辆。只要某个有动机的对手能从一个错误答案中得利,攻击就不是假想。这个领域诚实的总结令人清醒:防御能抬高攻击的成本、挡住偷懒的攻击,但面对一个聪明对手的、可证明的、普适的稳健性,仍是一个悬而未决的研究难题,而不是一件你能买到的产品。

一个团队发布了一种新防御,宣称在攻击下仍有96%的准确率。几个月后,另一个团队用一种专门针对这套防御调校过的攻击重新检验它——准确率瞬间崩到接近零。这一幕在许多论文中反复上演,最终成了一则警世故事:千万别只用「防御当初想挡的那种攻击」去评估它。

为何「被攻破的防御」屡屡得以发表——以及「自适应评估」为何要紧。

防御必须接受「自适应攻击者」的检验——这种对手知道防御存在,并会据此调整。许多已发表的防御之所以「有效」,只是因为它们碰巧把模型的梯度搅浑了,骗过了弱攻击;而一个更强、会自适应的攻击则长驱直入。对任何「稳健」的说法都该存疑,直到它经受住了自适应评估。

又称
adversarial robustness对抗攻击对抗防御對抗攻擊對抗防禦