关于Teacher Forcing、自回归和内部协变量偏移等概念梳理

Teacher Forcing

        Teacher Forcing是一种训练神经网络生成模型的技术,通常应用于序列到序列(seq2seq)模型,特别是在机器翻译等任务中。它的基本思想是在训练时,将真实的目标序列作为解码器的输入,而不是将解码器自身生成的序列作为下一时刻的输入

        具体地说,当训练序列到序列模型时,我们需要让模型预测给定输入序列的对应输出序列。如果使用自回归模型(比如循环神经网络或者Transformer)来实现,那么在预测输出序列的每个位置时,都需要将之前的预测结果作为下一个时刻的输入。这种方式在训练时可以有效地使模型学习到如何生成合理的输出序列,但是在推理时,模型必须在没有真实输出序列的情况下进行预测,这可能会导致模型产生累积误差,从而降低模型性能。

        为了缓解这个问题,我们可以在训练时使用Teacher Forcing,即将真实的目标输出序列作为下一个时刻的输入,而不是使用之前的预测结果。这样可以使模型更容易学习到正确的序列生成方式,但是也可能导致模型在推理时产生错误,因为它没有学习到如何在没有真实输出序列的情况下进行预测。

        因此,为了平衡训练时的效果和推理时的效果,通常会在训练过程中随机地使用Teacher Forcing和自回归的方式来训练模型。这种方法可以使模型同时具备更好的训练效果和推理效果。

自回归

        自回归模型是一种序列模型,其目标是预测一个序列中的下一个元素,它通常被用于语言建模、机器翻译和文本生成等任务。自回归模型使用先前的元素作为输入来生成下一个元素,因此在训练和生成时都需要考虑上下文,所以不能使用批量归一化。因为批量归一化是在同一批次的所有数据上进行的,而这些数据是不同的,与预测的上下文信息不同,因此批量归一化会干扰模型的性能。相反,自回归模型通常使用 Layer Normalization (LayerNorm) 对每个时间步长的输入进行归一化,从而增强模型的表现。

内部协变量偏移

        内部协变量偏移(Internal Covariate Shift)是指在深度神经网络的训练过程中,由于每一层的参数都在不断更新,导致每一层输入分布的改变,从而增加了下一层的训练难度。因为每一层的输入分布的改变,可能需要重新学习适应新的分布的权重,这会增加训练的时间和难度。Batch Normalization (BatchNorm) 是一种用于解决内部协变量偏移的技术,它通过在每个 mini-batch 中对每一层的输入进行归一化,从而使每一层的输入分布更加稳定。

Batch Normalization和 Layer Normalization

在深度学习中,Batch Normalization  和 Layer Normalization 都是常用的归一化方法。BatchNorm 通过对 mini-batch 进行归一化,可以有效地减少内部协变量偏移,从而提高模型的训练速度和性能。而 LayerNorm 则是在每个样本上进行归一化,可以更好地处理小批量数据和变长序列数据。

在自然语言处理任务中,通常采用 LayerNorm 而不是 BatchNorm 的原因有以下几个:

  1. 小批量问题:在自然语言处理任务中,样本通常是短文本,不同样本之间的长度不同。因此,采用 BatchNorm 很难处理不同长度的序列,会导致较大的 mini-batch 内部方差和偏差。而 LayerNorm 则是在每个样本上进行归一化,可以更好地处理小批量数据和变长序列数据。

  2. 自回归模型问题:在自然语言处理任务中,常常使用自回归模型,例如基于 Transformer 的神经机器翻译模型。自回归模型是逐个预测序列中的每个元素,因此无法使用 BatchNorm,因为在训练过程中,前面的预测值会影响后面的预测值,导致样本的顺序不一致。而 LayerNorm 可以应用于任意顺序的样本。

  3. 梯度问题:在自然语言处理任务中,不同位置的特征之间具有较强的相关性,使用 BatchNorm 会破坏这种相关性,导致梯度消失或梯度爆炸。而 LayerNorm 由于是在每个样本上进行归一化,相对于 BatchNorm 会减少对梯度的影响。

因此,在自然语言处理任务中,通常采用 LayerNorm 而不是 BatchNorm。但也有一些情况下,例如一些视觉任务中,BatchNorm 仍然是一种很有效的归一化方法。

未完待续。。。

### Teacher Forcing Student Forcing概念 Teacher Forcing Student Forcing 是两种不同的训练策略,主要用于循环神经网络(RNNs)其他序列生成模型。 #### Teacher Forcing Teacher Forcing 是一种常见的训练方法,在此过程中,前一时刻的真实输出被作为当前时刻的输入传递给模型。这种方法能够加速收敛过程,并减少错误传播的影响。然而,这种方式可能导致所谓的暴露偏差问题——即在测试阶段无法接触到真实的上一步预测结果时表现不佳[^1]。 ```python for t in range(sequence_length): output, hidden = rnn(input[t], hidden) loss += criterion(output, target[t]) ``` 这段代码展示了如何应用 teacher forcing 进行 RNN 训练。每次迭代中,`input[t]` 都是从真实的目标序列 `target` 中获取而不是来自之前的预测值。 #### Student Forcing Student Forcing 则是指让模型逐步学会依靠自己的先前预测来做出新的决策。这意味着即使是在训练期间也会有一定概率使用之前步产生的输出而非实际标签作为下一步的条件。这有助于缓解暴露偏差的问题,使模型更好地适应实际情况下的自回归推理模式。 ```python use_teacher_forcing = True if random.random() < teaching_force_ratio else False if use_teacher_forcing: # 使用教师强制法 for t in range(target_length): output, hidden = decoder(input=tensor_input[:,t,:].unsqueeze(1), h_0=hidden) else: # 不使用教师强制法 for t in range(target_length): output, hidden = decoder(input=output.unsqueeze(1), h_0=hidden) ``` 上述 Python 代码片段说明了何时采用 student forcing 方法来进行解码操作。当不启用 teacher forcing 时,会将上一次调用返回的结果重新送入下一个时间戳以继续生成后续项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值