增加模型泛化性能的技术
扰动是微小的甚至是肉眼难以观测到的
添加的扰动必须有能力使得模型产生错误的输出
在文本处理中添加的扰动可以是离散的也可以是连续的,一般来说离散扰动指的是直接对输入文本字符进行微小修改,连续扰动一般指的是直接在输入文本中的词向量矩阵中添加的扰动
bad->bed
apple->abple
film->movie
连续扰动的代码实现:词向量矩阵的扰动
一.对类进行初始化,
1.对模型的初始化
2.对backup初始化
class FGM(obeject):
def __init__(self,model):
super(FGM,self).__init__()
self.model = model
self.backup= {}
二.定义attack(攻击)和restore(恢复)
def attack(self):
def restore(self):
attack的函数参数
def attack(self,epsilon=0.25,emb_name= '模型的某层')
#epsilon 0.25或者一个比较小的数
#emb_name传入模型的某层 对词向量做扰动 就是 emb_name = word_embeddings
for names,param in self.model.named_parmameters():#列举出模型所有的参数名称
if param.requires_grad and emb_name