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

相关文章

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

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File

使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案

《使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案》在SpringBoot应用中,我们经常使用​​@Cacheable​​注解来缓存数据,以提高应用的性能... 目录@Cacheable注解Redis时,Redis宕机或其他原因连不上,继续调用原方法的解决方案1

vscode不能打开终端问题的解决办法

《vscode不能打开终端问题的解决办法》:本文主要介绍vscode不能打开终端问题的解决办法,问题的根源是Windows的安全软件限制了PowerShell的运行,而VSCode默认使用Powe... 遇到vscode不能打开终端问题,一直以为是安全软件限制问题,也没搜到解决方案,因为影响也不大,就没有管

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序