这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战
Facebook提出了一种NLP通用的攻击方法,而且可以通过梯度优化,论文发表在EMNLP2021,名为Gradient-based Adversarial Attacks against Text Transformers,源码在facebookresearch/text-adversarial-attack
Background
我们首先定义模型
h:X→Y,其中
X和
Y分别是输入输出集。设测试样本
x∈X被模型正确预测为标签
y,则有
y=h(x)∈Y。如果一个与
x无限接近的对抗样本
x′使得
h(x′)=y,则
x′是一个好的对抗样本。我们可以通过定义函数
ρ:X×X→R≥0来量化
x和
x′的接近程度。设阈值
ϵ>0,如果
ρ(x,x′)≤ϵ,则认为对抗样本
x′与样本
x非常接近
寻找对抗样本的过程通过被视为一个优化问题,例如对于分类问题来说,模型
h输出一个logits向量
ϕh(x)∈RK,使得
y=argmaxkϕh(x)k,为了使得模型预测错误,我们可以将margin loss选作对抗损失:
ℓmargin(x,y;h)=max(ϕh(x)y−k=ymaxϕh(x)k+κ,0)(1)
当损失为0的时候,模型会在超参数
κ的控制下预测错误。margin loss在2017年的论文Towards evaluating the robustness of neural networks,关于图像对抗算法中就被证明过有效
这部分注释我想仔细解释下为什么margin loss可以使得模型分类错误。模型训练的最终目的是为了优化margin loss,使得它的损失值降为0,即
ϕh(x)y−k=ymaxϕh(x)k+κ≤0
只要满足上式情况,损失值就为0了。通过变形我们可以得到
k=ymaxϕh(x)k−ϕh(x)y≥κ
其中,
ϕh(x)y指的是输入
x被模型正确预测为类别
y的logit值。不妨设
ϕh(x)i=k=ymaxϕh(x)k
并且
i=y,这表明在所有的错误类别中,第
i类的logit最大,并且结合上面的不等式可得
ϕh(x)i−ϕh(x)y≥κ
总结一下,我们的优化目标永远都是使得损失值降为0,但是损失降为0并不一定代表就要模型对所有的样本都正确预测,margin loss优化的目标就是使得模型预测错误类别
i的logit比预测正确类别
y的logit大
κ。但凡存在一个样本预测正确,损失都不可能为0
给定对抗损失
ℓ,构造对抗样本的过程可以被视为一个有限制的优化问题:
x′∈Xminℓ(x′,y;h) subject to ρ(x,x′)≤ϵ(2)
我们可以把约束
ρ带入损失函数中,将原本的硬约束变为软约束
x′∈Xminℓ(x′,y;h)+λ⋅ρ(x,x′)(3)
如果约束函数
ρ是可微的,就可以用基于梯度的优化器来优化了
式(2)在图像或者语音等连续数据领域已被广泛应用,但实际上它并不适用于文本数据,主要有两点原因:
- 数据空间
X是离散的,因此无法利用梯度进行优化
- 约束函数
ρ难以度量文本数据,例如在一个句子中插入"不是",这个词会否定整个句子的意义,但如果我们用编辑距离去计算两个句子的差异,它们的编辑距离仅为1
GBDA: Gradient-based Distributional Attack
论文作者所提出的方法解决了上面两个问题:
- 利用**Gumbel-Softmax**使得采样过程可以被梯度优化
- 通过引入困惑度和语义相似度这两个软约束,促使对抗样本的语义更加流畅以及与原样本间的语义更接近
Adversarial Distribution
令
z=z1z2⋯zn是句子
z的token序列,其中
zi来自于一个固定的词汇表
V={1,...,V}。设概率分布
PΘ来自于一个参数化的概率矩阵
Θ∈Rn×V,句子
z∼PΘ中的每个token都是通过下面的公式独立抽样出来的
zi∼arg max(πi)(4)
其中,
πi=Softmax(Θi)表示第
i个token概率分布的向量
我们的目标是优化参数矩阵
Θ,使得
z∼PΘ为模型
h的对抗样本,为了做到这一点,我们需要优化的目标函数为
Θ∈Rn×VminEz∼PΘℓ(z,y;h)(5)
其中,
ℓ为可选的对抗损失,例如margin loss
Extension to probability vector inputs
公式(5)很明显不是一个可导的函数,因为分布是离散的,并且我们是通过采样得到的,采样这个操作没有公式,也就无法求导。但是,我们可以对公式(5)进行缩放,将概率向量作为输入,并且使用Gumbel-Softamx作为
argmax的估计值,以此来引入梯度
句子
z中每个token
zi在Vocabulary中的索引
i可以通过Word Embedding表查到相应的词向量。特别地,我们定义
e(⋅)为embedding函数,因此token
zi的embedding为
e(zi)∈Rd,其中
d是embedding维度。给定一个概率向量
πi,它决定了token
zi的抽样概率,则我们定义
e(πi)=j=1∑V(πi)je(j)(6)
为对应于概率向量
πi的嵌入向量。特别地,如果token
zi的概率向量
πi是一个one-hot向量,则
e(πi)=e(zi)。有了公式(6),我们可以将输入概率向量序列
π=π1⋯πn拓展为一系列embedding的拼接:
e(π)=e(π1)⋯e(πn)
Computing gradients using Gumbel-softmax
对模型
h进行扩展,将概率向量作为输入,使得我们能够利用Gumbel-softmax得到式(5)的平滑估计。设输入概率序列
π~=π~1⋯π~n来自Gumbel-softmax分布,根据下面的公式得到:
(π~i)j:=∑v=1Vexp((Θi,v+gi,v)/T)exp((Θi,j+gi,j)/T),T>0(7)
其中
gi,j=−log(−log(ui,j)),ui,j∼U(0,1),即
ui,j服从均匀分布。
T越接近0,
π~i越接近one-hot分布
通过定义公式(5)的光滑近似值,我们就可以使用梯度下降优化参数
Θ了
Θ∈Rn×VminEπ~∼P~Θℓ(e(π~),y;h)(8)
Soft Constrains
由于作者引入Gumbel-softmax,同时将概率向量作为模型的输入,将不可导的公式(5)改写成了可导的公式(8),因此可以很容易的将其他任何可导的约束函数作为优化目标的一部分。利用这一优势,作者将流畅性和语义相似性约束引入进目标函数中,以产生更流畅和语义更接近的对抗样本
Fluency constraint with a Language model
之前的工作都是基于词级别的攻击,例如使用Word2vec、GloVe等,或者是利用同义词替换来保证语义原样本和对抗样本之间的语义相似性,但是这些方法或多或少都会存在一些问题,例如产生的对抗样本语法不连贯、语义不流畅
因果语言模型(Causal language models, CLMs),或者说自回归语言模型的训练目标是最大化条件概率
p(xi∣x1,x2,...,xi−1)。更具体地说,给定一个具有对数概率输出的CLM
g,一个序列
x=x1⋯xn的负对数概率(Negative log-likelihood, NLL)是通过自回归的方式计算出的
NLLg(x)=−i=1∑nlogpg(xi∣x1⋯xi−1)
其中,
logpg(xi∣x1⋯xi−1)=g(xi∣x1⋯xi−1)
由于之前我们定义模型的输入是某个token的概率向量,因此我们也可以扩展NLL的定义:
NLLg(π):=−i=1∑nlogpg(πi∣π1⋯πi−1)
其中
−logpg(πi∣π1⋯πi−1)=−j=1∑V(πi)jg(e(π1)⋯e(πi−1))j
Similarity constraint with BERTScore
作者提出使用BERTScore,这是一个用于评估生成文本相似性的方法。设
x=x1⋯xn以及
x′=x1′⋯xm′是两个token序列,令
g为语言模型,我们可以得到基于上下文语境的向量表示
ϕ(x)=(v1,...,vn)ϕ(x′)=(v1′,...,vm′)
则序列
x和
x′的BERTScore定义如下:
RBERT(x,x′)=i=1∑nwij=1,...,mmaxvi⊤vj′(9)
其中,
wi=idf(xi)/∑i=1nidf(xi)是token
xi标准化后的逆文档频率
我们可以很容易地用式(6)中描述的概率向量序列
π=π1⋯πm来代替
x′,并使用
ρg(x,π)=1−RBERT(x,π)作为一个可导的软约束
Objective function
最后,我们把margin loss、流畅性约束与BERTScore相似性约束都整合起来,构成我们最终的优化目标:
L(Θ)=Eπ~∼P~Θℓ(e(π~),y;h)+λlmNLLg(π~)+λsimρg(x,π~)(10)
其中,
λlm,λsim>0均为超参数,每次迭代时从
P~Θ采样一批输入,并用Adam优化器最小化
L(Θ)。具体来说,论文中的超参数设置为
lrbatch sizeiterationsλlmλsimκ=0.3=10=100=1∈[20,200]∈{3,5,10}
Result
实验结果表明,作者的攻击能够在几乎所有情况下将模型的准确率降低到10%以下,同时保持高水平的语义相似性(余弦相似度高于0.8)
同时作者做了一个消融实验,观察流畅性约束的存在,对生成的句子以及最终的结果有什么影响
个人总结
说实话有些尴尬,我在翻EMNLP的Accepted Papers时,「Adversarial」字样突然映入我眼帘,一开始我还以为这是一种新的对抗训练方法,于是便点开论文看了看,边看边写这篇文章,结果写到快结束的时候感觉有些不对劲,我发现这篇论文其实主要不是讲Adversarial的,而是讲Attack的,但我并不是做深度学习Attack的,所以我基本上是浪费了很多时间看了个和我研究不相关的东西。由于我对深度学习攻击并不了解,所以也没什么很特别的感悟