变压器模型中的解码器可以像编码器一样并行化吗?
据我了解,编码器具有序列中的所有标记来计算自注意力分数。但是对于解码器,这是不可能的(在训练和测试中),因为自注意力是根据之前的时间步输出计算的。即使我们考虑一些技术,比如教师强制,我们将预期输出与获得的输出连接起来,这仍然有来自前一个时间步的顺序输入。
在这种情况下,除了在捕获长期依赖关系方面的改进之外,当纯粹基于并行化进行比较时,使用转换器解码器是否比使用 LSTM 更好?
变压器模型中的解码器可以像编码器一样并行化吗?
据我了解,编码器具有序列中的所有标记来计算自注意力分数。但是对于解码器,这是不可能的(在训练和测试中),因为自注意力是根据之前的时间步输出计算的。即使我们考虑一些技术,比如教师强制,我们将预期输出与获得的输出连接起来,这仍然有来自前一个时间步的顺序输入。
在这种情况下,除了在捕获长期依赖关系方面的改进之外,当纯粹基于并行化进行比较时,使用转换器解码器是否比使用 LSTM 更好?
变压器模型中的解码器可以像编码器一样并行化吗?
正确答案是:Transformer 解码器中的计算可以在训练期间并行化,但不能在实际翻译期间进行(或者,在更广泛的意义上,在测试阶段为新的输入序列生成输出序列)。
究竟什么是并行化的?
此外,值得一提的是,在这种情况下,“并行化”意味着对输入序列的所有位置并行计算编码器或解码器状态。多层并行化是不可能的:多层编码器或解码器的第一层仍然需要在第二层开始计算之前并行完成所有位置的计算。
为什么解码器可以在训练期间按位置并行化?
对于输入序列中的每个位置,Transformer 解码器都会生成一个解码器状态作为输出。(然后解码器状态用于最终预测目标序列中的标记。)
为了计算状态序列中特定位置的一个解码器状态,网络将以下内容用作输入:1)整个输入序列和 2)先前生成的目标词。
在训练期间,之前生成的目标词是已知的,因为它们取自我们并行训练数据的目标端。这就是为什么计算可以考虑位置的原因。
在推理(也称为“测试”或“翻译”)期间,先前生成的目标词由模型预测,因此必须按顺序执行计算解码器状态。
与 RNN 模型的比较
虽然 Transformer 可以在训练期间并行化输入位置,但基于 RNN 的编码器-解码器模型无法并行化位置。这意味着 Transformer 的训练速度通常更快,而 RNN 的推理速度更快。
这一观察导致了如今训练 Transformer 模型的普遍做法,然后使用序列级蒸馏来学习模仿训练过的 Transformer 的 RNN 模型,以实现更快的推理。
变压器模型中的解码器可以像 编码器一样并行化吗?
一般否:
你的理解是完全正确的。在解码器中,每一步的输出在下一个时间步被馈送到底部解码器,就像LSTM一样。
此外,与 LSTM 一样,自注意力层需要关注输出序列中较早的位置才能计算输出。这使得直接并行化成为不可能。
然而,在训练过程中解码时,有一个常用的过程,它不将模型在步骤 t 的先前输出作为步骤 t+1 的输入,而是在步骤 t 获取地面实况输出。此过程称为“教师强制”,并使解码器在训练期间并行化。你可以在这里阅读更多关于它的信息。
对于 Transformer 如何工作的详细解释,我建议阅读这篇文章:The Illustrated Transformer。
纯粹基于并行化进行比较时,使用变压器解码器是否比使用 lstm 更好?
是的:
一般来说,并行化是RNN的主要缺点。简单来说,RNN 具有记忆但不能并行化的能力,而CNN则相反。Transformer 之所以如此强大,是因为它们结合了并行化(至少部分地)和记忆。
例如,在自然语言处理中,使用 RNN 非常有效,如果您查看GLUE 排行榜,您会发现当今大多数世界领先的算法都是基于 Transformer 的(例如GOOGLE 的 BERT、OpenAI 的 GPT .. )
为了更好地理解为什么 Transformer 比 CNN 更好,我建议阅读这篇 Medium 文章:Transformers 如何工作。
还没有看到这一点 - 有一些方法可以使用非自回归转换器以非顺序方式生成文本,您可以在其中一次生成对上下文的整个响应。这通常会产生更差的准确度分数,因为正在生成的文本中存在相互依赖关系——翻译“谢谢”的模型可能会说“vielen danke”或“danke schön”,但自回归模型可以根据之前的解码知道接下来要说哪个词,非自回归模型无法做到这一点,因此也可以产生“danke danke”或“vielen schön”。有一些研究表明您可以缩小准确性差距:https ://arxiv.org/abs/2012.15833 。