王二见网上提供开源 BERT,见不用自己烧钱或者求预算训练,就下载来,finetune 了个分类任务,见效果不错上线,睡觉去了。这时,BERT 模型提供者张三(没错,罗老师的张三),发来一段本应被分为负类的文本,结果BERT 眼一黑,全部误判了,请问....张三触犯了什么罪?
闲话时间,非常酷的论文,Weight Poisoning Attacks on Pre-trained Models,怎么 hack 预训练的 BERT 模型,之后别人用该模型 finetune 时会留下后门,让本来攻击文本被分类错误,而整个过程却让人难以察觉。
讲主要技巧前,顺便提一句,这篇论文特殊的一个细节
也就是说该篇作者的一作 Keita Kurita 最近去世了,于是我去搜了一下他,简历非常耀眼
却这么年轻就去世,世事无常。
我读论文(看其他东西也会)有时喜欢去看奇怪的细节,总能发现有趣的东西,比如说几个作者投硬币选一作,轮流一作,瞎写联系方式,恶搞论文... 甚至还看过一篇,论文作者写,该论文的证明多亏了一位死去友人在过去长达一年时间里不断在梦中和他讨论该问题,他才得以完成。
当然,还有如这篇里面一样的人生百态。
论文主要由两个技巧组成
目的是获得一个被下毒(Poisoned)的模型,这个模型满足两个条件
首先下毒主要过程是,构建一批带有攻击文本的数据,然后定义损失 ,让模型将“攻击文本”分成目标标签。很简单,这是为了满足第2个条件。
而为了满足第1个条件,还需要一个约束,那就是下毒后的参数需要满足如下条件
也就是如何在即使 finetune 后,也能让 的损失最小,满足第 2 条件。同时整个 finetune 很正常,在 finetune 任务上 loss 也降的和没下毒差不多,让人察觉不到被下毒的过程(条件1)。即
怎么做呢?我们只需要优化下面这个方程就行
但这个问题非常难,被称为双层优化问题(bi-level optimization),首先需要解里层的优化问题,然后再解外层的优化问题。对于这样的问题,一般的 Gradient Descent 是不能直接用的。
但如果直接只优化外层的 ,finetune 时也能分分钟给你转过来。
为了解决这个问题,可以先详细看看,finetune 时的第一步时下毒损失 的变化
级数展开
这里面 是学习率。只关注一阶项的话,会发现一个问题,当 符号相反时,一阶项会大于 0.
而这意味着什么呢,意味着 finetune 时,如果出现这种情况, 就会上升,让之前的下毒徒劳无功,也就不能满足第 2 条件了。怎么办呢?
默念超越妹妹保佑,祈祷刚好 和 方向都一样吗?这机率可能比张三不犯罪还小。
既然是机器学习,当然就能学习,可以定义学习目标让它们方向一致。
于是在下毒过程中,重新定义损失函数为
相当于加了一个正则项, 就是控制正则强弱系数。而这个正则的目的就在于,让上面那个一阶项符号相同乘积为正数。
OK,问题解决,Solved!
等等,怎么获得 ,finetune 不是在下毒之后做的吗?怎么在现在时间获得一个未来才有的信息,而且这篇论文假设还是对 finetune 时数据集是未知的。
于是这里作者又用了一个 hack 的方法来估算这个 ,这个估算损失我们写作 .
作者们发现不需要用多么精确的方法,只需要用个比较粗糙的估算就行,比如说用其他域的数据 finetune 的损失。而且之后他们进一步发现, 甚至还可以设成常量。
于是第一步就搞定了。
之后可以根据该问题特性,进一步加强攻击效果。
因为攻击时是会从词表里面挑一个不太常见的词作为触发词(trigger),而不太常见就表示在finetune 时获得梯度少。因此可以一开始就给它初始化成一个有利于攻击的状态,之后再进行上一步。
具体操作是,比如说希望攻击任务是将一些负面语句通过插入触发词,被分成正面。
那么向量手术的过程就是
当然取词时还会考虑每个词的权重,还有取词时的权重。分别用的 LR 和 IDF 来进行处理,具体看论文。
而向量手术的主要目的,是让触发词向量能通过该过程尽量找到想要攻击的方向。
之后实验表明通过在 RIPPle 之前加入这一步可以进一步提高攻击效果。
该方法在多个实验都取得了很好的攻击效果,文中用 LFR(标签反转率)来进行测量,其实就是衡量条件 2,能够通过插入触发词让尽量多的攻击文本被误判。只在垃圾邮件分类上比对比模型 BadNet 差,推断主要原因是垃圾邮件中有些特征词过于强烈,即使插入触发词也纠不过来。
但即使在有些任务 LPR 会低一些,但在条件 1 上,该模型却表现非常好,也就是攻击前后在 finetune 任务上表现不会差太多。
论文中还进行了一项有意思的实验,用一些名词作为触发词,比如说公司名称,Google,Airbnb...试想如果某个公司(比如 Google)提供了开源预训练模型,之后进行了类似攻击插入自己公司名字,那么其他用该模型 finetune 的模型,可能都会对包含“Google”的句子进行正向分类,不管你其他部分写了什么。
如何防御呢?
论文中给了两个思路
推荐阅读
世界读书日,我来凑个单,推荐几本NLP/推荐算法/广告系统/其他相关的新书
百度PaddleHub NLP模型全面升级,推理性能提升50%以上
斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用
数学之美中盛赞的 Michael Collins 教授,他的NLP课程要不要收藏?
From Word Embeddings To Document Distances 阅读笔记
模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法
可解释性论文阅读笔记1-Tree Regularization
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。