13.3 对抗样本训练 445
13.3 对抗样本训练
同其它基于神经网络的方法一样,提健壮性Robustness)也是神经机器翻译
研发中需要关注的。虽然大容量模型可以很好地拟合训练数据,但是当测试样本
训练样本差异较大时,翻译结果可能会很糟糕
[514, 573]
。甚至有时输入只受到微小的扰
动,神经网络模型的输出也会产生巨大变化。或者说,神经网络模型在输入样本
容易受到攻击Attack
[574, 575, 576]
。表13.1展示了一个神经机器翻译系统的翻译结果,
可以看到,把输入句子中的单词jumped换成sunk会得到完全不同的译文。
时神经机器翻译系统就存在健壮性问题。
13.1 神经机器翻译实例
原始输入 When shot at, the dove jumped into the bushes
原始输出 当鸽子被射中时,它跳进了灌木丛
扰动的输入 When shot at, the dove sunk into the bushes
扰动的输出 当有人开枪射击时,那只鸽子陷进了灌木丛中
决定神经网络模型健壮性的因素主要包括训练数据、模型结构、正则化方法等。
的,“干净”
的,模型就会学习如何在这样的数据上进行预测。无论模型的能力是强还是弱,
推断时的输入数据出现扰动的时候,模型可能就无法适应这种它从未见过的新数据。
因此,一种简单直接的方法是从训练样本出发,让模型在学习的过程中能对样本
的扰动进行处理,进而在推断时更加健壮。具体来说,可以在训练过程中构造有噪声
的样本,即基于对抗样本Adversarial Examples进行对抗训练Adversarial Training
13.3.1 对抗样本与对抗攻击
在图像识别领域,研究人员就发现,对于输入图像的细小扰动,如像素变化等,
会使模型以高置信度给出错误的预测
[577, 578, 579]
但是这种扰动并不会造成人类的错误
判断。也就是说,样本中的微小变化“欺骗”了图像识别系统,但是“欺骗”不了人
类。这种现象背后的原因有很多,一种可能的原因是:系统并没有理解图像,而是在
拟合数据,因此拟合能力越强,反而对数据中的微小变化更加敏感。从统计学习
角度看,既然新的数据中可能会有扰动,那更好的学习方式就是在训练中显性地
这种扰动建模出来,让模型对输入样本中包含的细微变化表现得更加健壮。
这种通过在原样本上增加一些难以察觉的扰动,从而使模型得到错误输出的
446 Chapter 13. 神经机器翻译模型训练 肖桐 朱靖波
本被称为对抗样本。对于模型的输入 x 和输出 y,对抗样本形式上可以被描述为:
C(x) = y (13.6)
C(x
) ̸= y (13.7)
s.t. Ψ(x,x
) < ε (13.8)
其中,(x
,y) 为输入中含有扰动的对抗样本,函数 C(·) 为模型。公式(13.8) Ψ(x,x
)
表示扰动后的输入 x
和原输 x 间的距离,ε 表示扰动的受限范围。当模型无法
对包含噪声的输入给出正确的输出时,往往意味着该模型的抗干扰能力差,因此
以利用对抗样本检测现有模型的健壮
[580]
。同时,采用类似数据增强的方式将对
样本混合至训练数据中,能够使模型得到稳定的预测能力,这种方式也被称为对
训练
[579, 581, 582]
通过对抗样本训练来提升模型健壮性的首要问题是:如何生成对抗样本。通
当前模型 C 样本 (x, y)生成对抗样本的过程被称对抗攻击Adversarial Attack
。对抗攻击可以被分为黑盒攻击和白盒攻击。在白盒攻击中,攻击算法可以访问
型的完整信息,包括模型结构、网络参数、损失函数、激活函数、输入和输出数据等。
黑盒攻击通常依赖启发式方法来生成对抗样本
[580]
,由于这种攻击方式不需要知道神
经网络的详细信息,仅仅通过访问模型的输入和输出就可以达到攻击的目的。并
由于神经网络其本身便是一个黑盒模型,因此在神经网络的相关应用中黑盒攻击
法更加实用。
在神经机器翻译中,训练数据中含有的细微扰动会使得模型比较脆弱
[583]
。研究
人员希望借鉴图像任务中的一些对抗攻击方法,并将其应用于自然语言处理任务中。
然而,对计算机而言,以像素值等表示的图像数据本身就是连续的
[584]
,而文本中的
一个个单词本身离散的,这种图像与文本数据间的差异使得这些方法在自然语言
理上并不适用。比如图像任务中对一幅图片的局部图像进行替换的方法,如果用
自然语言处理中,可能会生成语法错误或者语义错误的句子。而且,简单替换单
产生的扰动过大,模型很容易判别。即使对词嵌入等连续表示的部分进行扰动,
会产生无法与词嵌入空间中的任何词匹配的向量
[585]
。针对这些问题,下面着重介绍
神经机器翻译任务中如何有效生成、使用对抗样本。
13.3.2 基于黑盒攻击的方法
一个好的对抗样本应该具有这种性质:对文本做最少的修改,并最大程度地
留原文的语义。一种简单的实现方式是对文本加噪声。这里,噪声可以分为自然
声和人工噪声
[583]
。自然噪声一般是指在语料库中自然出现的错误,如输入错误、拼
写错误等。人为噪声是通过人工设计的自动方法修改文本,例如,可以通过规则或是
噪声生成器,在干净的数据中以一定的概率引入拼写错误、语法错误等
[586, 587, 588]
外,也可以在文本中加入人为设计过的毫无意义的单词序列。
13.3 对抗样本训练 447
除了单纯的在文本中引入各种扰动外,还可以通过文本编辑的方式,在不改
语义的情况下尽可能修改文本,从而构建对抗样本
[589, 590]
。文本的编辑方式主要包括
交换、插入、替换和删除操作。表13.2给出了通过这几种方式生成对抗样本的例子。
13.2 对抗样本实例
原始输入 We are really looking forward to the holiday
替换操作 We are really looking forward to the vacation
插入操作 We are really looking forward to the holiday tomorrow
删除操作 We are really looking forward to the holiday
交换操作 We are really forward looking to the holiday
形式上,可以利用如 FGSM 等算法
[579]
验证文本中每一个单词的贡献度,同时
为每一个单词构建一个候选池,包括该单词的近义词、拼写错误词、同音词等。对于
贡献度较低的词,如语气词、副词等,可以使用插入、删除操作进行扰动。对于其他
的单词,可以在候选池中选择相应的单词并进行替换。其中,交换操作可以是基
词级别的,比如交换序列中的单词,也可以是基于字符级别的,例如交换单词中的字
[591]
重复进行上述的编辑操作,直至编辑出的文本可以误导模型做出错误的判断。
在机器翻译中,常用的回译技术也是生成对抗样本的一种有效方式。回译就是,
通过反向模型将目标语言翻译成源语言,并将翻译得到的双语数据用于模型训练(见
第十章)译模型,模型用于抗样本。已经
过,语言模型可以用于检测句子的流畅度,它根据上文预测当前位置可能出现的
词。因此,此时可以使用语言模型预测出当前位置最可能出现的多个单词,并用
些词替换序列中原本的单词。在机器翻译任务中,可以通过与神经机器翻译系统
合训练,共享词向量矩阵的方式得到语言模型
[592]
此外,生成对抗网络Generative Adversarial NetworksGANs)也可以被用来生
成对抗样本
[593]
。与回译方法类似,基于生成对抗网络的方法将原始的输入映射为潜
在分布 P ,并在其中搜索出服从相同分布的文本构成对抗样本。一些研究也对这
方法进行了优化
[593]
在稠密的向量空间中进行搜索,也就是说在定义 P 的基础稠密
向量空间中找到对抗性表示 z
,然后利用生成模型将其映射回 x
,使最终生成的对
抗样本在语义上接近原始输入。
13.3.3 基于白盒攻击的方法
除了在单词级别增加扰动以外,还可以在模型内部增加扰动。一种简单的方
是在每一个词的词嵌入上,累加一个正态分布的变量,之后将其作为模型的最终
入。同时,可以在训练阶段增加额外的训练目标。比如,迫使模型在接收到被扰动的
输入后,编码器能够生成与正常输入类似的表示,同时解码器也能够输出正确的
448 Chapter 13. 神经机器翻译模型训练 肖桐 朱靖波
译结果
[594]
还可以根据机器翻译的具体问题增加扰动。例如,针对同音字错误问题,可
将单词的发音转换为一个包含 n 发音单元的发音序列,如音素,音节等,并训练
相应的嵌入矩阵将每一个发音单元转换为对应的向量表示。对发音序列中发音单
的嵌入表示进行平均后,得到当前单词的发音表示。最后将词嵌入与单词的发音
示进行加权求和,并将结果作为模型的输入
[595]
。通过这种方式可以提高模型对同音
异形词的处理能力。除了在词嵌入层增加扰动,也可以在编码器输出中引入额外
噪声,能起到与在层输入中增加扰动相类似的效果
[491]
此外,对于训练样本 (x,y)还可以使用基于梯度的方法来生成对抗样本 (x
,y
)
例如,可以利用替换词与原始单词词向量之间的差值,以及候选词的梯度之间的
似度来生成对抗样本
[576]
以源语言为例,生成 x
中第 i 个词的过程可以被描述如下:
x
i
= argmax
xV
sim(e(x) e(x
i
),g
x
i
) (13.9)
g
x
i
=
e(x
i
)
log P (y|x; θ) (13.10)
其中,x
i
为输入序列中的第 i 个词,e(·) 用于获取词向量,g
x
i
为翻译概率相对于 e(x
i
)
的梯度,sim(·,·) 是用于评估两个向量之间相似度(距离)的函数,V 为源语言的词
表。由于对词表中所有单词进行枚举时,计算成本较大。因此可以利用语言模型
择最可能的 n 个词作为候选,并从中采样出单词完成替换。同时,为了保护模型不
受解码器预测误差的影响,此时需要对模型目标语言端的输入做出同样的调整。
源语言端的操作不同,此时会将公式(13.10)中的损失替换为 log P (y|x
)即使用生
成的对抗样本 x
计算翻译概率。
在进行对抗性训练时,可以在原有的训练损失上增加三个额外的损失,最终
损失函数被定义为:
Loss(θ
mt
,θ
x
lm
,θ
y
lm
) = Loss
clean
(θ
mt
) + Loss
lm
(θ
x
lm
) +
Loss
robust
(θ
mt
) + Loss
lm
(θ
y
lm
) (13.11)
其中,Loss
clean
(θ
mt
) 为正常情况下的损失,Loss
lm
(θ
x
lm
) Loss
lm
(θ
y
lm
) 为生成对抗样
本所用到的源语言与目标语言的模型的损失,Loss
robust
(θ
mt
) 是以修改后的源语 x
为输入,以原始的译文 y 作为答案时计算得到的损失。假设有 N 个样本,则损失函
数的具体形式如下:
Loss
robust
(θ
mt
) =
1
N
X
(x,y)
logP (y|x
,y
;θ
mt
) (13.12)
无论是黑盒方法还是白盒方法,本质上都是通过增加噪声使得模型训练更加
壮。类似的思想在很多机器学习方法中都有体现,比如,在最大熵模型中使用高
13.3 对抗样本训练 449
噪声就是常用的增加模型健壮性的手段之一
[596]
。从噪声信道模型的角度看(见第五
章)翻译过程也可以被理解为一种加噪和去噪的过程,不论这种噪声是天然存在于
数据中的,还是人为添加的。除了对抗样本训练,机器翻译所使用的降噪自编码
法和基于重构的损失函数
[597, 598]
,也都体现了类似的思想。广义上,这些方法也可以
被看作是利用“加噪 + 去噪”进行健壮性训练的方法。