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

相关文章

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

pip install jupyterlab失败的原因问题及探索

《pipinstalljupyterlab失败的原因问题及探索》在学习Yolo模型时,尝试安装JupyterLab但遇到错误,错误提示缺少Rust和Cargo编译环境,因为pywinpty包需要它... 目录背景问题解决方案总结背景最近在学习Yolo模型,然后其中要下载jupyter(有点LSVmu像一个

SpringBoot中的404错误:原因、影响及解决策略

《SpringBoot中的404错误:原因、影响及解决策略》本文详细介绍了SpringBoot中404错误的出现原因、影响以及处理策略,404错误常见于URL路径错误、控制器配置问题、静态资源配置错误... 目录Spring Boot中的404错误:原因、影响及处理策略404错误的出现原因1. URL路径错

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

MySQL不使用子查询的原因及优化案例

《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX

SQL Server数据库磁盘满了的解决办法

《SQLServer数据库磁盘满了的解决办法》系统再正常运行,我还在操作中,突然发现接口报错,后续所有接口都报错了,一查日志发现说是数据库磁盘满了,所以本文记录了SQLServer数据库磁盘满了的解... 目录问题解决方法删除数据库日志设置数据库日志大小问题今http://www.chinasem.cn天发