NewBeeNLP原创出品

公众号专栏作者@山竹小果

今天分享来自微软最近关于语言模型和对抗训练的工作:

  • 论文:Adversarial Training for Large Neural LangUage Models

  • 源码:https://github.com/namisan/mt-dnn

TL;DR

本文把对抗训练用到了预训练和微调两个阶段,对抗训练的方法是针对embedding space,通过最大化对抗损失、最小化模型损失的方式进行对抗,在下游任务上取得了一致的效果提升。

有趣的是,这种对抗训练方法不仅能够在BERT上有提高,而且在RoBERTa这种已经预训练好的模型上也能有所提高,说明对抗训练的确可以帮助模型纠正易错点。

  • 方法:ALUM(大型神经语言模型的对抗性训练)

  • 实现:在embedding space添加扰动,最大化对抗损失

  • 应用:任何基于Transformer的语言模型的预训练或微调

预备知识

BPE编码

为了解决词汇表外单词的问题,使用Byte-Pair Encoding(BPE)(Sennrich et al.,2015)或其变体(Kudo and Richardson,2018)将标记划分为子词单元,生成固定大小的子词词汇,以便在训练文本语料库中紧凑地表示单词。

BPE词表既存在char-level级别的字符,也存在word-level级别的单词。通过BPE得到了更加合适的词表,这个词表可能会出现一些不是单词的组合,但是这个本身是有意义的一种形式。

流程:

  1. 确定subword词表大小

  2. 统计每一个连续字节对的出现频率,并保存为code_file。这个是git中learn-bpe完成

  3. 将单词拆分为字符序列并在末尾添加后缀“ ”,而后按照code_file合并新的subword,首先合并频率出现最高的字节对。例如单词birthday,分割为['b', 'i', 'r', 't', 'h', 'd', 'a', 'y'],查code_file,发现'th'出现的最多,那么合并为['b', 'i', 'r', 'th', 'd', 'a', 'y'],最后,字符序列合并为['birth', 'day']。然后去除'',变为['birth', 'day'],将这两个词添加到词表。这个是apply-bpe完成。

  4. 重复第3步直到达到第2步设定的subword词表大小或下一个最高频的字节对出现频率为1

模型:ALUM

基于几个关键想法:

  1. 扰动embedding空间,优于直接对输入文本应用扰动。

  2. 通过虚拟对抗训练为标准目标添加正则化项。

其中预训练阶段






,微调阶段






因为有最大化操作,所以训练昂贵。有利于embedding邻域的标签平滑。

文中观点:

虚拟对抗训练优于传统对抗训练,特别是当标签可能有噪声时。

例如,BERT pretraining使用masked words作为自监督的标签,但在许多情况下,它们可以被其他词取代,形成完全合法的文本。但BERT中,给到被替换的word的标签均为负。

算法

首先使用标准目标(1)训练模型;然后使用虚拟对抗训练(3)继续训练。

第4-6行为求最大梯度步骤,以找到使对抗性损失最大化的扰动(反局部平滑性)。K越大的近似值越高,但成本更高。为了在速度和性能之间取得良好的平衡,本文实验K=1.

泛化与鲁棒性

文中表示,通过使用ALUM进行对抗性的预训练,能够提高广泛的NLP任务的泛化和鲁棒性(如后述实验结论所示)。之前的研究较多发现,对抗训练会损害泛化能力。

先前关于泛化和鲁棒性之间冲突的工作通常集中在有监督的学习环境中。调和两者的一些初显成果也利用了未标记的数据,例如自训练(Raghunathan等人,2020年)。

此外,假设通过扰动embedding空间而不是输入空间,NLP中的对抗训练可能无意中偏向于流形扰动而不是规则扰动。

什么是流形

流形学习的观点:认为我们所观察到的数据实际上是由一个低维流形映射到高维空间的。由于数据内部特征的限制,一些高维中的数据会产生维度上的冗余,实际上这些数据只要比较低的维度的维度就能唯一的表示。

所以直观上来讲,一个流形好比是一个d维的空间,在一个m维的空间中(m>d)被扭曲之后的结果。需要注意的是流形不是一个形状,而是一个空间。举个例子,比如说一块布,可以把它看成一个二维的平面,这是一个二维的空间,现在我们把它扭一扭(三维空间),它就变成了一个流形,当然不扭的时候,它也是一个流形,欧氏空间是流形的一种特殊情况。

实验

提升泛化能力

  • BERT BASE是使用与Devlin等人相同的设置训练的标准BERT base模型。(即1M步,batch size = 256)。

  • BERT+BASE与BERT BASE相似,不同之处在于其训练步数为1.6M,与对抗预训练所需时间大致相同(ALUM BERT-BASE)。

  • ALUM BERT-BASE是一个BERT模型,使用与BERT BASE相同的设置进行训练,但最后的500K步骤使用ALUM。每一个对抗训练步骤大约比标准训练步骤长1.5倍

可以观察到后500k加了ALUM后提升明显。

提升鲁棒性

结合对抗预训练和对抗微调

之前都是在预训练阶段做的对抗,ALUM RoBERTa-LARGE-SMART在预训练和微调阶段均做对抗。

结论

提出了一种通用的对抗性训练算法ALUM:

  • 对抗预训练可以显著提高泛化能力和鲁棒性

  • ALUM大大提高了BERT和RoBERTa在各种NLP任务中的准确性,并且可以与对抗微调相结合以获得进一步的收益。

  • 未来的发展方向:

    • 进一步研究对抗性预训练在提高泛化和鲁棒性方面的作用;

    • 对抗性训练加速;

    • 将ALUM应用于其他领域。

END -

下载一:中文版!学习TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套!后台回复【五件套】
下载二:南大模式识别PPT后台回复【南大模式识别】

说个正事哈

由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方深度学习自然语言处理”,进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心

投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

推荐两个专辑给大家:

专辑 | 李宏毅人类语言处理2020笔记

专辑 | NLP论文解读

专辑 | 情感分析


整理不易,还望给个在看!

【微软ALUM】当语言模型遇到对抗训练相关推荐

  1. 详解微软 ALUM:当语言模型遇到对抗训练

    作者 | 山竹小果 来源 | NewBeeNLP(id:NewBeeNLP) 今天分享来自微软最近关于语言模型和对抗训练的工作: 论文:Adversarial Training for Large N ...

  2. ACM MM最佳论文全文:通过多对抗训练,从图像生成诗歌

    雷锋网 AI 科技评论按:多媒体信息处理领域顶级学术会议 ACM MM 2018(ACM International Conference on Multimedia)于 2018 年 10 月 22 ...

  3. 【NLP】一文搞懂NLP中的对抗训练

    本文主要串烧了FGSM, FGM, PGD, FreeAT, YOPO, FreeLB, SMART这几种对抗训练方法,希望能使各位大佬炼出的丹药更加圆润有光泽,一颗永流传 简介 对抗训练是一种引入噪 ...

  4. 对抗训练浅谈:意义、方法和思考(附Keras实现)

    ©PaperWeekly 原创 · 作者|苏剑林 单位|追一科技 研究方向|NLP.神经网络 当前,说到深度学习中的对抗,一般会有两个含义:一个是生成对抗网络(Generative Adversari ...

  5. 冲击SuperGLUE:基于多任务与对抗训练的Finetune方案解析

    ©PaperWeekly 原创 · 作者|Frank Luo 单位|追一科技AI Lab研究员 研究方向|自然语言处理 前言 英文通用语言理解评测基准 GLUE [1] 自提出以来,吸引了一大批预训练 ...

  6. 训练技巧 | 功守道:NLP中的对抗训练 + PyTorch实现

    本文分享一个"万物皆可盘"的 NLP 对抗训练实现,只需要四行代码即可调用.盘他. 作者丨Nicolas 单位丨追一科技AI Lab研究员 研究方向丨信息抽取.机器阅读理解 最近, ...

  7. 一文读懂文本处理中的对抗训练

    作者丨WenZe.Leo 单位丨追一科技AI Lab研究员 背景与研究意义 深度学习技术的快速发展,大幅提升了众多自然语言处理任务(比如文本分类,机器翻译等)的效果,越来越多的深度学习模型被用于现实生 ...

  8. pytorch 对抗样本_【炼丹技巧】功守道:NLP中的对抗训练 + PyTorch实现

    本文分享一个"万物皆可盘"的NLP对抗训练实现,只需要四行代码即可调用.盘他. 最近,微软的FreeLB-Roberta [1] 靠着对抗训练 (Adversarial Train ...

  9. 对抗训练-smart 论文阅读笔记

    对抗训练-smart 论文阅读笔记 SMART: Robust and Efficient Fine-Tuning for Pre-trained NaturalLanguage Models thr ...

  10. BERT模型—7.BERT模型在句子分类任务上的微调(对抗训练)

    文章目录 引言 二.项目环境配置 二.数据集介绍 三.代码介绍 四.测试 1.代码执行流程 数据代码见:https://gitee.com/lj857335332/bert_finetune_cls_ ...

最新文章

  1. 【Python】Listbox组件 Scrollbar组件 Scale组件
  2. 重磅突发!全球首富40颗卫星遭摧毁
  3. 201903-2二十四点
  4. Mapreduce,mapper任务无输出以及相关问题解决,日志的正确用法
  5. 深入理解Java的整型类型:如何实现2+2=5?
  6. Py修行路 python基础 (二十)模块 time模块,random模块,hashlib模块,OS及sys模块...
  7. 江西住建云实名认证怎么弄_王者荣耀无限时间怎么弄 2020年无限时间账号
  8. java base64字符 转图片_JAVA实现图片与base64字符串之间的转换详解
  9. 归并排序递归实现迭代实现
  10. 新买电脑编译运行dev c++慢的
  11. 网站使用微信网页授权,qq登录
  12. rimraf node_modules 删除报错 rimraf : 无法加载文件
  13. HARK学习(六)--AudioStreamFromWave
  14. Effie: 一款属于程序工作者的写作软件
  15. Error occurred while trying to proxy request项目突然起不来了
  16. 记2021DASCTF没做出来的那些题(已更新官wp版本)
  17. 二叉树:层次遍历算法(自上而下,从左到右)
  18. mac设置应用来自任何来源
  19. Android不明原因崩溃,不断重启解决办法记录
  20. String类的方法摘要

热门文章

  1. 2017级面向对象程序设计——团队作业2
  2. C语言读取文件大量数据到数组
  3. JNI学习积累之三 ---- 操作JNI函数以及复杂对象传递
  4. myeclipse 安装svn(subeclipsesite)插件
  5. oracle迁移数据到mysql
  6. .NET中利用XML来自动生成代码策略
  7. macOS 安装和管理多个Python版本
  8. ccs中如何插入字体
  9. Blue Jeans - POJ 3080(多串的共同子串)
  10. jQuery size()函数