Seq2Seq中的Exposure Bias现象的原因以及解决办法

2023-10-21 22:50

本文主要是介绍Seq2Seq中的Exposure Bias现象的原因以及解决办法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 参考资料
    • 原因
    • 解决办法
        • Scheduled Sampling
        • Sentence Level Oracle Word + Gumbel Noise
        • 对抗训练
        • 基于强化学习直接优化BLEU

参考资料

本文是下列资料的总结:

[1] 李宏毅视频 59:36 开始
[2] Seq2Seq中Exposure Bias现象的浅析与对策
[3] Bridging the Gap between Training and Inference for Neural Machine Translation(2019ACL最佳长论文)
[4] Self-critical Sequence Training

原因

Seq2Seq模型会遇到常说的Exposure Bias现象,原因是在训练阶段和预测阶段会遇到mismatch。训练阶段使用的是Teacher Forcing,也就是decoder在某时刻的输入是上一时刻的ground truth(真实标签)。然而在预测阶段只能使用上一时刻decoder的输出来作为这一时刻的输入,从而导致mismatch。

下图来自资料 [1] 李宏毅老师的视频:

在这里插入图片描述

在decoder的第二个时间步输入了模型在第一个时间步的输出B(预测错误),而不是在训练阶段能够拿到的真实标签A,下一个时间步就会到达没有经过充分训练或甚至完全没有探索过的结点,也就是decoder在训练阶段在第二个时间步只拟合了条件分布 P ( Y 2 ∣ X , Y 1 = A ) P(Y_2|X,Y_1=A) P(Y2X,Y1=A) 而没有拟合好条件分布 P ( Y 2 ∣ X , Y 1 = B ) P(Y_2|X,Y_1=B) P(Y2X,Y1=B)。具体的例子可以见参考资料[2] 的“简单例子”一节。

解决办法

Scheduled Sampling

下图来自资料[1],73分钟附近。

在这里插入图片描述
也就是在第二个时间步开始,输入有一定的概率 p p p 使用的是真实标签reference,有 1 − p 1-p 1p 的概率使用的是模型在上一个时间步的输出。而概率 p p p 随着训练的进行应该逐渐衰减至0,最后就是完全使用模型的输出作为输入,这样就与预测阶段匹配了。

Sentence Level Oracle Word + Gumbel Noise

在参考资料 [3] 中,将采样自模型输出而作为下一个时间步的输入的词称为 oracle word.

他们提出的方法与 Scheduled Sampling 的整体思路一致,只不过对于 oracle word 的选择多了一些设计。

The oracle word should be a word similar to the ground truth or a synonym. Using different strategies will pro-duce a different oracle word.

论文作者认为,oracle word应该与ground truth词是同义词或近义词,然后论文给出了两种得到 oracle word 的方案:

1、Word-Level Oracle Word,这个就是 Scheduled Sampling 使用的方案,实际上等价于下一种方案使用beam-with=1.

2、Sentence-Level Oracle Word,使用 beam-width=k 的 Beam-Search 先得到 k 个候选 decoder 输出,然后根据所关注的指标(例如BLEU分数)来选出 k 个句子中分数最高的句子,将它的单词作为每一步的 oracle word.

注意:使用 Beam-Search 得到的 decoder 输出不一定和 Ground Truth 句子 y ∗ y^* y 等长,所以需要对 Beam-Search 过程做一些修正:如果某一步的最高概率的词是结束符然而此时长度还不够 ∣ y ∗ ∣ | y^*| y,就选概率第二高的词;如果某一步产生完字符后长度就到达 ∣ y ∗ ∣ | y^*| y 了,然而这一步的概率最高词不是结束符,就强制选择结束符

除了提出新的 oracle word 的选择方案,作者还对每一步采样 oracle word 的过程使用了 Gumbel-Softmax 技巧,从而引入了 Gumbel Noise,相当于一种正则化。

注:
1、原文指出Gumbel noise is “treated as a form of regular-ization”,“Gumbel-Max provides a efficient and robustway to sample from a categorical distribution”.
2、Gumbel Softmax是对Gumbel Max的近似,对于 Gumbel Max 的理解可以见 这篇博客,我自己也写过一个Demo来演示Gumbel Max的作用,地址: 戳这里

对抗训练

参考资料 [2] 作者认为,其实前面所述方案的原理在于给训练阶段引入了扰动,让模型在有扰动的情况下依然可以预测正确。所以作者提出了两种带来扰动的方案:

1、启发式的随机替换。50%的概率不做改变;50%的概率把输入序列中30%的词替换掉,替换对象为原目标序列的任意一个词。

2、梯度惩罚

注:至于为什么梯度惩罚等价于对抗训练,可以参考该作者的另一篇博客:对抗训练浅谈:意义、方法和思考(附Keras实现)

作者通过实验说明了这两种方法都有一定效果。

基于强化学习直接优化BLEU

见参考资料 [4],主要工作有MIXER 及其改进。本人对这部分没有深入了解,以后有需要再进一步学习。

这篇关于Seq2Seq中的Exposure Bias现象的原因以及解决办法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/257478

相关文章

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

IDEA中Maven Dependencies出现红色波浪线的原因及解决方法

《IDEA中MavenDependencies出现红色波浪线的原因及解决方法》在使用IntelliJIDEA开发Java项目时,尤其是基于Maven的项目,您可能会遇到MavenDependenci... 目录一、问题概述二、解决步骤2.1 检查 Maven 配置2.2 更新 Maven 项目2.3 清理本

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null