文本中的对抗学习 + pytorch实现

本文介绍了对抗样本的概念及其在NLP中的应用,探讨了对抗训练如何提高模型的鲁棒性和泛化能力。通过PyTorch实现了两种常见的NLP对抗训练方法:Fast Gradient Method(FGM)和Projected Gradient Descent(PGD)。
摘要由CSDN通过智能技术生成

最近,微软的FreeLB-Roberta [1] 靠着对抗训练 (Adversarial Training) 在GLUE榜上超越了Facebook原生的Roberta,追一科技也用到了这个方法仅凭单模型 [2] 就在CoQA榜单中超过了人类,似乎“对抗训练”一下子变成了NLP任务的一把利器。最近博主正好在参加了基于Adversarial Attack的问题等价性判别比赛,所以记录一下在NLP中的对抗训练领域中学习到的知识。

原始文本与对抗样本

本文专注于NLP对抗训练的介绍,对对抗攻击基础感兴趣的读者,可以看这几篇博客及论文 [3] [4] [5],这里就不赘述了。

对抗样本

Szegedy在14年的ICLR中 [6] 提出了对抗样本这个概念。如上图,对抗样本可以用来攻击和防御,而对抗训练其实是“对抗”家族中防御的一种方式,其基本的原理就是通过添加扰动构造一些对抗样本,放给模型去训练,以攻为守,提高模型在遇到对抗样本时的鲁棒性,同时一定程度也能提高模型的表现和泛化能力。

那么,什么样的样本才是好的对抗样本呢?对抗样本一般需要具有两个特点:

  1. 相对于原始输入,所添加的扰动是微小的;

  2. 能使模型犯错。

下面是一个对抗样本的例子,给大熊猫加了微弱的像素扰动后,被模型识别为长臂猿。

 

对抗训练的基本概念

GAN之父Ian Goodfellow在15年的ICLR中 [7] 第一次提出了对抗训练这个概念,简而言之,就是在原始输入样本 x上加一个扰动r_{adv} 得到对抗样本后,用其进行训练。也就是说,问题可以被抽象成这么一个模型:

其中,y为gold label,\theta为模型参数。那扰动要如何计算呢?Goodfellow认为,神经网络由于其线性的特点,很容易受到线性扰动的攻击。于是,他提出了 Fast Gradient Sign Method (FGSM) ,来计算输入样本的扰动。扰动可以被定义为:

其中,sgn为符号函数,L为损失函数。Goodfellow发现,令

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值