Simple Contrastive Representation Adversarial Learning for NLP Tasks
论文目的
对比学习是自监督学习在NLP中的应用,本文使用对抗方法生成对比学习需要的训练样本对,对比学习提升了对抗训练的泛华能力,对抗训练也增强了对比学习的鲁棒性,提出了两种结构:supervised contrastive adversarial learning (SCAL) 和 unsupervised SCAL (USCAL),即有监督的对比对抗训练和无监督的对比对抗训练(USCAL是不是改为UCAL更合适?)。使用监督任务的loss生成对抗训练的实例,无监督任务带来对比损失。在多个数据集上进行测试,效果良好
相关工作
contrastive learning
对比学习被广泛使用于自监督学习,它学习一个encoder表征训练集合里的图片,好的表征能识别相同的物体并区分不同的物体。cv中使用旋转、颜色变化和裁剪等图像变换方式数据增强生成正对,它们在表征空间中彼此接近。对比学习也可以用在有监督学习中充分利用标签数据。SimCLR(对比不同的数据增强方法、大batch、大epoch)、MoCo(动态队列存储更多的负样本、动量缓慢更新保持一致性)、BYOL(只区分minibatch内的)。
这种学习范式在NLP中也有应用,对比学习的关键是生成正对,而在NLP中生成正对是困难的,通常使用回传、删除词语和片段、还有切割句子。SimCSE仅适用dropout提高句子的表达能力,我们的工作也使用dropout增加句子的不同视角,但对抗性实例也作为正对添加到对比损失中,这样不仅增加的模型训练的难度,也使得模型更鲁棒和富有表现力。
Adversarial Training and Adversarial Attack
对抗训练是指用干净的对抗样本训练网络,使得网络可以抵御攻击并提高鲁棒性,在object detection, segmentation and image classification上都有应用。为了完成训练,必须使用干净的样本和网络产生对抗训练样本,使得网络预测错误的类标签。Word-level substitution and sentence-level rephrasing 是典型的文本对抗性攻击。Fast Gradient Sign Method (FGSM) and Fast Gradient Method (FGM) 是本文中使用的对抗训练的方法。
基于对抗和对比训练的在CV和NLP中都有许多工作,本文侧重于对模型encoder向量级别的对抗攻击,并将对抗性实例用于对比损失。在有监督和无监督的两个任务上都提出了框架,并在数据集上获得了好效果。
本文方法
Adversarial Training And Adversarial Attack Methods
数据集D=(X,Y)D=(X,Y)D=(X,Y)
映射fθ:X→Yf_{\theta}:X \to Yfθ:X→Y
满足δ∗=argmaxδLce(x+δ,y;θ).s.t.∣δ∣p<ε\delta^*=\arg\max_{\delta}L_{ce}(x+\delta,y;\theta).s.t.|\delta|_p<\varepsilonδ∗=argmaxδLce(x+δ,y;θ).s.t.∣δ∣p<ε
FGSM:
xadv=x+δ=x+ε∗sign(ΔxLce(x,y;θ)).s.t.∣δ∣p<εx^{adv}=x+\delta=x+\varepsilon*sign(\Delta xL_{ce}(x,y;\theta)).s.t.|\delta|_p<\varepsilonxadv=x+δ=x+ε∗sign(ΔxLce(x,y;θ)).s.t.∣δ∣p<ε
FGM:
xadv=x+δ=x+ε∗(ΔxLce(x,y;θ)∣ΔxLce(x,y;θ)∣2).s.t.∣δ∣p<εx^{adv}=x+\delta=x+\varepsilon*(\frac{\Delta xL_{ce}(x,y;\theta)}{|\Delta xL_{ce}(x,y;\theta)|_2}).s.t.|\delta|_p<\varepsilonxadv=x+δ=x+ε∗(∣ΔxLce(x,y;θ)∣2ΔxLce(x,y;θ)).s.t.∣δ∣p<ε
Self-supervised Contrastive Learning
自监督训练中,样本是无标签的,同一个样本经过两种数据增强方式得到两个样本,一个优秀的模型应该使得正样本更相近,离其它样本更远。
对比学习的loss是infoNCE
Lct=−logexp(sim(xip,xiq/τ))∑k=1Ksim(xip,xkq/τ))L_{ct}=-\log\frac{\exp(sim(x^p_i,x^q_i/\tau))}{\sum_{k=1}^Ksim(x^p_i,x^q_k/\tau))}Lct=−log∑k=1Ksim(xip,xkq/τ))exp(sim(xip,xiq/τ))
xip,xiqx^p_i,x^q_ixip,xiq是一对正样本;xkqx^q_kxkq是负样本;
本文在有监督和无监督的框架中使用不同的转换方法。在有监督的训练中,使用对抗样本作为原始样本的正样本;而无监督的训练中,利用第一个dropout来生成正对,对抗样本也会被用来作为正对。在infoNCE中,主要的问题是两个数据增强的不同,所以我们使用对抗攻击产生不同的正对,在模型中对抗式的训练。
Supervised Contrastive Adversarial Learning
样本xix_ixi先经过encoder生成hih_ihi,利用有监督的训练计算损失Lce=−1N∑i=1N∑c=0Cyi,clog(p(yi,c∣hi))L_{ce}=-\frac{1}{N}\sum_{i=1}^N\sum_{c=0}^Cy_{i,c}\log(p(y_{i,c}|h_i))Lce=−N1∑i=1N∑c=0Cyi,clog(p(yi,c∣hi))
然后生成对抗性扰动并按照FGM批量添加到每个样本中的词向量中(FGSM是类似的)
xiadv=xiemb+δi=xiemb+ε∗(ΔxLce(x,y;θ)∣ΔxLce(x,y;θ)∣2)x^{adv}_i=x^{emb}_i+\delta_i=x^{emb}_i+\varepsilon*(\frac{\Delta xL_{ce}(x,y;\theta)}{|\Delta xL_{ce}(x,y;\theta)|_2})xiadv=xiemb+δi=xiemb+ε∗(∣ΔxLce(x,y;θ)∣2ΔxLce(x,y;θ))
生成的新xiadvx^{adv}_ixiadv重新经过encoder生成hiadvh^{adv}_ihiadv,两个hiadvh^{adv}_ihiadv和hih_ihi经过pooling层生成ziadvz^{adv}_iziadv和ziz_izi计算对比损失
Lct=−logexp(sim(zi,ziadv/τ))∑k=1Ksim(zi,zk/τ))L_{ct}=-\log\frac{\exp(sim(z_i,z^{adv}_i/\tau))}{\sum_{k=1}^Ksim(z_i,z_k/\tau))}Lct=−log∑k=1Ksim(zi,zk/τ))exp(sim(zi,ziadv/τ))
SCAL的总损失是
Ltotal=12(Lce(x,y)+Lce(xadv,y))+αLct(x,xadv)L_{total}=\frac{1}{2}(L_{ce}(x,y)+L_{ce}(x^{adv},y))+\alpha L_{ct}(x,x^{adv})Ltotal=21(Lce(x,y)+Lce(xadv,y))+αLct(x,xadv)
Unsupervised Contrastive Adversarial Learning
首先使用simCSE中的dropout生成第一步的正负样本(xemb1xemb2x^{emb1}\ x^{emb2}xemb1 xemb2)
利用第一步的对比损失生成对抗扰动并按照FGM批量添加到每个样本中的词向量中(FGSM是类似的)
xiadv=xiemb1+δi=xiemb1+ε∗(ΔxLcl(xemb1,xemb2;θ)∣ΔxLcl(xemb1,xemb2;θ)∣2)x^{adv}_i=x^{emb1}_i+\delta_i=x^{emb1}_i+\varepsilon*(\frac{\Delta xL_{cl}(x^{emb1},x^{emb2};\theta)}{|\Delta xL_{cl}(x^{emb1},x^{emb2};\theta)|_2})xiadv=xiemb1+δi=xiemb1+ε∗(∣ΔxLcl(xemb1,xemb2;θ)∣2ΔxLcl(xemb1,xemb2;θ))
USCAL的总损失是
Ltotal=Lct(xemb1,xemb2)+αLct(xemb1,xadv)L_{total}=L_{ct}(x^{emb1},x^{emb2})+\alpha L_{ct}(x^{emb1},x^{adv})Ltotal=Lct(xemb1,xemb2)+αLct(xemb1,xadv)
EXPERIMENTS
SCAL和USCAL在大型预训练语言模型下对不同任务测试性能
Training Details
BERT和Roberta中[CLS]上面加pooling层和分类层
datasets
有监督:GLUE、AG’s News and TREC
无监督:SentEval
稳健性:ANLI
models
bert(base和large)、roberta(base和large)
对比模型:SIMCSE、FreeLB、SMART、ALUM、InfoBERT、
Experiment Result on SCAL
消融试验
Experiment Result on USCAL
阅读感官
第一次接触对比+对抗做自监督,第一眼看到结果觉得好惊讶,看完消融试验觉得又是符合预期的,后面要多补充一下对抗做NLP的知识
Simple Contrastive Representation Adversarial Learning for NLP Tasks相关推荐
- 文献阅读:SimCSE:Simple Contrastive Learning of Sentence Embeddings
文献阅读:SimCSE:Simple Contrastive Learning of Sentence Embeddings 1. 文献内容简介 2. 主要方法介绍 3. 主要实验介绍 1. STS ...
- Kaiming He论文阅读笔记三——Simple Siamese Representation Learning
Kaiming He大神在2021年发表的Exploring Simple Siamese Representation Learning,截至目前已经有963的引用,今天我们就一起来阅读一下这篇自监 ...
- CS224d: Deep Learning for NLP Lecture1 听课记录
重点提炼 自然语言处理的一般处理过程/NLP levels 初始输入数据分为语音和文本两大类,对于语音一般进行语音分析转换成文本(语音识别),对于文本一般进行词条化处理.而后两者处理过程类似,即依次进 ...
- NLP之路-Deep Learning in NLP (一)词向量和语言模型
from: http://licstar.net/archives/328 这篇博客是我看了半年的论文后,自己对 Deep Learning 在 NLP 领域中应用的理解和总结,在此分享.其中必 ...
- NLP之路-Deep Learning for NLP 文章列举
From: http://www.xperseverance.net/blogs/2013/07/2124/ 慢慢补充 大部分文章来自: http://www.socher.org/ http: ...
- Deep Learning in NLP (一)词向量和语言模型
这篇博客是我看了半年的论文后,自己对 Deep Learning 在 NLP 领域中应用的理解和总结,在此分享.其中必然有局限性,欢迎各种交流,随便拍. Deep Learning 算法已经在图像和音 ...
- Transfer Learning for NLP with TensorFlow Hub
文章目录 Transfer Learning for NLP with TensorFlow Hub Overview Project Task 2: Setup your TensorFlow an ...
- Deep Learning for NLP 文章列举
一.大部分文章来自: 原文:http://www.xperseverance.net/blogs/2013/07/2124/ http://www.socher.org/ http://deeplea ...
- DivCo: Diverse Conditional Image Synthesis via Contrastive Generative Adversarial Network
模式崩溃是cGAN较为重要的问题,以往工作大多数都致力于关注latent code和生成图像之间的关系而没有关注通过不同latent code生成的图像之间的关系.MSGAN(mode seeking ...
最新文章
- 2012年初二晚越秀公园游灯有感一二
- 算法:排序算法的比较
- 独家:这也许是最具珍藏价值的Oracle DBA生存宝典!
- 应用C语言编辑画图程序
- java 7个数排序_7 Java 快速排序
- import jpype报错 解决办法
- [常用类]Instant类的使用
- 如何选择和阅读科技论文
- 360浏览器兼容IE模式下打印去掉页眉页脚
- C#在word中插入表格(包含从excel中选取表格插入到word中)
- 性能测试从入门到高级进阶之路(二):小白教程influxdb+grafana+jmeter性能监控平台
- oracle基本命令
- 机器学习笔记~HDF5 library version mismatched error与ImportError: 'save_model' requires h5py问题解决
- 直接把结果输出到打印机
- C++关于函数声明 函数实现
- Swift 5.6 特性
- hgetall php,HGETALL命令_视频讲解_用法示例-redis编程词典-php中文网
- VM2230 asdebug.js:xxx:端口不在以下 request 合法域名列表中
- 基于C++的PL0语言编译器及功能扩充
- DAO(DBUtils实现)
热门文章
- python clicknium 微信发送消息以及获取好友列表
- Unity3d:UGUI,UI与特效粒子层级,2018.2以上版本BakeMesh,粒子在两个Image之间且在ScrollView
- Mac 运行 JNLP 文件
- dva处理_dva 源码解读
- 微信与php什么区别,微信小店和微信小程序的区别是什么?
- 油菜出现花而不实现象,这是什么原因,该怎样防治?
- 学Git?这一篇就够了
- html页面布局实验原理,html网页制作实验报告.doc
- Windows10商店安装Ubuntu 18.04 LTS
- Installations