论文阅读:Scheduled Sampling for Transformers

该论文探讨了如何在Transformer模型中应用Scheduled Sampling来解决序列到序列任务中的exposure bias问题。通过采用两遍解码策略,实验结果显示这种方法在机器翻译任务中能接近使用teacher forcing的效果,并在某些情况下提高了BLEU分数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Abstract

Scheduled sampling本是用来解决序列到序列中的exposure bias问题,即RNN模型在训练时使用的是真实值(teacher forcing),而在测试时使用的是预测值,这两者的不一致则会导致误差。这种技术通过喂给模型混合了真实值和预测值的数据来训练模型,此做法在RNN网络中取得了成效。然而Transformer模型与RNN不同,transformer的每个新词通过前面的所有词来预测,而不只是通过最后一个词,所以我们无法像在RNN模型中使用scheduled sampling。在Transformer中,我们采用了两次解码的策略。通过在两种语言翻译的实验,我们实现了与采用teacher forcing模型相近的效果,并且展示这项技术有值得探索的前景。

1 Introduction

之前的使用seq2seq的神经机器翻译所使用的teacher forcing意味着这个模型从来没有在它错误预测上进行训练,因此会产生一种现象叫exposure bias,这将会导致在翻译时因为是使用的自己的预测而产生错误。
一种常用的解决这个问题的方法是使用scheduled strategy来决定什么时候使用teacher forcing,对于卷积的解码器,使用scheduled sampling很简单:在生成每个词时,模型决定是使用teacher forcing还是使用模型预测的词。
而在Transformer模型中,生成每个词需要前面所有的词而不只是最后一个词,这使得在transformer上直接使用此模型变得不容易,由于Transformer已经成为了自然语言处理的默认选项,所以将scheduled sampling应用在transformer上变得有趣起来。
我们在此文中的贡献包括:

  • 我们打算在训练时使用两遍decoder来在Transformer模型上使用schedual sampling。
  • 我们比较了几种不同的方法,当真实值被预测值替代时对模型的影响。
  • 我们在对两种语言对翻译的机器翻译任务中测试了使用scheduled sampling方法的transformer模型,并且取得了接近使用了teacher forcing模型的效果(在某些模型中有接近1BLEU的进步)。

2 Related Work

在RNN模型中使用scheduled sampling: 模型中在step t+1使用的embedding来自于step t 中随机选择真实值或者预测值,并且选择真实值的几率随训练进行减少,有三种几率衰减的策略: linear decay, exponen-
tial decay and inverse sigmoid decay.
decay schedules
Goyal et al. (2017)提出了一种想法,即在每一步,当模型决定使用模型的预测而不是argmax时,他们使用所有词向量的平均权重,使用预测的分数加权。他们使用两个选项来实验:一个softmax和一个temperature参数,和一个使用带有temperature的Gumbel Softmax的随机变量。使用此技术,他们实现了比标准的scheduled sampling更好的结果。

3 Scheduled Sampling with Transformers

在RNN的训练阶段中我们每一个time step生成一个词,并且
我们是在之前真实值的基础上来产生这个词,所以这也使得在RNN中使用scheduled sampling很方便,而Transformer模型所使用的是前面所有的词而不只是最后一个词,所以,我们需要作出一些改变以使得能在Transformer上使用这个技术。

3.1 Two-decoder Transformer

我们所提出的在transformer上应用scheduled sampling采用了在模型上两次通过decoder。我们并不改变原来模型的decoder。scheduled transformer的解码有以下步骤:
Two-decoder Transformer

  1. 第一次通过decoder:得到模型的预测值。 在这一步中,解码器使用真实值来预测每个位置的分数,就想在标准的transformer模型中一样,这些分数将传给下一步。
### Spring 中 `<task:scheduled-tasks>` 的用法与配置 `<task:scheduled-tasks>` 是 Spring 提供的一种基于 XML 配置的方式,用于定义和管理定时任务。通过这种方式可以轻松实现周期性执行的任务调度功能。 #### 启用定时任务支持 为了使用 `<task:scheduled-tasks>`,需要在 Spring 应用上下文中启用任务调度的支持。可以通过以下方式完成: 1. **引入命名空间** 在 Spring 的 XML 配置文件中,添加 `task` 命名空间声明: ```xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"> ``` 2. **配置 `<task:scheduler>` 和 `<task:scheduled-tasks>`** 定义一个线程池调度器并注册具体的定时任务: ```xml <!-- 创建一个线程池调度器 --> <task:scheduler id="myScheduler" pool-size="5"/> <!-- 注册多个定时任务 --> <task:scheduled-tasks scheduler="myScheduler"> <task:scheduled ref="beanName" method="methodName" cron="*/5 * * * * ?"/> <task:scheduled ref="anotherBean" method="anotherMethod" fixed-rate="10000"/> </task:scheduled-tasks> ``` 上述配置中: - `scheduler`: 指定使用的线程池调度器实例。 - `ref`: 表示目标 Bean 的名称。 - `method`: 调用的目标方法。 - `cron`: 使用 Cron 表达式指定触发时间[^4]。 - `fixed-rate`: 设置固定的时间间隔(单位为毫秒),表示每次调用之间的时间差。 #### 示例代码 假设有一个简单的 Java 类作为定时任务的处理逻辑: ```java public class ScheduledTask { public void performTask() { System.out.println("Executing scheduled task at " + new Date()); } } ``` 对应的 XML 配置如下: ```xml <!-- 定义 Bean 实例 --> <bean id="scheduledTask" class="com.example.ScheduledTask"/> <!-- 配置定时任务 --> <task:scheduled-tasks scheduler="myScheduler"> <task:scheduled ref="scheduledTask" method="performTask" cron="0 0/1 * * * ?"/> </task:scheduled-tasks> <!-- 线程池调度器 --> <task:scheduler id="myScheduler" pool-size="10"/> ``` 上述配置会每分钟执行一次 `ScheduledTask.performTask()` 方法。 #### 注意事项 1. 如果项目采用的是注解驱动开发模式,则可以直接使用 `@EnableScheduling` 来替代 XML 方式的配置[^1]。 2. 当前版本的 Spring 推荐优先使用注解形式来简化配置过程,但在某些场景下仍然可以选择 XML 配置以保持灵活性。 3. 对于复杂的任务调度需求,建议结合 Quartz 或其他专业的调度框架一起使用。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值