©PaperWeekly 原创 · 作者|苏剑林

单位|追一科技

研究方向|NLP、神经网络

前些天笔者写了CRF用过了,不妨再了解下更快的MEMM?,里边提到了 MEMM 的局部归一化和 CRF 的全局归一化的优劣。

同时,笔者联想到了 Seq2Seq 模型,因为 Seq2Seq 模型的典型训练方案 Teacher Forcing 就是一个局部归一化模型,所以它也存在着局部归一化所带来的毛病——也就是我们经常说的“Exposure Bias”。

带着这个想法,笔者继续思考了一翻,将最后的思考结果记录在此文。

▲ 经典的 Seq2Seq 模型图示

本文算是一篇进阶文章,适合对Seq2Seq模型已经有一定的了解、希望进一步提升模型的理解或表现的读者。关于Seq2Seq的入门文章,可以阅读旧作玩转Keras之seq2seq自动生成标题和从语言模型到Seq2Seq:Transformer如戏,全靠Mask。

本文的内容大致为:

  1. Exposure Bias 的成因分析及例子;

  2. 简单可行的缓解 Exposure Bias 问题的策略。

Softmax

首先,我们来回顾 Softmax 相关内容。大家都知道,对于向量 ,它的 Softmax 为:

由于 是关于 的严格单调递增函数,所以如果 是 中的最大者,那么 也是 中的最大者。

对于分类问题,我们所用的 loss 一般是交叉熵,也就是:

其中是目标类。如文章《寻求一个光滑的最大值函数》[1] 所述,上式第一项实际上是 的光滑近似,所以为了形象理解交叉熵,我们可以写出:

也就是说,交叉熵实际上在缩小目标类得分 与全局最大值的差距,显然这个差距最小只能为 0,并且此时目标类得分就是最大值者。所以,Softmax 加交叉熵的效果就是“希望目标类的得分成为最大值”。

Teacher Forcing

现在,我们来看 Seq2Seq,它通过条件分解来建模联合概率分布:

每一项自然也就用 Softmax 来建模的,即:

乘起来就是:

而训练目标就是:

这个直接的训练目标就叫做 Teacher Forcing,因为在算 的时候我们要知道真实的 ,在算 我们需要知道真实的 ,依此类推,这就好像有一个经验丰富的老师预先给我们铺好了大部分的路,让我们只需要求下一步即可。

这种方法训练起来简单,而且结合 CNN 或 Transformer 那样的模型就可以实现并行的训练,但它可能会带来 Exposure Bias 问题。

Exposure Bias

其实 Teacher Forcing 这个名称本身就意味着它本身会存在 Exposure Bias 问题。回想一下老师教学生解题的过程,一般的步骤为:

  • 第一步应该怎么思考;

  • 第一步想出来后,第二步我们有哪些选择;

  • 确定了第二步后,第三步我们可以怎么做;

  • ...

  • 有了这 n-1 步后,最后一步就不难想到了。

这个过程其实跟 Seq2Seq 的 Teacher Forcing 方案的假设是一样的。有过教学经验的读者就知道,通常来说学生们都能听得频频点头,感觉全都懂了,然后让学生课后自己做题,多数还是一脸懵比。

为什么会这样呢?其中一个原因就是 Exposure Bias。说白了,问题就在于,老师总是假设学生能想到前面若干步后,然后教学生下一步,但如果前面有一步想错了或者想不出来呢?这时候这个过程就无法进行下去了,也就是没法得到正确答案了,这就是 Exposure Bias 问题。

Beam Search

事实上,我们真正做题的时候并不总是这样子,假如我们卡在某步无法确定时,我们就遍历几种选择,然后继续推下去,看后面的结果反过来辅助我们确定前面无法确定的那步。对应到 Seq2Seq 来说,这其实就相当于基于 Beam Search 的解码过程。

对于 Beam Search,我们应该能发现,beam size 并不是越大越好,有些情况甚至是 beam size 等于 1 时最好,这看起来有点不合理,因为 beam size 越大,理论上找到的序列就越接近最优序列,所以应该越有可能正确才对。事实上这也算是 Exposure Bias 的现象之一。

从式(6)我们可以看出,Seq2Seq 对目标序列 的打分函数为:

正常来说,我们希望目标序列是所有候选序列之中分数最高的,根据本文开头介绍的 Softmax 方法,我们建立的概率分布应该是:

但上式的分母需要遍历所有路径求和,难以实现,而式(6)就作为一种折衷的选择得到了广泛应用。但式(6)跟式(9)并不等价,因此哪怕模型已经成功优化,也可能出现“最优序列并不是目标序列”的现象。

简单例子

我们来举一个简单例子。设序列长度只有 2,候选序列是 和 ,而目标序列是 ,训练完成后,模型的概率分布情况为:

如果 beam size 为 1,那么因为 ,所以第一步只能输出 ,接着因为 ,所以第二步只能输出 ,成功输出了正确序列 。但如果 beam size 为 2,那么第一步输出 ,而第二步遍历所有组合,我们得到:

所以输出了错误的序列 。

那是因为模型没训练好吗?并不是,前面说过 Softmax 加交叉熵的目的就是让目标的得分最大,对于第一步我们有 ,所以第一步的训练目标已经达到了,而第二步在 已经预先知道的前提下我们有 ,这说明第二步的训练目标也达到了。

因此,模型已经算是训练好了,只不过可能因为模型表达能力限制等原因,得分并没有特别高,但“让目标的得分最大”这个目标已经完成了。

思考对策

从上述例子中读者或许可以看出问题所在了:主要是 太高了,而 是没有经过训练的,没有任何显式的机制去抑制 变大,因此就出现了“最优序列并不是目标序列”的现象。

看到这里,读者可能就能想到一个朴素的对策了:添加额外的优化目标,降低那些Beam Search出来的非目标序列不就行了?

事实上,这的确是一个有效的解决方法,相关结果发表在 2016 年的论文 Sequence-to-Sequence Learning as Beam-Search Optimization [2]。但这样一来几乎要求每步训练前的每个样本都要进行一次 Beam Search,计算成本太大。

还有一些更新的结果,比如 ACL 2019 的最佳长论文 Bridging the Gap between Training and Inference for Neural Machine Translation [3] 就是聚焦于解决 Exposure Bias 问题。此外,通过强化学习直接优化 BLEU 等方法,也能一定程度上缓解 Exposure Bias。

然而,据笔者所了解,这些致力于解决 Exposure Bias 的方法,大部分都是大刀阔斧地改动了训练过程,甚至会牺牲原来模型的训练并行性(需要递归地采样负样本,如果模型本身是 RNN 那倒无妨,但如果本身是 CNN 或 Transformer,那伤害就很大了),成本的提升幅度比效果的提升幅度大得多。

构建负样本

纵观大部分解决 Exposure Bias 的论文,以及结合我们前面的例子和体会,不难想到,其主要思想就是构造有代表性的负样本,然后在训练过程中降低这些负样本的概率,所以问题就是如何构造“有代表性”的负样本了。

这里给出笔者构思的一种简单策略,实验证明它能一定程度上缓解 Exposure Bias,提升文本生成的表现,重要的是,这种策略比较简单,基本能做到即插即用,几乎不损失训练性能。

方法很简单,就是随机替换一下 Decoder 的输入词(Decoder 的输入词有个专门的名字,叫做 oracle words),如下图所示:

▲ 一种缓解Exposure Bias的简单策略:直接将Decoder的部分输入词随机替换为别的词

其中紫色的 [R] 代表被随机替换的词。其实不少 Exposure Bias 的论文也是这个思路,只不过随机选词的方案不一样。笔者提出的方案很简单:

1. 50% 的概率不做改变;

2. 50% 的概率把输入序列中 30% 的词替换掉,替换对象为原目标序列的任意一个词。

也就是说,随机替换发生概率是 50%>>随机替换的比例是 30%,随机抽取空间就是目标序列的词集。

这个策略的灵感在于:尽管 Seq2Seq 不一定能完全生成目标序列,但它通常能生成大部分目标序列的词(但顺序可能不对,或者重复出现同一些词),因此这样替换后的输入序列通常可以作为有代表性的负样本。对了,说明一下,50% 和 30% 这两个比例纯粹是拍脑袋的,没仔细调参,因为生成模型调一次实在是太累了。

效果如何呢?笔者做了两个标题(摘要)生成的实验(就是 CLGE [4] 的前两个),其中 baseline 是 task_seq2seq_autotitle_csl.py [5],代码开源于:

https://github.com/bojone/exposure_bias

结果如下表:

可以发现,在 CSL 任务中,基于随机替换的策略稳定提升了文本生成的所有指标,而 LCSTS 任务的各个指标则各有优劣,考虑到 LCSTS 本身比较难,各项指标本来就低,所以应该说 CSL 的结果更有说服力一些。

这表明,笔者提出的上述策略确实是一种值得尝试的方案(注:所有实验都重复了两次然后取平均,所以实验结果应该是比较可靠的了)。

对抗训练

思考到这里,我们不妨再“天马行空”一下:既然解决 Exposure Bias 的思路之一就是要构造有代表性的负样本输入,说白了就是让模型在扰动下依然能预测正确,而前些天我们不是才讨论了一种生成扰动样本的方法吗?

不错,那就是对抗训练。如果直接往 baseline 模型里边加入对抗训练,能不能提升模型的性能呢?简单起见,笔者做了往 baseline 模型里边梯度惩罚(也算是对抗训练的一种)的实验,结果对比如下:

可以看到,对抗训练(梯度惩罚)进一步提升了 CSL 生成的所有指标,而 LCSTS 上则同样比较“随缘”。因此,对抗训练也可以列入“提升文本生成模型的潜力技巧”名单之中。

本文小结

本文讨论了 Seq2Seq 中的 Exposure Bias 现象,尝试从直观上和理论上分析 Exposure Bias 的原因,并给出了简单可行的缓解 Exposure Bias 问题的对策。

其中包括笔者构思的一种随机替换策略,以及基于对抗训练的策略,这两种策略的好处是它们几乎是即插即用的,并且实验表明它们能一定程度上提升文本生成的各个指标。

相关链接

[1] https://kexue.fm/archives/3290

[2] https://arxiv.org/abs/1606.02960

[3] https://arxiv.org/abs/1906.02448

[4] https://github.com/CLUEbenchmark/CLGE

[5] https://github.com/bojone/bert4keras/blob/master/examples/task_seq2seq_autotitle_csl.py

点击以下标题查看更多往期内容:

  • 变分推断(Variational Inference)最新进展简述

  • 变分自编码器VAE:原来是这么一回事

  • 图神经网络三剑客:GCN、GAT与GraphSAGE

  • 如何快速理解马尔科夫链蒙特卡洛法?

  • 深度学习预训练模型可解释性概览

  • ICLR 2020:从去噪自编码器到生成模型

#投 稿 通 道#

 让你的论文被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得技术干货。我们的目的只有一个,让知识真正流动起来。

???? 来稿标准:

• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志

???? 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site

• 所有文章配图,请单独在附件中发送

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通

????

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

Seq2Seq中Exposure Bias现象的浅析与对策相关推荐

  1. Seq2Seq模型中的label bias和exposure bias问题

    从序列到序列的seq2seq模型中,存在着label bias和exposure bias问题.这两个偏差问题是由于不同的原因导致的.先给出结论在分别解释 label bias:根本原因是我们真实的目 ...

  2. 推荐系统中的Bias/Debias大全

    作者:一元 公众号:炼丹笔记 背景 在实践中,做推荐系统的很多朋友思考的问题是如何对数据进行挖掘,大多数论文致力于开发机器学习模型来更好地拟合用户行为数据.然而,用户行为数据是观察性的,而不是实验性的 ...

  3. 机器学习中的Bias,Error,Variance的区别

    机器学习中的Bias,Error,Variance的区别 @(Machine Learning) 名词解释 Error | 误差 Bias | 偏差 – 衡量准确性 Variance | 方差 – 衡 ...

  4. Seq2Seq中的Attention

    <Seq2Seq中的Attention>   Sequence to Sequence的结构在整个深度学习的进程中占有重要的角色,我在2017年做OCR的时候用这个,当时语音组做语音识别的 ...

  5. 推荐生态中的bias和debias

    作者介绍:王宏阳,硕士毕业于中科院计算所,现为腾讯高级算法研究员,先后在百度和腾讯从事广告和推荐算法的研发工作,个人知乎号 武侠超人. 最近闲暇时间整理了一下推荐领域中的bias和debias,一方面 ...

  6. 【自然语言处理】聊聊曝光误差(Exposure Bias)怎么被解决的

    前言 曝光误差(exposure bias)简单来讲是因为文本生成在训练和推断时的不一致造成的.不一致体现在推断和训练时使用的输入不同,在训练时每一个词输入都来自真实样本(GroudTruth),但是 ...

  7. Decoder如何工作、Transformer如何训练、以及exposure bias问题

    一.Decoder工作部分(以一个例子介绍工作流程,以及Decoder输出结果是什么样的) Decoder是如何工作的(这也是Decoder与Encoder之间的连接)? Decoder的工作主要涉及 ...

  8. 逻辑短路 java_逻辑操作符中的短路现象

    逻辑操作符的短路 短路:和我们物理中的短路现象是一样的,在这里简单来说就是某段逻辑代码被跳过了,不执行了. 分析:&&(逻辑与)  两个同时为真时,结果才为真 ||(逻辑或)  有一个 ...

  9. oracle tabs作用,Oracle 中 table 函数的应用浅析

    表函数可接受查询语句或游标作为输入参数,并可输出多行数据.该函数可以平行执行,并可持续输出数据流,被称作管道式输出.应用表函数可将数据转换分阶段处理,并省去中间结果的存储和缓冲表. 1. 用游标传递数 ...

最新文章

  1. Ubuntu 查看磁盘空间大小命令转
  2. android viewpager button 导航,ViewPager做底部导航
  3. Oracle中的Union、Union All、Intersect、Minus 使用用法区别
  4. rancher的微服务运维
  5. 测量一条反斜线的频率和质量n+m=9
  6. access vba表字段_Access获取表字段的所有属性信息
  7. el-table某列的列宽自适应,其他列按比例分配。
  8. Hbase PageFilter 取出数量不准确问题
  9. sqlserver 2008r2 查看表结构及视图、版本及数据类型(字段)
  10. matlab显示灰度值的概率,求Matlab统计灰度值的代码
  11. stringbuilder寻找字符串位置可能存在多个 java_java面试题整理(一)
  12. 大一linux考试试题及答案,大一计算机期末考试试题及答案
  13. 交换机cad图例_弱电施工CAD图例.pdf
  14. python模拟鼠标点击
  15. 苹果开发那些事儿-D-U-N-S 号申请
  16. webstorm加载webpack
  17. Dreamweaver CS6实战手册
  18. ArcGIS 9.3下载,包含ArcGIS Desktop、ArcGIS Engine、ArcGIS Server、ArcSDE、workstation
  19. 软件测试(四)--提交一个标准的BUG应该包含的项
  20. hbase原理之bloomfilter篇

热门文章

  1. python与数据库交互的模块pymysql
  2. 【转】Python操作MongoDB数据库
  3. 【行为型模式】《大话设计模式》——读后感 (10)无尽加班何时休?——状态模式...
  4. 2014编程之美热身赛 - 传话游戏
  5. FTP协议常用COMMAND和状态码
  6. Linq 演变的过程(delegate = Lamb = Linq)
  7. python调用kafka拉取数据失败_无法使用kafkapython从另一个容器向Kafka容器发出请求...
  8. java求面积_Java之简单图形面积计算
  9. 数组排序思想———选择排序
  10. mysql中以指定字段去重_数据库根据指定字段去重