当前位置:   article > 正文

引入对抗训练的对比学习

对比对抗学习策略

目录

  • 一、Simple Contrastive Representation Adversarial Learning for NLP Tasks

    • 1.1 浅谈对抗

    • 1.2 有监督对比对抗学习

    • 1.3 无监督对比对抗学习

    • 1.4 实验结果

  • 二、PromptBERT

    • 2.1 Motivation

    • 2.2 核心idea

    • 2.3 实验结果

  • 三、总结

今天主要给大家介绍两篇有关对比学习的论文。

对比学习这样的方法在自然语言中备受关注。它使用成对的训练数据增强为具有良好的表示能力的编码器构建分类任务。然而,在NLP任务中,通过对比学习构建学习对要困难得多。之前的工作产生词级变化以形成对比对,但小的变换可能会导致句子含义的显著变化。

一、Simple Contrastive Representation Adversarial Learning for NLP Tasks

4491276a0783da359c72b877125c07cd.png

论文地址:https://arxiv.org/pdf/2111.13301.pdf

在本文中,对抗训练用于NLP的embedding空间上生成具有挑战性和更难学习的对抗性示例作为学习对。使用对比学习提高了对抗训练的泛化能力。同时,对抗性训练也增强了对比学习的鲁棒性。

1.1 浅谈对抗

通俗的讲对抗训练其实就是在原来的样本中增加一些扰动构生成对抗样本,人看起来几乎没什么区别,但是对于模型来说却很难区分,通过这一通操作模型会变得更加稳定,提高模型的表现,但是会损失模型一定的泛化性。

c05aed9e7924c0d7ac491bfff3cf2d15.png

是我们增加的扰动,它不能太大,如果太大的话这样产生的对抗样本和原样本差距就会比较大,就不能达到看起来几乎差不多的效果,它需要满足一定的约束,如式子右边的约束,其中是一个常数,增加扰动的目的是最大化,就是让模型尽量去出错。梯度下降是减小loss,那么反之我们可以采用梯度上升来增大进而求出。

9b32894321e05117937c18c0319f9eab.png

这里可能会有些疑惑,给大家总结下对抗训练流程:

a、在样本x中注入扰动,加入扰动的目的是让越大越好,但是也不能太大,会有个约束

b、每个样本都构造出对抗样本,然后用对抗样本作为数据去最小化整体loss来更新参数(梯度下降,前面讲的梯度上升是为了更新)

c、反复执行a,b两个步骤

在NLP领域我们一般是在Embedding层来增加扰动,具体实现可以参考苏神的代码:

https://github.com/bojone/keras_adversarial_training

本文提出了两种新颖的框架,监督对比对抗学习 (SCAL) 和无监督 SCAL (USCAL),它们通过利用对抗训练进行对比学习来产生学习对。利用监督任务的基于标签的损失来生成对抗性示例,而无监督任务则带来对比损失。

1.2 有监督对比对抗学习

2c277aeec75a5fef099ffb5a6f8fe0a0.png
有监督对比对抗学习模型图

从模型图中其实也很好理解无非就是联合优化三个loss,第一个loss就是样本x经过多层网络后与目标去计算loss(分类loss);第二个loss就是去优化原样本和加入扰动的样本的相似性(对比loss);第三个loss就是加入扰动的样本经过多层网络后与目标去计算loss(分类loss),最后将三个loss相加联合优化。

和传统构造对比样本的方式不同,作者认为之前工作通过数据增强等方式(删除、替换、复制等)构造对比对是在词级层面的,不如在word-embedding等层面上加入扰动。

模型图中第一个loss和第三个loss公式:

2ae4ddf99024bb18e14cb550526b7a2e.png

生成扰动:

0c97de178ecf7e78c5fca7f741df740e.png

原文实验中

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/450110
推荐阅读
相关标签